From: Sean Christopherson <seanjc@google.com>
To: Ilias Stamatis <ilstam@amazon.com>
Cc: kvm@vger.kernel.org, pbonzini@redhat.com, pdurrant@amazon.co.uk,
dwmw@amazon.co.uk, nh-open-source@amazon.com,
Paul Durrant <paul@xen.org>
Subject: Re: [PATCH v2 4/6] KVM: Add KVM_(UN)REGISTER_COALESCED_MMIO2 ioctls
Date: Fri, 16 Aug 2024 17:36:58 -0700 [thread overview]
Message-ID: <Zr_wqv7HiFNR2aCz@google.com> (raw)
In-Reply-To: <20240718193543.624039-5-ilstam@amazon.com>
On Thu, Jul 18, 2024, Ilias Stamatis wrote:
> Add 2 new ioctls, KVM_REGISTER_COALESCED_MMIO2 and
> KVM_UNREGISTER_COALESCED_MMIO2. These do the same thing as their v1
> equivalents except an fd returned by KVM_CREATE_COALESCED_MMIO_BUFFER
> needs to be passed as an argument to them.
>
> The fd representing a ring buffer is associated with an MMIO region
> registered for coalescing and all writes to that region are accumulated
> there. This is in contrast to the v1 API where all regions have to share
> the same buffer. Nevertheless, userspace code can still use the same
> ring buffer for multiple zones if it wishes to do so.
>
> Userspace can check for the availability of the new API by checking if
> the KVM_CAP_COALESCED_MMIO2 capability is supported.
>
> Signed-off-by: Ilias Stamatis <ilstam@amazon.com>
> Reviewed-by: Paul Durrant <paul@xen.org>
> ---
>
> v1->v2:
> - Rebased on top of kvm/queue resolving the conflict in kvm.h
>
> include/uapi/linux/kvm.h | 16 ++++++++++++++++
> virt/kvm/coalesced_mmio.c | 37 +++++++++++++++++++++++++++++++------
> virt/kvm/coalesced_mmio.h | 7 ++++---
> virt/kvm/kvm_main.c | 36 +++++++++++++++++++++++++++++++++++-
> 4 files changed, 86 insertions(+), 10 deletions(-)
>
> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> index 87f79a820fc0..7e8d5c879986 100644
> --- a/include/uapi/linux/kvm.h
> +++ b/include/uapi/linux/kvm.h
> @@ -480,6 +480,16 @@ struct kvm_coalesced_mmio_zone {
> };
> };
>
> +struct kvm_coalesced_mmio_zone2 {
> + __u64 addr;
> + __u32 size;
> + union {
> + __u32 pad;
> + __u32 pio;
> + };
> + int buffer_fd;
Dunno if it matters, but KVM typically uses __u32 for file descriptors and then
does the verificaton on the backend (which needs to be there regardless).
> diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c
> index 64428b0a4aad..729f3293f768 100644
> --- a/virt/kvm/coalesced_mmio.c
> +++ b/virt/kvm/coalesced_mmio.c
> @@ -17,6 +17,7 @@
> #include <linux/kvm.h>
> #include <linux/anon_inodes.h>
> #include <linux/poll.h>
> +#include <linux/file.h>
>
> #include "coalesced_mmio.h"
>
> @@ -279,19 +280,40 @@ int kvm_vm_ioctl_create_coalesced_mmio_buffer(struct kvm *kvm)
> }
>
> int kvm_vm_ioctl_register_coalesced_mmio(struct kvm *kvm,
> - struct kvm_coalesced_mmio_zone *zone)
> + struct kvm_coalesced_mmio_zone2 *zone,
> + bool use_buffer_fd)
> {
> - int ret;
> + int ret = 0;
Heh, init ret to zero, and then return a pile of error before ret is ever touched.
I assume ret can be set to '0' after mutex_unlock(&kvm->slots_lock); in the happy
path, which would also show that it is indeed the happy path.
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 9eb22287384f..ef7dcce80136 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -4892,6 +4892,7 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
> #ifdef CONFIG_KVM_MMIO
> case KVM_CAP_COALESCED_MMIO:
> return KVM_COALESCED_MMIO_PAGE_OFFSET;
> + case KVM_CAP_COALESCED_MMIO2:
> case KVM_CAP_COALESCED_PIO:
> return 1;
> #endif
> @@ -5230,15 +5231,48 @@ static long kvm_vm_ioctl(struct file *filp,
> #ifdef CONFIG_KVM_MMIO
> case KVM_REGISTER_COALESCED_MMIO: {
> struct kvm_coalesced_mmio_zone zone;
> + struct kvm_coalesced_mmio_zone2 zone2;
>
> r = -EFAULT;
> if (copy_from_user(&zone, argp, sizeof(zone)))
> goto out;
> - r = kvm_vm_ioctl_register_coalesced_mmio(kvm, &zone);
> +
> + zone2.addr = zone.addr;
> + zone2.size = zone.size;
> + zone2.pio = zone.pio;
> + zone2.buffer_fd = -1;
> +
> + r = kvm_vm_ioctl_register_coalesced_mmio(kvm, &zone2, false);
> + break;
> + }
> + case KVM_REGISTER_COALESCED_MMIO2: {
Ah, the curly braces were just early :-)
> + struct kvm_coalesced_mmio_zone2 zone;
> +
> + r = -EFAULT;
> + if (copy_from_user(&zone, argp, sizeof(zone)))
> + goto out;
> +
> + r = kvm_vm_ioctl_register_coalesced_mmio(kvm, &zone, true);
next prev parent reply other threads:[~2024-08-17 0:37 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-18 19:35 [PATCH v2 0/6] KVM: Improve MMIO Coalescing API Ilias Stamatis
2024-07-18 19:35 ` [PATCH v2 1/6] KVM: Fix coalesced_mmio_has_room() Ilias Stamatis
2024-07-18 19:35 ` [PATCH v2 2/6] KVM: Add KVM_CREATE_COALESCED_MMIO_BUFFER ioctl Ilias Stamatis
2024-08-17 0:32 ` Sean Christopherson
2024-07-18 19:35 ` [PATCH v2 3/6] KVM: Support poll() on coalesced mmio buffer fds Ilias Stamatis
2024-07-20 1:35 ` kernel test robot
2024-07-22 14:26 ` Stamatis, Ilias
2024-07-20 21:10 ` kernel test robot
2024-07-18 19:35 ` [PATCH v2 4/6] KVM: Add KVM_(UN)REGISTER_COALESCED_MMIO2 ioctls Ilias Stamatis
2024-08-17 0:36 ` Sean Christopherson [this message]
2024-07-18 19:35 ` [PATCH v2 5/6] KVM: Documentation: Document v2 of coalesced MMIO API Ilias Stamatis
2024-07-18 19:35 ` [PATCH v2 6/6] KVM: selftests: Add coalesced_mmio_test Ilias Stamatis
2024-08-17 0:40 ` [PATCH v2 0/6] KVM: Improve MMIO Coalescing API Sean Christopherson
2024-08-23 23:47 ` Sean Christopherson
2024-08-27 10:35 ` Stamatis, Ilias
2024-08-27 13:45 ` Sean Christopherson
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=Zr_wqv7HiFNR2aCz@google.com \
--to=seanjc@google.com \
--cc=dwmw@amazon.co.uk \
--cc=ilstam@amazon.com \
--cc=kvm@vger.kernel.org \
--cc=nh-open-source@amazon.com \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
--cc=pdurrant@amazon.co.uk \
/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.