|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch v6 07/11] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU suspending (top level ones)
On June 01, 2016 6:39 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
> >>> On 31.05.16 at 15:57, <quan.xu@xxxxxxxxx> wrote:
> > static int device_power_down(void)
> > {
> > - console_suspend();
> > + if ( console_suspend() )
> > + return SAVED_NONE;
> >
> > - time_suspend();
> > + if ( time_suspend() )
> > + return SAVED_CONSOLE;
> >
> > - i8259A_suspend();
> > + if ( i8259A_suspend() )
> > + return SAVED_TIME;
> >
> > + /* ioapic_suspend cannot fail */
> > ioapic_suspend();
> >
> > - iommu_suspend();
> > + if ( iommu_suspend() )
> > + return SAVED_IOAPIC;
> >
> > - lapic_suspend();
> > + if ( lapic_suspend() )
> > + return SAVED_IOMMU;
> >
> > - return 0;
> > + return SAVED_NONE;
>
> SAVED_ALL
Agreed.
I was disturbed by the below 'if ( error > 0 )'.
>
> > @@ -169,6 +203,10 @@ static int enter_state(u32 state)
> > {
> > printk(XENLOG_ERR "Some devices failed to power down.");
> > system_state = SYS_STATE_resume;
> > +
> > + if ( error > 0 )
> > + device_power_up(error);
>
> if ( error != SAVED_NONE )
>
> (Or really you could just call this without any if().)
I prefer to drop this if().
>
> > @@ -2389,16 +2393,25 @@ static int intel_iommu_group_id(u16 seg, u8
> > bus, u8 devfn) }
> >
> > static u32 iommu_state[MAX_IOMMUS][MAX_IOMMU_REGS];
> > -static void vtd_suspend(void)
> > +
> > +static int __must_check vtd_suspend(void)
> > {
> > struct acpi_drhd_unit *drhd;
> > struct iommu *iommu;
> > u32 i;
> > + int rc = 0;
>
> Pointless initializer.
>
Indeed, if "return 0" to make obvious that no error path comes at the end of
this function.
> > if ( !iommu_enabled )
> > - return;
> > + return 0;
> >
> > - iommu_flush_all();
> > + rc = iommu_flush_all();
> > + if ( unlikely(rc) )
> > + {
> > + printk(XENLOG_WARNING VTDPREFIX
> > + " suspend: IOMMU flush all failed: %d\n", rc);
> > +
> > + return rc;
> > + }
> >
> > for_each_drhd_unit ( drhd )
> > {
> > @@ -2427,6 +2440,8 @@ static void vtd_suspend(void)
> > if ( !iommu_intremap && iommu_qinval )
> > disable_qinval(iommu);
> > }
> > +
> > + return rc;
> > }
>
> Perhaps better "return 0" to make obvious that no error path comes here.
>
Agreed.
Quan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |