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: <fc0bf563-b1ae-4d4b-1341-11c44b759b8a@redhat.com>
Date:   Wed, 31 Oct 2018 11:07:22 -0400
From:   Waiman Long <longman@...hat.com>
To:     Peter Zijlstra <peterz@...radead.org>,
        Yi Sun <yi.y.sun@...ux.intel.com>
Cc:     Juergen Gross <jgross@...e.com>, linux-kernel@...r.kernel.org,
        x86@...nel.org, tglx@...utronix.de, chao.p.peng@...el.com,
        chao.gao@...el.com, isaku.yamahata@...el.com,
        michael.h.kelley@...rosoft.com, tianyu.lan@...rosoft.com,
        "K. Y. Srinivasan" <kys@...rosoft.com>,
        Haiyang Zhang <haiyangz@...rosoft.com>,
        Stephen Hemminger <sthemmin@...rosoft.com>,
        "mingo@...hat.com" <mingo@...hat.com>,
        Will Deacon <will.deacon@....com>
Subject: Re: [PATCH v1 2/2] x86/hyperv: make HvNotifyLongSpinWait hypercall

On 10/31/2018 10:10 AM, Peter Zijlstra wrote:
> On Wed, Oct 31, 2018 at 09:54:17AM +0800, Yi Sun wrote:
>> On 18-10-23 17:33:28, Yi Sun wrote:
>>> On 18-10-23 10:51:27, Peter Zijlstra wrote:
>>>> Can you try and explain why vcpu_is_preempted() doesn't work for you?
>>> I thought HvSpinWaitInfo is used to notify hypervisor the spin number
>>> which is different with vcpu_is_preempted. So I did not consider
>>> vcpu_is_preempted.
>>>
>>> But HvSpinWaitInfo is a quite simple function and could be combined
>>> with vcpu_is_preempted together. So I think it is OK to use
>>> vcpu_is_preempted to make codes clean. I will have a try.
>> After checking codes, there is one issue to call vcpu_is_preempted.
>> There are two spin loops in qspinlock_paravirt.h. One loop in
>> 'pv_wait_node' calls vcpu_is_preempted. But another loop in
>> 'pv_wait_head_or_lock' does not call vcpu_is_preempted. It also does
>> not call any other ops of 'pv_lock_ops' in the loop. So I am afraid
>> we have to add one more ops in 'pv_lock_ops' to do this.
> Why? Would not something like the below cure that? Waiman, can you have
> a look at this; I always forget how that paravirt crud works.

There are two major reasons why the vcpu_is_preempt() test isn't done at
pv_wait_head_or_lock(). First of all, we may not have a valid prev
pointer after all if it is the first one to enter the queue while the
lock is busy. Secondly, because of lock stealing, the cpu number pointed
by a valid prev pointer may not be the actual cpu that is currently
holding the lock. Another minor reason is that we want to minimize the
lock transfer latency and so don't want to sleep too early while waiting
at the queue head.

Cheers,
Longman

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ