Commit bdeb9188 authored by Uros Bizjak's avatar Uros Bizjak Committed by Andrew Morton

mm/rmap: use atomic_try_cmpxchg in set_tlb_ubc_flush_pending

Use atomic_try_cmpxchg instead of atomic_cmpxchg (*ptr, old, new) == old
in set_tlb_ubc_flush_pending.  86 CMPXCHG instruction returns success in
ZF flag, so this change saves a compare after cmpxchg (and related move
instruction in front of cmpxchg).

Also, try_cmpxchg implicitly assigns old *ptr value to "old" when cmpxchg
fails.

No functional change intended.

Link: https://lkml.kernel.org/r/20230227214228.3533299-1-ubizjak@gmail.comSigned-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f2421a16
...@@ -644,7 +644,7 @@ void try_to_unmap_flush_dirty(void) ...@@ -644,7 +644,7 @@ void try_to_unmap_flush_dirty(void)
static void set_tlb_ubc_flush_pending(struct mm_struct *mm, bool writable) static void set_tlb_ubc_flush_pending(struct mm_struct *mm, bool writable)
{ {
struct tlbflush_unmap_batch *tlb_ubc = &current->tlb_ubc; struct tlbflush_unmap_batch *tlb_ubc = &current->tlb_ubc;
int batch, nbatch; int batch;
arch_tlbbatch_add_mm(&tlb_ubc->arch, mm); arch_tlbbatch_add_mm(&tlb_ubc->arch, mm);
tlb_ubc->flush_required = true; tlb_ubc->flush_required = true;
...@@ -662,11 +662,8 @@ static void set_tlb_ubc_flush_pending(struct mm_struct *mm, bool writable) ...@@ -662,11 +662,8 @@ static void set_tlb_ubc_flush_pending(struct mm_struct *mm, bool writable)
* overflow. Reset `pending' and `flushed' to be 1 and 0 if * overflow. Reset `pending' and `flushed' to be 1 and 0 if
* `pending' becomes large. * `pending' becomes large.
*/ */
nbatch = atomic_cmpxchg(&mm->tlb_flush_batched, batch, 1); if (!atomic_try_cmpxchg(&mm->tlb_flush_batched, &batch, 1))
if (nbatch != batch) {
batch = nbatch;
goto retry; goto retry;
}
} else { } else {
atomic_inc(&mm->tlb_flush_batched); atomic_inc(&mm->tlb_flush_batched);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment