qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Roman Kagan <rkagan@virtuozzo.com>, qemu-devel@nongnu.org
Cc: Ben Warren <ben@skyportsystems.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Krish Sadhukhan <krish.sadhukhan@oracle.com>,
	"Marcos E. Matsunaga" <Marcos.Matsunaga@oracle.com>,
	Jan Dakinevich <jan.dakinevich@virtuozzo.com>,
	Vadim Rozenfeld <vrozenfe@redhat.com>,
	"Denis V. Lunev" <den@openvz.org>,
	si-wei liu <si-wei.liu@oracle.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Cathy Avery <cavery@redhat.com>
Subject: Re: [Qemu-devel] [RFC PATCH 18/34] hyperv: add support for KVM_HYPERV_EVENTFD
Date: Wed, 7 Feb 2018 12:01:41 +0100	[thread overview]
Message-ID: <4d74329a-8797-a476-60ff-539f95245131@redhat.com> (raw)
In-Reply-To: <20180206203048.11096-19-rkagan@virtuozzo.com>

On 06/02/2018 21:30, Roman Kagan wrote:
> When setting up a notifier for Hyper-V event connection, attempt to use
> the KVM-assisted one first, and fall back to userspace handling of the
> hypercall if the kernel doesn't provide the requested feature.
> 
> Signed-off-by: Roman Kagan <rkagan@virtuozzo.com>

As before, I wouldn't mind dropping userspace SIGNAL_EVENT altogether.
It would probably end up in bitrot.

Thanks,

Paolo

> ---
>  include/sysemu/kvm.h |  1 +
>  accel/kvm/kvm-all.c  | 15 +++++++++++++++
>  target/i386/hyperv.c | 21 ++++++++++++++++++++-
>  3 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
> index bbf12a1723..70ad0a54b7 100644
> --- a/include/sysemu/kvm.h
> +++ b/include/sysemu/kvm.h
> @@ -496,6 +496,7 @@ void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
>  void kvm_pc_gsi_handler(void *opaque, int n, int level);
>  void kvm_pc_setup_irq_routing(bool pci_enabled);
>  void kvm_init_irq_routing(KVMState *s);
> +int kvm_set_hv_event_notifier(KVMState *s, uint32_t conn_id, EventNotifier *n);
>  
>  /**
>   * kvm_arch_irqchip_create:
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index f290f487a5..c3ba87b701 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -1423,6 +1423,21 @@ static void kvm_irqchip_create(MachineState *machine, KVMState *s)
>      s->gsimap = g_hash_table_new(g_direct_hash, g_direct_equal);
>  }
>  
> +int kvm_set_hv_event_notifier(KVMState *s, uint32_t conn_id, EventNotifier *n)
> +{
> +    struct kvm_hyperv_eventfd hvevfd = {
> +        .conn_id = conn_id,
> +        .fd = n ? event_notifier_get_fd(n) : -1,
> +        .flags = n ? 0 : KVM_HYPERV_EVENTFD_DEASSIGN,
> +    };
> +
> +    if (!kvm_check_extension(s, KVM_CAP_HYPERV_EVENTFD)) {
> +        return -ENOSYS;
> +    }
> +
> +    return kvm_vm_ioctl(s, KVM_HYPERV_EVENTFD, &hvevfd);
> +}
> +
>  /* Find number of supported CPUs using the recommended
>   * procedure from the kernel API documentation to cope with
>   * older kernels that may be missing capabilities.
> diff --git a/target/i386/hyperv.c b/target/i386/hyperv.c
> index e43cbb9322..63dcb23fa8 100644
> --- a/target/i386/hyperv.c
> +++ b/target/i386/hyperv.c
> @@ -313,7 +313,8 @@ unlock:
>      return ret;
>  }
>  
> -int hyperv_set_evt_notifier(uint32_t conn_id, EventNotifier *notifier)
> +static int hyperv_set_evt_notifier_userspace(uint32_t conn_id,
> +                                             EventNotifier *notifier)
>  {
>      int ret;
>      EvtHandler *eh;
> @@ -346,6 +347,24 @@ unlock:
>      return ret;
>  }
>  
> +static bool hv_evt_notifier_userspace;
> +
> +int hyperv_set_evt_notifier(uint32_t conn_id, EventNotifier *notifier)
> +{
> +    if (!hv_evt_notifier_userspace) {
> +        int ret = kvm_set_hv_event_notifier(kvm_state, conn_id, notifier);
> +        if (ret != -ENOSYS) {
> +            return ret;
> +        }
> +
> +        hv_evt_notifier_userspace = true;
> +        warn_report("Hyper-V event signaling in KVM not supported; "
> +                    "using slower userspace hypercall processing");
> +    }
> +
> +    return hyperv_set_evt_notifier_userspace(conn_id, notifier);
> +}
> +
>  static uint64_t hvcall_post_message(uint64_t param, bool fast)
>  {
>      uint64_t ret;
> 

  reply	other threads:[~2018-02-07 11:01 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-06 20:30 [Qemu-devel] [RFC PATCH 00/34] Hyper-V / VMBus Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 01/34] hyperv: ensure VP index equal to QEMU cpu_index Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 02/34] hyperv_testdev: refactor for readability Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 03/34] hyperv: cosmetic: g_malloc -> g_new Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 04/34] hyperv: synic: only setup ack notifier if there's a callback Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 05/34] hyperv: allow passing arbitrary data to sint ack callback Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 06/34] hyperv: address HvSintRoute by X86CPU pointer Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 07/34] hyperv: make HvSintRoute reference-counted Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 08/34] hyperv: qom-ify SynIC Roman Kagan
2018-02-07 10:45   ` Paolo Bonzini
2018-02-07 18:37     ` Roman Kagan
2018-02-08 14:54       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 09/34] hyperv: block SynIC use in QEMU in incompatible configurations Roman Kagan
2018-02-07 10:46   ` Paolo Bonzini
2018-02-07 18:49     ` Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 10/34] hyperv: make overlay pages for SynIC Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 11/34] hyperv: add synic message delivery Roman Kagan
2018-02-07 10:58   ` Paolo Bonzini
2018-02-07 19:06     ` Roman Kagan
2018-02-08 14:57       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 12/34] hyperv: add synic event flag signaling Roman Kagan
2018-02-07 10:58   ` Paolo Bonzini
2018-02-07 19:11     ` Roman Kagan
2018-02-08 15:02       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 13/34] hyperv: process SIGNAL_EVENT hypercall Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 14/34] hyperv: process POST_MESSAGE hypercall Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 15/34] hyperv_testdev: add SynIC message and event testmodes Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 16/34] hyperv: update copyright notices Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 17/34] [not to commit] import HYPERV_EVENTFD stuff from kernel Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 18/34] hyperv: add support for KVM_HYPERV_EVENTFD Roman Kagan
2018-02-07 11:01   ` Paolo Bonzini [this message]
2018-02-07 19:19     ` Roman Kagan
2018-02-08 15:03       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 19/34] vmbus: add vmbus protocol definitions Roman Kagan
2018-02-07 11:02   ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 20/34] vmbus: vmbus implementation Roman Kagan
2018-02-07 12:00   ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 21/34] vmbus: build configuration Roman Kagan
2018-02-07 11:04   ` Paolo Bonzini
2018-02-07 19:30     ` Roman Kagan
2018-02-08 15:04       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 22/34] i386: Hyper-V VMBus ACPI DSDT entry Roman Kagan
2018-02-07 11:05   ` Paolo Bonzini
2018-02-07 19:37     ` Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 23/34] i386: en/disable vmbus by a machine property Roman Kagan
2018-02-07 11:05   ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 24/34] scsi: add Hyper-V/VMBus SCSI protocol definitions Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 25/34] scsi: add Hyper-V/VMBus SCSI controller Roman Kagan
2018-02-07 11:11   ` Paolo Bonzini
2018-02-07 11:25     ` Denis V. Lunev
2018-02-07 20:00     ` Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 26/34] hv-scsi: limit the number of requests per notification Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 27/34] tests: hv-scsi: add start-stop test Roman Kagan
2018-02-07 11:15   ` Paolo Bonzini
2018-02-07 19:40     ` Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 28/34] net: add RNDIS definitions Roman Kagan
2018-02-07 11:26   ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 29/34] net: add Hyper-V/VMBus network protocol definitions Roman Kagan
2018-02-07 12:00   ` Paolo Bonzini
2018-02-07 20:15     ` Roman Kagan
2018-02-08 15:05       ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 30/34] net: add Hyper-V/VMBus net adapter Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 31/34] hv-net: add .bootindex support Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 32/34] loader: allow arbitrary basename for fw_cfg file roms Roman Kagan
2018-02-07 11:22   ` Paolo Bonzini
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 33/34] vmbus: add support for rom files Roman Kagan
2018-02-07 11:18   ` Paolo Bonzini
2018-02-07 19:46     ` Roman Kagan
2018-02-06 20:30 ` [Qemu-devel] [RFC PATCH 34/34] hv-net: define default rom file name Roman Kagan
2018-02-06 21:40 ` [Qemu-devel] [RFC PATCH 00/34] Hyper-V / VMBus no-reply
2018-02-06 21:55 ` no-reply
2018-02-06 21:56 ` no-reply
2018-02-06 22:10 ` no-reply
2018-02-06 22:23 ` no-reply
2018-02-06 22:35 ` no-reply

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=4d74329a-8797-a476-60ff-539f95245131@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=Marcos.Matsunaga@oracle.com \
    --cc=ben@skyportsystems.com \
    --cc=cavery@redhat.com \
    --cc=den@openvz.org \
    --cc=jan.dakinevich@virtuozzo.com \
    --cc=konrad.wilk@oracle.com \
    --cc=krish.sadhukhan@oracle.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rkagan@virtuozzo.com \
    --cc=si-wei.liu@oracle.com \
    --cc=vkuznets@redhat.com \
    --cc=vrozenfe@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).