iommu/amd: Use try_cmpxchg64 in alloc_pte and free_clear_pte
authorUros Bizjak <ubizjak@gmail.com>
Wed, 25 May 2022 14:54:16 +0000 (16:54 +0200)
committerJoerg Roedel <jroedel@suse.de>
Thu, 23 Jun 2022 07:43:31 +0000 (09:43 +0200)
commit0d10fe7591178713695d7d8d77284b2fc2e6629f
tree76e5587ab57d764a92540345c19b2800387fdc48
parenta111daf0c53ae91e71fd2bfe7497862d14132e3e
iommu/amd: Use try_cmpxchg64 in alloc_pte and free_clear_pte

Use try_cmpxchg64 instead of cmpxchg64 (*ptr, old, new) != old in
alloc_pte and free_clear_pte.  cmpxchg returns success in ZF flag, so this
change saves a compare after cmpxchg (and related move instruction
in front of cmpxchg). Also, remove racy explicit assignment to pteval
when cmpxchg fails, this is what try_cmpxchg does implicitly from
*pte in an atomic way.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20220525145416.10816-1-ubizjak@gmail.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd/io_pgtable.c