diff --git a/0001-tests-Disable-pci_virtio_vga-for-ppc64.patch b/0001-tests-Disable-pci_virtio_vga-for-ppc64.patch new file mode 100644 index 0000000..26d8ed7 --- /dev/null +++ b/0001-tests-Disable-pci_virtio_vga-for-ppc64.patch @@ -0,0 +1,32 @@ +From f6d5fd60f54fb9dcdc3733154637a3a214f5d5af Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 1 Sep 2022 12:43:49 -0300 +Subject: [PATCH] tests: Disable pci_virtio_vga for ppc64 + +starting QEMU: exec ./qemu-system-ppc64 -qtest unix:/tmp/qtest-2378197.sock -qtest-log /dev/null -chardev socket,path=/tmp/qtest-2378197.qmp,id=char0 -mon chardev=char0,mode=control -display none -vga none -device virtio-vga -accel qtest +stderr: +qemu-system-ppc64: -device virtio-vga: 'virtio-vga' is not a valid device model name +Broken pipe +../tests/qtest/libqtest.c:156: kill_qemu() tried to terminate QEMU process but encountered exit status 1 (expected 0) + +Signed-off-by: Eduardo Lima (Etrunko) +--- + tests/qtest/display-vga-test.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/qtest/display-vga-test.c b/tests/qtest/display-vga-test.c +index ace3bb28e0..628dad4cf2 100644 +--- a/tests/qtest/display-vga-test.c ++++ b/tests/qtest/display-vga-test.c +@@ -61,7 +61,7 @@ int main(int argc, char **argv) + qtest_add_func("/display/pci/multihead", pci_multihead); + qtest_add_func("/display/pci/virtio-gpu", pci_virtio_gpu); + if (g_str_equal(arch, "i386") || g_str_equal(arch, "x86_64") || +- g_str_equal(arch, "hppa") || g_str_equal(arch, "ppc64")) { ++ g_str_equal(arch, "hppa")) { + qtest_add_func("/display/pci/virtio-vga", pci_virtio_vga); + } + +-- +2.37.2 + diff --git a/0002-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch b/0002-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch deleted file mode 100644 index 32c90a1..0000000 --- a/0002-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch +++ /dev/null @@ -1,108 +0,0 @@ -From: Stefan Hajnoczi -Date: Wed, 27 Apr 2022 15:35:36 +0100 -Subject: [PATCH] virtio-scsi: fix ctrl and event handler functions in - dataplane mode -Content-type: text/plain - -Commit f34e8d8b8d48d73f36a67b6d5e492ef9784b5012 ("virtio-scsi: prepare -virtio_scsi_handle_cmd for dataplane") prepared the virtio-scsi cmd -virtqueue handler function to be used in both the dataplane and -non-datpalane code paths. - -It failed to convert the ctrl and event virtqueue handler functions, -which are not designed to be called from the dataplane code path but -will be since the ioeventfd is set up for those virtqueues when -dataplane starts. - -Convert the ctrl and event virtqueue handler functions now so they -operate correctly when called from the dataplane code path. Avoid code -duplication by extracting this code into a helper function. - -Fixes: f34e8d8b8d48d73f36a67b6d5e492ef9784b5012 ("virtio-scsi: prepare virtio_scsi_handle_cmd for dataplane") -Signed-off-by: Stefan Hajnoczi -Reviewed-by: Paolo Bonzini -Message-id: 20220427143541.119567-2-stefanha@redhat.com -[Fixed s/by used/be used/ typo pointed out by Michael Tokarev -. ---Stefan] -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 2f743ef6366c2df4ef51ef3ae318138cdc0125ab) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi.c | 42 +++++++++++++++++++++++++++--------------- - 1 file changed, 27 insertions(+), 15 deletions(-) - -diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c -index 34a968ecfb..417fbc71d6 100644 ---- a/hw/scsi/virtio-scsi.c -+++ b/hw/scsi/virtio-scsi.c -@@ -472,16 +472,32 @@ bool virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq) - return progress; - } - -+/* -+ * If dataplane is configured but not yet started, do so now and return true on -+ * success. -+ * -+ * Dataplane is started by the core virtio code but virtqueue handler functions -+ * can also be invoked when a guest kicks before DRIVER_OK, so this helper -+ * function helps us deal with manually starting ioeventfd in that case. -+ */ -+static bool virtio_scsi_defer_to_dataplane(VirtIOSCSI *s) -+{ -+ if (!s->ctx || s->dataplane_started) { -+ return false; -+ } -+ -+ virtio_device_start_ioeventfd(&s->parent_obj.parent_obj); -+ return !s->dataplane_fenced; -+} -+ - static void virtio_scsi_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) - { - VirtIOSCSI *s = (VirtIOSCSI *)vdev; - -- if (s->ctx) { -- virtio_device_start_ioeventfd(vdev); -- if (!s->dataplane_fenced) { -- return; -- } -+ if (virtio_scsi_defer_to_dataplane(s)) { -+ return; - } -+ - virtio_scsi_acquire(s); - virtio_scsi_handle_ctrl_vq(s, vq); - virtio_scsi_release(s); -@@ -720,12 +736,10 @@ static void virtio_scsi_handle_cmd(VirtIODevice *vdev, VirtQueue *vq) - /* use non-QOM casts in the data path */ - VirtIOSCSI *s = (VirtIOSCSI *)vdev; - -- if (s->ctx && !s->dataplane_started) { -- virtio_device_start_ioeventfd(vdev); -- if (!s->dataplane_fenced) { -- return; -- } -+ if (virtio_scsi_defer_to_dataplane(s)) { -+ return; - } -+ - virtio_scsi_acquire(s); - virtio_scsi_handle_cmd_vq(s, vq); - virtio_scsi_release(s); -@@ -855,12 +869,10 @@ static void virtio_scsi_handle_event(VirtIODevice *vdev, VirtQueue *vq) - { - VirtIOSCSI *s = VIRTIO_SCSI(vdev); - -- if (s->ctx) { -- virtio_device_start_ioeventfd(vdev); -- if (!s->dataplane_fenced) { -- return; -- } -+ if (virtio_scsi_defer_to_dataplane(s)) { -+ return; - } -+ - virtio_scsi_acquire(s); - virtio_scsi_handle_event_vq(s, vq); - virtio_scsi_release(s); diff --git a/0003-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch b/0003-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch deleted file mode 100644 index 03acef6..0000000 --- a/0003-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch +++ /dev/null @@ -1,91 +0,0 @@ -From: Stefan Hajnoczi -Date: Tue, 17 May 2022 09:27:45 +0100 -Subject: [PATCH] virtio-scsi: don't waste CPU polling the event virtqueue -Content-type: text/plain - -The virtio-scsi event virtqueue is not emptied by its handler function. -This is typical for rx virtqueues where the device uses buffers when -some event occurs (e.g. a packet is received, an error condition -happens, etc). - -Polling non-empty virtqueues wastes CPU cycles. We are not waiting for -new buffers to become available, we are waiting for an event to occur, -so it's a misuse of CPU resources to poll for buffers. - -Introduce the new virtio_queue_aio_attach_host_notifier_no_poll() API, -which is identical to virtio_queue_aio_attach_host_notifier() except -that it does not poll the virtqueue. - -Before this patch the following command-line consumed 100% CPU in the -IOThread polling and calling virtio_scsi_handle_event(): - - $ qemu-system-x86_64 -M accel=kvm -m 1G -cpu host \ - --object iothread,id=iothread0 \ - --device virtio-scsi-pci,iothread=iothread0 \ - --blockdev file,filename=test.img,aio=native,cache.direct=on,node-name=drive0 \ - --device scsi-hd,drive=drive0 - -After this patch CPU is no longer wasted. - -Reported-by: Nir Soffer -Signed-off-by: Stefan Hajnoczi -Tested-by: Nir Soffer -Message-id: 20220427143541.119567-3-stefanha@redhat.com -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 38738f7dbbda90fbc161757b7f4be35b52205552) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi-dataplane.c | 2 +- - hw/virtio/virtio.c | 13 +++++++++++++ - include/hw/virtio/virtio.h | 1 + - 3 files changed, 15 insertions(+), 1 deletion(-) - -diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c -index 29575cbaf6..8bb6e6acfc 100644 ---- a/hw/scsi/virtio-scsi-dataplane.c -+++ b/hw/scsi/virtio-scsi-dataplane.c -@@ -138,7 +138,7 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) - - aio_context_acquire(s->ctx); - virtio_queue_aio_attach_host_notifier(vs->ctrl_vq, s->ctx); -- virtio_queue_aio_attach_host_notifier(vs->event_vq, s->ctx); -+ virtio_queue_aio_attach_host_notifier_no_poll(vs->event_vq, s->ctx); - - for (i = 0; i < vs->conf.num_queues; i++) { - virtio_queue_aio_attach_host_notifier(vs->cmd_vqs[i], s->ctx); -diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c -index 9d637e043e..67a873f54a 100644 ---- a/hw/virtio/virtio.c -+++ b/hw/virtio/virtio.c -@@ -3534,6 +3534,19 @@ void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx) - virtio_queue_host_notifier_aio_poll_end); - } - -+/* -+ * Same as virtio_queue_aio_attach_host_notifier() but without polling. Use -+ * this for rx virtqueues and similar cases where the virtqueue handler -+ * function does not pop all elements. When the virtqueue is left non-empty -+ * polling consumes CPU cycles and should not be used. -+ */ -+void virtio_queue_aio_attach_host_notifier_no_poll(VirtQueue *vq, AioContext *ctx) -+{ -+ aio_set_event_notifier(ctx, &vq->host_notifier, true, -+ virtio_queue_host_notifier_read, -+ NULL, NULL); -+} -+ - void virtio_queue_aio_detach_host_notifier(VirtQueue *vq, AioContext *ctx) - { - aio_set_event_notifier(ctx, &vq->host_notifier, true, NULL, NULL, NULL); -diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h -index b31c4507f5..b62a35fdca 100644 ---- a/include/hw/virtio/virtio.h -+++ b/include/hw/virtio/virtio.h -@@ -317,6 +317,7 @@ EventNotifier *virtio_queue_get_host_notifier(VirtQueue *vq); - void virtio_queue_set_host_notifier_enabled(VirtQueue *vq, bool enabled); - void virtio_queue_host_notifier_read(EventNotifier *n); - void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx); -+void virtio_queue_aio_attach_host_notifier_no_poll(VirtQueue *vq, AioContext *ctx); - void virtio_queue_aio_detach_host_notifier(VirtQueue *vq, AioContext *ctx); - VirtQueue *virtio_vector_first_queue(VirtIODevice *vdev, uint16_t vector); - VirtQueue *virtio_vector_next_queue(VirtQueue *vq); diff --git a/0004-virtio-scsi-clean-up-virtio_scsi_handle_event_vq.patch b/0004-virtio-scsi-clean-up-virtio_scsi_handle_event_vq.patch deleted file mode 100644 index d3eff90..0000000 --- a/0004-virtio-scsi-clean-up-virtio_scsi_handle_event_vq.patch +++ /dev/null @@ -1,51 +0,0 @@ -From: Stefan Hajnoczi -Date: Tue, 17 May 2022 09:28:06 +0100 -Subject: [PATCH] virtio-scsi: clean up virtio_scsi_handle_event_vq() -Content-type: text/plain - -virtio_scsi_handle_event_vq() is only called from hw/scsi/virtio-scsi.c -now and its return value is no longer used. Remove the function -prototype from virtio-scsi.h and drop the return value. - -Signed-off-by: Stefan Hajnoczi -Reviewed-by: Paolo Bonzini -Message-id: 20220427143541.119567-4-stefanha@redhat.com -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 37ce2de95169dacab3fb53d11bd4509b9c2e3a4c) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi.c | 4 +--- - include/hw/virtio/virtio-scsi.h | 1 - - 2 files changed, 1 insertion(+), 4 deletions(-) - -diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c -index 417fbc71d6..aa03a713d8 100644 ---- a/hw/scsi/virtio-scsi.c -+++ b/hw/scsi/virtio-scsi.c -@@ -856,13 +856,11 @@ void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, - virtio_scsi_complete_req(req); - } - --bool virtio_scsi_handle_event_vq(VirtIOSCSI *s, VirtQueue *vq) -+static void virtio_scsi_handle_event_vq(VirtIOSCSI *s, VirtQueue *vq) - { - if (s->events_dropped) { - virtio_scsi_push_event(s, NULL, VIRTIO_SCSI_T_NO_EVENT, 0); -- return true; - } -- return false; - } - - static void virtio_scsi_handle_event(VirtIODevice *vdev, VirtQueue *vq) -diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h -index 543681bc18..5957597825 100644 ---- a/include/hw/virtio/virtio-scsi.h -+++ b/include/hw/virtio/virtio-scsi.h -@@ -151,7 +151,6 @@ void virtio_scsi_common_realize(DeviceState *dev, - Error **errp); - - void virtio_scsi_common_unrealize(DeviceState *dev); --bool virtio_scsi_handle_event_vq(VirtIOSCSI *s, VirtQueue *vq); - bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq); - bool virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq); - void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req); diff --git a/0005-virtio-scsi-clean-up-virtio_scsi_handle_ctrl_vq.patch b/0005-virtio-scsi-clean-up-virtio_scsi_handle_ctrl_vq.patch deleted file mode 100644 index bde9298..0000000 --- a/0005-virtio-scsi-clean-up-virtio_scsi_handle_ctrl_vq.patch +++ /dev/null @@ -1,54 +0,0 @@ -From: Stefan Hajnoczi -Date: Tue, 17 May 2022 09:28:12 +0100 -Subject: [PATCH] virtio-scsi: clean up virtio_scsi_handle_ctrl_vq() -Content-type: text/plain - -virtio_scsi_handle_ctrl_vq() is only called from hw/scsi/virtio-scsi.c -now and its return value is no longer used. Remove the function -prototype from virtio-scsi.h and drop the return value. - -Signed-off-by: Stefan Hajnoczi -Reviewed-by: Paolo Bonzini -Message-id: 20220427143541.119567-5-stefanha@redhat.com -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 73b3b49f1880f236b4d0ffd7efb00280c05a5fab) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi.c | 5 +---- - include/hw/virtio/virtio-scsi.h | 1 - - 2 files changed, 1 insertion(+), 5 deletions(-) - -diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c -index aa03a713d8..eefda16e4b 100644 ---- a/hw/scsi/virtio-scsi.c -+++ b/hw/scsi/virtio-scsi.c -@@ -460,16 +460,13 @@ static void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s, VirtIOSCSIReq *req) - } - } - --bool virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq) -+static void virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq) - { - VirtIOSCSIReq *req; -- bool progress = false; - - while ((req = virtio_scsi_pop_req(s, vq))) { -- progress = true; - virtio_scsi_handle_ctrl_req(s, req); - } -- return progress; - } - - /* -diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h -index 5957597825..44dc3b81ec 100644 ---- a/include/hw/virtio/virtio-scsi.h -+++ b/include/hw/virtio/virtio-scsi.h -@@ -152,7 +152,6 @@ void virtio_scsi_common_realize(DeviceState *dev, - - void virtio_scsi_common_unrealize(DeviceState *dev); - bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq); --bool virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq); - void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req); - void virtio_scsi_free_req(VirtIOSCSIReq *req); - void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, diff --git a/0006-virtio-scsi-clean-up-virtio_scsi_handle_cmd_vq.patch b/0006-virtio-scsi-clean-up-virtio_scsi_handle_cmd_vq.patch deleted file mode 100644 index 89c5e58..0000000 --- a/0006-virtio-scsi-clean-up-virtio_scsi_handle_cmd_vq.patch +++ /dev/null @@ -1,66 +0,0 @@ -From: Stefan Hajnoczi -Date: Tue, 17 May 2022 09:28:19 +0100 -Subject: [PATCH] virtio-scsi: clean up virtio_scsi_handle_cmd_vq() -Content-type: text/plain - -virtio_scsi_handle_cmd_vq() is only called from hw/scsi/virtio-scsi.c -now and its return value is no longer used. Remove the function -prototype from virtio-scsi.h and drop the return value. - -Signed-off-by: Stefan Hajnoczi -Reviewed-by: Paolo Bonzini -Message-id: 20220427143541.119567-6-stefanha@redhat.com -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit ad482b57ef841b2d4883c5079d20ba44ff5e4b3e) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi.c | 5 +---- - include/hw/virtio/virtio-scsi.h | 1 - - 2 files changed, 1 insertion(+), 5 deletions(-) - -diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c -index eefda16e4b..12c6a21202 100644 ---- a/hw/scsi/virtio-scsi.c -+++ b/hw/scsi/virtio-scsi.c -@@ -685,12 +685,11 @@ static void virtio_scsi_handle_cmd_req_submit(VirtIOSCSI *s, VirtIOSCSIReq *req) - scsi_req_unref(sreq); - } - --bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq) -+static void virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq) - { - VirtIOSCSIReq *req, *next; - int ret = 0; - bool suppress_notifications = virtio_queue_get_notification(vq); -- bool progress = false; - - QTAILQ_HEAD(, VirtIOSCSIReq) reqs = QTAILQ_HEAD_INITIALIZER(reqs); - -@@ -700,7 +699,6 @@ bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq) - } - - while ((req = virtio_scsi_pop_req(s, vq))) { -- progress = true; - ret = virtio_scsi_handle_cmd_req_prepare(s, req); - if (!ret) { - QTAILQ_INSERT_TAIL(&reqs, req, next); -@@ -725,7 +723,6 @@ bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq) - QTAILQ_FOREACH_SAFE(req, &reqs, next, next) { - virtio_scsi_handle_cmd_req_submit(s, req); - } -- return progress; - } - - static void virtio_scsi_handle_cmd(VirtIODevice *vdev, VirtQueue *vq) -diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h -index 44dc3b81ec..2497530064 100644 ---- a/include/hw/virtio/virtio-scsi.h -+++ b/include/hw/virtio/virtio-scsi.h -@@ -151,7 +151,6 @@ void virtio_scsi_common_realize(DeviceState *dev, - Error **errp); - - void virtio_scsi_common_unrealize(DeviceState *dev); --bool virtio_scsi_handle_cmd_vq(VirtIOSCSI *s, VirtQueue *vq); - void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req); - void virtio_scsi_free_req(VirtIOSCSIReq *req); - void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, diff --git a/0007-virtio-scsi-move-request-related-items-from-.h-to-.c.patch b/0007-virtio-scsi-move-request-related-items-from-.h-to-.c.patch deleted file mode 100644 index 89377c8..0000000 --- a/0007-virtio-scsi-move-request-related-items-from-.h-to-.c.patch +++ /dev/null @@ -1,157 +0,0 @@ -From: Stefan Hajnoczi -Date: Tue, 17 May 2022 09:28:26 +0100 -Subject: [PATCH] virtio-scsi: move request-related items from .h to .c -Content-type: text/plain - -There is no longer a need to expose the request and related APIs in -virtio-scsi.h since there are no callers outside virtio-scsi.c. - -Note the block comment in VirtIOSCSIReq has been adjusted to meet the -coding style. - -Signed-off-by: Stefan Hajnoczi -Reviewed-by: Paolo Bonzini -Message-id: 20220427143541.119567-7-stefanha@redhat.com -Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 3dc584abeef0e1277c2de8c1c1974cb49444eb0a) -Signed-off-by: Stefan Hajnoczi ---- - hw/scsi/virtio-scsi.c | 45 ++++++++++++++++++++++++++++++--- - include/hw/virtio/virtio-scsi.h | 40 ----------------------------- - 2 files changed, 41 insertions(+), 44 deletions(-) - -diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c -index 12c6a21202..db54d104be 100644 ---- a/hw/scsi/virtio-scsi.c -+++ b/hw/scsi/virtio-scsi.c -@@ -29,6 +29,43 @@ - #include "hw/virtio/virtio-access.h" - #include "trace.h" - -+typedef struct VirtIOSCSIReq { -+ /* -+ * Note: -+ * - fields up to resp_iov are initialized by virtio_scsi_init_req; -+ * - fields starting at vring are zeroed by virtio_scsi_init_req. -+ */ -+ VirtQueueElement elem; -+ -+ VirtIOSCSI *dev; -+ VirtQueue *vq; -+ QEMUSGList qsgl; -+ QEMUIOVector resp_iov; -+ -+ union { -+ /* Used for two-stage request submission */ -+ QTAILQ_ENTRY(VirtIOSCSIReq) next; -+ -+ /* Used for cancellation of request during TMFs */ -+ int remaining; -+ }; -+ -+ SCSIRequest *sreq; -+ size_t resp_size; -+ enum SCSIXferMode mode; -+ union { -+ VirtIOSCSICmdResp cmd; -+ VirtIOSCSICtrlTMFResp tmf; -+ VirtIOSCSICtrlANResp an; -+ VirtIOSCSIEvent event; -+ } resp; -+ union { -+ VirtIOSCSICmdReq cmd; -+ VirtIOSCSICtrlTMFReq tmf; -+ VirtIOSCSICtrlANReq an; -+ } req; -+} VirtIOSCSIReq; -+ - static inline int virtio_scsi_get_lun(uint8_t *lun) - { - return ((lun[2] << 8) | lun[3]) & 0x3FFF; -@@ -45,7 +82,7 @@ static inline SCSIDevice *virtio_scsi_device_get(VirtIOSCSI *s, uint8_t *lun) - return scsi_device_get(&s->bus, 0, lun[1], virtio_scsi_get_lun(lun)); - } - --void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req) -+static void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req) - { - VirtIODevice *vdev = VIRTIO_DEVICE(s); - const size_t zero_skip = -@@ -58,7 +95,7 @@ void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req) - memset((uint8_t *)req + zero_skip, 0, sizeof(*req) - zero_skip); - } - --void virtio_scsi_free_req(VirtIOSCSIReq *req) -+static void virtio_scsi_free_req(VirtIOSCSIReq *req) - { - qemu_iovec_destroy(&req->resp_iov); - qemu_sglist_destroy(&req->qsgl); -@@ -801,8 +838,8 @@ static void virtio_scsi_reset(VirtIODevice *vdev) - s->events_dropped = false; - } - --void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, -- uint32_t event, uint32_t reason) -+static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, -+ uint32_t event, uint32_t reason) - { - VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(s); - VirtIOSCSIReq *req; -diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h -index 2497530064..abdda2cbd0 100644 ---- a/include/hw/virtio/virtio-scsi.h -+++ b/include/hw/virtio/virtio-scsi.h -@@ -94,42 +94,6 @@ struct VirtIOSCSI { - uint32_t host_features; - }; - --typedef struct VirtIOSCSIReq { -- /* Note: -- * - fields up to resp_iov are initialized by virtio_scsi_init_req; -- * - fields starting at vring are zeroed by virtio_scsi_init_req. -- * */ -- VirtQueueElement elem; -- -- VirtIOSCSI *dev; -- VirtQueue *vq; -- QEMUSGList qsgl; -- QEMUIOVector resp_iov; -- -- union { -- /* Used for two-stage request submission */ -- QTAILQ_ENTRY(VirtIOSCSIReq) next; -- -- /* Used for cancellation of request during TMFs */ -- int remaining; -- }; -- -- SCSIRequest *sreq; -- size_t resp_size; -- enum SCSIXferMode mode; -- union { -- VirtIOSCSICmdResp cmd; -- VirtIOSCSICtrlTMFResp tmf; -- VirtIOSCSICtrlANResp an; -- VirtIOSCSIEvent event; -- } resp; -- union { -- VirtIOSCSICmdReq cmd; -- VirtIOSCSICtrlTMFReq tmf; -- VirtIOSCSICtrlANReq an; -- } req; --} VirtIOSCSIReq; -- - static inline void virtio_scsi_acquire(VirtIOSCSI *s) - { - if (s->ctx) { -@@ -151,10 +115,6 @@ void virtio_scsi_common_realize(DeviceState *dev, - Error **errp); - - void virtio_scsi_common_unrealize(DeviceState *dev); --void virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue *vq, VirtIOSCSIReq *req); --void virtio_scsi_free_req(VirtIOSCSIReq *req); --void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, -- uint32_t event, uint32_t reason); - - void virtio_scsi_dataplane_setup(VirtIOSCSI *s, Error **errp); - int virtio_scsi_dataplane_start(VirtIODevice *s); diff --git a/0008-Disable-flakey-dbus-display-test.patch b/0008-Disable-flakey-dbus-display-test.patch deleted file mode 100644 index 01bae39..0000000 --- a/0008-Disable-flakey-dbus-display-test.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: Cole Robinson -Date: Sat, 4 Jun 2022 20:28:58 -0400 -Subject: [PATCH] Disable flakey dbus-display-test -Content-type: text/plain - -Signed-off-by: Cole Robinson ---- - tests/qtest/meson.build | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build -index d25f82bb5a..d085604727 100644 ---- a/tests/qtest/meson.build -+++ b/tests/qtest/meson.build -@@ -94,10 +94,6 @@ qtests_i386 = \ - 'test-filter-redirector' - ] - --if dbus_display -- qtests_i386 += ['dbus-display-test'] --endif -- - dbus_daemon = find_program('dbus-daemon', required: false) - if dbus_daemon.found() and config_host.has_key('GDBUS_CODEGEN') - # Temporarily disabled due to Patchew failures: -@@ -298,10 +294,6 @@ qtests = { - 'vmgenid-test': files('boot-sector.c', 'acpi-utils.c'), - } - --if dbus_display --qtests += {'dbus-display-test': [dbus_display1, gio]} --endif -- - qtest_executables = {} - foreach dir : target_dirs - if not dir.endswith('-softmmu') diff --git a/0009-Fix-iotests-with-modules-and-qemu-system-s390x.patch b/0009-Fix-iotests-with-modules-and-qemu-system-s390x.patch deleted file mode 100644 index d4f84a0..0000000 --- a/0009-Fix-iotests-with-modules-and-qemu-system-s390x.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Cole Robinson -Date: Sat, 4 Jun 2022 20:29:46 -0400 -Subject: [PATCH] Fix iotests with modules and qemu-system-s390x -Content-type: text/plain - -Signed-off-by: Cole Robinson ---- - tests/qemu-iotests/common.rc | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc -index 227e0a5be9..97f8e0a15f 100644 ---- a/tests/qemu-iotests/common.rc -+++ b/tests/qemu-iotests/common.rc -@@ -975,7 +975,7 @@ _require_large_file() - # - _require_devices() - { -- available=$($QEMU -M none -device help | \ -+ available=$($QEMU -M none -device help 2> /dev/null | \ - grep ^name | sed -e 's/^name "//' -e 's/".*$//') - for device - do -@@ -987,7 +987,7 @@ _require_devices() - - _require_one_device_of() - { -- available=$($QEMU -M none -device help | \ -+ available=$($QEMU -M none -device help 2> /dev/null | \ - grep ^name | sed -e 's/^name "//' -e 's/".*$//') - for device - do diff --git a/0011-linux-user-fix-compat-with-glibc-2.36-sys-mount.h.patch b/0011-linux-user-fix-compat-with-glibc-2.36-sys-mount.h.patch deleted file mode 100644 index 8718405..0000000 --- a/0011-linux-user-fix-compat-with-glibc-2.36-sys-mount.h.patch +++ /dev/null @@ -1,100 +0,0 @@ -From a7f14aae85022007a4c77e0792a1abb0509a08eb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= -Date: Tue, 2 Aug 2022 12:34:23 -0400 -Subject: [PATCH] linux-user: fix compat with glibc >= 2.36 sys/mount.h -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The latest glibc 2.36 has extended sys/mount.h so that it -defines the FSCONFIG_* enum constants. These are historically -defined in linux/mount.h, and thus if you include both headers -the compiler complains: - -In file included from /usr/include/linux/fs.h:19, - from ../linux-user/syscall.c:98: -/usr/include/linux/mount.h:95:6: error: redeclaration of 'enum fsconfig_command' - 95 | enum fsconfig_command { - | ^~~~~~~~~~~~~~~~ -In file included from ../linux-user/syscall.c:31: -/usr/include/sys/mount.h:189:6: note: originally defined here - 189 | enum fsconfig_command - | ^~~~~~~~~~~~~~~~ -/usr/include/linux/mount.h:96:9: error: redeclaration of enumerator 'FSCONFIG_SET_FLAG' - 96 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */ - | ^~~~~~~~~~~~~~~~~ -/usr/include/sys/mount.h:191:3: note: previous definition of 'FSCONFIG_SET_FLAG' with type 'enum fsconfig_command' - 191 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */ - | ^~~~~~~~~~~~~~~~~ -...snip... - -QEMU doesn't include linux/mount.h, but it does use -linux/fs.h and thus gets linux/mount.h indirectly. - -glibc acknowledges this problem but does not appear to -be intending to fix it in the forseeable future, simply -documenting it as a known incompatibility with no -workaround: - - https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E - https://sourceware.org/glibc/wiki/Synchronizing_Headers - -To address this requires either removing use of sys/mount.h -or linux/fs.h, despite QEMU needing declarations from -both. - -This patch removes linux/fs.h, meaning we have to define -various FS_IOC constants that are now unavailable. - -Signed-off-by: Daniel P. Berrangé ---- - linux-user/syscall.c | 18 ++++++++++++++++++ - meson.build | 2 ++ - 2 files changed, 20 insertions(+) - -diff --git a/linux-user/syscall.c b/linux-user/syscall.c -index b27a6552aa..52d178afe7 100644 ---- a/linux-user/syscall.c -+++ b/linux-user/syscall.c -@@ -95,7 +95,25 @@ - #include - #include - #include -+ -+#ifdef HAVE_SYS_MOUNT_FSCONFIG -+/* -+ * glibc >= 2.36 linux/mount.h conflicts with sys/mount.h, -+ * which in turn prevents use of linux/fs.h. So we have to -+ * define the constants ourselves for now. -+ */ -+#define FS_IOC_GETFLAGS _IOR('f', 1, long) -+#define FS_IOC_SETFLAGS _IOW('f', 2, long) -+#define FS_IOC_GETVERSION _IOR('v', 1, long) -+#define FS_IOC_SETVERSION _IOW('v', 2, long) -+#define FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap) -+#define FS_IOC32_GETFLAGS _IOR('f', 1, int) -+#define FS_IOC32_SETFLAGS _IOW('f', 2, int) -+#define FS_IOC32_GETVERSION _IOR('v', 1, int) -+#define FS_IOC32_SETVERSION _IOW('v', 2, int) -+#else - #include -+#endif - #include - #if defined(CONFIG_FIEMAP) - #include -diff --git a/meson.build b/meson.build -index 294e9a8f32..30a380752c 100644 ---- a/meson.build -+++ b/meson.build -@@ -1963,6 +1963,8 @@ config_host_data.set('HAVE_OPTRESET', - cc.has_header_symbol('getopt.h', 'optreset')) - config_host_data.set('HAVE_IPPROTO_MPTCP', - cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP')) -+config_host_data.set('HAVE_SYS_MOUNT_FSCONFIG', -+ cc.has_header_symbol('sys/mount.h', 'FSCONFIG_SET_FLAG')) - - # has_member - config_host_data.set('HAVE_SIGEV_NOTIFY_THREAD_ID', --- -2.37.1 - diff --git a/qemu.spec b/qemu.spec index ff3c093..432d7c8 100644 --- a/qemu.spec +++ b/qemu.spec @@ -317,11 +317,11 @@ Obsoletes: %{name}-system-unicore32-core <= %{epoch}:%{version}-%{release} %endif # To prevent rpmdev-bumpspec breakage -%global baserelease 9 +%global baserelease 1 Summary: QEMU is a FAST! processor emulator Name: qemu -Version: 7.0.0 +Version: 7.1.0 Release: %{baserelease}%{?rcrel}%{?dist} Epoch: 2 License: GPLv2 and BSD and MIT and CC-BY @@ -342,18 +342,8 @@ Source36: README.tests # Fix SGX assert Patch: 0001-target-i386-the-sgx_epc_get_section-stub-is-reachabl.patch -# Fix virtio-scsi hang (bz #2079347) -Patch: 0002-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch -Patch: 0003-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch -Patch: 0004-virtio-scsi-clean-up-virtio_scsi_handle_event_vq.patch -Patch: 0005-virtio-scsi-clean-up-virtio_scsi_handle_ctrl_vq.patch -Patch: 0006-virtio-scsi-clean-up-virtio_scsi_handle_cmd_vq.patch -Patch: 0007-virtio-scsi-move-request-related-items-from-.h-to-.c.patch -Patch: 0008-Disable-flakey-dbus-display-test.patch -Patch: 0009-Fix-iotests-with-modules-and-qemu-system-s390x.patch +Patch: 0001-tests-Disable-pci_virtio_vga-for-ppc64.patch Patch: 0010-Skip-iotests-entirely.patch -# Not yet upstream, fix glibc 2.36 compat -Patch: 0011-linux-user-fix-compat-with-glibc-2.36-sys-mount.h.patch BuildRequires: meson >= %{meson_version} BuildRequires: zlib-devel @@ -512,6 +502,11 @@ BuildRequires: pcre-static %endif %endif +# vfio-user-server +BuildRequires: pkgconfig(json-c) +BuildRequires: pkgconfig(cmocka) + + # Requires for the Fedora 'qemu' metapackage Requires: %{name}-user = %{epoch}:%{version}-%{release} Requires: %{name}-system-aarch64 = %{epoch}:%{version}-%{release} @@ -519,6 +514,7 @@ Requires: %{name}-system-alpha = %{epoch}:%{version}-%{release} Requires: %{name}-system-arm = %{epoch}:%{version}-%{release} Requires: %{name}-system-avr = %{epoch}:%{version}-%{release} Requires: %{name}-system-cris = %{epoch}:%{version}-%{release} +Requires: %{name}-system-loongarch64 = %{epoch}:%{version}-%{release} Requires: %{name}-system-m68k = %{epoch}:%{version}-%{release} Requires: %{name}-system-microblaze = %{epoch}:%{version}-%{release} Requires: %{name}-system-mips = %{epoch}:%{version}-%{release} @@ -959,6 +955,7 @@ Requires: qemu-user-static-arm Requires: qemu-user-static-cris Requires: qemu-user-static-hexagon Requires: qemu-user-static-hppa +Requires: qemu-user-static-loongarch64 Requires: qemu-user-static-m68k Requires: qemu-user-static-microblaze Requires: qemu-user-static-mips @@ -1012,6 +1009,12 @@ Summary: QEMU user mode emulation of hppa qemu targets static build This package provides the hppa user mode emulation of qemu targets built as static binaries +%package user-static-loongarch64 +Summary: QEMU user mode emulation of loongarch64 qemu targets static build +%description user-static-loongarch64 +This package provides the loongarch64 user mode emulation of qemu targets built as +static binaries + %package user-static-m68k Summary: QEMU user mode emulation of m68k qemu targets static build %description user-static-m68k @@ -1176,6 +1179,20 @@ Requires: %{name}-common = %{epoch}:%{version}-%{release} This package provides the QEMU system emulator for HPPA. +%package system-loongarch64 +Summary: QEMU system emulator for LoongArch (LA64) +Requires: %{name}-system-loongarch64-core = %{epoch}:%{version}-%{release} +%{requires_all_modules} +%description system-loongarch64 +This package provides the QEMU system emulator for Loongson boards. + +%package system-loongarch64-core +Summary: QEMU system emulator for LoongArch (LA64) +Requires: %{name}-common = %{epoch}:%{version}-%{release} +%description system-loongarch64-core +This package provides the QEMU system emulator for Loongson boards. + + %package system-m68k Summary: QEMU system emulator for ColdFire (m68k) Requires: %{name}-system-m68k-core = %{epoch}:%{version}-%{release} @@ -1386,8 +1403,6 @@ Requires: %{name}-common = %{epoch}:%{version}-%{release} This package provides the QEMU system emulator for Xtensa boards. - - %prep %setup -q -n qemu-%{version}%{?rcstr} %autosetup -S git_am @@ -1508,20 +1523,19 @@ mkdir -p %{static_builddir} --disable-user \\\ --disable-vde \\\ --disable-vdi \\\ + --disable-vfio-user-server \\\ --disable-vhost-crypto \\\ --disable-vhost-kernel \\\ --disable-vhost-net \\\ - --disable-vhost-scsi \\\ --disable-vhost-user \\\ --disable-vhost-user-blk-server \\\ --disable-vhost-vdpa \\\ - --disable-vhost-vsock \\\ --disable-virglrenderer \\\ --disable-virtfs \\\ --disable-virtiofsd \\\ --disable-vnc \\\ --disable-vnc-jpeg \\\ - --disable-vnc-png \\\ + --disable-png \\\ --disable-vnc-sasl \\\ --disable-vte \\\ --disable-vvfat \\\ @@ -1589,7 +1603,7 @@ run_configure \ %endif --enable-bpf \ --enable-cap-ng \ - --enable-capstone=auto \ + --enable-capstone \ --enable-coroutine-pool \ --enable-curl \ %if %{have_dbus_display} @@ -1657,9 +1671,8 @@ run_configure \ --enable-vhost-user \ --enable-vhost-user-blk-server \ --enable-vhost-vdpa \ - --enable-vhost-vsock \ --enable-vnc \ - --enable-vnc-png \ + --enable-png \ --enable-vnc-sasl \ %if %{enable_werror} --enable-werror \ @@ -1716,8 +1729,8 @@ run_configure \ %endif --enable-usb-redir \ --enable-vdi \ + --enable-vfio-user-server \ --enable-vhost-crypto \ - --enable-vhost-scsi \ %if %{have_virgl} --enable-virglrenderer \ %endif @@ -2039,6 +2052,11 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %postun user-static-hppa /bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || : +%post user-static-loongarch64 +/bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || : +%postun user-static-loongarch64 +/bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || : + %post user-static-m68k /bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || : %postun user-static-m68k @@ -2190,6 +2208,8 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ # Fedora specific %{_datadir}/applications/qemu.desktop %exclude %{_datadir}/%{name}/qemu-nsis.bmp +%{_libdir}/libvfio-user.so* +%exclude %{_includedir}/vfio-user/ %{_libexecdir}/virtfs-proxy-helper %{_mandir}/man1/virtfs-proxy-helper.1* @@ -2325,6 +2345,7 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %{_bindir}/qemu-cris %{_bindir}/qemu-hppa %{_bindir}/qemu-hexagon +%{_bindir}/qemu-loongarch64 %{_bindir}/qemu-m68k %{_bindir}/qemu-microblaze %{_bindir}/qemu-microblazeel @@ -2358,6 +2379,7 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %{_datadir}/systemtap/tapset/qemu-cris*.stp %{_datadir}/systemtap/tapset/qemu-hppa*.stp %{_datadir}/systemtap/tapset/qemu-hexagon*.stp +%{_datadir}/systemtap/tapset/qemu-loongarch64*.stp %{_datadir}/systemtap/tapset/qemu-m68k*.stp %{_datadir}/systemtap/tapset/qemu-microblaze*.stp %{_datadir}/systemtap/tapset/qemu-mips*.stp @@ -2416,6 +2438,11 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %{_datadir}/systemtap/tapset/qemu-hppa-static.stp %{_exec_prefix}/lib/binfmt.d/qemu-hppa-static.conf +%files user-static-loongarch64 +%{_bindir}/qemu-loongarch64-static +%{_datadir}/systemtap/tapset/qemu-loongarch64-static.stp +%{_exec_prefix}/lib/binfmt.d/qemu-loongarch64-static.conf + %files user-static-m68k %{_bindir}/qemu-m68k-static %{_datadir}/systemtap/tapset/qemu-m68k-static.stp @@ -2574,6 +2601,13 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %{_datadir}/%{name}/hppa-firmware.img +%files system-loongarch64 +%files system-loongarch64-core +%{_bindir}/qemu-system-loongarch64 +%{_datadir}/systemtap/tapset/qemu-system-loongarch64*.stp +%{_mandir}/man1/qemu-system-loongarch64.1* + + %files system-m68k %files system-m68k-core %{_bindir}/qemu-system-m68k @@ -2723,6 +2757,9 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %changelog +* Wed Aug 31 2022 Eduardo Lima (Etrunko) - 7.1.0-1 +- Rebase to qemu 7.1.0 + * Tue Aug 2 2022 Daniel P. Berrangé - 7.0.0-9 - Fix compat with glibc 2.36 headers diff --git a/sources b/sources index 9f53caf..9b00967 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (qemu-7.0.0.tar.xz) = 44ecd10c018a3763e1bc87d1d35b98890d0d5636acd69fe9b5cadf5024d5af6a31684d60cbe1c3370e02986434c1fb0ad99224e0e6f6fe7eda169992508157b1 +SHA512 (qemu-7.1.0.tar.xz) = c60c5ff8ec99b7552e485768908920658fdd8035ff7a6fa370fb6881957dc8b7e5f18ff1a8f49bd6aa22909ede2a7c084986d8244f12074ccd33ebe40a0c411f