Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH v2] locking/rtmutex: Fix incorrect spinning condition | Date | Fri, 17 Dec 2021 21:53:04 +0100 |
| |
Zqiang,
On Fri, Dec 17 2021 at 15:42, Zqiang wrote: > When the lock owner is on CPU and not need resched, the current waiter > need to be checked, if it not longer top the waiter, stop spinning. > > Fixes: c3123c431447 ("locking/rtmutex: Dont dereference waiter lockless") > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > --- > v1->v2: > Modify description information. > > kernel/locking/rtmutex.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c > index 0c1f2e3f019a..8555c4efe97c 100644 > --- a/kernel/locking/rtmutex.c > +++ b/kernel/locking/rtmutex.c > @@ -1383,7 +1383,7 @@ static bool rtmutex_spin_on_owner(struct rt_mutex_base *lock, > * - the VCPU on which owner runs is preempted > */ > if (!owner_on_cpu(owner) || need_resched() || > - rt_mutex_waiter_is_top_waiter(lock, waiter)) { > + !rt_mutex_waiter_is_top_waiter(lock, waiter)) { > res = false; > break;
good catch!
Though this does not apply because the condition is incomplete. You somehow dropped this from the condition:
vcpu_is_preempted(task_cpu(owner)))
Please make always sure that your patches apply against Linus tree before sending them out.
Thanks,
tglx
| |