powerpc/iommu: Fix multiple issues with IOMMU pools code
authorAnton Blanchard <anton@samba.org>
Wed, 3 Oct 2012 18:57:10 +0000 (18:57 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 4 Oct 2012 08:03:20 +0000 (18:03 +1000)
commitd900bd7366463fd96a907b2c212242e2b68b27d8
treeb1837bc8c27d32a159ebc9edea9b1944e9231444
parentc8adfeccee01ce3de6a7d14fcd4e3be02e27f03c
powerpc/iommu: Fix multiple issues with IOMMU pools code

There are a number of issues in the recent IOMMU pools code:

- On a preempt kernel we might switch CPUs in the middle of building
  a scatter gather list. When this happens the handle hint passed in
  no longer falls within the local CPU's pool. Check for this and
  fall back to the pool hint.

- We were missing a spin_unlock/spin_lock in one spot where we
  switch pools.

- We need to provide locking around dart_tlb_invalidate_all and
  dart_tlb_invalidate_one now that the global lock is gone.

Reported-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: <stable@kernel.org> [v3.6]
arch/powerpc/kernel/iommu.c
arch/powerpc/sysdev/dart_iommu.c