From: Jan Kiszka on
Avi Kivity wrote:
> On 02/24/2010 12:13 PM, Jan Kiszka wrote:
>>
>>> I see. Won't we hit the same issue when we call pic functions from
>>> atomic context during the guest entry sequence?
>>>
>>>
>> If there are such call paths, for sure. What concrete path(s) do you
>> have in mind?
>>
>>
>
> vcpu_enter_guest() -> inject_pending_event() ->
> kvm_cpu_{has,get}_interrupt() -> various pic functions if you're unlucky.

But do they kick anyone or just check/pull information? Never saw any
warnings during my tests last year (granted: with older -rt and kvm
versions).

Jan

--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Jan Kiszka on
Jan Kiszka wrote:
> Avi Kivity wrote:
>> On 02/24/2010 12:13 PM, Jan Kiszka wrote:
>>>
>>>> I see. Won't we hit the same issue when we call pic functions from
>>>> atomic context during the guest entry sequence?
>>>>
>>>>
>>> If there are such call paths, for sure. What concrete path(s) do you
>>> have in mind?
>>>
>>>
>> vcpu_enter_guest() -> inject_pending_event() ->
>> kvm_cpu_{has,get}_interrupt() -> various pic functions if you're unlucky.
>
> But do they kick anyone or just check/pull information? Never saw any
> warnings during my tests last year (granted: with older -rt and kvm
> versions).

Mmh, they could if there is > 1 IRQ pending. Guess this just never
triggered in real life due to typical APIC use and low IRQ load during
PIC times in my tests.

Jan

--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Avi Kivity on
On 02/24/2010 12:22 PM, Jan Kiszka wrote:
> Avi Kivity wrote:
>
>> On 02/24/2010 12:13 PM, Jan Kiszka wrote:
>>
>>>
>>>
>>>> I see. Won't we hit the same issue when we call pic functions from
>>>> atomic context during the guest entry sequence?
>>>>
>>>>
>>>>
>>> If there are such call paths, for sure. What concrete path(s) do you
>>> have in mind?
>>>
>>>
>>>
>> vcpu_enter_guest() -> inject_pending_event() ->
>> kvm_cpu_{has,get}_interrupt() -> various pic functions if you're unlucky.
>>
> But do they kick anyone or just check/pull information?

Probably not, kicking should be a side effect (or rather the main
effect) of queueing an interrupt, not dequeuing it.

> Never saw any
> warnings during my tests last year (granted: with older -rt and kvm
> versions).
>

Well, most guests kill the pic early on. Will apply the patch.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Jan Kiszka on
Avi Kivity wrote:
> On 02/24/2010 12:22 PM, Jan Kiszka wrote:
>> Avi Kivity wrote:
>>
>>> On 02/24/2010 12:13 PM, Jan Kiszka wrote:
>>>
>>>>
>>>>> I see. Won't we hit the same issue when we call pic functions from
>>>>> atomic context during the guest entry sequence?
>>>>>
>>>>>
>>>>>
>>>> If there are such call paths, for sure. What concrete path(s) do you
>>>> have in mind?
>>>>
>>>>
>>>>
>>> vcpu_enter_guest() -> inject_pending_event() ->
>>> kvm_cpu_{has,get}_interrupt() -> various pic functions if you're unlucky.
>>>
>> But do they kick anyone or just check/pull information?
>
> Probably not, kicking should be a side effect (or rather the main
> effect) of queueing an interrupt, not dequeuing it.
>
>> Never saw any
>> warnings during my tests last year (granted: with older -rt and kvm
>> versions).
>>
>
> Well, most guests kill the pic early on. Will apply the patch.
>

I think it needs some extension: pic_irq_request should only schedule a
wake up on a rising edge of the PIC output.

Jan

--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Avi Kivity on
On 02/24/2010 12:28 PM, Jan Kiszka wrote:
> Jan Kiszka wrote:
>
>> Avi Kivity wrote:
>>
>>> On 02/24/2010 12:13 PM, Jan Kiszka wrote:
>>>
>>>>
>>>>
>>>>> I see. Won't we hit the same issue when we call pic functions from
>>>>> atomic context during the guest entry sequence?
>>>>>
>>>>>
>>>>>
>>>> If there are such call paths, for sure. What concrete path(s) do you
>>>> have in mind?
>>>>
>>>>
>>>>
>>> vcpu_enter_guest() -> inject_pending_event() ->
>>> kvm_cpu_{has,get}_interrupt() -> various pic functions if you're unlucky.
>>>
>> But do they kick anyone or just check/pull information? Never saw any
>> warnings during my tests last year (granted: with older -rt and kvm
>> versions).
>>
> Mmh, they could if there is> 1 IRQ pending. Guess this just never
> triggered in real life due to typical APIC use and low IRQ load during
> PIC times in my tests.
>

We could just ignore the wakeup in this path. It's called in vcpu
context, so obviously the vcpu is awake and kicking it will only hurt
your feet.

Longer term, we should clear up this mess. One possible path is to move
the pic/lapic/injection stuff out of the the critical section, and use
vcpu->requests to close the race between querying the pic/lapic and
entering the guest.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/