From: "Michael S. Tsirkin" <mst@redhat.com> To: qemu-devel@nongnu.org Cc: Peter Maydell <peter.maydell@linaro.org>, Gal Hammer <ghammer@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, kvm@vger.kernel.org Subject: [PULL v4 07/29] virtio: postpone the execution of event_notifier_cleanup function Date: Thu, 18 Jan 2018 22:44:51 +0200 [thread overview] Message-ID: <1516308132-10272-8-git-send-email-mst@redhat.com> (raw) In-Reply-To: <1516308132-10272-1-git-send-email-mst@redhat.com> From: Gal Hammer <ghammer@redhat.com> Use the EventNotifier's cleanup callback function to execute the event_notifier_cleanup function after kvm unregistered the eventfd. This change supports running the virtio_bus_set_host_notifier function inside a memory region transaction. Otherwise, a closed fd is sent to kvm, which results in a failure. Signed-off-by: Gal Hammer <ghammer@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> --- accel/kvm/kvm-all.c | 4 ++++ hw/virtio/virtio-bus.c | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index f290f48..071f4f5 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -812,6 +812,10 @@ static void kvm_mem_ioeventfd_del(MemoryListener *listener, if (r < 0) { abort(); } + + if (e->cleanup) { + e->cleanup(e); + } } static void kvm_io_ioeventfd_add(MemoryListener *listener, diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c index 3042232..8106346 100644 --- a/hw/virtio/virtio-bus.c +++ b/hw/virtio/virtio-bus.c @@ -256,6 +256,15 @@ bool virtio_bus_ioeventfd_enabled(VirtioBusState *bus) return k->ioeventfd_assign && k->ioeventfd_enabled(proxy); } +static void virtio_bus_cleanup_event_notifier(EventNotifier *notifier) +{ + /* Test and clear notifier after disabling event, + * in case poll callback didn't have time to run. + */ + virtio_queue_host_notifier_read(notifier); + event_notifier_cleanup(notifier); +} + /* * This function switches ioeventfd on/off in the device. * The caller must set or clear the handlers for the EventNotifier. @@ -283,19 +292,13 @@ int virtio_bus_set_host_notifier(VirtioBusState *bus, int n, bool assign) r = k->ioeventfd_assign(proxy, notifier, n, true); if (r < 0) { error_report("%s: unable to assign ioeventfd: %d", __func__, r); - goto cleanup_event_notifier; + virtio_bus_cleanup_event_notifier(notifier); } - return 0; } else { + notifier->cleanup = virtio_bus_cleanup_event_notifier; k->ioeventfd_assign(proxy, notifier, n, false); } -cleanup_event_notifier: - /* Test and clear notifier after disabling event, - * in case poll callback didn't have time to run. - */ - virtio_queue_host_notifier_read(notifier); - event_notifier_cleanup(notifier); return r; } -- MST
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com> To: qemu-devel@nongnu.org Cc: Peter Maydell <peter.maydell@linaro.org>, Gal Hammer <ghammer@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, kvm@vger.kernel.org Subject: [Qemu-devel] [PULL v4 07/29] virtio: postpone the execution of event_notifier_cleanup function Date: Thu, 18 Jan 2018 22:44:51 +0200 [thread overview] Message-ID: <1516308132-10272-8-git-send-email-mst@redhat.com> (raw) In-Reply-To: <1516308132-10272-1-git-send-email-mst@redhat.com> From: Gal Hammer <ghammer@redhat.com> Use the EventNotifier's cleanup callback function to execute the event_notifier_cleanup function after kvm unregistered the eventfd. This change supports running the virtio_bus_set_host_notifier function inside a memory region transaction. Otherwise, a closed fd is sent to kvm, which results in a failure. Signed-off-by: Gal Hammer <ghammer@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> --- accel/kvm/kvm-all.c | 4 ++++ hw/virtio/virtio-bus.c | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index f290f48..071f4f5 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -812,6 +812,10 @@ static void kvm_mem_ioeventfd_del(MemoryListener *listener, if (r < 0) { abort(); } + + if (e->cleanup) { + e->cleanup(e); + } } static void kvm_io_ioeventfd_add(MemoryListener *listener, diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c index 3042232..8106346 100644 --- a/hw/virtio/virtio-bus.c +++ b/hw/virtio/virtio-bus.c @@ -256,6 +256,15 @@ bool virtio_bus_ioeventfd_enabled(VirtioBusState *bus) return k->ioeventfd_assign && k->ioeventfd_enabled(proxy); } +static void virtio_bus_cleanup_event_notifier(EventNotifier *notifier) +{ + /* Test and clear notifier after disabling event, + * in case poll callback didn't have time to run. + */ + virtio_queue_host_notifier_read(notifier); + event_notifier_cleanup(notifier); +} + /* * This function switches ioeventfd on/off in the device. * The caller must set or clear the handlers for the EventNotifier. @@ -283,19 +292,13 @@ int virtio_bus_set_host_notifier(VirtioBusState *bus, int n, bool assign) r = k->ioeventfd_assign(proxy, notifier, n, true); if (r < 0) { error_report("%s: unable to assign ioeventfd: %d", __func__, r); - goto cleanup_event_notifier; + virtio_bus_cleanup_event_notifier(notifier); } - return 0; } else { + notifier->cleanup = virtio_bus_cleanup_event_notifier; k->ioeventfd_assign(proxy, notifier, n, false); } -cleanup_event_notifier: - /* Test and clear notifier after disabling event, - * in case poll callback didn't have time to run. - */ - virtio_queue_host_notifier_read(notifier); - event_notifier_cleanup(notifier); return r; } -- MST
next prev parent reply other threads:[~2018-01-18 20:44 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-18 20:44 [Qemu-devel] [PULL v4 00/29] pc, pci, virtio: features, fixes, cleanups Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 01/29] MAINTAINERS: Add myself as maintainer to X86 machines Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 02/29] vhost-user: add new vhost user messages to support virtio config space Michael S. Tsirkin 2018-03-28 10:03 ` Maxime Coquelin 2018-03-28 14:24 ` Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 03/29] vhost-user-blk: introduce a new vhost-user-blk host device Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 04/29] contrib/libvhost-user: enable virtio config space messages Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 05/29] contrib/vhost-user-blk: introduce a vhost-user-blk sample application Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 06/29] qemu: add a cleanup callback function to EventNotifier Michael S. Tsirkin 2018-01-18 20:44 ` Michael S. Tsirkin [this message] 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 07/29] virtio: postpone the execution of event_notifier_cleanup function Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 08/29] virtio: improve virtio devices initialization time Michael S. Tsirkin 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 09/29] pci/shpc: Move function to generic header file Michael S. Tsirkin 2018-01-18 21:51 ` Eric Blake 2018-01-22 7:30 ` Yuval Shaia 2018-01-18 20:44 ` [Qemu-devel] [PULL v4 10/29] vhost-user: fix multiple queue specification Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 11/29] intel-iommu: Redefine macros to enable supporting 48 bit address width Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 12/29] intel-iommu: Extend address width to 48 bits Michael S. Tsirkin 2018-01-19 3:34 ` Jason Wang 2018-01-19 3:39 ` Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 13/29] hw/pci-bridge: fix QEMU crash because of pcie-root-port Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 14/29] ACPI/unit-test: Add a testcase for RAM allocation in numa node Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 15/29] hw/acpi-build: Make next_base easy to follow Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 16/29] vhost-user-test: fix features mask Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 17/29] vhost-user-test: extract read-guest-mem test from main loop Michael S. Tsirkin 2018-01-18 20:45 ` [Qemu-devel] [PULL v4 18/29] vhost-user-test: setup virtqueues in all tests Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 19/29] vhost-user-test: make features mask an init_virtio_dev() argument Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 20/29] vhost-user-test: use init_virtio_dev in multiqueue test Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 21/29] x86_iommu: Move machine check to x86_iommu_realize() Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 22/29] x86_iommu: check if machine has PCI bus Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 23/29] tests: acpi: move tested tables array allocation outside of test_acpi_dsdt_table() Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 24/29] tests: acpi: init table descriptor in test_dst_table() Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 25/29] tests: acpi: rename test_acpi_tables()/test_dst_table() to reflect its usage Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 26/29] tests: acpi: add comments to fetch_rsdt_referenced_tables/data->tables usage Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 27/29] vhost-user: factor out msg head and payload Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 28/29] vhost-user: fix misaligned access to payload Michael S. Tsirkin 2018-01-18 20:46 ` [Qemu-devel] [PULL v4 29/29] vhost: remove assertion to prevent crash Michael S. Tsirkin 2018-01-19 12:38 ` [Qemu-devel] [PULL v4 00/29] pc, pci, virtio: features, fixes, cleanups Peter Maydell
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=1516308132-10272-8-git-send-email-mst@redhat.com \ --to=mst@redhat.com \ --cc=ghammer@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=pbonzini@redhat.com \ --cc=peter.maydell@linaro.org \ --cc=qemu-devel@nongnu.org \ /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.