OSDN Git Service

iommu/amd: Remove unnecessary locking from AMD iommu driver
authorTom Murphy <murphyt7@tcd.ie>
Sun, 8 Sep 2019 16:56:37 +0000 (09:56 -0700)
committerJoerg Roedel <jroedel@suse.de>
Tue, 15 Oct 2019 09:31:03 +0000 (11:31 +0200)
commit37ec8eb851c1876580a963f283fe7496592b9f72
tree6435fe81d85d41a8e193bb6c26a58cb35fc45a33
parent4f5cafb5cb8471e54afdc9054d973535614f7675
iommu/amd: Remove unnecessary locking from AMD iommu driver

With or without locking it doesn't make sense for two writers to be
writing to the same IOVA range at the same time. Even with locking we
still have a race condition, whoever gets the lock first, so we still
can't be sure what the result will be. With locking the result will be
more sane, it will be correct for the last writer, but still useless
because we can't be sure which writer will get the lock last. It's a
fundamentally broken design to have two writers writing to the same
IOVA range at the same time.

So we can remove the locking and work on the assumption that no two
writers will be writing to the same IOVA range at the same time.

The only exception is when we have to allocate a middle page in the page
tables, the middle page can cover more than just the IOVA range a writer
has been allocated. However this isn't an issue in the AMD driver
because it can atomically allocate middle pages using "cmpxchg64()".

Signed-off-by: Tom Murphy <murphyt7@tcd.ie>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c
drivers/iommu/amd_iommu_types.h