From 7ac9a9d6e1fbc702dee8d2a2eb3151bc704104dc Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:51 +0100 Subject: [PATCH 1/6] qapi.py: avoid Python 2.5+ any() function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is one instance of any() in qapi.py that breaks builds on older distros that ship Python 2.4 (like RHEL5): GEN qmp-commands.h Traceback (most recent call last): File "build/scripts/qapi-commands.py", line 445, in ? exprs = parse_schema(input_file) File "build/scripts/qapi.py", line 329, in parse_schema schema = QAPISchema(open(input_file, "r")) File "build/scripts/qapi.py", line 110, in __init__ if any(include_path == elem[1] NameError: global name 'any' is not defined Signed-off-by: Stefan Hajnoczi Reviewed-by: Benoît Canet --- scripts/qapi.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index f2c6d1f840..77d46aa995 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -107,10 +107,10 @@ class QAPISchema: 'Expected a file name (string), got: %s' % include) include_path = os.path.join(self.input_dir, include) - if any(include_path == elem[1] - for elem in self.include_hist): - raise QAPIExprError(expr_info, "Inclusion loop for %s" - % include) + for elem in self.include_hist: + if include_path == elem[1]: + raise QAPIExprError(expr_info, "Inclusion loop for %s" + % include) # skip multiple include of the same file if include_path in previously_included: continue From 6b029216056b8e64a6b5b7c43d1342cd4ef7ebc0 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:52 +0100 Subject: [PATCH 2/6] libqtest: launch QEMU with QEMU_AUDIO_DRV=none No test case actually uses the audio backend. Disable audio to prevent warnings on hosts with no sound hardware present: GTESTER check-qtest-aarch64 sdl: SDL_OpenAudio failed sdl: Reason: No available audio device sdl: SDL_OpenAudio failed sdl: Reason: No available audio device audio: Failed to create voice `lm4549.out' Signed-off-by: Stefan Hajnoczi Reviewed-by: Gerd Hoffmann --- tests/libqtest.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/libqtest.c b/tests/libqtest.c index ed55686ce0..5e458e884e 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -165,6 +165,7 @@ QTestState *qtest_init(const char *extra_args) s->qemu_pid = fork(); if (s->qemu_pid == 0) { + setenv("QEMU_AUDIO_DRV", "none", true); command = g_strdup_printf("exec %s " "-qtest unix:%s,nowait " "-qtest-log %s " From 73735f72188bd5fe25c3478aa4a2f1a17cb878d8 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:53 +0100 Subject: [PATCH 3/6] trace: avoid Python 2.5 all() in tracetool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Red Hat Enterprise Linux 5 ships Python 2.4.3. The all() function was added in Python 2.5 so we cannot use it. Signed-off-by: Stefan Hajnoczi Reviewed-by: Benoît Canet --- scripts/tracetool/backend/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py index 5bfa1efc5c..d4b6dab9ca 100644 --- a/scripts/tracetool/backend/__init__.py +++ b/scripts/tracetool/backend/__init__.py @@ -102,7 +102,8 @@ class Wrapper: def __init__(self, backends, format): self._backends = [backend.replace("-", "_") for backend in backends] self._format = format.replace("-", "_") - assert all(exists(backend) for backend in self._backends) + for backend in self._backends: + assert exists(backend) assert tracetool.format.exists(self._format) def _run_function(self, name, *args, **kwargs): From 6d0de8eb21b7a581999ca89a9b447fd1c91e23db Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:54 +0100 Subject: [PATCH 4/6] mirror: fix uninitialized variable delay_ns warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gcc 4.1.2 compiler warns that delay_ns may be uninitialized in mirror_iteration(). There are two break statements in the do ... while loop that skip over the delay_ns assignment. These are probably the cause of the warning. Signed-off-by: Stefan Hajnoczi Reviewed-by: Benoît Canet --- block/mirror.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/block/mirror.c b/block/mirror.c index 5e7a166b39..18b18e0353 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -157,7 +157,7 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s) BlockDriverState *source = s->common.bs; int nb_sectors, sectors_per_chunk, nb_chunks; int64_t end, sector_num, next_chunk, next_sector, hbitmap_next_sector; - uint64_t delay_ns; + uint64_t delay_ns = 0; MirrorOp *op; s->sector_num = hbitmap_iter_next(&s->hbi); @@ -247,8 +247,6 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s) next_chunk += added_chunks; if (!s->synced && s->common.speed) { delay_ns = ratelimit_calculate_delay(&s->limit, added_sectors); - } else { - delay_ns = 0; } } while (delay_ns == 0 && next_sector < end); From ada4240103470371533967334cda9965854fcbda Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:55 +0100 Subject: [PATCH 5/6] block: sort formats alphabetically in bdrv_iterate_format() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Format names are best consumed in alphabetical order. This makes human-readable output easy to produce. bdrv_iterate_format() already has an array of format strings. Sort them before invoking the iteration callback. Signed-off-by: Stefan Hajnoczi Reviewed-by: Benoît Canet --- block.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index e9380f6c58..1df13ac1c7 100644 --- a/block.c +++ b/block.c @@ -3744,11 +3744,17 @@ const char *bdrv_get_format_name(BlockDriverState *bs) return bs->drv ? bs->drv->format_name : NULL; } +static int qsort_strcmp(const void *a, const void *b) +{ + return strcmp(a, b); +} + void bdrv_iterate_format(void (*it)(void *opaque, const char *name), void *opaque) { BlockDriver *drv; int count = 0; + int i; const char **formats = NULL; QLIST_FOREACH(drv, &bdrv_drivers, list) { @@ -3762,10 +3768,16 @@ void bdrv_iterate_format(void (*it)(void *opaque, const char *name), if (!found) { formats = g_renew(const char *, formats, count + 1); formats[count++] = drv->format_name; - it(opaque, drv->format_name); } } } + + qsort(formats, count, sizeof(formats[0]), qsort_strcmp); + + for (i = 0; i < count; i++) { + it(opaque, formats[i]); + } + g_free(formats); } From 00c6d403a3ac303ebdcb1706ee983e13ba8e2d5f Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 27 Aug 2014 12:08:56 +0100 Subject: [PATCH 6/6] Revert "qemu-img: sort block formats in help message" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 1a443c1b8b4314d365e82bddeb1de5b4b1c15fb3 and the later commit 395071a76328189f50c778f4dee6dabb90503dd9. GSequence was introduced in glib 2.14. RHEL 5 fails to compile since it uses glib 2.12.3. Now that bdrv_iterate_format() invokes the iteration callback in sorted order these commits are unnecessary. Signed-off-by: Stefan Hajnoczi Reviewed-by: Benoît Canet --- qemu-img.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index c8434206b8..2052b14b84 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -32,7 +32,6 @@ #include "block/block_int.h" #include "block/qapi.h" #include -#include #define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION \ ", Copyright (c) 2004-2008 Fabrice Bellard\n" @@ -56,22 +55,9 @@ typedef enum OutputFormat { #define BDRV_O_FLAGS BDRV_O_CACHE_WB #define BDRV_DEFAULT_CACHE "writeback" -static gint compare_data(gconstpointer a, gconstpointer b, gpointer user) +static void format_print(void *opaque, const char *name) { - return g_strcmp0(a, b); -} - -static void print_format(gpointer data, gpointer user) -{ - printf(" %s", (char *)data); -} - -static void add_format_to_seq(void *opaque, const char *fmt_name) -{ - GSequence *seq = opaque; - - g_sequence_insert_sorted(seq, (gpointer)fmt_name, - compare_data, NULL); + printf(" %s", name); } static void QEMU_NORETURN GCC_FMT_ATTR(1, 2) error_exit(const char *fmt, ...) @@ -157,15 +143,10 @@ static void QEMU_NORETURN help(void) " '-f' first image format\n" " '-F' second image format\n" " '-s' run in Strict mode - fail on different image size or sector allocation\n"; - GSequence *seq; printf("%s\nSupported formats:", help_msg); - seq = g_sequence_new(NULL); - bdrv_iterate_format(add_format_to_seq, seq); - g_sequence_foreach(seq, print_format, NULL); + bdrv_iterate_format(format_print, NULL); printf("\n"); - g_sequence_free(seq); - exit(EXIT_SUCCESS); }