iommu/arm-smmu: Disable interrupts whilst holding the cmdq lock
authorWill Deacon <will.deacon@arm.com>
Fri, 9 Sep 2016 13:33:59 +0000 (14:33 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 16 Sep 2016 08:34:14 +0000 (09:34 +0100)
commit8ded2909e2c6c34b70ebb45480f6ce68c64fbddc
treeeccb4b941bed09582c206b4444c1cb851db9e6d5
parentbcfced1580c40662d1c095899af9d0dd3ed9e7bc
iommu/arm-smmu: Disable interrupts whilst holding the cmdq lock

The cmdq lock is taken whenever we issue commands into the command queue,
which can occur in IRQ context (as a result of unmap) or in process
context (as a result of a threaded IRQ handler or device probe).

This can lead to a theoretical deadlock if the interrupt handler
performing the unmap hits whilst the lock is taken, so explicitly use
the {irqsave,irqrestore} spin_lock accessors for the cmdq lock.

Tested-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/iommu/arm-smmu-v3.c