[PATCH v7 0/4] lockinig/rwsem: Fix rwsem bugs & enable true lock handoff

Waiman Long posted 4 patches 2 years, 7 months ago
kernel/locking/rwsem.c | 161 +++++++++++++++++++++++++++++------------
1 file changed, 115 insertions(+), 46 deletions(-)
[PATCH v7 0/4] lockinig/rwsem: Fix rwsem bugs & enable true lock handoff
Posted by Waiman Long 2 years, 7 months ago
v7:
 - Add a comment to down_read_non_owner() in patch 2.
 - Drop v6 patches 4 & 6 and simplify the direct rwsem lock handoff
   patch as suggested by PeterZ.

v6:
 - Fix an error in patch 2 reported by kernel test robot.

v5:
 - Drop patch 2 and replace it with 2 new patches disabling preemption on
   all reader functions and writer functions respectively. The other
   patches are adjusted accordingly.

It turns out the current waiter optimistic spinning code does not work
that well if we have RT tasks in the mix. This patch series include two
different fixes to resolve those issues. The last 3 patches modify the
handoff code to implement true lock handoff similar to that of mutex.

Waiman Long (4):
  locking/rwsem: Prevent non-first waiter from spinning in down_write()
    slowpath
  locking/rwsem: Disable preemption at all down_read*() and up_read()
    code paths
  locking/rwsem: Disable preemption at all down_write*() and up_write()
    code paths
  locking/rwsem: Enable direct rwsem lock handoff

 kernel/locking/rwsem.c | 161 +++++++++++++++++++++++++++++------------
 1 file changed, 115 insertions(+), 46 deletions(-)

-- 
2.31.1
Re: [PATCH v7 0/4] lockinig/rwsem: Fix rwsem bugs & enable true lock handoff
Posted by Ingo Molnar 2 years, 7 months ago
* Waiman Long <longman@redhat.com> wrote:

> v7:
>  - Add a comment to down_read_non_owner() in patch 2.
>  - Drop v6 patches 4 & 6 and simplify the direct rwsem lock handoff
>    patch as suggested by PeterZ.
> 
> v6:
>  - Fix an error in patch 2 reported by kernel test robot.
> 
> v5:
>  - Drop patch 2 and replace it with 2 new patches disabling preemption on
>    all reader functions and writer functions respectively. The other
>    patches are adjusted accordingly.
> 
> It turns out the current waiter optimistic spinning code does not work
> that well if we have RT tasks in the mix. This patch series include two
> different fixes to resolve those issues. The last 3 patches modify the
> handoff code to implement true lock handoff similar to that of mutex.
> 
> Waiman Long (4):
>   locking/rwsem: Prevent non-first waiter from spinning in down_write()
>     slowpath
>   locking/rwsem: Disable preemption at all down_read*() and up_read()
>     code paths
>   locking/rwsem: Disable preemption at all down_write*() and up_write()
>     code paths
>   locking/rwsem: Enable direct rwsem lock handoff
> 
>  kernel/locking/rwsem.c | 161 +++++++++++++++++++++++++++++------------
>  1 file changed, 115 insertions(+), 46 deletions(-)

So as a first step I've applied the first 3 patches to the locking tree, 
which are arguably fixes.

Thanks,

	Ingo
Re: [PATCH v7 0/4] lockinig/rwsem: Fix rwsem bugs & enable true lock handoff
Posted by Waiman Long 2 years, 7 months ago
On 1/26/23 07:46, Ingo Molnar wrote:
> * Waiman Long <longman@redhat.com> wrote:
>
>> v7:
>>   - Add a comment to down_read_non_owner() in patch 2.
>>   - Drop v6 patches 4 & 6 and simplify the direct rwsem lock handoff
>>     patch as suggested by PeterZ.
>>
>> v6:
>>   - Fix an error in patch 2 reported by kernel test robot.
>>
>> v5:
>>   - Drop patch 2 and replace it with 2 new patches disabling preemption on
>>     all reader functions and writer functions respectively. The other
>>     patches are adjusted accordingly.
>>
>> It turns out the current waiter optimistic spinning code does not work
>> that well if we have RT tasks in the mix. This patch series include two
>> different fixes to resolve those issues. The last 3 patches modify the
>> handoff code to implement true lock handoff similar to that of mutex.
>>
>> Waiman Long (4):
>>    locking/rwsem: Prevent non-first waiter from spinning in down_write()
>>      slowpath
>>    locking/rwsem: Disable preemption at all down_read*() and up_read()
>>      code paths
>>    locking/rwsem: Disable preemption at all down_write*() and up_write()
>>      code paths
>>    locking/rwsem: Enable direct rwsem lock handoff
>>
>>   kernel/locking/rwsem.c | 161 +++++++++++++++++++++++++++++------------
>>   1 file changed, 115 insertions(+), 46 deletions(-)
> So as a first step I've applied the first 3 patches to the locking tree,
> which are arguably fixes.

Thanks for merging into tip.

Cheers,
Longman