On 19/01/2018 13:36, Pavel Dovgalyuk wrote:
>> From: Paolo Bonzini [mailto:pbonz...@redhat.com]
>> Sent: Friday, January 19, 2018 3:26 PM
>> To: Pavel Dovgalyuk; 'Pavel Dovgalyuk'; qemu-devel@nongnu.org
>> Cc: kw...@redhat.com; peter.mayd...@linaro.org; boost.li...@gmail.com; 
>> quint...@redhat.com;
>> jasow...@redhat.com; m...@redhat.com; zuban...@gmail.com; 
>> maria.klimushenk...@ispras.ru;
>> kra...@redhat.com; alex.ben...@linaro.org
>> Subject: Re: [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads
>>
>> On 19/01/2018 13:25, Pavel Dovgalyuk wrote:
>>>>> It means, that I'll have to fix all the has_work function to avoid races,
>>>>> because x86_cpu_has_work may have them?
>>>> Why only x86_cpu_has_work?
>>>>
>>>> Even reading cs->interrupt_request outside the mutex is unsafe.
>>> All the vcpu function that access interrupt controller or peripheral state 
>>> may be unsafe?
>>> How can it work safely then?
>>
>> They do it inside the big QEMU lock.  
> 
> Right. Without these patches.
> They are within the replay lock. And BQL is not covering vcpu execution with 
> these patches.
> Therefore RR will be ok and regular execution may encounter races?
> It means that I missed something in Alex ideas, because he prepared the 
> initial patches.

Yes.

>> But here you're calling cpu_has_work (via all_cpu_threads_idle) outside the 
>> lock.
> 
> Yes, I see, but what we have to do?

I don't know.  But the idiom in these patches,

        while(...) {
                lock()
                cond_wait()
                unlock()
        }

is unsafe as well, so the issue is more than just cpu_has_work.

Paolo

Reply via email to