* [Qemu-devel] [PATCH v3 1/2] qxl: send interrupt after migration in case ram->int_pending != 0, RHBZ #732949
@ 2011-09-05 5:45 Yonit Halperin
2011-09-05 5:45 ` [Qemu-devel] [PATCH v3 2/2] qxl: s/qxl_set_irq/qxl_update_irq/ Yonit Halperin
0 siblings, 1 reply; 2+ messages in thread
From: Yonit Halperin @ 2011-09-05 5:45 UTC (permalink / raw)
To: qemu-devel; +Cc: Yonit Halperin, kraxel
if qxl_send_events was called from spice server context, and then
migration had completed before a call to pipe_read, the target
guest qxl driver didn't get the interrupt. In addition,
qxl_send_events ignored further interrupts of the same kind, since
ram->int_pending was set. As a result, the guest driver was stacked
or very slow (when the waiting for the interrupt was with timeout).
Signed-off-by: Yonit Halperin <yhalperi@redhat.com>
---
hw/qxl.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/qxl.c b/hw/qxl.c
index b34bccf..de65a40 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -1362,7 +1362,6 @@ static void pipe_read(void *opaque)
qxl_set_irq(d);
}
-/* called from spice server thread context only */
static void qxl_send_events(PCIQXLDevice *d, uint32_t events)
{
uint32_t old_pending;
@@ -1463,7 +1462,14 @@ static void qxl_vm_change_state_handler(void *opaque, int running, int reason)
PCIQXLDevice *qxl = opaque;
qemu_spice_vm_change_state_handler(&qxl->ssd, running, reason);
- if (!running && qxl->mode == QXL_MODE_NATIVE) {
+ if (running) {
+ /*
+ * if qxl_send_events was called from spice server context before
+ * migration ended, qxl_set_irq for these events might not have been
+ * called
+ */
+ qxl_set_irq(qxl);
+ } else if (qxl->mode == QXL_MODE_NATIVE) {
/* dirty all vram (which holds surfaces) and devram (primary surface)
* to make sure they are saved */
/* FIXME #1: should go out during "live" stage */
--
1.7.4.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Qemu-devel] [PATCH v3 2/2] qxl: s/qxl_set_irq/qxl_update_irq/
2011-09-05 5:45 [Qemu-devel] [PATCH v3 1/2] qxl: send interrupt after migration in case ram->int_pending != 0, RHBZ #732949 Yonit Halperin
@ 2011-09-05 5:45 ` Yonit Halperin
0 siblings, 0 replies; 2+ messages in thread
From: Yonit Halperin @ 2011-09-05 5:45 UTC (permalink / raw)
To: qemu-devel; +Cc: Yonit Halperin, kraxel
Signed-off-by: Yonit Halperin <yhalperi@redhat.com>
---
hw/qxl.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/hw/qxl.c b/hw/qxl.c
index de65a40..f00b5d3 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -808,7 +808,7 @@ static void qxl_exit_vga_mode(PCIQXLDevice *d)
qxl_destroy_primary(d, QXL_SYNC);
}
-static void qxl_set_irq(PCIQXLDevice *d)
+static void qxl_update_irq(PCIQXLDevice *d)
{
uint32_t pending = le32_to_cpu(d->ram->int_pending);
uint32_t mask = le32_to_cpu(d->ram->int_mask);
@@ -1209,7 +1209,7 @@ async_common:
qemu_spice_wakeup(&d->ssd);
break;
case QXL_IO_UPDATE_IRQ:
- qxl_set_irq(d);
+ qxl_update_irq(d);
break;
case QXL_IO_NOTIFY_OOM:
if (!SPICE_RING_IS_EMPTY(&d->ram->release_ring)) {
@@ -1359,7 +1359,7 @@ static void pipe_read(void *opaque)
do {
len = read(d->pipe[0], &dummy, sizeof(dummy));
} while (len == sizeof(dummy));
- qxl_set_irq(d);
+ qxl_update_irq(d);
}
static void qxl_send_events(PCIQXLDevice *d, uint32_t events)
@@ -1373,7 +1373,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events)
return;
}
if (pthread_self() == d->main) {
- qxl_set_irq(d);
+ qxl_update_irq(d);
} else {
if (write(d->pipe[1], d, 1) != 1) {
dprint(d, 1, "%s: write to pipe failed\n", __FUNCTION__);
@@ -1465,10 +1465,10 @@ static void qxl_vm_change_state_handler(void *opaque, int running, int reason)
if (running) {
/*
* if qxl_send_events was called from spice server context before
- * migration ended, qxl_set_irq for these events might not have been
+ * migration ended, qxl_update_irq for these events might not have been
* called
*/
- qxl_set_irq(qxl);
+ qxl_update_irq(qxl);
} else if (qxl->mode == QXL_MODE_NATIVE) {
/* dirty all vram (which holds surfaces) and devram (primary surface)
* to make sure they are saved */
--
1.7.4.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-09-05 5:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-05 5:45 [Qemu-devel] [PATCH v3 1/2] qxl: send interrupt after migration in case ram->int_pending != 0, RHBZ #732949 Yonit Halperin
2011-09-05 5:45 ` [Qemu-devel] [PATCH v3 2/2] qxl: s/qxl_set_irq/qxl_update_irq/ Yonit Halperin
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).