From 64c339471e696fad49171d7e481bbf9872981b20 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Nov 01 2012 10:46:02 +0000 Subject: Sync spice patches with upstream, minor bugfixes and set the qxl pci device revision to 4 by default, so that guests know they can use the new features --- diff --git a/0514-hw-qxl-exit-on-failure-to-register-qxl-interface.patch b/0514-hw-qxl-exit-on-failure-to-register-qxl-interface.patch new file mode 100644 index 0000000..a89db68 --- /dev/null +++ b/0514-hw-qxl-exit-on-failure-to-register-qxl-interface.patch @@ -0,0 +1,35 @@ +From a0f199b76debf55933c2b3b917c13c86784e3be0 Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Wed, 3 Oct 2012 20:13:58 +0200 +Subject: [PATCH 514/647] hw/qxl: exit on failure to register qxl interface + +This prevents a segfault later on when the device reset handler +tries to access a NULL ssd.worker since interface_attach_worker has +not been called. + +Signed-off-by: Alon Levy +Signed-off-by: Gerd Hoffmann +--- + hw/qxl.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/hw/qxl.c b/hw/qxl.c +index 9389752..a2dd020 100644 +--- a/hw/qxl.c ++++ b/hw/qxl.c +@@ -2035,7 +2035,11 @@ static int qxl_init_common(PCIQXLDevice *qxl) + + qxl->ssd.qxl.base.sif = &qxl_interface.base; + qxl->ssd.qxl.id = qxl->id; +- qemu_spice_add_interface(&qxl->ssd.qxl.base); ++ if (qemu_spice_add_interface(&qxl->ssd.qxl.base) != 0) { ++ error_report("qxl interface %d.%d not supported by spice-server\n", ++ SPICE_INTERFACE_QXL_MAJOR, SPICE_INTERFACE_QXL_MINOR); ++ return -1; ++ } + qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); + + init_pipe_signaling(qxl); +-- +1.7.12.1 + diff --git a/0515-hw-qxl-fix-condition-for-exiting-guest_bug.patch b/0515-hw-qxl-fix-condition-for-exiting-guest_bug.patch new file mode 100644 index 0000000..945b5df --- /dev/null +++ b/0515-hw-qxl-fix-condition-for-exiting-guest_bug.patch @@ -0,0 +1,29 @@ +From 73a691f6799e05afda0be01c1cd5e2f6914e8773 Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Tue, 2 Oct 2012 11:39:14 +0200 +Subject: [PATCH 515/647] hw/qxl: fix condition for exiting guest_bug + +Reported and suggested by Paolo Bonzini, thanks. + +Signed-off-by: Alon Levy +Signed-off-by: Gerd Hoffmann +--- + hw/qxl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/qxl.c b/hw/qxl.c +index a2dd020..e3a164a 100644 +--- a/hw/qxl.c ++++ b/hw/qxl.c +@@ -1461,7 +1461,7 @@ static void ioport_write(void *opaque, target_phys_addr_t addr, + qxl_async_io async = QXL_SYNC; + uint32_t orig_io_port = io_port; + +- if (d->guest_bug && !io_port == QXL_IO_RESET) { ++ if (d->guest_bug && io_port != QXL_IO_RESET) { + return; + } + +-- +1.7.12.1 + diff --git a/0516-hw-qxl-qxl_dirty_surfaces-use-uintptr_t.patch b/0516-hw-qxl-qxl_dirty_surfaces-use-uintptr_t.patch new file mode 100644 index 0000000..e285559 --- /dev/null +++ b/0516-hw-qxl-qxl_dirty_surfaces-use-uintptr_t.patch @@ -0,0 +1,38 @@ +From d59685f5667e25d0805bde93c068052afb30efda Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Sun, 7 Oct 2012 17:03:35 +0200 +Subject: [PATCH 516/647] hw/qxl: qxl_dirty_surfaces: use uintptr_t + +As suggested by Paolo Bonzini, to avoid possible integer overflow issues. + +Signed-off-by: Alon Levy +Signed-off-by: Gerd Hoffmann +--- + hw/qxl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/qxl.c b/hw/qxl.c +index e3a164a..5a9bf1c 100644 +--- a/hw/qxl.c ++++ b/hw/qxl.c +@@ -1803,7 +1803,7 @@ static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) + + static void qxl_dirty_surfaces(PCIQXLDevice *qxl) + { +- intptr_t vram_start; ++ uintptr_t vram_start; + int i; + + if (qxl->mode != QXL_MODE_NATIVE && qxl->mode != QXL_MODE_COMPAT) { +@@ -1814,7 +1814,7 @@ static void qxl_dirty_surfaces(PCIQXLDevice *qxl) + qxl_set_dirty(&qxl->vga.vram, qxl->shadow_rom.draw_area_offset, + qxl->shadow_rom.surface0_area_size); + +- vram_start = (intptr_t)memory_region_get_ram_ptr(&qxl->vram_bar); ++ vram_start = (uintptr_t)memory_region_get_ram_ptr(&qxl->vram_bar); + + /* dirty the off-screen surfaces */ + for (i = 0; i < qxl->ssd.num_surfaces; i++) { +-- +1.7.12.1 + diff --git a/0517-spice-raise-requirement-to-0.12.patch b/0517-spice-raise-requirement-to-0.12.patch new file mode 100644 index 0000000..4ffb529 --- /dev/null +++ b/0517-spice-raise-requirement-to-0.12.patch @@ -0,0 +1,465 @@ +From be955ad2a04cb7be9b5f34cd0e43d29f34113c6e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 24 Sep 2012 10:23:40 +0200 +Subject: [PATCH 517/647] spice: raise requirement to 0.12 + +With the next qemu version (1.3) we are going to bump the qxl device +revision to 4. The new features available require a recent spice-server +version, so raise up the bar. Otherwise we would end up with different +qxl revisions depending on the spice-server version installed, which +would be a major PITA when it comes to compat properties. + +Clear out a big bunch of #ifdefs which are not needed any more. + +Signed-off-by: Gerd Hoffmann +--- + configure | 18 ++---------------- + hw/qxl.c | 30 ------------------------------ + ui/spice-core.c | 51 ++------------------------------------------------- + ui/spice-display.c | 38 -------------------------------------- + ui/spice-display.h | 5 ----- + 5 files changed, 4 insertions(+), 138 deletions(-) + +diff --git a/configure b/configure +index ebe8b1c..b843d20 100755 +--- a/configure ++++ b/configure +@@ -2705,20 +2705,14 @@ int main(void) { spice_server_new(); return 0; } + EOF + spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) + spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) +- if $pkg_config --atleast-version=0.8.2 spice-server >/dev/null 2>&1 && \ +- $pkg_config --atleast-version=0.8.1 spice-protocol > /dev/null 2>&1 && \ ++ if $pkg_config --atleast-version=0.12.0 spice-server >/dev/null 2>&1 && \ ++ $pkg_config --atleast-version=0.12.2 spice-protocol > /dev/null 2>&1 && \ + compile_prog "$spice_cflags" "$spice_libs" ; then + spice="yes" + libs_softmmu="$libs_softmmu $spice_libs" + QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" + spice_protocol_version=$($pkg_config --modversion spice-protocol) + spice_server_version=$($pkg_config --modversion spice-server) +- if $pkg_config --atleast-version=0.12.0 spice-protocol >/dev/null 2>&1; then +- spice_qxl_io_monitors_config_async="yes" +- fi +- if $pkg_config --atleast-version=0.12.2 spice-protocol > /dev/null 2>&1; then +- spice_qxl_client_monitors_config="yes" +- fi + else + if test "$spice" = "yes" ; then + feature_not_found "spice" +@@ -3456,14 +3450,6 @@ if test "$spice" = "yes" ; then + echo "CONFIG_SPICE=y" >> $config_host_mak + fi + +-if test "$spice_qxl_io_monitors_config_async" = "yes" ; then +- echo "CONFIG_QXL_IO_MONITORS_CONFIG_ASYNC=y" >> $config_host_mak +-fi +- +-if test "$spice_qxl_client_monitors_config" = "yes" ; then +- echo "CONFIG_QXL_CLIENT_MONITORS_CONFIG=y" >> $config_host_mak +-fi +- + if test "$smartcard" = "yes" ; then + echo "CONFIG_SMARTCARD=y" >> $config_host_mak + fi +diff --git a/hw/qxl.c b/hw/qxl.c +index 5a9bf1c..255fdf4 100644 +--- a/hw/qxl.c ++++ b/hw/qxl.c +@@ -29,11 +29,6 @@ + + #include "qxl.h" + +-#ifndef CONFIG_QXL_IO_MONITORS_CONFIG_ASYNC +-/* spice-protocol is too old, add missing definitions */ +-#define QXL_IO_MONITORS_CONFIG_ASYNC (QXL_IO_FLUSH_RELEASE + 1) +-#endif +- + /* + * NOTE: SPICE_RING_PROD_ITEM accesses memory on the pci bar and as + * such can be changed by the guest, so to avoid a guest trigerrable +@@ -262,9 +257,6 @@ static void qxl_spice_destroy_surfaces(PCIQXLDevice *qxl, qxl_async_io async) + static void qxl_spice_monitors_config_async(PCIQXLDevice *qxl, int replay) + { + trace_qxl_spice_monitors_config(qxl->id); +-/* 0x000b01 == 0.11.1 */ +-#if SPICE_SERVER_VERSION >= 0x000b01 && \ +- defined(CONFIG_QXL_IO_MONITORS_CONFIG_ASYNC) + if (replay) { + /* + * don't use QXL_COOKIE_TYPE_IO: +@@ -286,10 +278,6 @@ static void qxl_spice_monitors_config_async(PCIQXLDevice *qxl, int replay) + (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_IO, + QXL_IO_MONITORS_CONFIG_ASYNC)); + } +-#else +- fprintf(stderr, "qxl: too old spice-protocol/spice-server for " +- "QXL_IO_MONITORS_CONFIG_ASYNC\n"); +-#endif + } + + void qxl_spice_reset_image_cache(PCIQXLDevice *qxl) +@@ -948,8 +936,6 @@ static void interface_async_complete(QXLInstance *sin, uint64_t cookie_token) + } + } + +-#if SPICE_SERVER_VERSION >= 0x000b04 +- + /* called from spice server thread context only */ + static void interface_set_client_capabilities(QXLInstance *sin, + uint8_t client_present, +@@ -971,11 +957,6 @@ static void interface_set_client_capabilities(QXLInstance *sin, + qxl_send_events(qxl, QXL_INTERRUPT_CLIENT); + } + +-#endif +- +-#if defined(CONFIG_QXL_CLIENT_MONITORS_CONFIG) \ +- && SPICE_SERVER_VERSION >= 0x000b05 +- + static uint32_t qxl_crc32(const uint8_t *p, unsigned len) + { + /* +@@ -1044,7 +1025,6 @@ static int interface_client_monitors_config(QXLInstance *sin, + qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG); + return 1; + } +-#endif + + static const QXLInterface qxl_interface = { + .base.type = SPICE_INTERFACE_QXL, +@@ -1067,13 +1047,8 @@ static const QXLInterface qxl_interface = { + .flush_resources = interface_flush_resources, + .async_complete = interface_async_complete, + .update_area_complete = interface_update_area_complete, +-#if SPICE_SERVER_VERSION >= 0x000b04 + .set_client_capabilities = interface_set_client_capabilities, +-#endif +-#if SPICE_SERVER_VERSION >= 0x000b05 && \ +- defined(CONFIG_QXL_CLIENT_MONITORS_CONFIG) + .client_monitors_config = interface_client_monitors_config, +-#endif + }; + + static void qxl_enter_vga_mode(PCIQXLDevice *d) +@@ -1846,7 +1821,6 @@ static void qxl_vm_change_state_handler(void *opaque, int running, + RunState state) + { + PCIQXLDevice *qxl = opaque; +- qemu_spice_vm_change_state_handler(&qxl->ssd, running, state); + + if (running) { + /* +@@ -1963,14 +1937,10 @@ static int qxl_init_common(PCIQXLDevice *qxl) + pci_device_rev = QXL_REVISION_STABLE_V10; + io_size = 32; /* PCI region size must be pow2 */ + break; +-/* 0x000b01 == 0.11.1 */ +-#if SPICE_SERVER_VERSION >= 0x000b01 && \ +- defined(CONFIG_QXL_IO_MONITORS_CONFIG_ASYNC) + case 4: /* qxl-4 */ + pci_device_rev = QXL_REVISION_STABLE_V12; + io_size = msb_mask(QXL_IO_RANGE_SIZE * 2 - 1); + break; +-#endif + default: + error_report("Invalid revision %d for qxl device (max %d)", + qxl->revision, QXL_DEFAULT_REVISION); +diff --git a/ui/spice-core.c b/ui/spice-core.c +index ba0d0bd..5147365 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -223,7 +223,6 @@ static void channel_event(int event, SpiceChannelEventInfo *info) + client = qdict_new(); + server = qdict_new(); + +-#ifdef SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT + if (info->flags & SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT) { + add_addr_info(client, (struct sockaddr *)&info->paddr_ext, + info->plen_ext); +@@ -232,12 +231,7 @@ static void channel_event(int event, SpiceChannelEventInfo *info) + } else { + error_report("spice: %s, extended address is expected", + __func__); +-#endif +- add_addr_info(client, &info->paddr, info->plen); +- add_addr_info(server, &info->laddr, info->llen); +-#ifdef SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT + } +-#endif + + if (event == SPICE_CHANNEL_EVENT_INITIALIZED) { + qdict_put(server, "auth", qstring_from_str(auth)); +@@ -276,7 +270,6 @@ static SpiceCoreInterface core_interface = { + .channel_event = channel_event, + }; + +-#ifdef SPICE_INTERFACE_MIGRATION + typedef struct SpiceMigration { + SpiceMigrateInstance sin; + struct { +@@ -313,7 +306,6 @@ static void migrate_end_complete_cb(SpiceMigrateInstance *sin) + monitor_protocol_event(QEVENT_SPICE_MIGRATE_COMPLETED, NULL); + spice_migration_completed = true; + } +-#endif + + /* config string parsing */ + +@@ -393,17 +385,13 @@ static SpiceChannelList *qmp_query_spice_channels(void) + chan = g_malloc0(sizeof(*chan)); + chan->value = g_malloc0(sizeof(*chan->value)); + +-#ifdef SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT + if (item->info->flags & SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT) { + paddr = (struct sockaddr *)&item->info->paddr_ext; + plen = item->info->plen_ext; + } else { +-#endif + paddr = &item->info->paddr; + plen = item->info->plen; +-#ifdef SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT + } +-#endif + + getnameinfo(paddr, plen, + host, sizeof(host), port, sizeof(port), +@@ -473,13 +461,10 @@ SpiceInfo *qmp_query_spice(Error **errp) + info->tls_port = tls_port; + } + +-#if SPICE_SERVER_VERSION >= 0x000a03 /* 0.10.3 */ + info->mouse_mode = spice_server_is_server_mouse(spice_server) ? + SPICE_QUERY_MOUSE_MODE_SERVER : + SPICE_QUERY_MOUSE_MODE_CLIENT; +-#else +- info->mouse_mode = SPICE_QUERY_MOUSE_MODE_UNKNOWN; +-#endif ++ + /* for compatibility with the original command */ + info->has_channels = true; + info->channels = qmp_query_spice_channels(); +@@ -492,19 +477,11 @@ static void migration_state_notifier(Notifier *notifier, void *data) + MigrationState *s = data; + + if (migration_is_active(s)) { +-#ifdef SPICE_INTERFACE_MIGRATION + spice_server_migrate_start(spice_server); +-#endif + } else if (migration_has_finished(s)) { +-#ifndef SPICE_INTERFACE_MIGRATION +- spice_server_migrate_switch(spice_server); +- monitor_protocol_event(QEVENT_SPICE_MIGRATE_COMPLETED, NULL); +- spice_migration_completed = true; +-#else + spice_server_migrate_end(spice_server, true); + } else if (migration_has_failed(s)) { + spice_server_migrate_end(spice_server, false); +-#endif + } + } + +@@ -513,16 +490,11 @@ int qemu_spice_migrate_info(const char *hostname, int port, int tls_port, + MonitorCompletion *cb, void *opaque) + { + int ret; +-#ifdef SPICE_INTERFACE_MIGRATION ++ + spice_migrate.connect_complete.cb = cb; + spice_migrate.connect_complete.opaque = opaque; + ret = spice_server_migrate_connect(spice_server, hostname, + port, tls_port, subject); +-#else +- ret = spice_server_migrate_info(spice_server, hostname, +- port, tls_port, subject); +- cb(opaque, NULL); +-#endif + return ret; + } + +@@ -561,7 +533,6 @@ static int add_channel(const char *name, const char *value, void *opaque) + static void vm_change_state_handler(void *opaque, int running, + RunState state) + { +-#if SPICE_SERVER_VERSION >= 0x000b02 /* 0.11.2 */ + if (running) { + qemu_spice_display_start(); + spice_server_vm_start(spice_server); +@@ -569,7 +540,6 @@ static void vm_change_state_handler(void *opaque, int running, + spice_server_vm_stop(spice_server); + qemu_spice_display_stop(); + } +-#endif + } + + void qemu_spice_init(void) +@@ -585,9 +555,7 @@ void qemu_spice_init(void) + int port, tls_port, len, addr_flags; + spice_image_compression_t compression; + spice_wan_compression_t wan_compr; +-#if SPICE_SERVER_VERSION >= 0x000b02 /* 0.11.2 */ + bool seamless_migration; +-#endif + + qemu_thread_get_self(&me); + +@@ -672,16 +640,11 @@ void qemu_spice_init(void) + spice_server_set_ticket(spice_server, password, 0, 0, 0); + } + if (qemu_opt_get_bool(opts, "sasl", 0)) { +-#if SPICE_SERVER_VERSION >= 0x000900 /* 0.9.0 */ + if (spice_server_set_sasl_appname(spice_server, "qemu") == -1 || + spice_server_set_sasl(spice_server, 1) == -1) { + error_report("spice: failed to enable sasl"); + exit(1); + } +-#else +- error_report("spice: sasl is not available (spice >= 0.9 required)"); +- exit(1); +-#endif + } + if (qemu_opt_get_bool(opts, "disable-ticketing", 0)) { + auth = "none"; +@@ -726,15 +689,11 @@ void qemu_spice_init(void) + + qemu_opt_foreach(opts, add_channel, &tls_port, 0); + +-#if SPICE_SERVER_VERSION >= 0x000a02 /* 0.10.2 */ + spice_server_set_name(spice_server, qemu_name); + spice_server_set_uuid(spice_server, qemu_uuid); +-#endif + +-#if SPICE_SERVER_VERSION >= 0x000b02 /* 0.11.2 */ + seamless_migration = qemu_opt_get_bool(opts, "seamless-migration", 0); + spice_server_set_seamless_migration(spice_server, seamless_migration); +-#endif + if (0 != spice_server_init(spice_server, &core_interface)) { + error_report("failed to initialize spice server"); + exit(1); +@@ -743,11 +702,9 @@ void qemu_spice_init(void) + + migration_state.notify = migration_state_notifier; + add_migration_state_change_notifier(&migration_state); +-#ifdef SPICE_INTERFACE_MIGRATION + spice_migrate.sin.base.sif = &migrate_interface.base; + spice_migrate.connect_complete.cb = NULL; + qemu_spice_add_interface(&spice_migrate.sin.base); +-#endif + + qemu_spice_input_init(); + qemu_spice_audio_init(); +@@ -815,15 +772,11 @@ int qemu_spice_set_pw_expire(time_t expires) + + int qemu_spice_display_add_client(int csock, int skipauth, int tls) + { +-#if SPICE_SERVER_VERSION >= 0x000a01 + if (tls) { + return spice_server_add_ssl_client(spice_server, csock, skipauth); + } else { + return spice_server_add_client(spice_server, csock, skipauth); + } +-#else +- return -1; +-#endif + } + + static void spice_register_config(void) +diff --git a/ui/spice-display.c b/ui/spice-display.c +index d062765..422e7c4 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -126,21 +126,6 @@ void qemu_spice_wakeup(SimpleSpiceDisplay *ssd) + ssd->worker->wakeup(ssd->worker); + } + +-#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ +-static void qemu_spice_start(SimpleSpiceDisplay *ssd) +-{ +- trace_qemu_spice_start(ssd->qxl.id); +- ssd->worker->start(ssd->worker); +-} +- +-static void qemu_spice_stop(SimpleSpiceDisplay *ssd) +-{ +- trace_qemu_spice_stop(ssd->qxl.id); +- ssd->worker->stop(ssd->worker); +-} +- +-#else +- + static int spice_display_is_running; + + void qemu_spice_display_start(void) +@@ -153,15 +138,9 @@ void qemu_spice_display_stop(void) + spice_display_is_running = false; + } + +-#endif +- + int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd) + { +-#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ +- return ssd->running; +-#else + return spice_display_is_running; +-#endif + } + + static void qemu_spice_create_one_update(SimpleSpiceDisplay *ssd, +@@ -364,22 +343,6 @@ void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd) + qemu_spice_destroy_primary_surface(ssd, 0, QXL_SYNC); + } + +-void qemu_spice_vm_change_state_handler(void *opaque, int running, +- RunState state) +-{ +-#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ +- SimpleSpiceDisplay *ssd = opaque; +- +- if (running) { +- ssd->running = true; +- qemu_spice_start(ssd); +- } else { +- qemu_spice_stop(ssd); +- ssd->running = false; +- } +-#endif +-} +- + void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds) + { + ssd->ds = ds; +@@ -623,7 +586,6 @@ void qemu_spice_display_init(DisplayState *ds) + qemu_spice_add_interface(&sdpy.qxl.base); + assert(sdpy.worker); + +- qemu_add_vm_change_state_handler(qemu_spice_vm_change_state_handler, &sdpy); + qemu_spice_create_host_memslot(&sdpy); + qemu_spice_create_host_primary(&sdpy); + } +diff --git a/ui/spice-display.h b/ui/spice-display.h +index dea41c1..d766927 100644 +--- a/ui/spice-display.h ++++ b/ui/spice-display.h +@@ -83,9 +83,6 @@ struct SimpleSpiceDisplay { + + QXLRect dirty; + int notify; +-#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ +- int running; +-#endif + + /* + * All struct members below this comment can be accessed from +@@ -133,8 +130,6 @@ void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id, + void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd, + uint32_t id, qxl_async_io async); + void qemu_spice_wakeup(SimpleSpiceDisplay *ssd); +-#if SPICE_SERVER_VERSION >= 0x000b02 /* before 0.11.2 */ + void qemu_spice_display_start(void); + void qemu_spice_display_stop(void); +-#endif + int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd); +-- +1.7.12.1 + diff --git a/0518-qxl-set-default-revision-to-4.patch b/0518-qxl-set-default-revision-to-4.patch new file mode 100644 index 0000000..c2eab7b --- /dev/null +++ b/0518-qxl-set-default-revision-to-4.patch @@ -0,0 +1,33 @@ +From 7b1c2ac1342371bf43035b2ee1b02d9f554da49d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Nov 2012 11:06:54 +0100 +Subject: [PATCH 518/647] qxl: set default revision to 4 + +Set qxl pci revision to 4 so guests know spice-server 0.12 features +are available. + +Signed-off-by: Gerd Hoffmann +--- + hw/qxl.h | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/hw/qxl.h b/hw/qxl.h +index 5553824..e583cfb 100644 +--- a/hw/qxl.h ++++ b/hw/qxl.h +@@ -129,12 +129,7 @@ typedef struct PCIQXLDevice { + } \ + } while (0) + +-#if 0 +-/* spice-server 0.12 is still in development */ + #define QXL_DEFAULT_REVISION QXL_REVISION_STABLE_V12 +-#else +-#define QXL_DEFAULT_REVISION QXL_REVISION_STABLE_V10 +-#endif + + /* qxl.c */ + void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL phys, int group_id); +-- +1.7.12.1 + diff --git a/qemu.spec b/qemu.spec index ae8ae6b..8773079 100644 --- a/qemu.spec +++ b/qemu.spec @@ -109,7 +109,7 @@ Summary: QEMU is a FAST! processor emulator Name: qemu Version: 1.2.0 -Release: 18%{?dist} +Release: 19%{?dist} # Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped Epoch: 2 License: GPLv2+ and LGPLv2+ and BSD @@ -423,6 +423,11 @@ Patch0510: 0510-hw-qxl-support-client-monitor-configuration-via-devi.patch Patch0511: 0511-qxl-always-update-displaysurface-on-resize.patch Patch0512: 0512-qxl-update_area_io-cleanup-invalid-parameters-handli.patch Patch0513: 0513-qxl-fix-range-check-for-rev3-io-commands.patch +Patch0514: 0514-hw-qxl-exit-on-failure-to-register-qxl-interface.patch +Patch0515: 0515-hw-qxl-fix-condition-for-exiting-guest_bug.patch +Patch0516: 0516-hw-qxl-qxl_dirty_surfaces-use-uintptr_t.patch +Patch0517: 0517-spice-raise-requirement-to-0.12.patch +Patch0518: 0518-qxl-set-default-revision-to-4.patch # usb-redir live-migration and misc bits, will be in before 1.3.0 Patch0600: 0600-usb-redir-Convert-to-new-libusbredirparser-0.5-API.patch @@ -1166,6 +1171,11 @@ such as kvm_stat. %patch0511 -p1 %patch0512 -p1 %patch0513 -p1 +%patch0514 -p1 +%patch0515 -p1 +%patch0516 -p1 +%patch0517 -p1 +%patch0518 -p1 %patch0600 -p1 %patch0601 -p1 @@ -1800,6 +1810,11 @@ fi %{_mandir}/man1/qemu-img.1* %changelog +* Thu Nov 1 2012 Hans de Goede - 2:1.2.0-19 +- Sync spice patches with upstream, minor bugfixes and set the qxl pci + device revision to 4 by default, so that guests know they can use + the new features + * Tue Oct 30 2012 Cole Robinson - 2:1.2.0-18 - Fix loading arm initrd if kernel is very large (bz #862766) - Don't use reserved word 'function' in systemtap files (bz #870972)