[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 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 > @@ -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().) > @@ -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. > 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. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |