2021-07-15 03:16:18

by Zenghui Yu

[permalink] [raw]
Subject: [PATCH] locking/qspinlock: Fix typo of lock word transition in the uncontended case

If the queue head is the only one in the queue and nobody is concurrently
setting PENDING bit, the uncontended transition should be n,0,0 -> 0,0,1.

Fix the typo.

Signed-off-by: Zenghui Yu <[email protected]>
---
kernel/locking/qspinlock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/locking/qspinlock.c b/kernel/locking/qspinlock.c
index cbff6ba53d56..591835415698 100644
--- a/kernel/locking/qspinlock.c
+++ b/kernel/locking/qspinlock.c
@@ -355,7 +355,7 @@ void queued_spin_lock_slowpath(struct qspinlock *lock, u32 val)
* If we observe contention, there is a concurrent locker.
*
* Undo and queue; our setting of PENDING might have made the
- * n,0,0 -> 0,0,0 transition fail and it will now be waiting
+ * n,0,0 -> 0,0,1 transition fail and it will now be waiting
* on @next to become !NULL.
*/
if (unlikely(val & ~_Q_LOCKED_MASK)) {
--
2.19.1


2021-08-09 14:19:01

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH] locking/qspinlock: Fix typo of lock word transition in the uncontended case

On Thu, Jul 15, 2021 at 11:08:47AM +0800, Zenghui Yu wrote:
> If the queue head is the only one in the queue and nobody is concurrently
> setting PENDING bit, the uncontended transition should be n,0,0 -> 0,0,1.
>
> Fix the typo.
>
> Signed-off-by: Zenghui Yu <[email protected]>
> ---
> kernel/locking/qspinlock.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/locking/qspinlock.c b/kernel/locking/qspinlock.c
> index cbff6ba53d56..591835415698 100644
> --- a/kernel/locking/qspinlock.c
> +++ b/kernel/locking/qspinlock.c
> @@ -355,7 +355,7 @@ void queued_spin_lock_slowpath(struct qspinlock *lock, u32 val)
> * If we observe contention, there is a concurrent locker.
> *
> * Undo and queue; our setting of PENDING might have made the
> - * n,0,0 -> 0,0,0 transition fail and it will now be waiting
> + * n,0,0 -> 0,0,1 transition fail and it will now be waiting
> * on @next to become !NULL.
> */

I think this is an important typo fix as you're right that we don't
transition directly from having a waitqueue installed in the tail straight
to an unlocked state.

Acked-by: Will Deacon <[email protected]>

Then again, I acked the patch introducing this comment so what do I know?

Will

2021-08-09 16:24:32

by Waiman Long

[permalink] [raw]
Subject: Re: [PATCH] locking/qspinlock: Fix typo of lock word transition in the uncontended case

On 8/9/21 9:40 AM, Will Deacon wrote:
> On Thu, Jul 15, 2021 at 11:08:47AM +0800, Zenghui Yu wrote:
>> If the queue head is the only one in the queue and nobody is concurrently
>> setting PENDING bit, the uncontended transition should be n,0,0 -> 0,0,1.
>>
>> Fix the typo.
>>
>> Signed-off-by: Zenghui Yu <[email protected]>
>> ---
>> kernel/locking/qspinlock.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/locking/qspinlock.c b/kernel/locking/qspinlock.c
>> index cbff6ba53d56..591835415698 100644
>> --- a/kernel/locking/qspinlock.c
>> +++ b/kernel/locking/qspinlock.c
>> @@ -355,7 +355,7 @@ void queued_spin_lock_slowpath(struct qspinlock *lock, u32 val)
>> * If we observe contention, there is a concurrent locker.
>> *
>> * Undo and queue; our setting of PENDING might have made the
>> - * n,0,0 -> 0,0,0 transition fail and it will now be waiting
>> + * n,0,0 -> 0,0,1 transition fail and it will now be waiting
>> * on @next to become !NULL.
>> */
> I think this is an important typo fix as you're right that we don't
> transition directly from having a waitqueue installed in the tail straight
> to an unlocked state.
>
> Acked-by: Will Deacon <[email protected]>
>
> Then again, I acked the patch introducing this comment so what do I know?

We usually focus more on the actual code than the associated comment. I
am not surprise we may miss that. I do agree that the proposed change is
better.

Acked-by: Waiman Long <[email protected]>