From d70d6b31091ab522ce793a52559e3dd9f9913b32 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Tue, 20 Dec 2011 13:05:18 +0200 Subject: [PATCH 1/9] qemu-options.hx: fix tls-channel help text Remove the default compiled out tunnel channel, add the always available cursor channel. Optimally the man page would depend on compiled in options, but that's harder to do. RHBZ: 688586 Acked-by: Gerd Hoffmann Signed-off-by: Alon Levy Signed-off-by: Stefan Hajnoczi --- qemu-options.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qemu-options.hx b/qemu-options.hx index a60191f6a4..3c3bda8896 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -857,8 +857,8 @@ The x509 file names can also be configured individually. @item tls-ciphers= Specify which ciphers to use. -@item tls-channel=[main|display|inputs|record|playback|tunnel] -@item plaintext-channel=[main|display|inputs|record|playback|tunnel] +@item tls-channel=[main|display|cursor|inputs|record|playback] +@item plaintext-channel=[main|display|cursor|inputs|record|playback] Force specific channel to be used with or without TLS encryption. The options can be specified multiple times to configure multiple channels. The special name "default" can be used to set the default From be62a2ebab29eef7dc66c112d60271890ebbbee2 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 20 Dec 2011 18:13:08 +0100 Subject: [PATCH 2/9] Strip trailing '\n' from error_report()'s first argument (again) Commit 6daf194d got rid of them, but Hans and Gerd added some more lately. Tracked down with this Coccinelle semantic patch: @r@ expression fmt; position p; @@ error_report(fmt, ...)@p @script:python@ fmt << r.fmt; p << r.p; @@ if "\\n" in str(fmt): print "%s:%s:%s:%s" % (p[0].file, p[0].line, p[0].column, fmt) Signed-off-by: Markus Armbruster --- hw/usb-bus.c | 12 ++++++------ usb-redir.c | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/usb-bus.c b/hw/usb-bus.c index 8203390929..bd4afa7e2b 100644 --- a/hw/usb-bus.c +++ b/hw/usb-bus.c @@ -137,7 +137,7 @@ USBDevice *usb_create(USBBus *bus, const char *name) bus = usb_bus_find(-1); if (!bus) return NULL; - error_report("%s: no bus specified, using \"%s\" for \"%s\"\n", + error_report("%s: no bus specified, using \"%s\" for \"%s\"", __FUNCTION__, bus->qbus.name, name); } #endif @@ -152,12 +152,12 @@ USBDevice *usb_create_simple(USBBus *bus, const char *name) int rc; if (!dev) { - error_report("Failed to create USB device '%s'\n", name); + error_report("Failed to create USB device '%s'", name); return NULL; } rc = qdev_init(&dev->qdev); if (rc < 0) { - error_report("Failed to initialize USB device '%s'\n", name); + error_report("Failed to initialize USB device '%s'", name); return NULL; } return dev; @@ -244,7 +244,7 @@ int usb_claim_port(USBDevice *dev) } } if (port == NULL) { - error_report("Error: usb port %s (bus %s) not found (in use?)\n", + error_report("Error: usb port %s (bus %s) not found (in use?)", dev->port_path, bus->qbus.name); return -1; } @@ -255,7 +255,7 @@ int usb_claim_port(USBDevice *dev) } if (bus->nfree == 0) { error_report("Error: tried to attach usb device %s to a bus " - "with no free ports\n", dev->product_desc); + "with no free ports", dev->product_desc); return -1; } port = QTAILQ_FIRST(&bus->free); @@ -302,7 +302,7 @@ int usb_device_attach(USBDevice *dev) if (!(port->speedmask & dev->speedmask)) { error_report("Warning: speed mismatch trying to attach " - "usb device %s to bus %s\n", + "usb device %s to bus %s", dev->product_desc, bus->qbus.name); return -1; } diff --git a/usb-redir.c b/usb-redir.c index a36f2a7cda..2b53cf30cc 100644 --- a/usb-redir.c +++ b/usb-redir.c @@ -174,7 +174,7 @@ static void usbredir_log(void *priv, int level, const char *msg) return; } - error_report("%s\n", msg); + error_report("%s", msg); } static void usbredir_log_data(USBRedirDevice *dev, const char *desc, @@ -193,7 +193,7 @@ static void usbredir_log_data(USBRedirDevice *dev, const char *desc, for (j = 0; j < 8 && i + j < len; j++) { n += sprintf(buf + n, " %02X", data[i + j]); } - error_report("%s\n", buf); + error_report("%s", buf); } } From 6a84cb1f2822e494839b93dd8c7f7f8fa6c261a9 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 21 Dec 2011 11:37:57 +0100 Subject: [PATCH 3/9] scsi virtio-blk usb-msd: Clean up device init error messages Replace error_report("DEVICE-NAME: MESSAGE"); by just error_report("MESSAGE"); in block device init functions. DEVICE-NAME is bogus in some cases: it's "scsi-disk" for device scsi-hd and scsi-cd, "virtio-blk-pci" for virtio-blk-s390, and "usb-msd" for usb-storage. There is no real need to put a device name in the message, because error_report() points to the offending command line option already: $ qemu-system-x86_64 --nodefaults --enable-kvm -vnc :0 -S -monitor stdio -usb -device virtio-blk-pci upstream-qemu: -device virtio-blk-pci: virtio-blk-pci: drive property not set upstream-qemu: -device virtio-blk-pci: Device 'virtio-blk-pci' could not be initialized And for a monitor command, it's obvious anyway: $ qemu-system-x86_64 --nodefaults --enable-kvm -vnc :0 -S -monitor stdio -usb (qemu) device_add virtio-blk-pci virtio-blk-pci: drive property not set Device 'virtio-blk-pci' could not be initialized Reported-by: Amit Shah Signed-off-by: Markus Armbruster Signed-off-by: Stefan Hajnoczi --- hw/scsi-disk.c | 4 ++-- hw/scsi-generic.c | 8 ++++---- hw/usb-msd.c | 2 +- hw/virtio-blk.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 505accdde5..5d8bf53586 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1515,7 +1515,7 @@ static int scsi_initfn(SCSIDevice *dev) DriveInfo *dinfo; if (!s->qdev.conf.bs) { - error_report("scsi-disk: drive property not set"); + error_report("drive property not set"); return -1; } @@ -1537,7 +1537,7 @@ static int scsi_initfn(SCSIDevice *dev) } if (bdrv_is_sg(s->qdev.conf.bs)) { - error_report("scsi-disk: unwanted /dev/sg*"); + error_report("unwanted /dev/sg*"); return -1; } diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index 6f7d3db775..0aebcddf6e 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -374,13 +374,13 @@ static int scsi_generic_initfn(SCSIDevice *s) struct sg_scsi_id scsiid; if (!s->conf.bs) { - error_report("scsi-generic: drive property not set"); + error_report("drive property not set"); return -1; } /* check we are really using a /dev/sg* file */ if (!bdrv_is_sg(s->conf.bs)) { - error_report("scsi-generic: not /dev/sg*"); + error_report("not /dev/sg*"); return -1; } @@ -396,13 +396,13 @@ static int scsi_generic_initfn(SCSIDevice *s) /* check we are using a driver managing SG_IO (version 3 and after */ if (bdrv_ioctl(s->conf.bs, SG_GET_VERSION_NUM, &sg_version) < 0 || sg_version < 30000) { - error_report("scsi-generic: scsi generic interface too old"); + error_report("scsi generic interface too old"); return -1; } /* get LUN of the /dev/sg? */ if (bdrv_ioctl(s->conf.bs, SG_GET_SCSI_ID, &scsiid)) { - error_report("scsi-generic: SG_GET_SCSI_ID ioctl failed"); + error_report("SG_GET_SCSI_ID ioctl failed"); return -1; } diff --git a/hw/usb-msd.c b/hw/usb-msd.c index 4c06950125..b87b9290be 100644 --- a/hw/usb-msd.c +++ b/hw/usb-msd.c @@ -517,7 +517,7 @@ static int usb_msd_initfn(USBDevice *dev) DriveInfo *dinfo; if (!bs) { - error_report("usb-msd: drive property not set"); + error_report("drive property not set"); return -1; } diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index ef27421d46..5e81f53e14 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -569,7 +569,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf, DriveInfo *dinfo; if (!conf->bs) { - error_report("virtio-blk-pci: drive property not set"); + error_report("drive property not set"); return NULL; } if (!bdrv_is_inserted(conf->bs)) { From a2c80be948eef747d91ad135574a3277698712b9 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Thu, 22 Dec 2011 11:26:10 +0100 Subject: [PATCH 4/9] configure: CONFIG_QEMU_INTERP_PREFIX only for user mode Signed-off-by: Stefan Weil Signed-off-by: Stefan Hajnoczi --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 640e81536d..af19391f81 100755 --- a/configure +++ b/configure @@ -3395,7 +3395,6 @@ echo "# Automatically generated by configure - do not modify" > $config_target_m bflt="no" target_nptl="no" interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"` -echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak gdb_xml_files="" target_short_alignment=2 target_int_alignment=4 @@ -3601,6 +3600,7 @@ if test "$target_softmmu" = "yes" ; then fi if test "$target_user_only" = "yes" ; then echo "CONFIG_USER_ONLY=y" >> $config_target_mak + echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak fi if test "$target_linux_user" = "yes" ; then echo "CONFIG_LINUX_USER=y" >> $config_target_mak From 359bc95d3e604e22fe07be62f5099148a2bb4e6f Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Sat, 24 Dec 2011 13:07:25 +0000 Subject: [PATCH 5/9] configure: Fix test for supported host CPU type The test for whether the host CPU is supported had several problems: * the attempt to fall back to TCI was done as a duplicate test, very late (so "--cpu foo" would fail early but "--cpu unicore32" would fail late, differently, and after configure had already printed a lot of output) * a number of CPUs only supported as guests were included in the list of CPUs we would accept as valid hosts, which would result in a late compile failure on those systems rather than a configure failure or fallback to TCI * bailing out for an unsupported CPU happened before the main option parsing, so "configure --help" wouldn't work Fix these by folding the setting of ARCH into the first test for supported host CPU, removing spurious guest-only CPU names from it, and moving the "fall back to TCI" code earlier. Signed-off-by: Peter Maydell Signed-off-by: Stefan Hajnoczi --- configure | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/configure b/configure index af19391f81..a1394eb1ac 100755 --- a/configure +++ b/configure @@ -300,8 +300,11 @@ else cpu=`uname -m` fi +ARCH= +# Normalise host CPU name and set ARCH. +# Note that this case should only have supported host CPUs, not guests. case "$cpu" in - alpha|cris|ia64|lm32|m68k|microblaze|ppc|ppc64|sparc64|unicore32) + ia64|ppc|ppc64|s390|s390x|sparc64) cpu="$cpu" ;; i386|i486|i586|i686|i86pc|BePC) @@ -319,20 +322,17 @@ case "$cpu" in mips*) cpu="mips" ;; - s390) - cpu="s390" - ;; - s390x) - cpu="s390x" - ;; sparc|sun4[cdmuv]) cpu="sparc" ;; *) - echo "Unsupported CPU = $cpu" - exit 1 + # This will result in either an error or falling back to TCI later + ARCH=unknown ;; esac +if test -z "$ARCH"; then + ARCH="$cpu" +fi # OS specific if check_define __linux__ ; then @@ -1080,6 +1080,18 @@ echo "NOTE: The object files are built at the place where configure is launched" exit 1 fi +# Now we have handled --enable-tcg-interpreter and know we're not just +# printing the help message, bail out if the host CPU isn't supported. +if test "$ARCH" = "unknown"; then + if test "$tcg_interpreter" = "yes" ; then + echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" + ARCH=tci + else + echo "Unsupported CPU = $cpu, try --enable-tcg-interpreter" + exit 1 + fi +fi + # check that the C compiler works. cat > $TMPC <> $config_host_mak echo "docdir=$docdir" >> $config_host_mak echo "confdir=$confdir" >> $config_host_mak -case "$cpu" in - i386|x86_64|alpha|arm|cris|hppa|ia64|lm32|m68k|microblaze|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64|unicore32) - ARCH=$cpu - ;; - *) - if test "$tcg_interpreter" = "yes" ; then - echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" - ARCH=tci - else - echo "Unsupported CPU = $cpu, try --enable-tcg-interpreter" - exit 1 - fi - ;; -esac echo "ARCH=$ARCH" >> $config_host_mak if test "$debug_tcg" = "yes" ; then echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak From bb16172c52ac18742f3df156912c169904e92147 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Sat, 24 Dec 2011 23:37:24 +0000 Subject: [PATCH 6/9] gdbstub: Fix fd leak in gdbserver_open() error path Fix a leak of a file descriptor in error exit paths in gdbserver_open(). Signed-off-by: Peter Maydell Signed-off-by: Stefan Hajnoczi --- gdbstub.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index a5806ef6c4..7d470b608e 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2762,11 +2762,13 @@ static int gdbserver_open(int port) ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)); if (ret < 0) { perror("bind"); + close(fd); return -1; } ret = listen(fd, 0); if (ret < 0) { perror("listen"); + close(fd); return -1; } return fd; From a46667ea29218565473e430ceae62e2838f6ce3f Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Sat, 24 Dec 2011 23:47:11 +0000 Subject: [PATCH 7/9] net/socket.c: Fix fd leak in net_socket_listen_init() error paths Fix a leak of a file descriptor due to missing closesocket() calls in error paths in net_socket_listen_init(). Signed-off-by: Peter Maydell Signed-off-by: Stefan Hajnoczi --- net/socket.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/socket.c b/net/socket.c index aaf9be48e2..c9d70d388e 100644 --- a/net/socket.c +++ b/net/socket.c @@ -427,12 +427,14 @@ static int net_socket_listen_init(VLANState *vlan, if (ret < 0) { perror("bind"); g_free(s); + closesocket(fd); return -1; } ret = listen(fd, 0); if (ret < 0) { perror("listen"); g_free(s); + closesocket(fd); return -1; } s->vlan = vlan; From 7a3fc891ae3256e4fbf03b6ab6d3ced0dfaaaa27 Mon Sep 17 00:00:00 2001 From: Sebastian Herbszt Date: Sat, 31 Dec 2011 12:14:47 +0100 Subject: [PATCH 8/9] Make python mandatory The QEMU build depends on Python so make it an explicit requirement. Reviewed-by: Stefan Weil Signed-off-by: Sebastian Herbszt Signed-off-by: Stefan Hajnoczi --- configure | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/configure b/configure index a1394eb1ac..d88e3ea434 100755 --- a/configure +++ b/configure @@ -1197,13 +1197,9 @@ if test "$solaris" = "yes" ; then fi fi -if test "$guest_agent" != "no" ; then - if has $python; then - : - else - echo "Python not found. Use --python=/path/to/python" - exit 1 - fi +if ! has $python; then + echo "Python not found. Use --python=/path/to/python" + exit 1 fi if test -z "$target_list" ; then From dc10e8b3c556b582eb7919c92d0997b5f9a9d136 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 5 Jan 2012 13:16:07 +0000 Subject: [PATCH 9/9] qemu-nbd: drop loop which can never loop For some reason nbd_client_thread() has a do..while loop which can never loop, the condition is bogus because we would take a goto instead. Drop the loop. Reported-by: Dr David Alan Gilbert Reviewed-by: Paolo Bonzini Signed-off-by: Stefan Hajnoczi --- qemu-nbd.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index 155b05840b..eb61c33acd 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -202,12 +202,10 @@ static void *nbd_client_thread(void *arg) int ret; pthread_t show_parts_thread; - do { - sock = unix_socket_outgoing(sockpath); - if (sock == -1) { - goto out; - } - } while (sock == -1); + sock = unix_socket_outgoing(sockpath); + if (sock == -1) { + goto out; + } ret = nbd_receive_negotiate(sock, NULL, &nbdflags, &size, &blocksize);