From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Cornelia Huck <cornelia.huck@de.ibm.com>,
Fam Zheng <famz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Alexander Graf <agraf@suse.de>,
Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PULL 31/34] virtio-ccw: convert to ioeventfd callbacks
Date: Fri, 24 Jun 2016 08:55:55 +0300 [thread overview]
Message-ID: <20160624085555-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1466747621-4342-1-git-send-email-mst@redhat.com>
From: Cornelia Huck <cornelia.huck@de.ibm.com>
Use the new interface.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/s390x/virtio-ccw.c | 133 +++++++++++++++++---------------------------------
1 file changed, 45 insertions(+), 88 deletions(-)
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 1625e6b..8b709e3 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -69,92 +69,58 @@ VirtIODevice *virtio_ccw_get_vdev(SubchDev *sch)
return vdev;
}
-static int virtio_ccw_set_guest2host_notifier(VirtioCcwDevice *dev, int n,
- bool assign, bool set_handler)
+static void virtio_ccw_start_ioeventfd(VirtioCcwDevice *dev)
{
- VirtIODevice *vdev = virtio_bus_get_device(&dev->bus);
- VirtQueue *vq = virtio_get_queue(vdev, n);
- EventNotifier *notifier = virtio_queue_get_host_notifier(vq);
- int r = 0;
- SubchDev *sch = dev->sch;
- uint32_t sch_id = (css_build_subchannel_id(sch) << 16) | sch->schid;
+ virtio_bus_start_ioeventfd(&dev->bus);
+}
- if (assign) {
- r = event_notifier_init(notifier, 1);
- if (r < 0) {
- error_report("%s: unable to init event notifier: %d", __func__, r);
- return r;
- }
- virtio_queue_set_host_notifier_fd_handler(vq, true, set_handler);
- r = s390_assign_subch_ioeventfd(notifier, sch_id, n, assign);
- if (r < 0) {
- error_report("%s: unable to assign ioeventfd: %d", __func__, r);
- virtio_queue_set_host_notifier_fd_handler(vq, false, false);
- event_notifier_cleanup(notifier);
- return r;
- }
- } else {
- virtio_queue_set_host_notifier_fd_handler(vq, false, false);
- s390_assign_subch_ioeventfd(notifier, sch_id, n, assign);
- event_notifier_cleanup(notifier);
- }
- return r;
+static void virtio_ccw_stop_ioeventfd(VirtioCcwDevice *dev)
+{
+ virtio_bus_stop_ioeventfd(&dev->bus);
}
-static void virtio_ccw_start_ioeventfd(VirtioCcwDevice *dev)
+static bool virtio_ccw_ioeventfd_started(DeviceState *d)
{
- VirtIODevice *vdev;
- int n, r;
+ VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
- if (!(dev->flags & VIRTIO_CCW_FLAG_USE_IOEVENTFD) ||
- dev->ioeventfd_disabled ||
- dev->ioeventfd_started) {
- return;
- }
- vdev = virtio_bus_get_device(&dev->bus);
- for (n = 0; n < VIRTIO_CCW_QUEUE_MAX; n++) {
- if (!virtio_queue_get_num(vdev, n)) {
- continue;
- }
- r = virtio_ccw_set_guest2host_notifier(dev, n, true, true);
- if (r < 0) {
- goto assign_error;
- }
- }
- dev->ioeventfd_started = true;
- return;
+ return dev->ioeventfd_started;
+}
- assign_error:
- while (--n >= 0) {
- if (!virtio_queue_get_num(vdev, n)) {
- continue;
- }
- r = virtio_ccw_set_guest2host_notifier(dev, n, false, false);
- assert(r >= 0);
+static void virtio_ccw_ioeventfd_set_started(DeviceState *d, bool started,
+ bool err)
+{
+ VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
+
+ dev->ioeventfd_started = started;
+ if (err) {
+ /* Disable ioeventfd for this device. */
+ dev->flags &= ~VIRTIO_CCW_FLAG_USE_IOEVENTFD;
}
- dev->ioeventfd_started = false;
- /* Disable ioeventfd for this device. */
- dev->flags &= ~VIRTIO_CCW_FLAG_USE_IOEVENTFD;
- error_report("%s: failed. Fallback to userspace (slower).", __func__);
}
-static void virtio_ccw_stop_ioeventfd(VirtioCcwDevice *dev)
+static bool virtio_ccw_ioeventfd_disabled(DeviceState *d)
{
- VirtIODevice *vdev;
- int n, r;
+ VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
- if (!dev->ioeventfd_started) {
- return;
- }
- vdev = virtio_bus_get_device(&dev->bus);
- for (n = 0; n < VIRTIO_CCW_QUEUE_MAX; n++) {
- if (!virtio_queue_get_num(vdev, n)) {
- continue;
- }
- r = virtio_ccw_set_guest2host_notifier(dev, n, false, false);
- assert(r >= 0);
- }
- dev->ioeventfd_started = false;
+ return dev->ioeventfd_disabled ||
+ !(dev->flags & VIRTIO_CCW_FLAG_USE_IOEVENTFD);
+}
+
+static void virtio_ccw_ioeventfd_set_disabled(DeviceState *d, bool disabled)
+{
+ VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
+
+ dev->ioeventfd_disabled = disabled;
+}
+
+static int virtio_ccw_ioeventfd_assign(DeviceState *d, EventNotifier *notifier,
+ int n, bool assign)
+{
+ VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
+ SubchDev *sch = dev->sch;
+ uint32_t sch_id = (css_build_subchannel_id(sch) << 16) | sch->schid;
+
+ return s390_assign_subch_ioeventfd(notifier, sch_id, n, assign);
}
VirtualCssBus *virtual_css_bus_init(void)
@@ -1157,19 +1123,6 @@ static bool virtio_ccw_query_guest_notifiers(DeviceState *d)
return !!(dev->sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA);
}
-static int virtio_ccw_set_host_notifier(DeviceState *d, int n, bool assign)
-{
- VirtioCcwDevice *dev = VIRTIO_CCW_DEVICE(d);
-
- /* Stop using the generic ioeventfd, we are doing eventfd handling
- * ourselves below */
- dev->ioeventfd_disabled = assign;
- if (assign) {
- virtio_ccw_stop_ioeventfd(dev);
- }
- return virtio_ccw_set_guest2host_notifier(dev, n, assign, false);
-}
-
static int virtio_ccw_get_mappings(VirtioCcwDevice *dev)
{
int r;
@@ -1798,7 +1751,6 @@ static void virtio_ccw_bus_class_init(ObjectClass *klass, void *data)
k->notify = virtio_ccw_notify;
k->vmstate_change = virtio_ccw_vmstate_change;
k->query_guest_notifiers = virtio_ccw_query_guest_notifiers;
- k->set_host_notifier = virtio_ccw_set_host_notifier;
k->set_guest_notifiers = virtio_ccw_set_guest_notifiers;
k->save_queue = virtio_ccw_save_queue;
k->load_queue = virtio_ccw_load_queue;
@@ -1807,6 +1759,11 @@ static void virtio_ccw_bus_class_init(ObjectClass *klass, void *data)
k->device_plugged = virtio_ccw_device_plugged;
k->post_plugged = virtio_ccw_post_plugged;
k->device_unplugged = virtio_ccw_device_unplugged;
+ k->ioeventfd_started = virtio_ccw_ioeventfd_started;
+ k->ioeventfd_set_started = virtio_ccw_ioeventfd_set_started;
+ k->ioeventfd_disabled = virtio_ccw_ioeventfd_disabled;
+ k->ioeventfd_set_disabled = virtio_ccw_ioeventfd_set_disabled;
+ k->ioeventfd_assign = virtio_ccw_ioeventfd_assign;
}
static const TypeInfo virtio_ccw_bus_info = {
--
MST
next prev parent reply other threads:[~2016-06-24 5:56 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1466747621-4342-1-git-send-email-mst@redhat.com>
2016-06-24 5:54 ` [Qemu-devel] [PULL 01/34] smbios: Move table build tools into an include file Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 02/34] ipmi: Add SMBIOS table entry Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 03/34] acpi: Add IPMI table entries Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 04/34] bios: Add tests for the IPMI ACPI and SMBIOS entries Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 05/34] pc-dimm: introduce get_vmstate_memory_region callback Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 06/34] nvdimm: support nvdimm label Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 07/34] acpi: add aml_object_type Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 08/34] acpi: add aml_call5 Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 09/34] nvdimm acpi: set HDLE properly Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 10/34] nvdimm acpi: save arg3 of _DSM method Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 11/34] nvdimm acpi: check UUID Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 12/34] nvdimm acpi: abstract the operations for root & nvdimm devices Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 13/34] nvdimm acpi: check revision Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 14/34] nvdimm acpi: support Get Namespace Label Size function Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 15/34] nvdimm acpi: support Get Namespace Label Data function Michael S. Tsirkin
2016-06-24 5:54 ` [Qemu-devel] [PULL 16/34] nvdimm acpi: support Set " Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 17/34] docs: add NVDIMM ACPI documentation Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 18/34] i386: pci-assign: Fix MSI-X table size Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 19/34] docs: update ACPI CPU hotplug spec with new protocol Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 20/34] pc: piix4/ich9: add 'cpu-hotplug-legacy' property Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 21/34] acpi: cpuhp: add CPU devices AML with _STA method Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 22/34] pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 23/34] acpi: cpuhp: implement hot-add parts of CPU hotplug interface Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 24/34] acpi: cpuhp: implement hot-remove " Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 25/34] acpi: cpuhp: add cpu._OST handling Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 26/34] pc: use new CPU hotplug interface since 2.7 machine type Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 27/34] acpi-test-data: update expected Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 28/34] pc: acpi: drop intermediate PCMachineState.node_cpu Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 29/34] virtio-bus: common ioeventfd infrastructure Michael S. Tsirkin
2016-06-24 5:55 ` [Qemu-devel] [PULL 30/34] virtio-bus: have callers tolerate new host notifier api Michael S. Tsirkin
2016-06-29 11:37 ` Marc-André Lureau
2016-06-29 11:48 ` Cornelia Huck
2016-06-24 5:55 ` Michael S. Tsirkin [this message]
2016-06-24 5:55 ` [Qemu-devel] [PULL 32/34] virtio-pci: convert to ioeventfd callbacks Michael S. Tsirkin
2016-06-24 5:56 ` [Qemu-devel] [PULL 33/34] virtio-mmio: " Michael S. Tsirkin
2016-06-24 5:56 ` [Qemu-devel] [PULL 34/34] virtio-bus: remove old set_host_notifier callback Michael S. Tsirkin
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=20160624085555-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=famz@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=stefanha@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).