All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmytro Maluka <dmy@semihalf.com>
To: "Liu, Rong L" <rong.l.liu@intel.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Marc Zyngier <maz@kernel.org>,
	"eric.auger@redhat.com" <eric.auger@redhat.com>
Cc: "Dong, Eddie" <eddie.dong@intel.com>, "Christopherson,,
	Sean" <seanjc@google.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"x86@kernel.org" <x86@kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Zhenyu Wang <zhenyuw@linux.intel.com>,
	Tomasz Nowicki <tn@semihalf.com>,
	Grzegorz Jaszczyk <jaz@semihalf.com>,
	"upstream@semihalf.com" <upstream@semihalf.com>,
	Dmitry Torokhov <dtor@google.com>
Subject: Re: [PATCH v2 0/5] KVM: Fix oneshot interrupts forwarding
Date: Sat, 13 Aug 2022 16:04:01 +0200	[thread overview]
Message-ID: <f843fa85-41ce-bf45-d1d7-69341dea2939@semihalf.com> (raw)
In-Reply-To: <MW3PR11MB4554AAFB43FA6B0B612150D9C7649@MW3PR11MB4554.namprd11.prod.outlook.com>

Hi Rong,

On 8/12/22 12:40 AM, Liu, Rong L wrote:
> Hi Paolo and Dmytro,
> 
>> -----Original Message-----
>> From: Paolo Bonzini <pbonzini@redhat.com>
>> Sent: Wednesday, August 10, 2022 11:48 PM
>> To: Dmytro Maluka <dmy@semihalf.com>; Marc Zyngier
>> <maz@kernel.org>; eric.auger@redhat.com
>> Cc: Dong, Eddie <eddie.dong@intel.com>; Christopherson,, Sean
>> <seanjc@google.com>; kvm@vger.kernel.org; Thomas Gleixner
>> <tglx@linutronix.de>; Ingo Molnar <mingo@redhat.com>; Borislav
>> Petkov <bp@alien8.de>; Dave Hansen <dave.hansen@linux.intel.com>;
>> x86@kernel.org; H. Peter Anvin <hpa@zytor.com>; linux-
>> kernel@vger.kernel.org; Alex Williamson <alex.williamson@redhat.com>;
>> Liu, Rong L <rong.l.liu@intel.com>; Zhenyu Wang
>> <zhenyuw@linux.intel.com>; Tomasz Nowicki <tn@semihalf.com>;
>> Grzegorz Jaszczyk <jaz@semihalf.com>; upstream@semihalf.com;
>> Dmitry Torokhov <dtor@google.com>
>> Subject: Re: [PATCH v2 0/5] KVM: Fix oneshot interrupts forwarding
>>
>> On 8/10/22 19:02, Dmytro Maluka wrote:
>>>      1. If vEOI happens for a masked vIRQ, notify resamplefd as usual,
>>>         but also remember this vIRQ as, let's call it, "pending oneshot".
>>>
> 
> This is the part always confuses me.   In x86 case, for level triggered
> interrupt, even if it is not oneshot, there is still "unmask" and the unmask
> happens in the same sequence as in oneshot interrupt, just timing is different. 
>  So are you going to differentiate oneshot from "normal" level triggered
> interrupt or not?   And there is any situation that vEOI happens for an unmasked
> vIRQ?

We were already talking about it in [1] and before. It still seems to me
that your statement is wrong and that with x86 ioapic, "normal"
level-triggered interrupts normally stay unmasked all the time, and only
EOI is used for interrupt completion. To double-confirm that, I was once
tracing KVM's ioapic_write_indirect() and confirmed that it's not called
when Linux guest is handling a "normal" level-triggered interrupt.

However, it seems that even if you were right and for normal interrupts
an EOI was always followed by an unmask, this proposal would still work
correctly. 

> 
>  > >      2. A new physical IRQ is immediately generated, so the vIRQ is
>>>         properly set as pending.
>>>
> 
> I am not sure this is always the case.  For example, a device may not raise a
> new interrupt until it is notified that "done reading" - by device driver
> writing to a register or something when device driver finishes reading data.  So
> how do you handle this situation?

Right, the device will not raise new interrupts, but also it will not
lower the currently pending interrupt until "done reading". Precisely
for this reason the host will receive a new interrupt immediately after
vfio unmasks the physical IRQ.

It's also possible that the driver will notify "done reading" quite
early, so the device will lower the interrupt before vfio unmasks it, so
no new physical interrupt will be generated, - and that is fine too,
since it means that the physical IRQ is no longer pending, so we don't
need to notify KVM to set the virtual IRQ status to "pending".

> 
>>>      3. After the vIRQ is unmasked by the guest, check and find out that
>>>         it is not just pending but also "pending oneshot", so don't
>>>         deliver it to a vCPU. Instead, immediately notify resamplefd once
>>>         again.
>>>
> 
> Does this mean the change of vfio code also?  That seems the case: vfio seems
> keeping its own internal "state" whether the irq is enabled or not.

I don't quite get why would it require changing vfio. Could you
elaborate?

[1] https://lore.kernel.org/kvm/9054d9f9-f41e-05c7-ce8d-628a6c827c40@semihalf.com/

Thanks,
Dmytro

> 
> Thanks,
> 
> Rong
>>> In other words, don't avoid extra physical interrupts in the host
>>> (rather, use those extra interrupts for properly updating the pending
>>> state of the vIRQ) but avoid propagating those extra interrupts to the
>>> guest.
>>>
>>> Does this sound reasonable to you?
>>
>> Yeah, this makes sense and it lets the resamplefd set the "pending"
>> status in the vGIC.  It still has the issue that the interrupt can
>> remain pending in the guest for longer than it's pending on the host,
>> but that can't be fixed?
>>
>> Paolo
> 

  reply	other threads:[~2022-08-13 14:04 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-05 19:39 [PATCH v2 0/5] KVM: Fix oneshot interrupts forwarding Dmytro Maluka
2022-08-05 19:39 ` [PATCH v2 1/5] KVM: x86: Move irq mask notifiers from x86 to generic KVM Dmytro Maluka
2022-08-09 20:43   ` Eric Auger
2022-08-05 19:39 ` [PATCH v2 2/5] KVM: x86: Add kvm_register_and_fire_irq_mask_notifier() Dmytro Maluka
2022-08-09 20:43   ` Eric Auger
2022-08-09 23:56     ` Dmytro Maluka
2022-08-05 19:39 ` [PATCH v2 3/5] KVM: irqfd: Postpone resamplefd notify for oneshot interrupts Dmytro Maluka
2022-08-09 20:45   ` Eric Auger
2022-08-09 23:57     ` Dmytro Maluka
2022-08-10  8:41     ` Marc Zyngier
2022-08-05 19:39 ` [PATCH v2 4/5] KVM: irqfd: Rename resampler->notifier Dmytro Maluka
2022-08-09 20:46   ` Eric Auger
2022-08-05 19:39 ` [PATCH v2 5/5] KVM: Rename kvm_irq_has_notifier() Dmytro Maluka
2022-08-08 23:26 ` [PATCH v2 0/5] KVM: Fix oneshot interrupts forwarding Dong, Eddie
2022-08-09  7:24   ` Dmytro Maluka
2022-08-09 20:01     ` Dong, Eddie
2022-08-09 23:30       ` Dmytro Maluka
2022-08-10  6:51         ` Marc Zyngier
2022-08-10  8:12           ` Eric Auger
2022-08-10 13:01             ` Marc Zyngier
2022-08-10 17:02               ` Dmytro Maluka
2022-08-11  6:48                 ` Paolo Bonzini
2022-08-11 22:40                   ` Liu, Rong L
2022-08-13 14:04                     ` Dmytro Maluka [this message]
2022-08-11 12:21                 ` Marc Zyngier
2022-08-11 13:54                   ` Dmytro Maluka
2022-08-13 12:59                     ` Dmytro Maluka
2022-08-10 17:06           ` Dmytro Maluka
2022-08-11 12:35             ` Marc Zyngier
2022-08-11 13:04               ` Dmytro Maluka
2022-08-10 17:17         ` Dong, Eddie
2022-08-10 17:34           ` Dmytro Maluka
2022-08-10 17:53             ` Dong, Eddie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f843fa85-41ce-bf45-d1d7-69341dea2939@semihalf.com \
    --to=dmy@semihalf.com \
    --cc=alex.williamson@redhat.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=dtor@google.com \
    --cc=eddie.dong@intel.com \
    --cc=eric.auger@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jaz@semihalf.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rong.l.liu@intel.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=tn@semihalf.com \
    --cc=upstream@semihalf.com \
    --cc=x86@kernel.org \
    --cc=zhenyuw@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.