From: Christoffer Dall <christoffer.dall@linaro.org> To: Eric Auger <eric.auger@linaro.org> Cc: eric.auger@st.com, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, alex.williamson@redhat.com, joel.schopp@amd.com, kim.phillips@freescale.com, paulus@samba.org, gleb@kernel.org, pbonzini@redhat.com, linux-kernel@vger.kernel.org, patches@linaro.org, will.deacon@arm.com, a.motakis@virtualopensystems.com, a.rigo@virtualopensystems.com, john.liuli@huawei.com Subject: Re: [RFC v2 5/9] KVM: KVM-VFIO: update user API to program forwarded IRQ Date: Thu, 11 Sep 2014 05:10:05 +0200 [thread overview] Message-ID: <20140911031005.GF2784@lvm> (raw) In-Reply-To: <1409575968-5329-6-git-send-email-eric.auger@linaro.org> On Mon, Sep 01, 2014 at 02:52:44PM +0200, Eric Auger wrote: > add new device group commands: > - KVM_DEV_VFIO_DEVICE_FORWARD_IRQ and > KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ > > which enable to turn forwarded IRQ mode on/off. > > the kvm_arch_forwarded_irq struct embodies a forwarded IRQ > > Signed-off-by: Eric Auger <eric.auger@linaro.org> > > --- > > v1 -> v2: > - struct kvm_arch_forwarded_irq moved from arch/arm/include/uapi/asm/kvm.h > to include/uapi/linux/kvm.h > also irq_index renamed into index and guest_irq renamed into gsi > - ASSIGN/DEASSIGN renamed into FORWARD/UNFORWARD > --- > Documentation/virtual/kvm/devices/vfio.txt | 26 ++++++++++++++++++++++++++ > include/uapi/linux/kvm.h | 9 +++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/Documentation/virtual/kvm/devices/vfio.txt b/Documentation/virtual/kvm/devices/vfio.txt > index ef51740..048baa0 100644 > --- a/Documentation/virtual/kvm/devices/vfio.txt > +++ b/Documentation/virtual/kvm/devices/vfio.txt > @@ -13,6 +13,7 @@ VFIO-group is held by KVM. > > Groups: > KVM_DEV_VFIO_GROUP > + KVM_DEV_VFIO_DEVICE > > KVM_DEV_VFIO_GROUP attributes: > KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking > @@ -20,3 +21,28 @@ KVM_DEV_VFIO_GROUP attributes: > > For each, kvm_device_attr.addr points to an int32_t file descriptor > for the VFIO group. > + > +KVM_DEV_VFIO_DEVICE attributes: > + KVM_DEV_VFIO_DEVICE_FORWARD_IRQ > + KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ > + > +For each, kvm_device_attr.addr points to a kvm_arch_forwarded_irq struct. > +This user API makes possible to create a special IRQ handling mode, KVM_DEV_VFIO_DEVICE_FORWARD_IRQ enables a special IRQ handling mode on hardware that supports it, > +where KVM and a VFIO platform driver collaborate to improve IRQ > +handling performance. > + > +'fd represents the file descriptor of a valid VFIO device whose physical fd is described out of context here. Can you copy the struct definition into this document, perhaps right after the "For each, ..." line above. > +IRQ, referenced by its index, is injected into the VM guest irq (gsi). as a virtual IRQ (specified by the gsi field) into the VM. > + > +On FORWARD_IRQ, KVM-VFIO device programs: When setting the KVM_DEV_VFIO_DEVICE_FORWARD_IRQ attribute, the KVM-VFIO device tells the host (or VFIO?) to not complete the physical IRQ, and instead ensures that KVM (or the VM) completes the physical IRQ. > +- the host, to not complete the physical IRQ itself. > +- the GIC, to automatically complete the physical IRQ when the guest > + completes the virtual IRQ. and drop this bullet form. > +This avoids trapping the end-of-interrupt for level sensitive IRQ. avoid this last line, it's specific to ARM. > + > +On UNFORWARD_IRQ, one returns to the mode where the host completes the When setting the KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ attribute, the host (VFIO?) will again complete the physical IRQ and KVM will not... > +physical IRQ and the guest completes the virtual IRQ. > + > +It is up to the caller of this API to make sure the IRQ is not > +outstanding when the FORWARD/UNFORWARD is called. This could lead to outstanding? can you be specific? don't refer to FOWARD/UNFORWARD, either refer to these attributes by their full name or use a clear reference in proper English. > +some inconsistency on who is going to complete the IRQ. This sounds like the whole thing is fragile and if userspace doesn't do things right, IRQ handling of a piece of hardware is going to be inconsistent? Is this the case? If so, we need some stronger semantics. If not, this should be rephrased. > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index cf3a2ff..8cd7b0e 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -947,6 +947,12 @@ struct kvm_device_attr { > __u64 addr; /* userspace address of attr data */ > }; > > +struct kvm_arch_forwarded_irq { > + __u32 fd; /* file desciptor of the VFIO device */ > + __u32 index; /* VFIO device IRQ index */ > + __u32 gsi; /* gsi, ie. virtual IRQ number */ > +}; > + > #define KVM_DEV_TYPE_FSL_MPIC_20 1 > #define KVM_DEV_TYPE_FSL_MPIC_42 2 > #define KVM_DEV_TYPE_XICS 3 > @@ -954,6 +960,9 @@ struct kvm_device_attr { > #define KVM_DEV_VFIO_GROUP 1 > #define KVM_DEV_VFIO_GROUP_ADD 1 > #define KVM_DEV_VFIO_GROUP_DEL 2 > +#define KVM_DEV_VFIO_DEVICE 2 > +#define KVM_DEV_VFIO_DEVICE_FORWARD_IRQ 1 > +#define KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ 2 > #define KVM_DEV_TYPE_ARM_VGIC_V2 5 > #define KVM_DEV_TYPE_FLIC 6 > > -- > 1.9.1 > Thanks, -Christoffer
WARNING: multiple messages have this Message-ID (diff)
From: christoffer.dall@linaro.org (Christoffer Dall) To: linux-arm-kernel@lists.infradead.org Subject: [RFC v2 5/9] KVM: KVM-VFIO: update user API to program forwarded IRQ Date: Thu, 11 Sep 2014 05:10:05 +0200 [thread overview] Message-ID: <20140911031005.GF2784@lvm> (raw) In-Reply-To: <1409575968-5329-6-git-send-email-eric.auger@linaro.org> On Mon, Sep 01, 2014 at 02:52:44PM +0200, Eric Auger wrote: > add new device group commands: > - KVM_DEV_VFIO_DEVICE_FORWARD_IRQ and > KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ > > which enable to turn forwarded IRQ mode on/off. > > the kvm_arch_forwarded_irq struct embodies a forwarded IRQ > > Signed-off-by: Eric Auger <eric.auger@linaro.org> > > --- > > v1 -> v2: > - struct kvm_arch_forwarded_irq moved from arch/arm/include/uapi/asm/kvm.h > to include/uapi/linux/kvm.h > also irq_index renamed into index and guest_irq renamed into gsi > - ASSIGN/DEASSIGN renamed into FORWARD/UNFORWARD > --- > Documentation/virtual/kvm/devices/vfio.txt | 26 ++++++++++++++++++++++++++ > include/uapi/linux/kvm.h | 9 +++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/Documentation/virtual/kvm/devices/vfio.txt b/Documentation/virtual/kvm/devices/vfio.txt > index ef51740..048baa0 100644 > --- a/Documentation/virtual/kvm/devices/vfio.txt > +++ b/Documentation/virtual/kvm/devices/vfio.txt > @@ -13,6 +13,7 @@ VFIO-group is held by KVM. > > Groups: > KVM_DEV_VFIO_GROUP > + KVM_DEV_VFIO_DEVICE > > KVM_DEV_VFIO_GROUP attributes: > KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking > @@ -20,3 +21,28 @@ KVM_DEV_VFIO_GROUP attributes: > > For each, kvm_device_attr.addr points to an int32_t file descriptor > for the VFIO group. > + > +KVM_DEV_VFIO_DEVICE attributes: > + KVM_DEV_VFIO_DEVICE_FORWARD_IRQ > + KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ > + > +For each, kvm_device_attr.addr points to a kvm_arch_forwarded_irq struct. > +This user API makes possible to create a special IRQ handling mode, KVM_DEV_VFIO_DEVICE_FORWARD_IRQ enables a special IRQ handling mode on hardware that supports it, > +where KVM and a VFIO platform driver collaborate to improve IRQ > +handling performance. > + > +'fd represents the file descriptor of a valid VFIO device whose physical fd is described out of context here. Can you copy the struct definition into this document, perhaps right after the "For each, ..." line above. > +IRQ, referenced by its index, is injected into the VM guest irq (gsi). as a virtual IRQ (specified by the gsi field) into the VM. > + > +On FORWARD_IRQ, KVM-VFIO device programs: When setting the KVM_DEV_VFIO_DEVICE_FORWARD_IRQ attribute, the KVM-VFIO device tells the host (or VFIO?) to not complete the physical IRQ, and instead ensures that KVM (or the VM) completes the physical IRQ. > +- the host, to not complete the physical IRQ itself. > +- the GIC, to automatically complete the physical IRQ when the guest > + completes the virtual IRQ. and drop this bullet form. > +This avoids trapping the end-of-interrupt for level sensitive IRQ. avoid this last line, it's specific to ARM. > + > +On UNFORWARD_IRQ, one returns to the mode where the host completes the When setting the KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ attribute, the host (VFIO?) will again complete the physical IRQ and KVM will not... > +physical IRQ and the guest completes the virtual IRQ. > + > +It is up to the caller of this API to make sure the IRQ is not > +outstanding when the FORWARD/UNFORWARD is called. This could lead to outstanding? can you be specific? don't refer to FOWARD/UNFORWARD, either refer to these attributes by their full name or use a clear reference in proper English. > +some inconsistency on who is going to complete the IRQ. This sounds like the whole thing is fragile and if userspace doesn't do things right, IRQ handling of a piece of hardware is going to be inconsistent? Is this the case? If so, we need some stronger semantics. If not, this should be rephrased. > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index cf3a2ff..8cd7b0e 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -947,6 +947,12 @@ struct kvm_device_attr { > __u64 addr; /* userspace address of attr data */ > }; > > +struct kvm_arch_forwarded_irq { > + __u32 fd; /* file desciptor of the VFIO device */ > + __u32 index; /* VFIO device IRQ index */ > + __u32 gsi; /* gsi, ie. virtual IRQ number */ > +}; > + > #define KVM_DEV_TYPE_FSL_MPIC_20 1 > #define KVM_DEV_TYPE_FSL_MPIC_42 2 > #define KVM_DEV_TYPE_XICS 3 > @@ -954,6 +960,9 @@ struct kvm_device_attr { > #define KVM_DEV_VFIO_GROUP 1 > #define KVM_DEV_VFIO_GROUP_ADD 1 > #define KVM_DEV_VFIO_GROUP_DEL 2 > +#define KVM_DEV_VFIO_DEVICE 2 > +#define KVM_DEV_VFIO_DEVICE_FORWARD_IRQ 1 > +#define KVM_DEV_VFIO_DEVICE_UNFORWARD_IRQ 2 > #define KVM_DEV_TYPE_ARM_VGIC_V2 5 > #define KVM_DEV_TYPE_FLIC 6 > > -- > 1.9.1 > Thanks, -Christoffer
next prev parent reply other threads:[~2014-09-11 3:10 UTC|newest] Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-09-01 12:52 [RFC v2 0/9] KVM-VFIO IRQ forward control Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-01 12:52 ` [RFC v2 1/9] KVM: ARM: VGIC: fix multiple injection of level sensitive forwarded IRQ Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:09 ` Christoffer Dall 2014-09-11 3:09 ` Christoffer Dall 2014-09-11 18:17 ` Eric Auger 2014-09-11 18:17 ` Eric Auger 2014-09-11 22:14 ` Christoffer Dall 2014-09-11 22:14 ` Christoffer Dall 2014-09-01 12:52 ` [RFC v2 2/9] KVM: ARM: VGIC: add forwarded irq rbtree lock Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:09 ` Christoffer Dall 2014-09-11 3:09 ` Christoffer Dall 2014-09-11 17:31 ` Eric Auger 2014-09-11 17:31 ` Eric Auger 2014-09-01 12:52 ` [RFC v2 3/9] ARM: KVM: Enable the KVM-VFIO device Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-01 12:52 ` [RFC v2 4/9] VFIO: platform: handler tests whether the IRQ is forwarded Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 8:44 ` Eric Auger 2014-09-11 8:44 ` Eric Auger 2014-09-11 17:05 ` Christoffer Dall 2014-09-11 17:05 ` Christoffer Dall 2014-09-11 18:07 ` Alex Williamson 2014-09-11 18:07 ` Alex Williamson 2014-09-11 17:08 ` Antonios Motakis 2014-09-11 17:08 ` Antonios Motakis 2014-09-01 12:52 ` [RFC v2 5/9] KVM: KVM-VFIO: update user API to program forwarded IRQ Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall [this message] 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 8:49 ` Eric Auger 2014-09-11 8:49 ` Eric Auger 2014-09-11 17:08 ` Christoffer Dall 2014-09-11 17:08 ` Christoffer Dall 2014-09-01 12:52 ` [RFC v2 6/9] VFIO: Extend external user API Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 8:50 ` Eric Auger 2014-09-11 8:50 ` Eric Auger 2014-09-01 12:52 ` [RFC v2 7/9] KVM: KVM-VFIO: add new VFIO external API hooks Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 8:51 ` Eric Auger 2014-09-11 8:51 ` Eric Auger 2014-09-01 12:52 ` [RFC v2 8/9] KVM: KVM-VFIO: generic KVM_DEV_VFIO_DEVICE command and IRQ forwarding control Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 5:05 ` Alex Williamson 2014-09-11 5:05 ` Alex Williamson 2014-09-11 5:05 ` Alex Williamson 2014-09-11 12:04 ` Eric Auger 2014-09-11 12:04 ` Eric Auger 2014-09-11 15:59 ` Alex Williamson 2014-09-11 15:59 ` Alex Williamson 2014-09-11 17:24 ` Christoffer Dall 2014-09-11 17:24 ` Christoffer Dall 2014-09-11 17:22 ` Christoffer Dall 2014-09-11 17:22 ` Christoffer Dall 2014-09-11 17:10 ` Christoffer Dall 2014-09-11 17:10 ` Christoffer Dall 2014-09-11 18:14 ` Alex Williamson 2014-09-11 18:14 ` Alex Williamson 2014-09-11 21:59 ` Christoffer Dall 2014-09-11 21:59 ` Christoffer Dall 2014-09-11 9:35 ` Eric Auger 2014-09-11 9:35 ` Eric Auger 2014-09-11 15:47 ` Alex Williamson 2014-09-11 15:47 ` Alex Williamson 2014-09-11 15:47 ` Alex Williamson 2014-09-11 17:32 ` Christoffer Dall 2014-09-11 17:32 ` Christoffer Dall 2014-09-01 12:52 ` [RFC v2 9/9] KVM: KVM-VFIO: ARM " Eric Auger 2014-09-01 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-02 21:05 ` [RFC v2 0/9] KVM-VFIO IRQ forward control Alex Williamson 2014-09-02 21:05 ` Alex Williamson 2014-09-05 12:52 ` Eric Auger 2014-09-05 12:52 ` Eric Auger 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 3:10 ` Christoffer Dall 2014-09-11 5:09 ` Alex Williamson 2014-09-11 5:09 ` Alex Williamson 2014-11-17 11:25 ` Wu, Feng 2014-11-17 11:25 ` Wu, Feng 2014-11-17 11:25 ` Wu, Feng 2014-11-17 13:41 ` Eric Auger 2014-11-17 13:41 ` Eric Auger 2014-11-17 13:41 ` Eric Auger 2014-11-17 13:45 ` Wu, Feng 2014-11-17 13:45 ` Wu, Feng 2014-11-17 13:45 ` Wu, Feng
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=20140911031005.GF2784@lvm \ --to=christoffer.dall@linaro.org \ --cc=a.motakis@virtualopensystems.com \ --cc=a.rigo@virtualopensystems.com \ --cc=alex.williamson@redhat.com \ --cc=eric.auger@linaro.org \ --cc=eric.auger@st.com \ --cc=gleb@kernel.org \ --cc=joel.schopp@amd.com \ --cc=john.liuli@huawei.com \ --cc=kim.phillips@freescale.com \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=marc.zyngier@arm.com \ --cc=patches@linaro.org \ --cc=paulus@samba.org \ --cc=pbonzini@redhat.com \ --cc=will.deacon@arm.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: linkBe 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.