[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPE
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work" |
Date: |
Mon, 28 Jul 2014 16:22:36 +0200 |
On 28.07.2014, at 16:16, David Hildenbrand <address@hidden> wrote:
>>
>> On 10.07.14 15:10, Christian Borntraeger wrote:
>>> From: David Hildenbrand <address@hidden>
>>>
>>> If a cpu is stopped, it must never be allowed to run and no interrupt may
>>> wake it
>>> up. A cpu also has to be unhalted if it is halted and has work to do - this
>>> scenario wasn't hit in kvm case yet, as only "disabled wait" is processed
>>> within
>>> QEMU.
>>>
>>> Signed-off-by: David Hildenbrand <address@hidden>
>>> Reviewed-by: Cornelia Huck <address@hidden>
>>> Reviewed-by: Christian Borntraeger <address@hidden>
>>> Signed-off-by: Christian Borntraeger <address@hidden>
>>
>> This looks like it's something that generic infrastructure should take
>> care of, no? How does this work for the other archs? They always get an
>> interrupt on the transition between !has_work -> has_work. Why don't we
>> get one for s390x?
>>
>>
>> Alex
>>
>>
>
> Well, we have the special case on s390 as a CPU that is in the STOPPED or the
> CHECK STOP state may never run - even if there is an interrupt. It's
> basically like this CPU has been switched off.
>
> Imagine that it is tried to inject an interrupt into a stopped vcpu. It
> will kick the stopped vcpu and thus lead to a call to
> "kvm_arch_process_async_events()". We have to deny that this vcpu will ever
> run as long as it is stopped. It's like a way to "suppress" the
> interrupt for such a transition you mentioned.
An interrupt kick usually just means we go back into the main loop. From there
we check the interrupt bitmap which interrupt to handle. Check out the handling
code here:
http://git.qemu.org/?p=qemu.git;a=blob;f=cpu-exec.c;h=38e5f02a307523d99134f4e2e6c51683bb10b45b;hb=HEAD#l580
If you just check for the stopped state in here, do_interrupt() will never get
called and thus the CPU shouldn't ever get executed. Unless I'm heavily
mistaken :).
>
> Later, another vcpu might decide to turn that vcpu back on (by e.g. sending a
> SIGP START to that vcpu).
Yes, in that case that other CPU generates a signal (a different bit in
interrupt_request) and the first CPU would see that it has to wake up and wake
up.
> I am not sure if such a mechanism/scenario is applicable to any other arch.
> They
> all seem to reset the cs->halted flag if they know they are able to run (e.g.
> due to an interrupt) - they have no such thing as "stopped cpus", only
> "halted/waiting cpus".
There's not really much difference between the two. The only difference from a
software point of view is that a "stopped" CPU has its external interrupt bits
masked off, no?
Alex
- Re: [Qemu-devel] [PATCH/RFC 0/5] s390x/kvm: track the logical cpu state in QEMU and propagate it to kvm, (continued)
[Qemu-devel] [PATCH/RFC 2/5] s390x/kvm: introduce proper states for s390 cpus, Christian Borntraeger, 2014/07/10
[Qemu-devel] [PATCH/RFC 5/5] s390x/kvm: propagate s390 cpu state to kvm, Christian Borntraeger, 2014/07/10
[Qemu-devel] [PATCH/RFC 1/5] update linux headers with with cpustate changes, Christian Borntraeger, 2014/07/10
[Qemu-devel] [PATCH/RFC 3/5] s390x/kvm: proper use of the cpu states OPERATING and STOPPED, Christian Borntraeger, 2014/07/10
[Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Christian Borntraeger, 2014/07/10
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Alexander Graf, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", David Hildenbrand, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Paolo Bonzini, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work",
Alexander Graf <=
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", David Hildenbrand, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", David Hildenbrand, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Alexander Graf, 2014/07/28
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Paolo Bonzini, 2014/07/29
- Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", David Hildenbrand, 2014/07/29
Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Christian Borntraeger, 2014/07/29
Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", Alexander Graf, 2014/07/29
Re: [Qemu-devel] [PATCH/RFC 4/5] s390x/kvm: test whether a cpu is STOPPED when checking "has_work", David Hildenbrand, 2014/07/31