lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d1055946-4d42-a247-1ca6-5e6c65179f9e@loongson.cn>
Date: Tue, 23 Jul 2024 09:13:49 +0800
From: maobibo <maobibo@...ngson.cn>
To: Waiman Long <longman@...hat.com>, Uros Bizjak <ubizjak@...il.com>,
 linux-kernel@...r.kernel.org
Cc: Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...nel.org>,
 Will Deacon <will@...nel.org>, Boqun Feng <boqun.feng@...il.com>
Subject: Re: [PATCH] locking/pvqspinlock: Correct the type of "old" variable
 in pv_kick_node()



On 2024/7/22 下午11:13, Waiman Long wrote:
> 
> On 7/22/24 02:54, maobibo wrote:
>> Uros,
>>
>> Sorry for late reply because of weekend time. This modification works 
>> well for me.
>>
>> In later I want to define pv_node::state as int type on LoongArch 
>> because there is only int32/int64 cmpxchg is better supported on the 
>> system, however that is another issue.
> 
> I thought about changing pv_node::state to int, but that requires 
> changing the pv_wait() call to use int too. That doesn't work because 
> pv_wait() is also used to monitor the state of the lock byte of the 
> qspinlock. In essence, we can't use pvqspinlock if 8-bit cmpxchg isn't 
> supported.
Hi Longman,

yes, your are right. pv_wait also monitors the state of the qspinlock 
lock byte, so the parameter type about pv_wait must be u8.

LoongArch supports byte cmpxchg, only that word cmpxchg has higher 
efficiency. By the draft kernel compiling test, pvqspinlock can improve 
performance greatly when pCPU is shared by multiple vCPUs.

And thanks for your remaindering.

Regards
Bibo Mao
> 
> Cheers,
> Longman
> 
>>
>> Tested-by:Bibo Mao <maobibo@...ngson.cn>
>>
>> On 2024/7/22 上午12:45, Uros Bizjak wrote:
>>> "enum vcpu_state" is not compatible with "u8" type for all targets,
>>> resulting in:
>>>
>>> error: initialization of 'u8 *' {aka 'unsigned char *'} from 
>>> incompatible pointer type 'enum vcpu_state *'
>>>
>>> for LoongArch. Correct the type of "old" variable to "u8".
>>>
>>> Cc: Peter Zijlstra <peterz@...radead.org>
>>> Cc: Ingo Molnar <mingo@...nel.org>
>>> Cc: Will Deacon <will@...nel.org>
>>> Cc: Waiman Long <longman@...hat.com>
>>> Cc: Boqun Feng <boqun.feng@...il.com>
>>> Fixes: fea0e1820b51 ("locking/pvqspinlock: Use try_cmpxchg() in 
>>> qspinlock_paravirt.h")
>>> Reported-by: Bibo Mao <maobibo@...ngson.cn>
>>> Signed-off-by: Uros Bizjak <ubizjak@...il.com>
>>> Closes: 
>>> https://lore.kernel.org/lkml/20240719024010.3296488-1-maobibo@loongson.cn/ 
>>>
>>> ---
>>>   kernel/locking/qspinlock_paravirt.h | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/kernel/locking/qspinlock_paravirt.h 
>>> b/kernel/locking/qspinlock_paravirt.h
>>> index f5a36e67b593..ac2e22502741 100644
>>> --- a/kernel/locking/qspinlock_paravirt.h
>>> +++ b/kernel/locking/qspinlock_paravirt.h
>>> @@ -357,7 +357,7 @@ static void pv_wait_node(struct mcs_spinlock 
>>> *node, struct mcs_spinlock *prev)
>>>   static void pv_kick_node(struct qspinlock *lock, struct 
>>> mcs_spinlock *node)
>>>   {
>>>       struct pv_node *pn = (struct pv_node *)node;
>>> -    enum vcpu_state old = vcpu_halted;
>>> +    u8 old = vcpu_halted;
>>>       /*
>>>        * If the vCPU is indeed halted, advance its state to match 
>>> that of
>>>        * pv_wait_node(). If OTOH this fails, the vCPU was running and 
>>> will
>>>
>>
> 


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ