| Date | Wed, 9 Jul 2008 19:18:27 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH 23/34] AMD IOMMU: add functions to find IOMMU device resources |
| |
On Thu, 26 Jun 2008 21:27:59 +0200 Joerg Roedel <joerg.roedel@amd.com> wrote:
> This patch adds functions necessary to find the IOMMU resources for a specific > device. > > Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> > --- > arch/x86/kernel/amd_iommu.c | 75 +++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 75 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c > index c43d15d..47e80b5 100644 > --- a/arch/x86/kernel/amd_iommu.c > +++ b/arch/x86/kernel/amd_iommu.c > @@ -461,3 +461,78 @@ free_dma_dom: > return NULL; > } > > +static struct protection_domain *domain_for_device(u16 devid) > +{ > + struct protection_domain *dom; > + unsigned long flags; > + > + read_lock_irqsave(&amd_iommu_devtable_lock, flags);
Why is this cheerfully undocumented lock irq-safe? Is it ever taken from IRQ context?
> + dom = amd_iommu_pd_table[devid]; > + read_unlock_irqrestore(&amd_iommu_devtable_lock, flags); > + > + return dom; > +}
The locking in this function makes no sense. We drop the lock then return a value which the caller cannot use in a race-free fashion, because the lock is no longer held.
|