|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 09/10] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU suspending
On May 25, 2016 4:07 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
> >>> On 25.05.16 at 08:41, <quan.xu@xxxxxxxxx> wrote:
> > On May 24, 2016 4:22 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
> >> >>> On 18.05.16 at 10:08, <quan.xu@xxxxxxxxx> wrote:
> >> > static int device_power_down(void) {
> >> > - console_suspend();
> >> > + if ( console_suspend() )
> >> > + return SAVED_CONSOLE;
> >>
> >> I said so on the previous round, and I need to repeat it now: If
> >> console_suspend() fails, you saved _nothing_.
> >>
> >
> > Ah, we may have some different views for SAVED_*, which I mean has
> > been saved and we are no need to resume.
> >
> > e.g. if console_suspend() fails, I did return SAVED_CONSOLE, reading
> > my patch again, and I really resume nothing at all.
> >
> > device_power_up()
> > {
> > ...
> > + case SAVED_CONSOLE:
> > + break;
> > ...
> > }
> >
> >
> > I know we can also propagate SAVED_NONE for console_suspend() failure,
> > then we need adjust device_power_up() relevantly.
>
> My main point is that the names of these enumerators should reflect their
> purpose. If one reads "SAVED_CONSOLE", then (s)he should be allowed this
> to mean that console state was saved (and hence needs to be restored upon
> error / resume).
>
I'll follow this.. it is much better than what I understand.
> >> > - time_suspend();
> >> > + if ( time_suspend() )
> >> > + return SAVED_TIME;
> >> >
> >> > - i8259A_suspend();
> >> > + if ( i8259A_suspend() )
> >> > + return SAVED_I8259A;
> >> >
> >> > + /* ioapic_suspend cannot fail */
> >> > ioapic_suspend();
> >> >
> >> > - iommu_suspend();
> >> > + if ( iommu_suspend() )
> >> > + return SAVED_IOMMU;
> >> >
> >> > - lapic_suspend();
> >> > + if ( lapic_suspend() )
> >> > + return SAVED_LAPIC;
> >> >
> >> > return 0;
> >>
> >> And this silently means SAVED_NONE, whereas here you saved everything.
> >> Yielding clearly bogus code ...
> >>
> >
> >
> > '0' is just on success here. Look at the condition where we call
> > device_power_up():
> >
> > + if ( error > 0 )
> > + device_power_up(error);
> >
> > Then, it is not bogus code.
>
> See above: Zero should not mean both "nothing saved" and "saved
> everything".
>
> >> Also, having come here - did I miss iommu_flush_iotlb_global()
> >> gaining a __must_check annotation somewhere?
> >
> > I will add __must_check annotation to iommu_flush_iotlb_global().
> >
> >> And the struct iommu_flush pointers
> >> and handlers? And, by analogy, iommu_flush_context_*()?
> >
> > I am better only add __must_check annotation to flush->iotlb and
> > handlers, but leaving flush->context/handers and
> > iommu_flush_context_*() as are in current patch set..
> > the coming patch set will fix them.
>
> I don't follow the logic behind this: The purpose of this series is to make
> sure
> flushing errors get properly bubbled up, which includes adding __must_check
> annotations. I'm not saying this needs to happen in this patch, but it should
> happen in this series
I will add a patch..
> (and please following the same basic model: A caller or a
> __must_check function should either already be __must_check, or should
> become so at the same time).
>
Agreed.
Quan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |