diff options
author | Anthony Liguori <aliguori@amazon.com> | 2013-11-05 08:39:49 -0800 |
---|---|---|
committer | Anthony Liguori <aliguori@amazon.com> | 2013-11-05 08:39:49 -0800 |
commit | 29f8f3835f63fb7c55c7bb56d26165ade793fc49 (patch) | |
tree | 237c924e7d7f7244bea7d0283301e8ab3cfb37d3 | |
parent | f772a83113a9b692b94dc48b4f282224a2c6ccf2 (diff) | |
parent | 4a46c99c8118586f19894fe66fc6e353f159d4d9 (diff) | |
download | qemu-29f8f3835f63fb7c55c7bb56d26165ade793fc49.tar.gz |
Merge remote-tracking branch 'spice/spice.v76' into staging
# By Gerd Hoffmann
# Via Gerd Hoffmann
* spice/spice.v76:
qxl: replace pipe signaling with bottom half
Message-id: 1383656322-24150-1-git-send-email-kraxel@redhat.com
Signed-off-by: Anthony Liguori <aliguori@amazon.com>
-rw-r--r-- | hw/display/qxl.c | 33 | ||||
-rw-r--r-- | hw/display/qxl.h | 3 |
2 files changed, 4 insertions, 32 deletions
diff --git a/hw/display/qxl.c b/hw/display/qxl.c index 5977d526d4..efdefd6622 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -1701,15 +1701,9 @@ static const MemoryRegionOps qxl_io_ops = { }, }; -static void pipe_read(void *opaque) +static void qxl_update_irq_bh(void *opaque) { PCIQXLDevice *d = opaque; - char dummy; - int len; - - do { - len = read(d->pipe[0], &dummy, sizeof(dummy)); - } while (len == sizeof(dummy)); qxl_update_irq(d); } @@ -1730,28 +1724,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events) if ((old_pending & le_events) == le_events) { return; } - if (qemu_thread_is_self(&d->main)) { - qxl_update_irq(d); - } else { - if (write(d->pipe[1], d, 1) != 1) { - dprint(d, 1, "%s: write to pipe failed\n", __func__); - } - } -} - -static void init_pipe_signaling(PCIQXLDevice *d) -{ - if (pipe(d->pipe) < 0) { - fprintf(stderr, "%s:%s: qxl pipe creation failed\n", - __FILE__, __func__); - exit(1); - } - fcntl(d->pipe[0], F_SETFL, O_NONBLOCK); - fcntl(d->pipe[1], F_SETFL, O_NONBLOCK); - fcntl(d->pipe[0], F_SETOWN, getpid()); - - qemu_thread_get_self(&d->main); - qemu_set_fd_handler(d->pipe[0], pipe_read, NULL, d); + qemu_bh_schedule(d->update_irq); } /* graphics console */ @@ -2044,7 +2017,7 @@ static int qxl_init_common(PCIQXLDevice *qxl) } qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); - init_pipe_signaling(qxl); + qxl->update_irq = qemu_bh_new(qxl_update_irq_bh, qxl); qxl_reset_state(qxl); qxl->update_area_bh = qemu_bh_new(qxl_render_update_area_bh, qxl); diff --git a/hw/display/qxl.h b/hw/display/qxl.h index 84f0182383..c5de3d7075 100644 --- a/hw/display/qxl.h +++ b/hw/display/qxl.h @@ -81,8 +81,7 @@ typedef struct PCIQXLDevice { QemuMutex track_lock; /* thread signaling */ - QemuThread main; - int pipe[2]; + QEMUBH *update_irq; /* ram pci bar */ QXLRam *ram; |