aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2015-02-04 15:50:38 +0100
committerJoerg Roedel <jroedel@suse.de>2015-02-04 15:50:51 +0100
commita1bec062c90456983225054d39c8a601db48e638 (patch)
tree2f5cbaa6b73e1b48fce4283b0c4870b2a8426f91 /drivers/iommu
parentiommu/amd: Fix amd_iommu_free_device() (diff)
downloadlinux-dev-a1bec062c90456983225054d39c8a601db48e638.tar.xz
linux-dev-a1bec062c90456983225054d39c8a601db48e638.zip
iommu/amd: Use wait_event in put_pasid_state_wait
Now that I learned about possible spurious wakeups this place needs fixing too. Replace the self-coded sleep variant with the generic wait_event() helper. Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/amd_iommu_v2.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
index b6398d7285f7..5cc140969b43 100644
--- a/drivers/iommu/amd_iommu_v2.c
+++ b/drivers/iommu/amd_iommu_v2.c
@@ -266,14 +266,7 @@ static void put_pasid_state(struct pasid_state *pasid_state)
static void put_pasid_state_wait(struct pasid_state *pasid_state)
{
- DEFINE_WAIT(wait);
-
- prepare_to_wait(&pasid_state->wq, &wait, TASK_UNINTERRUPTIBLE);
-
- if (!atomic_dec_and_test(&pasid_state->count))
- schedule();
-
- finish_wait(&pasid_state->wq, &wait);
+ wait_event(pasid_state->wq, !atomic_read(&pasid_state->count));
free_pasid_state(pasid_state);
}