* [GIT PULL] iommu/arm-smmu: fixes for 3.14
@ 2014-02-10 18:32 Will Deacon
[not found] ` <20140210183232.GH12826-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Will Deacon @ 2014-02-10 18:32 UTC (permalink / raw)
To: joro-zLv9SwRftAIdnm+yROfE0A
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA
Hi Joerg,
Please pull the following arm-smmu fixes for 3.14.
The brief summary is:
- Andreas Herrmann took the driver for a run with a real SATA
controller, which caused the new mutex-based locking to explode
since we require mappings in atomic context
- Yifan fixed an issue with the page table creation, which then caused
breakages with the way in which we flush descriptors out to the
table walker
- I ran the driver on a system where the SMMU is hooked into a
coherent interconnect for table walks, and noticed a shareability
mismatch between the CPU and the SMMU
These issues are all fixed here and have been tested on both arm and
arm64 based systems.
Cheers,
Will
--->8
The following changes since commit b28a960c42fcd9cfc987441fa6d1c1a471f0f9ed:
Linux 3.14-rc2 (2014-02-09 18:15:47 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git for-joerg/arm-smmu/fixes
for you to fetch changes up to d123cf82d339c5cc4ffe2a481e0caa23a501d4ac:
iommu/arm-smmu: fix compilation issue when !CONFIG_ARM_AMBA (2014-02-10 17:02:27 +0000)
----------------------------------------------------------------
Will Deacon (4):
iommu/arm-smmu: really fix page table locking
iommu/arm-smmu: fix table flushing during initial allocations
iommu/arm-smmu: set CBARn.BPSHCFG to NSH for s1-s2-bypass contexts
iommu/arm-smmu: fix compilation issue when !CONFIG_ARM_AMBA
Yifan Zhang (1):
iommu/arm-smmu: fix pud/pmd entry fill sequence
drivers/iommu/arm-smmu.c | 103 ++++++++++++++++++++++++++++-------------------
1 file changed, 61 insertions(+), 42 deletions(-)
^ permalink raw reply [flat|nested] 8+ messages in thread[parent not found: <20140210183232.GH12826-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140210183232.GH12826-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> @ 2014-02-18 11:27 ` Joerg Roedel 2014-02-18 17:50 ` Joerg Roedel 1 sibling, 0 replies; 8+ messages in thread From: Joerg Roedel @ 2014-02-18 11:27 UTC (permalink / raw) To: Will Deacon; +Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA On Mon, Feb 10, 2014 at 06:32:32PM +0000, Will Deacon wrote: > The following changes since commit b28a960c42fcd9cfc987441fa6d1c1a471f0f9ed: > > Linux 3.14-rc2 (2014-02-09 18:15:47 -0800) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git for-joerg/arm-smmu/fixes > > for you to fetch changes up to d123cf82d339c5cc4ffe2a481e0caa23a501d4ac: > > iommu/arm-smmu: fix compilation issue when !CONFIG_ARM_AMBA (2014-02-10 17:02:27 +0000) > > ---------------------------------------------------------------- > Will Deacon (4): > iommu/arm-smmu: really fix page table locking > iommu/arm-smmu: fix table flushing during initial allocations > iommu/arm-smmu: set CBARn.BPSHCFG to NSH for s1-s2-bypass contexts > iommu/arm-smmu: fix compilation issue when !CONFIG_ARM_AMBA > > Yifan Zhang (1): > iommu/arm-smmu: fix pud/pmd entry fill sequence > > drivers/iommu/arm-smmu.c | 103 ++++++++++++++++++++++++++++------------------- > 1 file changed, 61 insertions(+), 42 deletions(-) Pulled, thanks Will. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140210183232.GH12826-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-02-18 11:27 ` Joerg Roedel @ 2014-02-18 17:50 ` Joerg Roedel [not found] ` <20140218175027.GE11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> 1 sibling, 1 reply; 8+ messages in thread From: Joerg Roedel @ 2014-02-18 17:50 UTC (permalink / raw) To: Will Deacon; +Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA On Mon, Feb 10, 2014 at 06:32:32PM +0000, Will Deacon wrote: > - Andreas Herrmann took the driver for a run with a real SATA > controller, which caused the new mutex-based locking to explode > since we require mappings in atomic context I just did quick review of the changes. Was the SATA controller using the IOMMU through the DMA-API? In this case you would need the IRQ-safe spinlocks to avoid dead-locks because the DMA-API can be used from IRQ-context. Joerg ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20140218175027.GE11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140218175027.GE11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> @ 2014-02-18 18:36 ` Will Deacon [not found] ` <20140218183626.GC2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Will Deacon @ 2014-02-18 18:36 UTC (permalink / raw) To: Joerg Roedel Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Hi Joerg, On Tue, Feb 18, 2014 at 05:50:27PM +0000, Joerg Roedel wrote: > On Mon, Feb 10, 2014 at 06:32:32PM +0000, Will Deacon wrote: > > - Andreas Herrmann took the driver for a run with a real SATA > > controller, which caused the new mutex-based locking to explode > > since we require mappings in atomic context > > I just did quick review of the changes. Was the SATA controller using > the IOMMU through the DMA-API? In this case you would need the IRQ-safe > spinlocks to avoid dead-locks because the DMA-API can be used from > IRQ-context. Unfortunately, I don't know and since Calxeda has ceased to be, Andreas is no longer working on this (I suspect his email address also bounces). I can send an additional patch using spin_*_irq{save,restore} for the domain->lock if you like? Will ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20140218183626.GC2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140218183626.GC2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> @ 2014-02-18 19:21 ` Will Deacon [not found] ` <20140218192137.GJ2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Will Deacon @ 2014-02-18 19:21 UTC (permalink / raw) To: Joerg Roedel Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org On Tue, Feb 18, 2014 at 06:36:26PM +0000, Will Deacon wrote: > On Tue, Feb 18, 2014 at 05:50:27PM +0000, Joerg Roedel wrote: > > I just did quick review of the changes. Was the SATA controller using > > the IOMMU through the DMA-API? In this case you would need the IRQ-safe > > spinlocks to avoid dead-locks because the DMA-API can be used from > > IRQ-context. > > Unfortunately, I don't know and since Calxeda has ceased to be, Andreas is > no longer working on this (I suspect his email address also bounces). > > I can send an additional patch using spin_*_irq{save,restore} for the > domain->lock if you like? FWIW, here's a diff you could apply as a fixup (or I can send a new pull request if you prefer). It's slightly messy because I had to rename a parameter in the page table functions (s/flag/prot/). What do you reckon? Will --->8 diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 489cbe4c26aa..76ad84637a0f 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1253,7 +1253,7 @@ static bool arm_smmu_pte_is_contiguous_range(unsigned long addr, static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd, unsigned long addr, unsigned long end, - unsigned long pfn, int flags, int stage) + unsigned long pfn, int prot, int stage) { pte_t *pte, *start; pteval_t pteval = ARM_SMMU_PTE_PAGE | ARM_SMMU_PTE_AF | ARM_SMMU_PTE_XN; @@ -1275,28 +1275,28 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd, if (stage == 1) { pteval |= ARM_SMMU_PTE_AP_UNPRIV | ARM_SMMU_PTE_nG; - if (!(flags & IOMMU_WRITE) && (flags & IOMMU_READ)) + if (!(prot & IOMMU_WRITE) && (prot & IOMMU_READ)) pteval |= ARM_SMMU_PTE_AP_RDONLY; - if (flags & IOMMU_CACHE) + if (prot & IOMMU_CACHE) pteval |= (MAIR_ATTR_IDX_CACHE << ARM_SMMU_PTE_ATTRINDX_SHIFT); } else { pteval |= ARM_SMMU_PTE_HAP_FAULT; - if (flags & IOMMU_READ) + if (prot & IOMMU_READ) pteval |= ARM_SMMU_PTE_HAP_READ; - if (flags & IOMMU_WRITE) + if (prot & IOMMU_WRITE) pteval |= ARM_SMMU_PTE_HAP_WRITE; - if (flags & IOMMU_CACHE) + if (prot & IOMMU_CACHE) pteval |= ARM_SMMU_PTE_MEMATTR_OIWB; else pteval |= ARM_SMMU_PTE_MEMATTR_NC; } /* If no access, create a faulting entry to avoid TLB fills */ - if (flags & IOMMU_EXEC) + if (prot & IOMMU_EXEC) pteval &= ~ARM_SMMU_PTE_XN; - else if (!(flags & (IOMMU_READ | IOMMU_WRITE))) + else if (!(prot & (IOMMU_READ | IOMMU_WRITE))) pteval &= ~ARM_SMMU_PTE_PAGE; pteval |= ARM_SMMU_PTE_SH_IS; @@ -1358,7 +1358,7 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd, static int arm_smmu_alloc_init_pmd(struct arm_smmu_device *smmu, pud_t *pud, unsigned long addr, unsigned long end, - phys_addr_t phys, int flags, int stage) + phys_addr_t phys, int prot, int stage) { int ret; pmd_t *pmd; @@ -1382,7 +1382,7 @@ static int arm_smmu_alloc_init_pmd(struct arm_smmu_device *smmu, pud_t *pud, do { next = pmd_addr_end(addr, end); ret = arm_smmu_alloc_init_pte(smmu, pmd, addr, end, pfn, - flags, stage); + prot, stage); phys += next - addr; } while (pmd++, addr = next, addr < end); @@ -1391,7 +1391,7 @@ static int arm_smmu_alloc_init_pmd(struct arm_smmu_device *smmu, pud_t *pud, static int arm_smmu_alloc_init_pud(struct arm_smmu_device *smmu, pgd_t *pgd, unsigned long addr, unsigned long end, - phys_addr_t phys, int flags, int stage) + phys_addr_t phys, int prot, int stage) { int ret = 0; pud_t *pud; @@ -1415,7 +1415,7 @@ static int arm_smmu_alloc_init_pud(struct arm_smmu_device *smmu, pgd_t *pgd, do { next = pud_addr_end(addr, end); ret = arm_smmu_alloc_init_pmd(smmu, pud, addr, next, phys, - flags, stage); + prot, stage); phys += next - addr; } while (pud++, addr = next, addr < end); @@ -1424,10 +1424,10 @@ static int arm_smmu_alloc_init_pud(struct arm_smmu_device *smmu, pgd_t *pgd, static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, unsigned long iova, phys_addr_t paddr, - size_t size, int flags) + size_t size, int prot) { int ret, stage; - unsigned long end; + unsigned long end, flags; phys_addr_t input_mask, output_mask; struct arm_smmu_cfg *root_cfg = &smmu_domain->root_cfg; pgd_t *pgd = root_cfg->pgd; @@ -1454,14 +1454,14 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, if (paddr & ~output_mask) return -ERANGE; - spin_lock(&smmu_domain->lock); + spin_lock_irqsave(&smmu_domain->lock, flags); pgd += pgd_index(iova); end = iova + size; do { unsigned long next = pgd_addr_end(iova, end); ret = arm_smmu_alloc_init_pud(smmu, pgd, iova, next, paddr, - flags, stage); + prot, stage); if (ret) goto out_unlock; @@ -1470,7 +1470,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, } while (pgd++, iova != end); out_unlock: - spin_unlock(&smmu_domain->lock); + spin_unlock_irqrestore(&smmu_domain->lock, flags); return ret; } ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <20140218192137.GJ2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140218192137.GJ2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> @ 2014-02-20 11:29 ` Joerg Roedel [not found] ` <20140220112919.GG11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Joerg Roedel @ 2014-02-20 11:29 UTC (permalink / raw) To: Will Deacon Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org On Tue, Feb 18, 2014 at 07:21:37PM +0000, Will Deacon wrote: > FWIW, here's a diff you could apply as a fixup (or I can send a new pull > request if you prefer). It's slightly messy because I had to rename a > parameter in the page table functions (s/flag/prot/). > > What do you reckon? Hmm, am I mistaken or do you only convert the mapping path? There is another use of the smmu_domain->lock that has to be converted. See my fix attached. Can the arm_smmu_devices_lock also be used in a DMA-API path? I also think that the parameter renaming should not be done in a fixup patch, if you want it to be converted please include a renaming patch in your updates for the next merge window. Joerg >From e848d16b3129cc7234089d6917a0568b1b5f4acc Mon Sep 17 00:00:00 2001 From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> Date: Thu, 20 Feb 2014 12:19:08 +0100 Subject: [PATCH] arm/smmu: Use irqsafe spinlock for domain lock As the lock might be used through DMA-API which is allowed in interrupt context. Signed-off-by: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> --- drivers/iommu/arm-smmu.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 6fe7922..1d9ab39 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1159,6 +1159,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) struct arm_smmu_domain *smmu_domain = domain->priv; struct arm_smmu_device *device_smmu = dev->archdata.iommu; struct arm_smmu_master *master; + unsigned long flags; if (!device_smmu) { dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n"); @@ -1169,7 +1170,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) * Sanity check the domain. We don't currently support domains * that cross between different SMMU chains. */ - spin_lock(&smmu_domain->lock); + spin_lock_irqsave(&smmu_domain->lock, flags); if (!smmu_domain->leaf_smmu) { /* Now that we have a master, we can finalise the domain */ ret = arm_smmu_init_domain_context(domain, dev); @@ -1184,7 +1185,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) dev_name(device_smmu->dev)); goto err_unlock; } - spin_unlock(&smmu_domain->lock); + spin_unlock_irqrestore(&smmu_domain->lock, flags); /* Looks ok, so add the device to the domain */ master = find_smmu_master(smmu_domain->leaf_smmu, dev->of_node); @@ -1194,7 +1195,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) return arm_smmu_domain_add_master(smmu_domain, master); err_unlock: - spin_unlock(&smmu_domain->lock); + spin_unlock_irqrestore(&smmu_domain->lock, flags); return ret; } @@ -1396,6 +1397,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, struct arm_smmu_cfg *root_cfg = &smmu_domain->root_cfg; pgd_t *pgd = root_cfg->pgd; struct arm_smmu_device *smmu = root_cfg->smmu; + unsigned long irqflags; if (root_cfg->cbar == CBAR_TYPE_S2_TRANS) { stage = 2; @@ -1418,7 +1420,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, if (paddr & ~output_mask) return -ERANGE; - spin_lock(&smmu_domain->lock); + spin_lock_irqsave(&smmu_domain->lock, irqflags); pgd += pgd_index(iova); end = iova + size; do { @@ -1434,7 +1436,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, } while (pgd++, iova != end); out_unlock: - spin_unlock(&smmu_domain->lock); + spin_unlock_irqrestore(&smmu_domain->lock, irqflags); return ret; } -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <20140220112919.GG11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140220112919.GG11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> @ 2014-02-20 11:51 ` Will Deacon [not found] ` <20140220115127.GH3615-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Will Deacon @ 2014-02-20 11:51 UTC (permalink / raw) To: Joerg Roedel Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Hi Joerg, On Thu, Feb 20, 2014 at 11:29:19AM +0000, Joerg Roedel wrote: > On Tue, Feb 18, 2014 at 07:21:37PM +0000, Will Deacon wrote: > > FWIW, here's a diff you could apply as a fixup (or I can send a new pull > > request if you prefer). It's slightly messy because I had to rename a > > parameter in the page table functions (s/flag/prot/). > > > > What do you reckon? > > Hmm, am I mistaken or do you only convert the mapping path? There is > another use of the smmu_domain->lock that has to be converted. See my > fix attached. Good catch, they need updating too. > Can the arm_smmu_devices_lock also be used in a DMA-API path? I don't think so -- that lock is only taken when: - Probing the SMMU - Attaching a device to a domain (->attach_dev) - Adding or removing a device to/from the SMMU (->{add,remove}_device) > I also think that the parameter renaming should not be done in a fixup > patch, if you want it to be converted please include a renaming patch in > your updates for the next merge window. Sure, that's just a cosmetic thing anyway. For your patch below, Acked-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org> Cheers for sorting this out, Will > From e848d16b3129cc7234089d6917a0568b1b5f4acc Mon Sep 17 00:00:00 2001 > From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> > Date: Thu, 20 Feb 2014 12:19:08 +0100 > Subject: [PATCH] arm/smmu: Use irqsafe spinlock for domain lock > > As the lock might be used through DMA-API which is allowed > in interrupt context. > > Signed-off-by: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> > --- > drivers/iommu/arm-smmu.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > index 6fe7922..1d9ab39 100644 > --- a/drivers/iommu/arm-smmu.c > +++ b/drivers/iommu/arm-smmu.c > @@ -1159,6 +1159,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > struct arm_smmu_domain *smmu_domain = domain->priv; > struct arm_smmu_device *device_smmu = dev->archdata.iommu; > struct arm_smmu_master *master; > + unsigned long flags; > > if (!device_smmu) { > dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n"); > @@ -1169,7 +1170,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > * Sanity check the domain. We don't currently support domains > * that cross between different SMMU chains. > */ > - spin_lock(&smmu_domain->lock); > + spin_lock_irqsave(&smmu_domain->lock, flags); > if (!smmu_domain->leaf_smmu) { > /* Now that we have a master, we can finalise the domain */ > ret = arm_smmu_init_domain_context(domain, dev); > @@ -1184,7 +1185,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > dev_name(device_smmu->dev)); > goto err_unlock; > } > - spin_unlock(&smmu_domain->lock); > + spin_unlock_irqrestore(&smmu_domain->lock, flags); > > /* Looks ok, so add the device to the domain */ > master = find_smmu_master(smmu_domain->leaf_smmu, dev->of_node); > @@ -1194,7 +1195,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > return arm_smmu_domain_add_master(smmu_domain, master); > > err_unlock: > - spin_unlock(&smmu_domain->lock); > + spin_unlock_irqrestore(&smmu_domain->lock, flags); > return ret; > } > > @@ -1396,6 +1397,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, > struct arm_smmu_cfg *root_cfg = &smmu_domain->root_cfg; > pgd_t *pgd = root_cfg->pgd; > struct arm_smmu_device *smmu = root_cfg->smmu; > + unsigned long irqflags; > > if (root_cfg->cbar == CBAR_TYPE_S2_TRANS) { > stage = 2; > @@ -1418,7 +1420,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, > if (paddr & ~output_mask) > return -ERANGE; > > - spin_lock(&smmu_domain->lock); > + spin_lock_irqsave(&smmu_domain->lock, irqflags); > pgd += pgd_index(iova); > end = iova + size; > do { > @@ -1434,7 +1436,7 @@ static int arm_smmu_handle_mapping(struct arm_smmu_domain *smmu_domain, > } while (pgd++, iova != end); > > out_unlock: > - spin_unlock(&smmu_domain->lock); > + spin_unlock_irqrestore(&smmu_domain->lock, irqflags); > > return ret; > } > -- > 1.7.9.5 > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20140220115127.GH3615-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>]
* Re: [GIT PULL] iommu/arm-smmu: fixes for 3.14 [not found] ` <20140220115127.GH3615-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> @ 2014-02-20 12:14 ` Joerg Roedel 0 siblings, 0 replies; 8+ messages in thread From: Joerg Roedel @ 2014-02-20 12:14 UTC (permalink / raw) To: Will Deacon Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Hi Will, On Thu, Feb 20, 2014 at 11:51:27AM +0000, Will Deacon wrote: > > Can the arm_smmu_devices_lock also be used in a DMA-API path? > > I don't think so -- that lock is only taken when: > > - Probing the SMMU > - Attaching a device to a domain (->attach_dev) > - Adding or removing a device to/from the SMMU (->{add,remove}_device) Okay, fine then. > > > I also think that the parameter renaming should not be done in a fixup > > patch, if you want it to be converted please include a renaming patch in > > your updates for the next merge window. > > Sure, that's just a cosmetic thing anyway. > For your patch below, > > Acked-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org> Thanks, I queued the patch with your Ack ontop of the fixes and will send them out to Linus after a day in next or so. Cheers, Joerg ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-02-20 12:14 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-10 18:32 [GIT PULL] iommu/arm-smmu: fixes for 3.14 Will Deacon
[not found] ` <20140210183232.GH12826-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-02-18 11:27 ` Joerg Roedel
2014-02-18 17:50 ` Joerg Roedel
[not found] ` <20140218175027.GE11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2014-02-18 18:36 ` Will Deacon
[not found] ` <20140218183626.GC2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-02-18 19:21 ` Will Deacon
[not found] ` <20140218192137.GJ2010-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-02-20 11:29 ` Joerg Roedel
[not found] ` <20140220112919.GG11432-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2014-02-20 11:51 ` Will Deacon
[not found] ` <20140220115127.GH3615-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2014-02-20 12:14 ` Joerg Roedel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.