[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] AMD/IOMMU: disable previously enabled IOMMUs upon init failure
On 4/8/19 6:19 AM, Jan Beulich wrote: > If any IOMMUs were successfully initialized before encountering failure, > the successfully enabled ones should be disabled again before cleaning > up their resources. > > Move disable_iommu() next to enable_iommu() to avoid a forward > declaration, and take the opportunity to remove stray blank lines ahead > of both functions' final closing braces. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Brian Woods <brian.woods@xxxxxxx> > --- a/xen/drivers/passthrough/amd/iommu_init.c > +++ b/xen/drivers/passthrough/amd/iommu_init.c > @@ -909,7 +909,35 @@ static void enable_iommu(struct amd_iomm > > iommu->enabled = 1; > spin_unlock_irqrestore(&iommu->lock, flags); > +} > + > +static void disable_iommu(struct amd_iommu *iommu) > +{ > + unsigned long flags; > + > + spin_lock_irqsave(&iommu->lock, flags); > + > + if ( !iommu->enabled ) > + { > + spin_unlock_irqrestore(&iommu->lock, flags); > + return; > + } > + > + amd_iommu_msi_enable(iommu, IOMMU_CONTROL_DISABLED); > + set_iommu_command_buffer_control(iommu, IOMMU_CONTROL_DISABLED); > + set_iommu_event_log_control(iommu, IOMMU_CONTROL_DISABLED); > + > + if ( amd_iommu_has_feature(iommu, IOMMU_EXT_FEATURE_PPRSUP_SHIFT) ) > + set_iommu_ppr_log_control(iommu, IOMMU_CONTROL_DISABLED); > + > + if ( amd_iommu_has_feature(iommu, IOMMU_EXT_FEATURE_GTSUP_SHIFT) ) > + set_iommu_guest_translation_control(iommu, IOMMU_CONTROL_DISABLED); > + > + set_iommu_translation_control(iommu, IOMMU_CONTROL_DISABLED); > > + iommu->enabled = 0; > + > + spin_unlock_irqrestore(&iommu->lock, flags); > } > > static void __init deallocate_buffer(void *buf, uint32_t sz) > @@ -1046,6 +1074,7 @@ static void __init amd_iommu_init_cleanu > list_del(&iommu->list); > if ( iommu->enabled ) > { > + disable_iommu(iommu); > deallocate_ring_buffer(&iommu->cmd_buffer); > deallocate_ring_buffer(&iommu->event_log); > deallocate_ring_buffer(&iommu->ppr_log); > @@ -1297,36 +1326,6 @@ error_out: > return rc; > } > > -static void disable_iommu(struct amd_iommu *iommu) > -{ > - unsigned long flags; > - > - spin_lock_irqsave(&iommu->lock, flags); > - > - if ( !iommu->enabled ) > - { > - spin_unlock_irqrestore(&iommu->lock, flags); > - return; > - } > - > - amd_iommu_msi_enable(iommu, IOMMU_CONTROL_DISABLED); > - set_iommu_command_buffer_control(iommu, IOMMU_CONTROL_DISABLED); > - set_iommu_event_log_control(iommu, IOMMU_CONTROL_DISABLED); > - > - if ( amd_iommu_has_feature(iommu, IOMMU_EXT_FEATURE_PPRSUP_SHIFT) ) > - set_iommu_ppr_log_control(iommu, IOMMU_CONTROL_DISABLED); > - > - if ( amd_iommu_has_feature(iommu, IOMMU_EXT_FEATURE_GTSUP_SHIFT) ) > - set_iommu_guest_translation_control(iommu, IOMMU_CONTROL_DISABLED); > - > - set_iommu_translation_control(iommu, IOMMU_CONTROL_DISABLED); > - > - iommu->enabled = 0; > - > - spin_unlock_irqrestore(&iommu->lock, flags); > - > -} > - > static void invalidate_all_domain_pages(void) > { > struct domain *d; > > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |