All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: Haakon Bugge <haakon.bugge@oracle.com>
Cc: Waiman Long <longman@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>,
	Boqun Feng <boqun@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Yafang Shao <laoar.shao@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH v4 next 0/9] locking/osq_lock: Optimisations to osq_lock code
Date: Thu, 10 Sep 2026 12:00:16 +0100	[thread overview]
Message-ID: <20260910120016.04ba8ae1@pumpkin> (raw)
In-Reply-To: <0ADD6DCD-6EF1-469D-ACB8-EC7D6A94CC2F@oracle.com>

On Thu, 10 Sep 2026 09:45:47 +0000
Haakon Bugge <haakon.bugge@oracle.com> wrote:

> > On 9 Sep 2026, at 22:33, Waiman Long <longman@redhat.com> wrote:  
> 
> [snip]
> 
> > > Could you make that change to the existing code and rerun the test 
> > > again on arm64 to see if it can pass?   
> > 
> > osq_lock/unlock() is special in the sense that lock transfer can happen 
> > either in the lock cacheline or the node->locked cacheline. Try the 
> > patch below to see if it helps to pass the test.
> > 
> > Thanks,
> > Longman
> > 
> > diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c
> > index b4233dc2c2b0..51cecf297692 100644
> > --- a/kernel/locking/osq_lock.c
> > +++ b/kernel/locking/osq_lock.c
> > @@ -143,7 +143,7 @@ bool osq_lock(struct optimistic_spin_queue *lock)
> >          * is implemented with a monitor-wait. vcpu_is_preempted() 
> > relies on
> >          * polling, be careful.
> >          */
> > -       if (smp_cond_load_relaxed(&node->locked, VAL || need_resched() ||
> > +       if (smp_cond_load_acquire(&node->locked, VAL || need_resched() ||
> > vcpu_is_preempted(node_cpu(node->prev))))
> >                 return true;
> > 
> > @@ -224,11 +224,11 @@ void osq_unlock(struct optimistic_spin_queue *lock)
> >         node = this_cpu_ptr(&osq_node);
> >         next = xchg(&node->next, NULL);
> >         if (next) {
> > -               WRITE_ONCE(next->locked, 1);
> > +               smp_store_release(&next->locked, 1);
> >                 return;
> >         }
> > 
> >         next = osq_wait_next(lock, node, OSQ_UNLOCKED_VAL);
> >         if (next)
> > -               WRITE_ONCE(next->locked, 1);
> > +               smp_store_release(&next->locked, 1);
> >  }  
> 
> The test passes with the above patch:

Do you know which part matters?

> 
> # dmesg|grep mx
> [    7.010502] mx_test: osq_lock                    padding:  8 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.000 seconds
> [   12.014144] mx_test: osq_lock                    padding: 16 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.004 seconds
> [   17.017572] mx_test: osq_lock                    padding: 24 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.004 seconds
> [   22.019636] mx_test: osq_lock                    padding: 32 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.004 seconds
> [   27.022192] mx_test: osq_lock                    padding: 40 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.000 seconds
> [   32.024907] mx_test: osq_lock                    padding: 48 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.004 seconds
> [   37.026035] mx_test: osq_lock                    padding: 56 result: SUCCESS sum: 0 elements: 1000 elapsed: 5.000 seconds
> 
> I'll use David's advise about including the osq_lock code in my test,
> so I can test it as a module, which will be more thorough.

At least with a build/run option...

> If you submit this patch, feel free to add:

I'll roll it into my patches (as 1/n).

David

> 
> Tested-by: Håkon Bugge <haakon.bugge@oracle.com>
> 
> 
> Thxs, Håkon
> 
> 


  reply	other threads:[~2026-09-10 11:00 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07  8:41 [PATCH v4 next 0/9] locking/osq_lock: Optimisations to osq_lock code David Laight
2026-09-07  8:41 ` [PATCH v4 next 1/9] locking/osq_lock: Add some comments about how it works David Laight
2026-09-09 14:57   ` Waiman Long
2026-09-07  8:41 ` [PATCH v4 next 2/9] locking/osq_lock: Save the cpu number for 'prev' not the node address David Laight
2026-09-09 17:36   ` Waiman Long
2026-09-15  8:33   ` Peter Zijlstra
2026-09-15 10:26     ` Peter Zijlstra
2026-09-15 11:11       ` David Laight
2026-09-15 17:27       ` Waiman Long
2026-11-06 10:25   ` [tip: locking/core] locking/osq: Save the CPU number for 'prev', " tip-bot2 for David Laight
2026-09-07  8:41 ` [PATCH v4 next 3/9] locking/osq_lock: Set prev_cpu=0 instead of locked=1 David Laight
2026-09-09 18:01   ` Waiman Long
2026-09-09 18:52     ` David Laight
2026-09-14 12:01       ` Peter Zijlstra
2026-09-14 13:10         ` David Laight
2026-09-14 12:03   ` Peter Zijlstra
2026-09-14 13:08     ` David Laight
2026-09-15  8:40       ` Peter Zijlstra
2026-09-15 10:14         ` David Laight
2026-09-15  8:50   ` Peter Zijlstra
2026-09-15 10:20     ` David Laight
2026-09-15 10:40       ` Peter Zijlstra
2026-09-15 13:13   ` Peter Zijlstra
2026-09-15 13:15     ` Peter Zijlstra
2026-09-15 13:55       ` David Laight
2026-09-15 14:01         ` Peter Zijlstra
2026-09-15 17:47           ` David Laight
2026-09-16  8:08             ` Peter Zijlstra
2026-11-06 10:25   ` [tip: locking/core] locking/osq: " tip-bot2 for David Laight
2026-09-07  8:41 ` [PATCH v4 next 4/9] locking/osq_lock: Delete 'fast path' code from osq_unlock() David Laight
2026-09-15 14:15   ` Peter Zijlstra
2026-09-16 10:56     ` Peter Zijlstra
2026-09-07  8:41 ` [PATCH v4 next 5/9] locking/osq_lock: Avoid writing to node->next in the osq_lock() fast path David Laight
2026-09-07  8:41 ` [PATCH v4 next 6/9] locking/osq: Use cpu number for 'next' pointer David Laight
2026-11-06 10:25   ` [tip: locking/core] locking/osq: Use CPU " tip-bot2 for David Laight
2026-09-07  8:41 ` [PATCH v4 next 7/9] locking/osq: Use 'unsigned int' for next/prev/tail David Laight
2026-09-07  8:41 ` [PATCH v4 next 8/9] locking/osq: inline encode_cpu() and rename decode_cpu() David Laight
2026-09-07  8:41 ` [PATCH v4 next 9/9] locking/osq_lock: Swap next<->prev and tail<->head David Laight
2026-09-07 16:08 ` [PATCH v4 next 0/9] locking/osq_lock: Optimisations to osq_lock code Linus Torvalds
2026-09-07 17:27   ` David Laight
2026-09-09 14:15     ` Haakon Bugge
2026-09-09 19:09       ` David Laight
2026-09-09 20:14       ` Waiman Long
2026-09-09 20:33         ` Waiman Long
2026-09-10  9:45           ` Haakon Bugge
2026-09-10 11:00             ` David Laight [this message]
2026-09-10 11:31               ` Haakon Bugge
2026-09-10 12:05                 ` David Laight
2026-09-10 15:30                   ` Haakon Bugge
2026-09-10 16:22                     ` Waiman Long
2026-09-11 17:15                     ` David Laight
2026-09-14 11:46                       ` Haakon Bugge
2026-09-14 13:24                         ` David Laight
2026-09-11 10:08                 ` David Laight

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260910120016.04ba8ae1@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=boqun@kernel.org \
    --cc=haakon.bugge@oracle.com \
    --cc=laoar.shao@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=torvalds@linux-foundation.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.