* [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script
@ 2017-01-17 1:01 Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 1/9] target-i386: Move "host" properties to base class Eduardo Habkost
` (10 more replies)
0 siblings, 11 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:01 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Christian Borntraeger, David Hildenbrand,
libvir-list, Jiri Denemark, Jason J. Herne, Markus Armbruster,
Richard Henderson, Igor Mammedov, Eric Blake
This is a follow-up to the series that implements
query-cpu-model-expansion. Before including the test script, the
series has some fixes to allow the results of
query-cpu-model-expansion to be used in the QEMU command-line.
The script probably will work on s390x too, but I couldn't test
it yet.
This series and its dependencies can be pulled from the branch:
https://github.com/ehabkost/qemu-hacks.git work/x86-query-cpu-expansion-test
---
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: libvir-list@redhat.com
Cc: Jiri Denemark <jdenemar@redhat.com>
Cc: "Jason J. Herne" <jjherne@linux.vnet.ibm.com>
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Eric Blake <eblake@redhat.com>
Eduardo Habkost (9):
target-i386: Move "host" properties to base class
target-i386: Allow short strings to be used as vendor ID
cpu: Support comma escaping when parsing -cpu
qemu.py: Make logging optional
qtest.py: Support QTEST_LOG environment variable
qtest.py: make logging optional
qtest.py: Make 'binary' parameter optional
tests: Add rules to non-gtester qtest test cases
tests: Test case for query-cpu-model-expansion
scripts/qemu.py | 25 ++-
scripts/qtest.py | 15 +-
qom/cpu.c | 32 ++--
target/i386/cpu.c | 83 ++++-----
tests/test-x86-cpuid-compat.c | 19 ++
tests/Makefile.include | 40 ++++-
tests/query-cpu-model-test.py | 398 ++++++++++++++++++++++++++++++++++++++++++
7 files changed, 551 insertions(+), 61 deletions(-)
create mode 100755 tests/query-cpu-model-test.py
--
2.11.0.259.g40922b1
^ permalink raw reply [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 1/9] target-i386: Move "host" properties to base class
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
@ 2017-01-17 1:01 ` Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 2/9] target-i386: Allow short strings to be used as vendor ID Eduardo Habkost
` (9 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:01 UTC (permalink / raw)
To: qemu-devel
Make the "pmu" and "host-cache-info" properties configurable on
all CPU model classes. This way, query-cpu-model-expansion will
be able to return the value of those properties when returning
expansion data using the "base" CPU model as base.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
target/i386/cpu.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 0b68c2d423..3b7fb331b6 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1539,12 +1539,6 @@ static int cpu_x86_fill_model_id(char *str)
static X86CPUDefinition host_cpudef;
-static Property host_x86_cpu_properties[] = {
- DEFINE_PROP_BOOL("migratable", X86CPU, migratable, true),
- DEFINE_PROP_BOOL("host-cache-info", X86CPU, cache_info_passthrough, false),
- DEFINE_PROP_END_OF_LIST()
-};
-
/* class_init for the "host" CPU model
*
* This function may be called before KVM is initialized.
@@ -1575,7 +1569,6 @@ static void host_x86_cpu_class_init(ObjectClass *oc, void *data)
* instance_init, because they require KVM to be initialized.
*/
- dc->props = host_x86_cpu_properties;
/* Reason: host_x86_cpu_initfn() dies when !kvm_enabled() */
dc->cannot_destroy_with_object_finalize_yet = true;
}
@@ -3876,6 +3869,8 @@ static Property x86_cpu_properties[] = {
DEFINE_PROP_BOOL("cpuid-0xb", X86CPU, enable_cpuid_0xb, true),
DEFINE_PROP_BOOL("lmce", X86CPU, enable_lmce, false),
DEFINE_PROP_BOOL("l3-cache", X86CPU, enable_l3_cache, true),
+ DEFINE_PROP_BOOL("host-cache-info", X86CPU, cache_info_passthrough, false),
+ DEFINE_PROP_BOOL("migratable", X86CPU, migratable, true),
DEFINE_PROP_END_OF_LIST()
};
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 2/9] target-i386: Allow short strings to be used as vendor ID
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 1/9] target-i386: Move "host" properties to base class Eduardo Habkost
@ 2017-01-17 1:01 ` Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 3/9] cpu: Support comma escaping when parsing -cpu Eduardo Habkost
` (8 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:01 UTC (permalink / raw)
To: qemu-devel
If a short string is specified, it will be padded with zeroes.
Without this, "query-cpu-model-expansion model=base" would return
an expansion that would never work in the command-line.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
target/i386/cpu.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 3b7fb331b6..6046cc0ced 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1769,19 +1769,22 @@ static void x86_cpuid_set_vendor(Object *obj, const char *value,
X86CPU *cpu = X86_CPU(obj);
CPUX86State *env = &cpu->env;
int i;
+ char buf[CPUID_VENDOR_SZ] = { 0 };
- if (strlen(value) != CPUID_VENDOR_SZ) {
+ if (strlen(value) > CPUID_VENDOR_SZ) {
error_setg(errp, QERR_PROPERTY_VALUE_BAD, "", "vendor", value);
return;
}
+ strncpy(buf, value, sizeof(buf));
+
env->cpuid_vendor1 = 0;
env->cpuid_vendor2 = 0;
env->cpuid_vendor3 = 0;
for (i = 0; i < 4; i++) {
- env->cpuid_vendor1 |= ((uint8_t)value[i ]) << (8 * i);
- env->cpuid_vendor2 |= ((uint8_t)value[i + 4]) << (8 * i);
- env->cpuid_vendor3 |= ((uint8_t)value[i + 8]) << (8 * i);
+ env->cpuid_vendor1 |= ((uint8_t)buf[i]) << (8 * i);
+ env->cpuid_vendor2 |= ((uint8_t)buf[i + 4]) << (8 * i);
+ env->cpuid_vendor3 |= ((uint8_t)buf[i + 8]) << (8 * i);
}
}
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 3/9] cpu: Support comma escaping when parsing -cpu
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 1/9] target-i386: Move "host" properties to base class Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 2/9] target-i386: Allow short strings to be used as vendor ID Eduardo Habkost
@ 2017-01-17 1:01 ` Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 4/9] qemu.py: Make logging optional Eduardo Habkost
` (7 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:01 UTC (permalink / raw)
To: qemu-devel; +Cc: Igor Mammedov
Currently it's impossible to use commas inside any option value
in -cpu due to the simple way the parser splits the options.
Change both cpu_common_parse_features() and
x86_cpu_parse_featurestr() to use get_opt_*() parsing options,
that can handle handle ",," escaping of commas.
The ideal solution is to use QemuOpts to parse the -cpu option.
But this will require changing the CPUClass::parse_features()
interface, so it will be done later.
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
qom/cpu.c | 32 +++++++++++++++-------
target/i386/cpu.c | 63 ++++++++++++++++++++++---------------------
tests/test-x86-cpuid-compat.c | 19 +++++++++++++
3 files changed, 74 insertions(+), 40 deletions(-)
diff --git a/qom/cpu.c b/qom/cpu.c
index 03d9190f8c..47d69f7135 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -295,8 +295,7 @@ static ObjectClass *cpu_common_class_by_name(const char *cpu_model)
static void cpu_common_parse_features(const char *typename, char *features,
Error **errp)
{
- char *featurestr; /* Single "key=value" string being parsed */
- char *val;
+ const char *featurestr;
static bool cpu_globals_initialized;
/* TODO: all callers of ->parse_features() need to be changed to
@@ -310,16 +309,26 @@ static void cpu_common_parse_features(const char *typename, char *features,
}
cpu_globals_initialized = true;
- featurestr = features ? strtok(features, ",") : NULL;
+ if (!features) {
+ return;
+ }
- while (featurestr) {
- val = strchr(featurestr, '=');
- if (val) {
+ /*TODO: Use QemuOpts to parse -cpu on main(), so we don't need
+ * to manually call get_opt_*() here.
+ */
+ for (featurestr = features; *featurestr != '\0'; featurestr++) {
+ const char *pe = strchr(featurestr, '=');
+ const char *pc = strchr(featurestr, ',');
+ if (pe && (!pc || pc > pe)) {
+ char option[128], val[1024];
GlobalProperty *prop = g_new0(typeof(*prop), 1);
- *val = 0;
- val++;
+
+ featurestr = get_opt_name(option, sizeof(option), featurestr, '=');
+ featurestr++;
+ featurestr = get_opt_value(val, sizeof(val), featurestr);
+
prop->driver = typename;
- prop->property = g_strdup(featurestr);
+ prop->property = g_strdup(option);
prop->value = g_strdup(val);
prop->errp = &error_fatal;
qdev_prop_register_global(prop);
@@ -328,7 +337,10 @@ static void cpu_common_parse_features(const char *typename, char *features,
featurestr);
return;
}
- featurestr = strtok(NULL, ",");
+
+ if (*featurestr != ',') {
+ break;
+ }
}
}
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 6046cc0ced..d0e9400e62 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1975,7 +1975,7 @@ static gint compare_string(gconstpointer a, gconstpointer b)
static void x86_cpu_parse_featurestr(const char *typename, char *features,
Error **errp)
{
- char *featurestr; /* Single 'key=value" string being parsed */
+ const char *featurestr;
static bool cpu_globals_initialized;
bool ambiguous = false;
@@ -1988,36 +1988,40 @@ static void x86_cpu_parse_featurestr(const char *typename, char *features,
return;
}
- for (featurestr = strtok(features, ",");
- featurestr;
- featurestr = strtok(NULL, ",")) {
- const char *name;
- const char *val = NULL;
- char *eq = NULL;
- char num[32];
+ /*TODO: Use QemuOpts to parse -cpu on main(), so we don't need
+ * to manually call get_opt_*() here.
+ */
+ for (featurestr = features;
+ *featurestr != '\0';
+ *featurestr == ',' ? featurestr++ : 0) {
+ char name[128], val[1024];
GlobalProperty *prop;
-
- /* Compatibility syntax: */
- if (featurestr[0] == '+') {
- plus_features = g_list_append(plus_features,
- g_strdup(featurestr + 1));
- continue;
- } else if (featurestr[0] == '-') {
- minus_features = g_list_append(minus_features,
- g_strdup(featurestr + 1));
- continue;
- }
-
- eq = strchr(featurestr, '=');
- if (eq) {
- *eq++ = 0;
- val = eq;
+ const char *pe = strchr(featurestr, '=');
+ const char *pc = strchr(featurestr, ',');
+
+ if (pe && (!pc || pc > pe)) {
+ /* opt=value[,...] */
+ featurestr = get_opt_name(name, sizeof(name), featurestr, '=');
+ featurestr++;
+ featurestr = get_opt_value(val, sizeof(val), featurestr);
} else {
- val = "on";
+ /* opt[,...] */
+ featurestr = get_opt_name(name, sizeof(name), featurestr, ',');
+ pstrcpy(val, sizeof(val), "on");
+
+ /* Compatibility syntax: */
+ if (name[0] == '+') {
+ plus_features = g_list_append(plus_features,
+ g_strdup(name + 1));
+ continue;
+ } else if (name[0] == '-') {
+ minus_features = g_list_append(minus_features,
+ g_strdup(name + 1));
+ continue;
+ }
}
- feat2prop(featurestr);
- name = featurestr;
+ feat2prop(name);
if (g_list_find_custom(plus_features, name, compare_string)) {
error_report("warning: Ambiguous CPU model string. "
@@ -2043,9 +2047,8 @@ static void x86_cpu_parse_featurestr(const char *typename, char *features,
error_setg(errp, "bad numerical value %s", val);
return;
}
- snprintf(num, sizeof(num), "%" PRId64, tsc_freq);
- val = num;
- name = "tsc-frequency";
+ snprintf(val, sizeof(val), "%" PRId64, tsc_freq);
+ pstrcpy(name, sizeof(name), "tsc-frequency");
}
prop = g_new0(typeof(*prop), 1);
diff --git a/tests/test-x86-cpuid-compat.c b/tests/test-x86-cpuid-compat.c
index 79a2e69a28..06caa5b945 100644
--- a/tests/test-x86-cpuid-compat.c
+++ b/tests/test-x86-cpuid-compat.c
@@ -4,6 +4,7 @@
#include "qapi/qmp/qdict.h"
#include "qapi/qmp/qint.h"
#include "qapi/qmp/qbool.h"
+#include "qapi/qmp/qstring.h"
#include "libqtest.h"
static char *get_cpu0_qom_path(void)
@@ -52,6 +53,22 @@ typedef struct CpuidTestArgs {
int64_t expected_value;
} CpuidTestArgs;
+static void test_commas(void)
+{
+ char *path;
+ QString *value;
+
+ qtest_start("-cpu 'qemu64,fpu=on,model-id=A CPU with commas,,fpu=off'");
+ path = get_cpu0_qom_path();
+ value = qobject_to_qstring(qom_get(path, "model-id"));
+ g_assert_true(qom_get_bool(path, "fpu"));
+ g_assert_cmpstr(qstring_get_str(value), ==, "A CPU with commas,fpu=off");
+ qtest_end();
+
+ QDECREF(value);
+ g_free(path);
+}
+
static void test_cpuid_prop(const void *data)
{
const CpuidTestArgs *args = data;
@@ -132,6 +149,8 @@ int main(int argc, char **argv)
g_test_add_func("/x86/cpuid/parsing-plus-minus", test_plus_minus);
#endif
+ g_test_add_func("/x86/parsing/commas", test_commas);
+
/* Original level values for CPU models: */
add_cpuid_test("x86/cpuid/phenom/level",
"-cpu phenom", "level", 5);
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 4/9] qemu.py: Make logging optional
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (2 preceding siblings ...)
2017-01-17 1:01 ` [Qemu-devel] [PATCH 3/9] cpu: Support comma escaping when parsing -cpu Eduardo Habkost
@ 2017-01-17 1:01 ` Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 5/9] qtest.py: Support QTEST_LOG environment variable Eduardo Habkost
` (6 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:01 UTC (permalink / raw)
To: qemu-devel
If a test case doesn't make QEMU generate any output, there's no
need to redirect stdout and stderr to a file. On those cases,
logging can be disabled so any errors are included on the test
case output.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Patch originally submitted as part of series:
* [RFC v2 00/20] qmp: Report bus information on 'query-machines'
---
scripts/qemu.py | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/scripts/qemu.py b/scripts/qemu.py
index 6d1b6230b7..14682864d8 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -24,13 +24,17 @@ class QEMUMachine(object):
'''A QEMU VM'''
def __init__(self, binary, args=[], wrapper=[], name=None, test_dir="/var/tmp",
- monitor_address=None, socket_scm_helper=None, debug=False):
+ monitor_address=None, socket_scm_helper=None, debug=False,
+ logging=True):
if name is None:
name = "qemu-%d" % os.getpid()
if monitor_address is None:
monitor_address = os.path.join(test_dir, name + "-monitor.sock")
self._monitor_address = monitor_address
- self._qemu_log_path = os.path.join(test_dir, name + ".log")
+ if logging:
+ self._qemu_log_path = os.path.join(test_dir, name + ".log")
+ else:
+ self._qemu_log_path = None
self._popen = None
self._binary = binary
self._args = list(args) # Force copy args in case we modify them
@@ -91,6 +95,8 @@ class QEMUMachine(object):
return self._popen.pid
def _load_io_log(self):
+ if self._qemu_log_path is None:
+ return
with open(self._qemu_log_path, "r") as fh:
self._iolog = fh.read()
@@ -115,17 +121,24 @@ class QEMUMachine(object):
def _post_shutdown(self):
if not isinstance(self._monitor_address, tuple):
self._remove_if_exists(self._monitor_address)
- self._remove_if_exists(self._qemu_log_path)
+ if self._qemu_log_path is not None:
+ self._remove_if_exists(self._qemu_log_path)
def launch(self):
'''Launch the VM and establish a QMP connection'''
devnull = open('/dev/null', 'rb')
- qemulog = open(self._qemu_log_path, 'wb')
+ if self._qemu_log_path is not None:
+ qemulog = open(self._qemu_log_path, 'wb')
+ stdout=qemulog
+ stderr=subprocess.STDOUT
+ else:
+ stdout=None
+ stderr=None
try:
self._pre_launch()
args = self._wrapper + [self._binary] + self._base_args() + self._args
- self._popen = subprocess.Popen(args, stdin=devnull, stdout=qemulog,
- stderr=subprocess.STDOUT, shell=False)
+ self._popen = subprocess.Popen(args, stdin=devnull, stdout=stdout,
+ stderr=stderr, shell=False)
self._post_launch()
except:
if self._popen:
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 5/9] qtest.py: Support QTEST_LOG environment variable
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (3 preceding siblings ...)
2017-01-17 1:01 ` [Qemu-devel] [PATCH 4/9] qemu.py: Make logging optional Eduardo Habkost
@ 2017-01-17 1:02 ` Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 6/9] qtest.py: make logging optional Eduardo Habkost
` (5 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:02 UTC (permalink / raw)
To: qemu-devel
qtest logs everything to stderr by default, but we don't want it
to be the default behavior on test cases.
Implement the same behavior of libqtest.c, and redirect the qtest
log to /dev/null by default unless the QTEST_LOG environment
variable is set.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Patch originally submitted as part of series:
* [RFC v2 00/20] qmp: Report bus information on 'query-machines'
---
scripts/qtest.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/scripts/qtest.py b/scripts/qtest.py
index d5aecb5f49..5ac2c69ba8 100644
--- a/scripts/qtest.py
+++ b/scripts/qtest.py
@@ -88,8 +88,14 @@ class QEMUQtestMachine(qemu.QEMUMachine):
self._qtest_path = os.path.join(test_dir, name + "-qtest.sock")
def _base_args(self):
+ if os.getenv('QTEST_LOG'):
+ qtest_log = '/dev/fd/2'
+ else:
+ qtest_log = '/dev/null'
+
args = super(QEMUQtestMachine, self)._base_args()
args.extend(['-qtest', 'unix:path=' + self._qtest_path,
+ '-qtest-log', qtest_log,
'-machine', 'accel=qtest'])
return args
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 6/9] qtest.py: make logging optional
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (4 preceding siblings ...)
2017-01-17 1:02 ` [Qemu-devel] [PATCH 5/9] qtest.py: Support QTEST_LOG environment variable Eduardo Habkost
@ 2017-01-17 1:02 ` Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 7/9] qtest.py: Make 'binary' parameter optional Eduardo Habkost
` (4 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:02 UTC (permalink / raw)
To: qemu-devel
Support the 'logging' parameter on QEMUQtestMachine, for test
cases that don't require logging.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Patch originally submitted as part of series:
* [RFC v2 00/20] qmp: Report bus information on 'query-machines'
---
scripts/qtest.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/scripts/qtest.py b/scripts/qtest.py
index 5ac2c69ba8..0496490906 100644
--- a/scripts/qtest.py
+++ b/scripts/qtest.py
@@ -80,11 +80,12 @@ class QEMUQtestMachine(qemu.QEMUMachine):
'''A QEMU VM'''
def __init__(self, binary, args=[], name=None, test_dir="/var/tmp",
- socket_scm_helper=None):
+ socket_scm_helper=None, logging=True):
if name is None:
name = "qemu-%d" % os.getpid()
super(QEMUQtestMachine, self).__init__(binary, args, name=name, test_dir=test_dir,
- socket_scm_helper=socket_scm_helper)
+ socket_scm_helper=socket_scm_helper,
+ logging=logging)
self._qtest_path = os.path.join(test_dir, name + "-qtest.sock")
def _base_args(self):
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 7/9] qtest.py: Make 'binary' parameter optional
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (5 preceding siblings ...)
2017-01-17 1:02 ` [Qemu-devel] [PATCH 6/9] qtest.py: make logging optional Eduardo Habkost
@ 2017-01-17 1:02 ` Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 8/9] tests: Add rules to non-gtester qtest test cases Eduardo Habkost
` (3 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:02 UTC (permalink / raw)
To: qemu-devel
If the 'binary' parameter is omitted, use the $QTEST_QEMU_BINARY
environment variable.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Patch originally submitted as part of series:
* [RFC v2 00/20] qmp: Report bus information on 'query-machines'
---
scripts/qtest.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/scripts/qtest.py b/scripts/qtest.py
index 0496490906..5a37b48143 100644
--- a/scripts/qtest.py
+++ b/scripts/qtest.py
@@ -79,8 +79,10 @@ class QEMUQtestProtocol(object):
class QEMUQtestMachine(qemu.QEMUMachine):
'''A QEMU VM'''
- def __init__(self, binary, args=[], name=None, test_dir="/var/tmp",
+ def __init__(self, binary=None, args=[], name=None, test_dir="/var/tmp",
socket_scm_helper=None, logging=True):
+ if binary is None:
+ binary = os.getenv('QTEST_QEMU_BINARY')
if name is None:
name = "qemu-%d" % os.getpid()
super(QEMUQtestMachine, self).__init__(binary, args, name=name, test_dir=test_dir,
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 8/9] tests: Add rules to non-gtester qtest test cases
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (6 preceding siblings ...)
2017-01-17 1:02 ` [Qemu-devel] [PATCH 7/9] qtest.py: Make 'binary' parameter optional Eduardo Habkost
@ 2017-01-17 1:02 ` Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion Eduardo Habkost
` (2 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:02 UTC (permalink / raw)
To: qemu-devel
Today, simple non-gtester binaries can be run easily by a single
Makefile rule (e.g. check-tests/qemu-iotest-quick.sh), but we
don't have anything to help us automatically run the same test
binary for multiple architectures.
This add check-simpleqtest-* rules that will help us run binaries
present in $(check-simpleqtest-*-y).
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Patch originally submitted as part of series:
* [RFC v2 00/20] qmp: Report bus information on 'query-machines'
---
tests/Makefile.include | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 202901374c..d9809c6229 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -795,6 +795,40 @@ check-report.html: check-report.xml
$(call quiet-command,gtester-report $< > $@,"GEN","$@")
+# rules for non-gtester qtest tests:
+
+SIMPLETEST_OPTIONS = $(if $(V),--verbose,--quiet)
+
+# rule dependencies are:
+# check-simpleqtest: check-simpleqtest-$(ARCH) for each ARCH in QTEST_ARCH
+# check-simpleqtest-$(ARCH): check-simpleqtest-$(TEST)-$(ARCH) for each
+# TEST in $(check-simpleqtest-$(ARCH)-y)
+# (generated by qtest_target macro)
+# check-simpleqtest-$(TEST)-$(ARCH): runs test with $(SIMPLETEST_OPTIONS)
+# (generated by qtest_target macro)
+#
+# $(check-simpleqtest-$(ARCH)-y) automatically includes
+# $(check-simpleqtest-generic-y)
+
+define qtest-target
+
+check-simpleqtest-$(1)-y += $$(check-simpleqtest-generic-y)
+
+.PHONY: $$(patsubst %, check-simpleqtest-%-$(1), $$(check-simpleqtest-$(1)-y))
+$$(patsubst %, check-simpleqtest-%-$(1), $$(check-simpleqtest-$(1)-y)): check-simpleqtest-%-$(1): %
+ $$(call quiet-command,QTEST_QEMU_BINARY=$(1)-softmmu/qemu-system-$(1) \
+ QTEST_QEMU_IMG=qemu-img$$(EXESUF) \
+ MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
+ $$< $$(SIMPLETEST_OPTIONS),"QTEST-$(1)", "$$<")
+
+.PHONY: check-simpleqtest-$(1)
+check-simpleqtest-$(1): $$(patsubst %, check-simpleqtest-%-$(1), $$(check-simpleqtest-$(1)-y))
+
+endef
+
+$(foreach TARGET,$(QTEST_TARGETS),$(eval $(call qtest-target,$(TARGET))))
+
+
# Other tests
QEMU_IOTESTS_HELPERS-$(CONFIG_LINUX) = tests/qemu-iotests/socket_scm_helper$(EXESUF)
@@ -822,7 +856,8 @@ $(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json
.PHONY: check-qapi-schema check-qtest check-unit check check-clean
check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y))
-check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
+check-simpleqtest: $(patsubst %,check-simpleqtest-%, $(QTEST_TARGETS))
+check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) check-simpleqtest
check-unit: $(patsubst %,check-%, $(check-unit-y))
check-block: $(patsubst %,check-%, $(check-block-y))
check: check-qapi-schema check-unit check-qtest
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (7 preceding siblings ...)
2017-01-17 1:02 ` [Qemu-devel] [PATCH 8/9] tests: Add rules to non-gtester qtest test cases Eduardo Habkost
@ 2017-01-17 1:02 ` Eduardo Habkost
2017-01-18 9:39 ` David Hildenbrand
2017-01-17 1:21 ` [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script no-reply
2017-01-17 15:22 ` Jason J. Herne
10 siblings, 1 reply; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-17 1:02 UTC (permalink / raw)
To: qemu-devel
Test code to sanity-check the results of
query-cpu-model-expansion.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/Makefile.include | 3 +
tests/query-cpu-model-test.py | 398 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 401 insertions(+)
create mode 100755 tests/query-cpu-model-test.py
diff --git a/tests/Makefile.include b/tests/Makefile.include
index d9809c6229..75f5c9052d 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -253,6 +253,9 @@ check-qtest-x86_64-y += $(check-qtest-i386-y)
gcov-files-i386-y += i386-softmmu/hw/timer/mc146818rtc.c
gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y))
+check-simpleqtest-x86_64-y += $(SRC_PATH)/tests/query-cpu-model-test.py
+check-simpleqtest-i386-y += $(SRC_PATH)/tests/query-cpu-model-test.py
+
check-qtest-alpha-y = tests/boot-serial-test$(EXESUF)
check-qtest-mips-y = tests/endianness-test$(EXESUF)
diff --git a/tests/query-cpu-model-test.py b/tests/query-cpu-model-test.py
new file mode 100755
index 0000000000..c19bd1bbc3
--- /dev/null
+++ b/tests/query-cpu-model-test.py
@@ -0,0 +1,398 @@
+#!/usr/bin/env python
+#
+# query-cpu-model-* validation and sanity checks
+#
+# Copyright (c) 2016-2017 Red Hat Inc
+#
+# Author:
+# Eduardo Habkost <ehabkost@redhat.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, see <http://www.gnu.org/licenses/>.
+#
+
+import sys, os
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'scripts'))
+from qtest import QEMUQtestMachine
+import unittest
+import logging
+import copy
+
+UNSAFE_FEATURES = {
+ 'x86_64': ['pmu', 'host-cache-info'],
+ 'i386': ['pmu', 'host-cache-info'],
+}
+
+# testing every single CPU model takes a while, so test just a few ones:
+X86_MODELS_TO_TEST = set(['base', 'host',
+ 'qemu64', 'qemu32', 'kvm64', 'kvm32',
+ '486', 'pentium', 'athlon', 'n270',
+ 'Haswell-noTSX', 'Haswell', 'Broadwell',
+ 'Opteron_G5'])
+
+MODELS_TO_TEST = {
+ 'x86_64': X86_MODELS_TO_TEST,
+ 'i386': X86_MODELS_TO_TEST,
+}
+
+# Validation of the expanded CPU models will be based on the QOM
+# properties of CPU objects.
+# QOM properties that don't affect guest ABI can be safely ignored
+# when validating the results.
+IGNORE_QOM_PROPS = {
+ # the 'type' property just identifies the QOM class being used
+ # to build the CPU, and shouldn't affect the guest ABI
+ 'x86_64': ['type'],
+ 'i386': ['type'],
+ # 'static', 'migration-safe', and 'description' are just
+ # information for the user, and don't affect guest ABI
+ 's390x': ['type', 'static', 'migration-safe', 'description'],
+}
+
+def toQemuOpts(*args):
+ """Convert arguments to a QemuOpts string, with appropriate escaping
+
+ Each argument can be a single string, or a dictionary.
+ """
+ logging.debug('toQemuOpts(%r)', args)
+ r = []
+ for a in args:
+ if type(a) is dict:
+ for k,v in a.items():
+ if type(v) is bool:
+ if v:
+ v = 'on'
+ else:
+ v = 'off'
+ v = str(v)
+ a = '%s=%s' % (k, v)
+ r.append(a)
+ else:
+ a = str(a)
+ r.append(a)
+ return ','.join([o.replace(',', ',,') for o in r])
+
+def cpuPath(vm, cpu_index):
+ """Return qom_path for a given CPU, using query-cpus"""
+ cpus = vm.command('query-cpus')
+ return cpus[cpu_index]['qom_path']
+
+def allProps(vm, path):
+ """Return a dictionary containing all properties for a QOM object"""
+ props = vm.command('qom-list', path=path)
+ r = {}
+ for prop in props:
+ pname = prop['name']
+ v = vm.command('qom-get', path=path, property=pname)
+ r[pname] = v
+ return r
+
+def allCpuProps(vm, cpu_index):
+ """Return all properties for a given CPU"""
+ return allProps(vm, cpuPath(vm, cpu_index))
+
+
+class CPUModelTest(unittest.TestCase):
+ longMessage = True
+ maxDiff = None
+
+ def runAndGetProps(self, model):
+ # Helper to run QEMU using a CpuModelInfo struct and get
+ # all CPU properties
+ cpu_opt = toQemuOpts(model['name'], model.get('props', {}))
+ logging.debug('cpu option: %s', cpu_opt)
+
+ vm = QEMUQtestMachine(args=['-machine', 'accel=%s' % (self.accel), '-S',
+ '-cpu', cpu_opt], name='qom-fetch',
+ logging=False)
+ try:
+ vm.launch()
+ props = allCpuProps(vm, 0)
+ finally:
+ vm.shutdown()
+
+ # remove the properties we can ignore
+ for p in IGNORE_QOM_PROPS.get(self.target['arch'], []):
+ del props[p]
+
+ return props
+
+ def tryGetProps(self, model, msg):
+ """Try to get QOM props for model, if runnable"""
+ if model.has_key('qom-props'):
+ return
+
+ if model.get('runnable') != False:
+ logging.info("%s: maybe runnable, fetching QOM properties", msg)
+ try:
+ model['qom-props'] = self.runAndGetProps(model['model'])
+ except:
+ if model.get('runnable'):
+ # explicitly marked as runnable, raise exception
+ raise
+ logging.info("%s: failed to run VM, ignoring", msg)
+
+ def unsafeFeatures(self):
+ return UNSAFE_FEATURES.get(self.target['arch'], [])
+
+ def isMigrationSafe(self, model):
+ name = model['name']
+ if not self.cpu_models[name]['migration-safe']:
+ return False
+ for p in model.get('props', {}).keys():
+ if p in self.unsafeFeatures():
+ return False
+ return True
+
+ def checkOneExpansion(self, model, type, msg):
+ """Perform one query-cpu-model-expansion operation, validate results
+
+ @model is a CpuModelExpansionInfo struct, with some extra keys:
+ * model['runnable'] will be set to True if the CPU model is
+ runnable on this host
+ * model['qom-props'] will be set to the full list of properties for the
+ CPU, if the model is runnable
+
+ Returns a new CpuModelExpansion struct like @model, with
+ the expanded CPU model data.
+ """
+ logging.info("%s: testing type=%s", msg, type)
+ logging.debug("%s: model: %r", msg, model)
+
+ model_name = model['model']['name']
+
+ self.tryGetProps(model, msg)
+
+ expanded = self.vm.command('query-cpu-model-expansion',
+ type=type, model=model['model'])
+
+ logging.debug("%s: expanded: %r", msg, expanded)
+
+ # static expansion mode should always result in a static and
+ # migration safe CPU model
+ if type == 'static':
+ expanded_model = self.cpu_models[expanded['model']['name']]
+ self.assertTrue(self.isMigrationSafe(expanded_model))
+ self.assertTrue(expanded_model['static'])
+
+ # static expansion should never enable migration-unsafe
+ # features:
+ if type == 'static':
+ for f in self.unsafeFeatures():
+ self.assertFalse(expanded['model']['props'].get(f))
+
+ # Some expansions are known to be precise, and shouldn't lose any
+ # features:
+ # * full expansion
+ # * static expansion of a known migration-safe model
+ precise_expansion = (type == 'full') or \
+ self.isMigrationSafe(model['model'])
+
+ expanded['runnable'] = model.get('runnable')
+ self.tryGetProps(expanded, msg)
+ if precise_expansion:
+ self.assertEquals(model.get('qom-props'),
+ expanded.get('qom-props'),
+ msg)
+
+ logging.debug("%s: result: %r", msg, expanded)
+ return expanded
+
+ def checkExpansions(self, model, msg):
+ """Perform multiple expansion operations on model, validate results
+
+ @model is a CpuModelExpansionInfo struct, with some extra keys:
+ * model['runnable'] should be set to True if the CPU model is
+ runnable on this host
+ * model['qom-props'] will be set to the full list of properties for
+ the CPU, if the model is runnable
+ """
+ exp_s = self.checkOneExpansion(model, 'static',
+ '%s.static' % (msg))
+ exp_f = self.checkOneExpansion(model, 'full',
+ '%s.full' % (msg))
+ exp_ss = self.checkOneExpansion(exp_s, 'static',
+ '%s.static.static' % (msg))
+ exp_sf = self.checkOneExpansion(exp_s, 'full',
+ '%s.static.full' % (msg))
+ exp_ff = self.checkOneExpansion(exp_f, 'full',
+ '%s.full.full' % (msg))
+
+ # static expansion twice should result in the same data:
+ self.assertEquals(exp_s, exp_ss, '%s: static != static+static' % (msg))
+ # full expansion twice should also result in the same data:
+ self.assertEquals(exp_f, exp_ff, '%s: full != full+full' % (msg))
+
+ # migration-safe CPU models have an extra feature:
+ # their static expansion should be equivalent to the full
+ # expansion (as their static expansion is also precise)
+ if self.isMigrationSafe(model['model']):
+ self.assertEquals(exp_sf['model']['props'], exp_f['model']['props'],
+ '%s: props: static+full != full' % (msg))
+ self.assertEquals(exp_sf.get('qom-props'), exp_f.get('qom-props'),
+ '%s: qom-props: static+full != full' % (msg))
+
+ def tryToMakeRunnable(self, model):
+ """Try to create a runnable version of the CPU model, by disabling
+ unavailable features
+ """
+ devprops = self.vm.command('device-list-properties',
+ typename=model['typename'])
+ proptypes = dict((p['name'], p['type']) for p in devprops)
+
+ props = {}
+ for f in model['unavailable-features']:
+ # try to disable only boolean properties:
+ if proptypes.get(f) == 'bool':
+ props[f] = False
+
+ if not props:
+ # no property found to be disabled, there's nothing we can do
+ return None
+
+ runnable_model = {
+ 'model': {
+ 'name': model['name'],
+ 'props': props,
+ },
+ }
+ return runnable_model
+
+ def commandAvailable(self, command):
+ commands = self.vm.command('query-commands')
+ names = set([c['name'] for c in commands])
+ return command in names
+
+ def checkOneCPUModel(self, m):
+ """Run multiple query-cpu-model-expansion checks
+
+ * Test simple CPU model name
+ * Test CPU model with unsafe features explicitly disabled
+ if it's not migration-safe
+ * Test CPU model with unsafe features enabled
+ * Test CPU model with unavailable features disabled,
+ if unavailable-features is set
+
+ @m is a CpuDefinitionInfo struct from query-cpu-definitions
+ """
+ msg = '%s.%s' % (self.accel, m['name'])
+ logging.info("%s: checkOneCPUModel", msg)
+
+
+ # some validations on query-cpu-definitions output:
+ if m.get('static'):
+ self.assertTrue(m['migration-safe'])
+
+ # simulate return value of query-cpu-expansion for the model:
+ model = {
+ 'model': {
+ 'name': m['name'],
+ },
+ }
+ if m.has_key('unavailable-features'):
+ model['runnable'] = len(m['unavailable-features']) == 0
+ self.checkExpansions(model, msg)
+
+ # explicit test to check we do the right thing when
+ # unsafe features are enabled explicitly:
+ for f in self.unsafeFeatures():
+ # enabled:
+ unsafe_model = {
+ 'model': {
+ 'name': m['name'],
+ 'props': { f: True },
+ },
+ 'runnable': model.get('runnable'),
+ }
+ self.checkExpansions(unsafe_model, msg + ".unsafe." + f)
+
+ # Try to make CPU model migration-safe by disabling
+ # all known migration-unsafe features:
+ if not m['migration-safe']:
+ # enabled:
+ safe_model = {
+ 'model': {
+ 'name': m['name'],
+ 'props': {}
+ },
+ 'runnable': model.get('runnable'),
+ }
+ for f in self.unsafeFeatures():
+ safe_model['model']['props'][f] = False
+ self.checkExpansions(safe_model, msg + ".safe")
+
+ # if not runnable, try to create a runnable version of the CPU model:
+ if m.get('unavailable-features'):
+ runnable_model = self.tryToMakeRunnable(m)
+ if runnable_model:
+ self.checkExpansions(runnable_model, msg + ".runnable")
+
+ @classmethod
+ def setUpClass(klass):
+ vm = QEMUQtestMachine(args=['-S'], logging=False)
+ try:
+ vm.launch()
+ klass.kvm = vm.command('query-kvm')
+ klass.target = vm.command('query-target')
+ finally:
+ vm.shutdown()
+
+ def setUp(self):
+ self.vm = None
+
+ def tearDown(self):
+ if self.vm:
+ self.vm.shutdown()
+
+ def checkAllCPUModels(self):
+ # use <accel>:tcg so QEMU won't refuse to start if KVM is unavailable
+ self.vm = QEMUQtestMachine(args=['-S', '-machine',
+ 'accel=%s:tcg' % (self.accel)],
+ logging=False)
+ self.vm.launch()
+
+ models = self.vm.command('query-cpu-definitions')
+ self.cpu_models = dict((m['name'], m) for m in models)
+
+ if self.accel == 'kvm':
+ if not self.vm.command('query-kvm')['enabled']:
+ self.skipTest("Failed to enable KVM")
+
+ to_test = MODELS_TO_TEST.get(self.target['arch'])
+ for m in models:
+ if to_test and m['name'] not in to_test:
+ continue
+ self.checkOneCPUModel(m)
+
+
+ def testTCGModels(self):
+ self.accel = 'tcg'
+ self.checkAllCPUModels()
+
+ def testKVMModels(self):
+ if not self.kvm['present']:
+ self.skipTest("KVM is not present")
+
+ self.accel = 'kvm'
+ self.checkAllCPUModels()
+
+
+
+if __name__ == '__main__':
+ if os.getenv('QTEST_LOG_LEVEL'):
+ logging.basicConfig(level=int(os.getenv('QTEST_LOG_LEVEL')))
+ elif '--verbose' in sys.argv:
+ logging.basicConfig(level=logging.INFO)
+ else:
+ logging.basicConfig(level=logging.WARN)
+ unittest.main()
--
2.11.0.259.g40922b1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (8 preceding siblings ...)
2017-01-17 1:02 ` [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion Eduardo Habkost
@ 2017-01-17 1:21 ` no-reply
2017-01-17 15:22 ` Jason J. Herne
10 siblings, 0 replies; 24+ messages in thread
From: no-reply @ 2017-01-17 1:21 UTC (permalink / raw)
To: ehabkost
Cc: famz, qemu-devel, david, libvir-list, armbru, borntraeger,
jjherne, cornelia.huck, imammedo, jdenemar, rth
Hi,
Your series failed automatic build test. Please find the testing commands and
their output below. If you have docker installed, you can probably reproduce it
locally.
Message-id: 20170117010204.4909-1-ehabkost@redhat.com
Type: series
Subject: [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=16
make docker-test-quick@centos6
make docker-test-mingw@fedora
make docker-test-build@min-glib
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
d3a9b7d tests: Test case for query-cpu-model-expansion
80e37c6 tests: Add rules to non-gtester qtest test cases
dff0d98 qtest.py: Make 'binary' parameter optional
a5f681d qtest.py: make logging optional
7e060a5 qtest.py: Support QTEST_LOG environment variable
81e80a8 qemu.py: Make logging optional
d380182 cpu: Support comma escaping when parsing -cpu
4bee8a5 target-i386: Allow short strings to be used as vendor ID
60bac28 target-i386: Move "host" properties to base class
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into 'dtc'...
Submodule path 'dtc': checked out '65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf'
BUILD centos6
make[1]: Entering directory `/var/tmp/patchew-tester-tmp-b29wfeob/src'
ARCHIVE qemu.tgz
ARCHIVE dtc.tgz
COPY RUNNER
RUN test-quick in qemu:centos6
Packages installed:
SDL-devel-1.2.14-7.el6_7.1.x86_64
ccache-3.1.6-2.el6.x86_64
epel-release-6-8.noarch
gcc-4.4.7-17.el6.x86_64
git-1.7.1-4.el6_7.1.x86_64
glib2-devel-2.28.8-5.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
make-3.81-23.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
tar-1.23-15.el6_8.x86_64
zlib-devel-1.2.3-29.el6.x86_64
Environment variables:
PACKAGES=libfdt-devel ccache tar git make gcc g++ zlib-devel glib2-devel SDL-devel pixman-devel epel-release
HOSTNAME=ad10700a2304
TERM=xterm
MAKEFLAGS= -j16
HISTSIZE=1000
J=16
USER=root
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
MAIL=/var/spool/mail/root
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
LANG=en_US.UTF-8
TARGET_LIST=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
FEATURES= dtc
DEBUG=
G_BROKEN_FILENAMES=1
CCACHE_HASHDIR=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install
No C++ compiler available; disabling C++ specific optional code
Install prefix /var/tmp/qemu-build/install
BIOS directory /var/tmp/qemu-build/install/share/qemu
binary directory /var/tmp/qemu-build/install/bin
library directory /var/tmp/qemu-build/install/lib
module directory /var/tmp/qemu-build/install/lib/qemu
libexec directory /var/tmp/qemu-build/install/libexec
include directory /var/tmp/qemu-build/install/include
config directory /var/tmp/qemu-build/install/etc
local state directory /var/tmp/qemu-build/install/var
Manual directory /var/tmp/qemu-build/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /tmp/qemu-test/src
C compiler cc
Host C compiler cc
C++ compiler
Objective-C compiler cc
ARFLAGS rv
CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -I/usr/include/pixman-1 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all
LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g
make make
install install
python python -B
smbd /usr/sbin/smbd
module support no
host CPU x86_64
host big endian no
target list x86_64-softmmu aarch64-softmmu
tcg debug enabled no
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
pixman system
SDL support yes (1.2.14)
GTK support no
GTK GL support no
VTE support no
TLS priority NORMAL
GNUTLS support no
GNUTLS rnd no
libgcrypt no
libgcrypt kdf no
nettle no
nettle kdf no
libtasn1 no
curses support no
virgl support no
curl support no
mingw32 support no
Audio drivers oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support no
VNC support yes
VNC SASL support no
VNC JPEG support no
VNC PNG support no
xen support no
brlapi support no
bluez support no
Documentation no
PIE yes
vde support no
netmap support no
Linux AIO support no
ATTR/XATTR support yes
Install blobs yes
KVM support yes
COLO support yes
RDMA support no
TCG interpreter no
fdt support yes
preadv support yes
fdatasync yes
madvise yes
posix_madvise yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends log
spice support no
rbd support no
xfsctl support no
smartcard support no
libusb no
usb net redir no
OpenGL support no
OpenGL dmabufs no
libiscsi support no
libnfs support no
build guest agent yes
QGA VSS support no
QGA w32 disk info no
QGA MSI support no
seccomp support no
coroutine backend ucontext
coroutine pool yes
debug stack usage no
GlusterFS support no
Archipelago support no
gcov gcov
gcov enabled no
TPM support yes
libssh2 support no
TPM passthrough yes
QOM debugging yes
lzo support no
snappy support no
bzip2 support no
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization no
replication support yes
GEN x86_64-softmmu/config-devices.mak.tmp
GEN aarch64-softmmu/config-devices.mak.tmp
GEN qemu-options.def
GEN config-host.h
GEN qmp-commands.h
GEN qapi-types.h
GEN qapi-visit.h
GEN qapi-event.h
GEN qmp-introspect.h
GEN module_block.h
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN tests/test-qmp-commands.h
GEN tests/test-qapi-event.h
GEN tests/test-qmp-introspect.h
GEN trace/generated-tracers.h
GEN x86_64-softmmu/config-devices.mak
GEN aarch64-softmmu/config-devices.mak
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-helpers.h
GEN config-all-devices.mak
CC tests/qemu-iotests/socket_scm_helper.o
GEN qga/qapi-generated/qga-qapi-types.h
GEN qga/qapi-generated/qga-qapi-visit.h
GEN qga/qapi-generated/qga-qmp-marshal.c
GEN qga/qapi-generated/qga-qmp-commands.h
GEN qga/qapi-generated/qga-qapi-types.c
GEN qga/qapi-generated/qga-qapi-visit.c
GEN qmp-introspect.c
GEN qapi-types.c
GEN qapi-visit.c
GEN qapi-event.c
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnull.o
CC qobject/qint.o
CC qobject/qstring.o
CC qobject/qdict.o
CC qobject/qlist.o
CC qobject/qfloat.o
CC qobject/qbool.o
CC qobject/qjson.o
CC qobject/qobject.o
CC qobject/json-lexer.o
CC qobject/json-streamer.o
CC qobject/json-parser.o
GEN trace/generated-tracers.c
CC trace/control.o
CC trace/qmp.o
CC util/osdep.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/compatfd.o
CC util/event_notifier-posix.o
CC util/mmap-alloc.o
CC util/oslib-posix.o
CC util/qemu-openpty.o
CC util/qemu-thread-posix.o
CC util/memfd.o
CC util/envlist.o
CC util/path.o
CC util/module.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/fifo8.o
CC util/acl.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/qemu-option.o
CC util/notify.o
CC util/qemu-progress.o
CC util/uri.o
CC util/crc32c.o
CC util/hexdump.o
CC util/uuid.o
CC util/throttle.o
CC util/getauxval.o
CC util/readline.o
CC util/rcu.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-ucontext.o
CC util/qemu-coroutine-io.o
CC util/buffer.o
CC util/timed-average.o
CC util/base64.o
CC util/log.o
CC util/qdist.o
CC util/range.o
CC util/qht.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blk-commit-all.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/cpu-get-clock.o
CC stubs/clock-warp.o
CC stubs/dump.o
CC stubs/cpu-get-icount.o
CC stubs/error-printf.o
CC stubs/fdset-find-fd.o
CC stubs/fdset-add-fd.o
CC stubs/gdbstub.o
CC stubs/fdset-get-fd.o
CC stubs/fdset-remove-fd.o
CC stubs/get-fd.o
CC stubs/get-next-serial.o
CC stubs/iothread.o
CC stubs/get-vm-name.o
CC stubs/iothread-lock.o
CC stubs/machine-init-done.o
CC stubs/is-daemonized.o
CC stubs/migr-blocker.o
CC stubs/mon-is-qmp.o
CC stubs/notify-event.o
CC stubs/monitor-init.o
CC stubs/replay.o
CC stubs/replay-user.o
CC stubs/qtest.o
CC stubs/reset.o
CC stubs/runstate-check.o
CC stubs/set-fd-handler.o
CC stubs/slirp.o
CC stubs/sysbus.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vmstate.o
CC stubs/vm-stop.o
CC stubs/cpus.o
CC stubs/kvm.o
CC stubs/qmp_pc_dimm_device_list.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/vhost.o
CC stubs/smbios_type_38.o
CC stubs/iohandler.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/ipmi.o
CC contrib/ivshmem-client/ivshmem-client.o
CC stubs/migration-colo.o
CC contrib/ivshmem-client/main.o
CC contrib/ivshmem-server/ivshmem-server.o
CC contrib/ivshmem-server/main.o
CC qemu-nbd.o
CC async.o
CC thread-pool.o
CC block.o
CC blockjob.o
CC main-loop.o
CC iohandler.o
CC qemu-timer.o
CC aio-posix.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/dmg.o
CC block/qcow2-cluster.o
CC block/qcow2-cache.o
CC block/qcow2-snapshot.o
CC block/qed.o
CC block/qed-gencb.o
CC block/qed-l2-cache.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-posix.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/sheepdog.o
CC block/nbd.o
CC block/write-threshold.o
CC block/nbd-client.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/replication.o
CC block/backup.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC crypto/hash.o
CC crypto/init.o
CC crypto/hmac.o
CC crypto/hash-glib.o
CC crypto/hmac-glib.o
CC crypto/desrfb.o
CC crypto/aes.o
CC crypto/cipher.o
CC crypto/tlscredsanon.o
CC crypto/tlscreds.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/random-platform.o
CC crypto/pbkdf.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/ivgen-plain64.o
CC crypto/afsplit.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
GEN qemu-img-cmds.h
CC qemu-io.o
CC qemu-bridge-helper.o
CC blockdev.o
CC blockdev-nbd.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-posix.o
CC qemu-char.o
CC page_cache.o
CC accel.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC device_tree.o
GEN qmp-marshal.c
CC hmp.o
CC qmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/sdlaudio.o
CC audio/ossaudio.o
CC audio/wavcapture.o
CC backends/rng.o
CC backends/rng-egd.o
CC backends/msmouse.o
CC backends/rng-random.o
CC backends/testdev.o
CC backends/tpm.o
CC backends/hostmem-ram.o
CC backends/hostmem.o
CC backends/hostmem-file.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC disas/arm.o
CC block/stream.o
CC disas/i386.o
CC fsdev/qemu-fsdev-dummy.o
CC fsdev/qemu-fsdev-opts.o
CC hw/acpi/core.o
CC hw/acpi/piix4.o
CC hw/acpi/pcihp.o
CC hw/acpi/ich9.o
CC hw/acpi/tco.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/nvdimm.o
CC hw/acpi/cpu.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/ipmi.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/wm8750.o
CC hw/audio/pl041.o
CC hw/audio/lm4549.o
CC hw/audio/marvell_88w8618.o
CC hw/block/block.o
CC hw/block/cdrom.o
CC hw/block/hd-geometry.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi02.o
CC hw/block/pflash_cfi01.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial.o
CC hw/char/serial-isa.o
CC hw/char/serial-pci.o
CC hw/char/virtio-console.o
CC hw/char/cadence_uart.o
CC hw/char/debugcon.o
CC hw/char/imx_serial.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/sysbus.o
CC hw/core/ptimer.o
CC hw/core/machine.o
CC hw/core/loader.o
CC hw/core/null-machine.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/pl110.o
CC hw/display/ssd0303.o
CC hw/display/ssd0323.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/dma/pl080.o
CC hw/display/tc6393xb.o
CC hw/dma/pl330.o
CC hw/dma/i8257.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/gpio_key.o
CC hw/gpio/zaurus.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/core.o
CC hw/ide/atapi.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/microdrive.o
CC hw/ide/ahci.o
CC hw/ide/ich.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/stellaris_input.o
CC hw/input/tsc2005.o
CC hw/input/vmmouse.o
CC hw/input/virtio-input.o
CC hw/intc/i8259_common.o
CC hw/input/virtio-input-hid.o
CC hw/input/virtio-input-host.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/imx_avic.o
CC hw/intc/realview_gic.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/isa-bus.o
CC hw/isa/apm.o
CC hw/mem/pc-dimm.o
CC hw/mem/nvdimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/tmp105.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/arm_l2x0.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/arm11scu.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet-pci.o
CC hw/net/pcnet.o
CC hw/net/e1000x_common.o
CC hw/net/e1000.o
CC hw/net/net_tx_pkt.o
CC hw/net/e1000e.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/smc91c111.o
CC hw/net/vmxnet3.o
CC hw/net/lan9118.o
CC hw/net/ne2000-isa.o
CC hw/net/xgmac.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/rocker/rocker.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/nvram/eeprom93xx.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/nvram/fw_cfg.o
CC hw/nvram/chrp_nvram.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-host/pam.o
CC hw/pci-bridge/i82801b11.o
CC hw/pci-host/versatile.o
CC hw/pci-host/piix.o
CC hw/pci-host/q35.o
CC hw/pci-host/gpex.o
CC hw/pci/pci.o
CC hw/pci/pci_bridge.o
/tmp/qemu-test/src/hw/nvram/fw_cfg.c: In function ‘fw_cfg_dma_transfer’:
/tmp/qemu-test/src/hw/nvram/fw_cfg.c:329: warning: ‘read’ may be used uninitialized in this function
CC hw/pci/msix.o
CC hw/pci/msi.o
CC hw/pci/shpc.o
CC hw/pci/pci_host.o
CC hw/pci/slotid_cap.o
CC hw/pci/pcie_host.o
CC hw/pci/pcie.o
CC hw/pci/pcie_aer.o
CC hw/pci/pcie_port.o
CC hw/pcmcia/pcmcia.o
CC hw/pci/pci-stub.o
CC hw/scsi/scsi-disk.o
CC hw/scsi/scsi-generic.o
CC hw/scsi/scsi-bus.o
CC hw/scsi/lsi53c895a.o
CC hw/scsi/mptsas.o
CC hw/scsi/mptconfig.o
CC hw/scsi/mptendian.o
CC hw/scsi/megasas.o
CC hw/scsi/vmw_pvscsi.o
CC hw/scsi/esp.o
CC hw/scsi/esp-pci.o
CC hw/sd/ssi-sd.o
CC hw/sd/pl181.o
CC hw/sd/sd.o
CC hw/sd/core.o
CC hw/sd/sdhci.o
CC hw/smbios/smbios.o
CC hw/smbios/smbios_type_38.o
CC hw/ssi/pl022.o
CC hw/ssi/ssi.o
CC hw/ssi/xilinx_spips.o
CC hw/ssi/aspeed_smc.o
CC hw/ssi/stm32f2xx_spi.o
CC hw/timer/arm_timer.o
CC hw/timer/arm_mptimer.o
CC hw/timer/a9gtimer.o
CC hw/timer/cadence_ttc.o
CC hw/timer/hpet.o
CC hw/timer/ds1338.o
CC hw/timer/i8254_common.o
CC hw/timer/i8254.o
CC hw/timer/pl031.o
CC hw/timer/twl92230.o
CC hw/timer/imx_epit.o
CC hw/timer/stm32f2xx_timer.o
CC hw/timer/imx_gpt.o
CC hw/timer/aspeed_timer.o
CC hw/tpm/tpm_tis.o
CC hw/tpm/tpm_passthrough.o
CC hw/tpm/tpm_util.o
CC hw/usb/core.o
CC hw/usb/combined-packet.o
CC hw/usb/bus.o
CC hw/usb/libhw.o
CC hw/usb/desc.o
CC hw/usb/desc-msos.o
CC hw/usb/hcd-uhci.o
CC hw/usb/hcd-ohci.o
CC hw/usb/hcd-ehci.o
CC hw/usb/hcd-ehci-pci.o
CC hw/usb/hcd-ehci-sysbus.o
CC hw/usb/hcd-xhci.o
CC hw/usb/hcd-musb.o
CC hw/usb/dev-hub.o
CC hw/usb/dev-wacom.o
CC hw/usb/dev-hid.o
CC hw/usb/dev-storage.o
CC hw/usb/dev-uas.o
CC hw/usb/dev-audio.o
CC hw/usb/dev-serial.o
CC hw/usb/dev-network.o
CC hw/usb/dev-bluetooth.o
CC hw/usb/dev-smartcard-reader.o
CC hw/usb/dev-mtp.o
CC hw/usb/host-stub.o
CC hw/virtio/virtio-rng.o
CC hw/virtio/virtio-pci.o
CC hw/virtio/virtio-bus.o
CC hw/virtio/virtio-mmio.o
CC hw/watchdog/watchdog.o
CC hw/watchdog/wdt_i6300esb.o
CC hw/watchdog/wdt_ib700.o
CC migration/migration.o
CC migration/socket.o
CC migration/fd.o
CC migration/tls.o
CC migration/exec.o
CC migration/colo-comm.o
CC migration/colo.o
CC migration/colo-failover.o
CC migration/vmstate.o
CC migration/qemu-file.o
CC migration/qemu-file-channel.o
CC migration/xbzrle.o
CC migration/postcopy-ram.o
CC migration/qjson.o
CC migration/block.o
CC net/net.o
CC net/queue.o
CC net/checksum.o
CC net/util.o
CC net/hub.o
CC net/socket.o
CC net/dump.o
CC net/eth.o
CC net/tap-linux.o
CC net/l2tpv3.o
CC net/tap.o
CC net/vhost-user.o
CC net/slirp.o
CC net/filter.o
CC net/filter-buffer.o
CC net/filter-mirror.o
CC net/colo-compare.o
CC net/colo.o
CC net/filter-rewriter.o
CC net/filter-replay.o
CC replay/replay.o
CC qom/cpu.o
CC replay/replay-internal.o
CC replay/replay-events.o
CC replay/replay-time.o
CC replay/replay-input.o
CC replay/replay-char.o
CC replay/replay-snapshot.o
CC replay/replay-net.o
CC slirp/cksum.o
CC slirp/if.o
CC slirp/ip_icmp.o
/tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’:
/tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
CC slirp/ip6_icmp.o
CC slirp/ip6_output.o
CC slirp/ip6_input.o
CC slirp/ip_input.o
CC slirp/ip_output.o
CC slirp/dnssearch.o
CC slirp/dhcpv6.o
CC slirp/slirp.o
CC slirp/mbuf.o
CC slirp/misc.o
CC slirp/sbuf.o
CC slirp/socket.o
CC slirp/tcp_input.o
CC slirp/tcp_output.o
CC slirp/tcp_subr.o
CC slirp/tcp_timer.o
CC slirp/udp.o
CC slirp/udp6.o
CC slirp/bootp.o
CC slirp/tftp.o
CC slirp/arp_table.o
CC slirp/ndp_table.o
CC ui/console.o
CC ui/keymaps.o
CC ui/cursor.o
CC ui/qemu-pixman.o
CC ui/input.o
/tmp/qemu-test/src/slirp/tcp_input.c: In function ‘tcp_input’:
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_p’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_len’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_tos’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_id’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_off’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_ttl’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_sum’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_src.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_dst.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:220: warning: ‘save_ip6.ip_nh’ may be used uninitialized in this function
CC ui/input-legacy.o
CC ui/input-keymap.o
CC ui/input-linux.o
CC ui/sdl.o
CC ui/sdl_zoom.o
CC ui/x_keymap.o
CC ui/vnc.o
CC ui/vnc-enc-hextile.o
CC ui/vnc-enc-zlib.o
CC ui/vnc-enc-tight.o
CC ui/vnc-palette.o
CC ui/vnc-enc-zrle.o
CC ui/vnc-auth-vencrypt.o
CC ui/vnc-jobs.o
CC ui/vnc-ws.o
LINK tests/qemu-iotests/socket_scm_helper
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/main.o
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
CC qga/qapi-generated/qga-qmp-marshal.o
CC qga/qapi-generated/qga-qapi-visit.o
CC qmp-introspect.o
CC qapi-types.o
CC qapi-visit.o
CC qapi-event.o
CC qemu-img.o
AR libqemustub.a
CC qmp-marshal.o
CC trace/generated-tracers.o
AS optionrom/multiboot.o
AS optionrom/linuxboot.o
CC optionrom/linuxboot_dma.o
AS optionrom/kvmvapic.o
cc: unrecognized option '-no-integrated-as'
cc: unrecognized option '-no-integrated-as'
AR libqemuutil.a
BUILD optionrom/linuxboot_dma.img
BUILD optionrom/linuxboot_dma.raw
BUILD optionrom/linuxboot.img
BUILD optionrom/multiboot.img
SIGN optionrom/linuxboot_dma.bin
BUILD optionrom/linuxboot.raw
BUILD optionrom/multiboot.raw
BUILD optionrom/kvmvapic.img
SIGN optionrom/linuxboot.bin
SIGN optionrom/multiboot.bin
BUILD optionrom/kvmvapic.raw
SIGN optionrom/kvmvapic.bin
LINK qemu-ga
LINK ivshmem-client
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-img
LINK qemu-io
LINK qemu-bridge-helper
GEN aarch64-softmmu/hmp-commands.h
GEN aarch64-softmmu/hmp-commands-info.h
GEN aarch64-softmmu/config-target.h
GEN x86_64-softmmu/hmp-commands.h
GEN x86_64-softmmu/hmp-commands-info.h
GEN x86_64-softmmu/config-target.h
CC aarch64-softmmu/cpu-exec.o
CC aarch64-softmmu/exec.o
CC aarch64-softmmu/translate-all.o
CC aarch64-softmmu/translate-common.o
CC aarch64-softmmu/cpu-exec-common.o
CC aarch64-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/tcg/tcg.o
CC aarch64-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/fpu/softfloat.o
CC aarch64-softmmu/tcg/optimize.o
CC aarch64-softmmu/disas.o
CC aarch64-softmmu/tcg-runtime.o
CC aarch64-softmmu/kvm-stub.o
GEN aarch64-softmmu/gdbstub-xml.c
CC aarch64-softmmu/arch_init.o
CC aarch64-softmmu/cpus.o
CC aarch64-softmmu/monitor.o
CC aarch64-softmmu/gdbstub.o
CC aarch64-softmmu/balloon.o
CC aarch64-softmmu/ioport.o
CC aarch64-softmmu/numa.o
CC aarch64-softmmu/qtest.o
CC aarch64-softmmu/bootdevice.o
CC aarch64-softmmu/memory.o
CC aarch64-softmmu/cputlb.o
CC aarch64-softmmu/memory_mapping.o
CC aarch64-softmmu/dump.o
CC aarch64-softmmu/migration/ram.o
CC aarch64-softmmu/migration/savevm.o
CC aarch64-softmmu/xen-common-stub.o
CC aarch64-softmmu/xen-hvm-stub.o
CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o
CC aarch64-softmmu/hw/block/virtio-blk.o
CC x86_64-softmmu/exec.o
CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o
CC aarch64-softmmu/hw/char/exynos4210_uart.o
CC aarch64-softmmu/hw/char/omap_uart.o
CC x86_64-softmmu/translate-all.o
CC x86_64-softmmu/cpu-exec.o
CC aarch64-softmmu/hw/char/digic-uart.o
CC x86_64-softmmu/translate-common.o
CC x86_64-softmmu/cpu-exec-common.o
CC x86_64-softmmu/tcg/tcg.o
CC aarch64-softmmu/hw/char/stm32f2xx_usart.o
CC x86_64-softmmu/tcg/tcg-op.o
CC x86_64-softmmu/tcg/optimize.o
CC x86_64-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/hw/char/bcm2835_aux.o
CC aarch64-softmmu/hw/char/virtio-serial-bus.o
CC x86_64-softmmu/fpu/softfloat.o
CC aarch64-softmmu/hw/core/nmi.o
CC x86_64-softmmu/disas.o
CC aarch64-softmmu/hw/core/generic-loader.o
CC x86_64-softmmu/tcg-runtime.o
CC aarch64-softmmu/hw/cpu/arm11mpcore.o
CC aarch64-softmmu/hw/cpu/realview_mpcore.o
CC aarch64-softmmu/hw/cpu/a9mpcore.o
CC aarch64-softmmu/hw/cpu/a15mpcore.o
CC x86_64-softmmu/arch_init.o
CC aarch64-softmmu/hw/cpu/core.o
CC x86_64-softmmu/cpus.o
CC aarch64-softmmu/hw/display/omap_dss.o
CC aarch64-softmmu/hw/display/omap_lcdc.o
CC x86_64-softmmu/monitor.o
CC x86_64-softmmu/gdbstub.o
CC x86_64-softmmu/balloon.o
CC x86_64-softmmu/ioport.o
CC x86_64-softmmu/numa.o
CC aarch64-softmmu/hw/display/pxa2xx_lcd.o
CC x86_64-softmmu/qtest.o
CC x86_64-softmmu/bootdevice.o
CC x86_64-softmmu/kvm-all.o
CC aarch64-softmmu/hw/display/bcm2835_fb.o
CC x86_64-softmmu/memory.o
CC aarch64-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/display/virtio-gpu.o
CC aarch64-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/display/dpcd.o
CC x86_64-softmmu/cputlb.o
CC aarch64-softmmu/hw/display/xlnx_dp.o
CC x86_64-softmmu/memory_mapping.o
CC aarch64-softmmu/hw/dma/xlnx_dpdma.o
CC x86_64-softmmu/dump.o
CC aarch64-softmmu/hw/dma/omap_dma.o
CC aarch64-softmmu/hw/dma/soc_dma.o
CC x86_64-softmmu/migration/ram.o
CC x86_64-softmmu/migration/savevm.o
CC x86_64-softmmu/xen-common-stub.o
CC x86_64-softmmu/xen-hvm-stub.o
CC x86_64-softmmu/hw/block/virtio-blk.o
CC x86_64-softmmu/hw/char/virtio-serial-bus.o
CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o
CC aarch64-softmmu/hw/dma/pxa2xx_dma.o
CC aarch64-softmmu/hw/dma/bcm2835_dma.o
CC x86_64-softmmu/hw/core/nmi.o
CC aarch64-softmmu/hw/gpio/omap_gpio.o
CC x86_64-softmmu/hw/core/generic-loader.o
CC aarch64-softmmu/hw/gpio/imx_gpio.o
CC x86_64-softmmu/hw/cpu/core.o
CC x86_64-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/i2c/omap_i2c.o
CC aarch64-softmmu/hw/input/pxa2xx_keypad.o
CC x86_64-softmmu/hw/display/virtio-gpu.o
CC x86_64-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/input/tsc210x.o
CC x86_64-softmmu/hw/display/virtio-gpu-pci.o
CC x86_64-softmmu/hw/display/virtio-vga.o
CC x86_64-softmmu/hw/intc/apic.o
CC x86_64-softmmu/hw/intc/apic_common.o
CC x86_64-softmmu/hw/intc/ioapic.o
CC x86_64-softmmu/hw/isa/lpc_ich9.o
CC aarch64-softmmu/hw/intc/armv7m_nvic.o
CC x86_64-softmmu/hw/misc/vmport.o
CC x86_64-softmmu/hw/misc/ivshmem.o
CC aarch64-softmmu/hw/intc/exynos4210_gic.o
CC aarch64-softmmu/hw/intc/exynos4210_combiner.o
CC x86_64-softmmu/hw/misc/pvpanic.o
CC x86_64-softmmu/hw/misc/edu.o
CC x86_64-softmmu/hw/misc/hyperv_testdev.o
CC x86_64-softmmu/hw/net/virtio-net.o
CC aarch64-softmmu/hw/intc/omap_intc.o
CC x86_64-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/hw/scsi/virtio-scsi.o
CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC x86_64-softmmu/hw/scsi/vhost-scsi.o
CC x86_64-softmmu/hw/timer/mc146818rtc.o
CC x86_64-softmmu/hw/vfio/common.o
CC x86_64-softmmu/hw/vfio/pci.o
CC x86_64-softmmu/hw/vfio/pci-quirks.o
CC aarch64-softmmu/hw/intc/bcm2835_ic.o
CC x86_64-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/intc/bcm2836_control.o
CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o
CC x86_64-softmmu/hw/vfio/calxeda-xgmac.o
CC x86_64-softmmu/hw/vfio/amd-xgbe.o
CC x86_64-softmmu/hw/vfio/spapr.o
CC x86_64-softmmu/hw/virtio/virtio.o
CC x86_64-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/intc/aspeed_vic.o
CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
CC x86_64-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/misc/ivshmem.o
CC x86_64-softmmu/hw/virtio/vhost-backend.o
CC x86_64-softmmu/hw/virtio/vhost-user.o
CC aarch64-softmmu/hw/misc/arm_sysctl.o
CC aarch64-softmmu/hw/misc/cbus.o
CC x86_64-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/misc/exynos4210_pmu.o
CC aarch64-softmmu/hw/misc/imx_ccm.o
CC x86_64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/misc/imx31_ccm.o
CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/misc/imx25_ccm.o
CC x86_64-softmmu/hw/i386/multiboot.o
CC aarch64-softmmu/hw/misc/imx6_ccm.o
CC x86_64-softmmu/hw/i386/pc.o
CC aarch64-softmmu/hw/misc/imx6_src.o
CC x86_64-softmmu/hw/i386/pc_piix.o
CC aarch64-softmmu/hw/misc/mst_fpga.o
CC aarch64-softmmu/hw/misc/omap_clk.o
CC aarch64-softmmu/hw/misc/omap_gpmc.o
CC x86_64-softmmu/hw/i386/pc_q35.o
CC aarch64-softmmu/hw/misc/omap_l4.o
CC x86_64-softmmu/hw/i386/pc_sysfw.o
CC aarch64-softmmu/hw/misc/omap_sdrc.o
CC aarch64-softmmu/hw/misc/omap_tap.o
CC x86_64-softmmu/hw/i386/x86-iommu.o
CC x86_64-softmmu/hw/i386/intel_iommu.o
CC x86_64-softmmu/hw/i386/amd_iommu.o
CC aarch64-softmmu/hw/misc/bcm2835_mbox.o
CC x86_64-softmmu/hw/i386/kvmvapic.o
CC aarch64-softmmu/hw/misc/bcm2835_property.o
CC aarch64-softmmu/hw/misc/zynq_slcr.o
/tmp/qemu-test/src/hw/i386/pc_piix.c: In function ‘igd_passthrough_isa_bridge_create’:
/tmp/qemu-test/src/hw/i386/pc_piix.c:1046: warning: ‘pch_rev_id’ may be used uninitialized in this function
CC x86_64-softmmu/hw/i386/acpi-build.o
CC x86_64-softmmu/hw/i386/kvm/clock.o
CC aarch64-softmmu/hw/misc/zynq-xadc.o
CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o
CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
CC x86_64-softmmu/hw/i386/kvm/apic.o
CC x86_64-softmmu/hw/i386/kvm/i8259.o
CC aarch64-softmmu/hw/misc/edu.o
CC x86_64-softmmu/hw/i386/kvm/ioapic.o
CC aarch64-softmmu/hw/misc/auxbus.o
CC x86_64-softmmu/hw/i386/kvm/i8254.o
CC x86_64-softmmu/hw/i386/kvm/pci-assign.o
CC x86_64-softmmu/target/i386/translate.o
CC x86_64-softmmu/target/i386/helper.o
CC aarch64-softmmu/hw/misc/aspeed_scu.o
CC x86_64-softmmu/target/i386/cpu.o
/tmp/qemu-test/src/hw/i386/acpi-build.c: In function ‘build_append_pci_bus_devices’:
/tmp/qemu-test/src/hw/i386/acpi-build.c:496: warning: ‘notify_method’ may be used uninitialized in this function
CC aarch64-softmmu/hw/misc/aspeed_sdmc.o
CC aarch64-softmmu/hw/net/virtio-net.o
CC aarch64-softmmu/hw/pcmcia/pxa2xx.o
CC aarch64-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/target/i386/bpt_helper.o
CC aarch64-softmmu/hw/scsi/virtio-scsi.o
CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC x86_64-softmmu/target/i386/excp_helper.o
CC aarch64-softmmu/hw/sd/omap_mmc.o
CC aarch64-softmmu/hw/scsi/vhost-scsi.o
CC x86_64-softmmu/target/i386/fpu_helper.o
CC x86_64-softmmu/target/i386/cc_helper.o
CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o
CC aarch64-softmmu/hw/ssi/omap_spi.o
CC x86_64-softmmu/target/i386/int_helper.o
CC aarch64-softmmu/hw/ssi/imx_spi.o
CC x86_64-softmmu/target/i386/svm_helper.o
CC aarch64-softmmu/hw/timer/exynos4210_mct.o
CC aarch64-softmmu/hw/timer/exynos4210_pwm.o
CC x86_64-softmmu/target/i386/misc_helper.o
CC x86_64-softmmu/target/i386/smm_helper.o
CC aarch64-softmmu/hw/timer/exynos4210_rtc.o
CC aarch64-softmmu/hw/timer/omap_gptimer.o
CC aarch64-softmmu/hw/timer/omap_synctimer.o
CC x86_64-softmmu/target/i386/mem_helper.o
CC aarch64-softmmu/hw/timer/pxa2xx_timer.o
CC x86_64-softmmu/target/i386/seg_helper.o
CC aarch64-softmmu/hw/timer/digic-timer.o
CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o
CC x86_64-softmmu/target/i386/mpx_helper.o
CC x86_64-softmmu/target/i386/gdbstub.o
CC aarch64-softmmu/hw/usb/tusb6010.o
CC aarch64-softmmu/hw/vfio/common.o
CC x86_64-softmmu/target/i386/machine.o
CC x86_64-softmmu/target/i386/arch_memory_mapping.o
CC x86_64-softmmu/target/i386/arch_dump.o
CC x86_64-softmmu/target/i386/monitor.o
CC x86_64-softmmu/target/i386/kvm.o
CC aarch64-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/vfio/pci-quirks.o
CC x86_64-softmmu/target/i386/hyperv.o
CC aarch64-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o
CC aarch64-softmmu/hw/vfio/amd-xgbe.o
CC aarch64-softmmu/hw/vfio/spapr.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/virtio/virtio.o
CC x86_64-softmmu/trace/control-target.o
CC aarch64-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/virtio/vhost-user.o
CC aarch64-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/arm/boot.o
CC aarch64-softmmu/hw/arm/collie.o
CC aarch64-softmmu/hw/arm/exynos4_boards.o
CC aarch64-softmmu/hw/arm/gumstix.o
CC aarch64-softmmu/hw/arm/highbank.o
CC aarch64-softmmu/hw/arm/digic_boards.o
CC aarch64-softmmu/hw/arm/integratorcp.o
CC aarch64-softmmu/hw/arm/mainstone.o
CC aarch64-softmmu/hw/arm/musicpal.o
CC aarch64-softmmu/hw/arm/nseries.o
CC aarch64-softmmu/hw/arm/omap_sx1.o
CC aarch64-softmmu/hw/arm/palm.o
CC aarch64-softmmu/hw/arm/spitz.o
CC aarch64-softmmu/hw/arm/realview.o
CC aarch64-softmmu/hw/arm/stellaris.o
CC aarch64-softmmu/hw/arm/tosa.o
CC aarch64-softmmu/hw/arm/versatilepb.o
CC aarch64-softmmu/hw/arm/vexpress.o
CC aarch64-softmmu/hw/arm/virt.o
CC aarch64-softmmu/hw/arm/xilinx_zynq.o
CC aarch64-softmmu/hw/arm/z2.o
CC aarch64-softmmu/hw/arm/virt-acpi-build.o
CC aarch64-softmmu/hw/arm/sysbus-fdt.o
CC aarch64-softmmu/hw/arm/armv7m.o
CC aarch64-softmmu/hw/arm/netduino2.o
CC aarch64-softmmu/hw/arm/exynos4210.o
CC aarch64-softmmu/hw/arm/pxa2xx.o
CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o
CC aarch64-softmmu/hw/arm/pxa2xx_pic.o
CC aarch64-softmmu/hw/arm/digic.o
CC aarch64-softmmu/hw/arm/omap1.o
CC aarch64-softmmu/hw/arm/omap2.o
CC aarch64-softmmu/hw/arm/strongarm.o
CC aarch64-softmmu/hw/arm/allwinner-a10.o
CC aarch64-softmmu/hw/arm/cubieboard.o
CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o
CC aarch64-softmmu/hw/arm/bcm2836.o
CC aarch64-softmmu/hw/arm/raspi.o
CC aarch64-softmmu/hw/arm/stm32f205_soc.o
CC aarch64-softmmu/hw/arm/xlnx-ep108.o
CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o
CC aarch64-softmmu/hw/arm/fsl-imx25.o
CC aarch64-softmmu/hw/arm/imx25_pdk.o
CC aarch64-softmmu/hw/arm/kzm.o
CC aarch64-softmmu/hw/arm/fsl-imx31.o
CC aarch64-softmmu/hw/arm/fsl-imx6.o
CC aarch64-softmmu/hw/arm/sabrelite.o
CC aarch64-softmmu/target/arm/arm-semi.o
CC aarch64-softmmu/hw/arm/aspeed_soc.o
CC aarch64-softmmu/target/arm/machine.o
CC aarch64-softmmu/hw/arm/aspeed.o
CC aarch64-softmmu/target/arm/psci.o
CC aarch64-softmmu/target/arm/kvm-stub.o
CC aarch64-softmmu/target/arm/arch_dump.o
CC aarch64-softmmu/target/arm/helper.o
CC aarch64-softmmu/target/arm/monitor.o
CC aarch64-softmmu/target/arm/translate.o
CC aarch64-softmmu/target/arm/op_helper.o
CC aarch64-softmmu/target/arm/neon_helper.o
CC aarch64-softmmu/target/arm/cpu.o
CC aarch64-softmmu/target/arm/iwmmxt_helper.o
CC aarch64-softmmu/target/arm/gdbstub.o
CC aarch64-softmmu/target/arm/cpu64.o
CC aarch64-softmmu/target/arm/helper-a64.o
CC aarch64-softmmu/target/arm/crypto_helper.o
CC aarch64-softmmu/target/arm/translate-a64.o
CC aarch64-softmmu/target/arm/gdbstub64.o
CC aarch64-softmmu/target/arm/arm-powerctl.o
CC x86_64-softmmu/trace/generated-helpers.o
/tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘handle_shri_with_rndacc’:
/tmp/qemu-test/src/target/arm/translate-a64.c:6369: warning: ‘tcg_src_hi’ may be used uninitialized in this function
/tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘disas_simd_scalar_two_reg_misc’:
/tmp/qemu-test/src/target/arm/translate-a64.c:8096: warning: ‘rmode’ may be used uninitialized in this function
GEN trace/generated-helpers.c
CC aarch64-softmmu/trace/control-target.o
CC aarch64-softmmu/gdbstub-xml.o
CC aarch64-softmmu/trace/generated-helpers.o
LINK aarch64-softmmu/qemu-system-aarch64
LINK x86_64-softmmu/qemu-system-x86_64
TEST tests/qapi-schema/alternate-any.out
TEST tests/qapi-schema/alternate-array.out
TEST tests/qapi-schema/alternate-base.out
TEST tests/qapi-schema/alternate-clash.out
TEST tests/qapi-schema/alternate-conflict-dict.out
TEST tests/qapi-schema/alternate-conflict-string.out
TEST tests/qapi-schema/alternate-nested.out
TEST tests/qapi-schema/alternate-empty.out
TEST tests/qapi-schema/alternate-unknown.out
TEST tests/qapi-schema/args-any.out
TEST tests/qapi-schema/args-alternate.out
TEST tests/qapi-schema/args-array-empty.out
TEST tests/qapi-schema/args-array-unknown.out
TEST tests/qapi-schema/args-bad-boxed.out
TEST tests/qapi-schema/args-boxed-anon.out
TEST tests/qapi-schema/args-boxed-empty.out
TEST tests/qapi-schema/args-boxed-string.out
TEST tests/qapi-schema/args-int.out
TEST tests/qapi-schema/args-invalid.out
TEST tests/qapi-schema/args-member-array-bad.out
TEST tests/qapi-schema/args-member-case.out
TEST tests/qapi-schema/args-member-unknown.out
TEST tests/qapi-schema/args-name-clash.out
TEST tests/qapi-schema/args-union.out
TEST tests/qapi-schema/args-unknown.out
TEST tests/qapi-schema/bad-base.out
TEST tests/qapi-schema/bad-data.out
TEST tests/qapi-schema/bad-ident.out
TEST tests/qapi-schema/bad-type-bool.out
TEST tests/qapi-schema/bad-type-dict.out
TEST tests/qapi-schema/bad-type-int.out
TEST tests/qapi-schema/base-cycle-direct.out
TEST tests/qapi-schema/base-cycle-indirect.out
TEST tests/qapi-schema/command-int.out
TEST tests/qapi-schema/comments.out
TEST tests/qapi-schema/double-data.out
TEST tests/qapi-schema/double-type.out
TEST tests/qapi-schema/duplicate-key.out
TEST tests/qapi-schema/empty.out
TEST tests/qapi-schema/enum-bad-name.out
TEST tests/qapi-schema/enum-bad-prefix.out
TEST tests/qapi-schema/enum-clash-member.out
TEST tests/qapi-schema/enum-dict-member.out
TEST tests/qapi-schema/enum-int-member.out
TEST tests/qapi-schema/enum-member-case.out
TEST tests/qapi-schema/enum-missing-data.out
TEST tests/qapi-schema/enum-wrong-data.out
TEST tests/qapi-schema/escape-outside-string.out
TEST tests/qapi-schema/escape-too-big.out
TEST tests/qapi-schema/escape-too-short.out
TEST tests/qapi-schema/event-boxed-empty.out
TEST tests/qapi-schema/event-case.out
TEST tests/qapi-schema/event-nest-struct.out
TEST tests/qapi-schema/flat-union-array-branch.out
TEST tests/qapi-schema/flat-union-bad-base.out
TEST tests/qapi-schema/flat-union-base-any.out
TEST tests/qapi-schema/flat-union-base-union.out
TEST tests/qapi-schema/flat-union-bad-discriminator.out
TEST tests/qapi-schema/flat-union-empty.out
TEST tests/qapi-schema/flat-union-clash-member.out
TEST tests/qapi-schema/flat-union-incomplete-branch.out
TEST tests/qapi-schema/flat-union-inline.out
TEST tests/qapi-schema/flat-union-int-branch.out
TEST tests/qapi-schema/flat-union-invalid-discriminator.out
TEST tests/qapi-schema/flat-union-invalid-branch-key.out
TEST tests/qapi-schema/flat-union-no-base.out
TEST tests/qapi-schema/flat-union-optional-discriminator.out
TEST tests/qapi-schema/flat-union-string-discriminator.out
TEST tests/qapi-schema/funny-char.out
TEST tests/qapi-schema/ident-with-escape.out
TEST tests/qapi-schema/include-before-err.out
TEST tests/qapi-schema/include-cycle.out
TEST tests/qapi-schema/include-format-err.out
TEST tests/qapi-schema/include-nested-err.out
TEST tests/qapi-schema/include-no-file.out
TEST tests/qapi-schema/include-non-file.out
TEST tests/qapi-schema/include-relpath.out
TEST tests/qapi-schema/include-repetition.out
TEST tests/qapi-schema/include-self-cycle.out
TEST tests/qapi-schema/include-simple.out
TEST tests/qapi-schema/indented-expr.out
TEST tests/qapi-schema/leading-comma-list.out
TEST tests/qapi-schema/leading-comma-object.out
TEST tests/qapi-schema/missing-comma-list.out
TEST tests/qapi-schema/missing-colon.out
TEST tests/qapi-schema/missing-comma-object.out
TEST tests/qapi-schema/missing-type.out
TEST tests/qapi-schema/qapi-schema-test.out
TEST tests/qapi-schema/nested-struct-data.out
TEST tests/qapi-schema/non-objects.out
TEST tests/qapi-schema/quoted-structural-chars.out
TEST tests/qapi-schema/redefined-builtin.out
TEST tests/qapi-schema/redefined-command.out
TEST tests/qapi-schema/redefined-event.out
TEST tests/qapi-schema/reserved-enum-q.out
TEST tests/qapi-schema/redefined-type.out
TEST tests/qapi-schema/reserved-command-q.out
TEST tests/qapi-schema/reserved-member-has.out
TEST tests/qapi-schema/reserved-member-q.out
TEST tests/qapi-schema/reserved-member-u.out
TEST tests/qapi-schema/reserved-member-underscore.out
TEST tests/qapi-schema/reserved-type-kind.out
TEST tests/qapi-schema/reserved-type-list.out
TEST tests/qapi-schema/returns-array-bad.out
TEST tests/qapi-schema/returns-dict.out
TEST tests/qapi-schema/returns-alternate.out
TEST tests/qapi-schema/returns-unknown.out
TEST tests/qapi-schema/returns-whitelist.out
TEST tests/qapi-schema/struct-base-clash-deep.out
TEST tests/qapi-schema/struct-base-clash.out
TEST tests/qapi-schema/struct-data-invalid.out
TEST tests/qapi-schema/struct-member-invalid.out
TEST tests/qapi-schema/trailing-comma-list.out
TEST tests/qapi-schema/trailing-comma-object.out
TEST tests/qapi-schema/type-bypass-bad-gen.out
TEST tests/qapi-schema/unclosed-list.out
TEST tests/qapi-schema/unclosed-object.out
TEST tests/qapi-schema/unclosed-string.out
TEST tests/qapi-schema/unicode-str.out
TEST tests/qapi-schema/union-base-no-discriminator.out
TEST tests/qapi-schema/union-branch-case.out
TEST tests/qapi-schema/union-clash-branches.out
TEST tests/qapi-schema/union-empty.out
TEST tests/qapi-schema/union-optional-branch.out
TEST tests/qapi-schema/union-invalid-base.out
TEST tests/qapi-schema/union-unknown.out
TEST tests/qapi-schema/unknown-escape.out
TEST tests/qapi-schema/unknown-expr-key.out
CC tests/check-qdict.o
CC tests/test-char.o
CC tests/check-qfloat.o
CC tests/check-qint.o
CC tests/check-qstring.o
CC tests/check-qlist.o
CC tests/check-qnull.o
CC tests/check-qjson.o
GEN tests/test-qapi-visit.c
CC tests/test-qobject-output-visitor.o
GEN tests/test-qapi-types.c
GEN tests/test-qmp-introspect.c
GEN tests/test-qapi-event.c
CC tests/test-clone-visitor.o
CC tests/test-qobject-input-visitor.o
CC tests/test-qobject-input-strict.o
CC tests/test-qmp-commands.o
GEN tests/test-qmp-marshal.c
CC tests/test-string-output-visitor.o
CC tests/test-string-input-visitor.o
CC tests/test-qmp-event.o
CC tests/test-opts-visitor.o
CC tests/test-coroutine.o
CC tests/test-iov.o
CC tests/test-visitor-serialization.o
CC tests/test-aio.o
CC tests/test-throttle.o
CC tests/test-thread-pool.o
CC tests/test-hbitmap.o
CC tests/test-blockjob.o
CC tests/test-xbzrle.o
CC tests/test-blockjob-txn.o
CC tests/test-x86-cpuid.o
CC tests/test-vmstate.o
CC tests/test-cutils.o
CC tests/test-mul64.o
CC tests/test-int128.o
CC tests/test-rcu-list.o
CC tests/rcutorture.o
CC tests/test-qdist.o
CC tests/test-qht.o
CC tests/test-qht-par.o
CC tests/qht-bench.o
CC tests/test-bitops.o
CC tests/test-bitcnt.o
/tmp/qemu-test/src/tests/test-int128.c:180: warning: ‘__noclone__’ attribute directive ignored
CC tests/check-qom-interface.o
CC tests/check-qom-proplist.o
CC tests/test-qemu-opts.o
CC tests/test-write-threshold.o
CC tests/test-crypto-hash.o
CC tests/test-crypto-hmac.o
CC tests/test-crypto-secret.o
CC tests/test-crypto-cipher.o
CC tests/test-qga.o
CC tests/libqtest.o
CC tests/test-io-task.o
CC tests/test-timed-average.o
CC tests/test-io-channel-socket.o
CC tests/io-channel-helpers.o
CC tests/test-io-channel-file.o
CC tests/test-io-channel-command.o
CC tests/test-io-channel-buffer.o
CC tests/test-crypto-ivgen.o
CC tests/test-crypto-afsplit.o
CC tests/test-base64.o
CC tests/test-crypto-xts.o
CC tests/test-crypto-block.o
CC tests/test-logging.o
CC tests/test-replication.o
CC tests/test-bufferiszero.o
CC tests/test-uuid.o
CC tests/ptimer-test.o
CC tests/ptimer-test-stubs.o
CC tests/vhost-user-test.o
CC tests/libqos/pci.o
CC tests/libqos/fw_cfg.o
CC tests/libqos/malloc.o
CC tests/libqos/i2c.o
CC tests/libqos/libqos.o
CC tests/libqos/malloc-spapr.o
CC tests/libqos/libqos-spapr.o
CC tests/libqos/rtas.o
CC tests/libqos/pci-spapr.o
CC tests/libqos/pci-pc.o
CC tests/libqos/malloc-pc.o
CC tests/libqos/libqos-pc.o
CC tests/libqos/ahci.o
CC tests/libqos/virtio.o
CC tests/libqos/virtio-pci.o
CC tests/libqos/virtio-mmio.o
CC tests/libqos/malloc-generic.o
CC tests/endianness-test.o
CC tests/fdc-test.o
CC tests/ide-test.o
CC tests/ahci-test.o
CC tests/hd-geo-test.o
CC tests/boot-order-test.o
CC tests/boot-sector.o
CC tests/bios-tables-test.o
CC tests/boot-serial-test.o
CC tests/pxe-test.o
CC tests/ipmi-bt-test.o
CC tests/rtc-test.o
CC tests/ipmi-kcs-test.o
CC tests/i440fx-test.o
/tmp/qemu-test/src/tests/ide-test.c: In function ‘cdrom_pio_impl’:
/tmp/qemu-test/src/tests/ide-test.c:791: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
/tmp/qemu-test/src/tests/ide-test.c: In function ‘test_cdrom_dma’:
/tmp/qemu-test/src/tests/ide-test.c:886: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
CC tests/drive_del-test.o
CC tests/fw_cfg-test.o
CC tests/wdt_ib700-test.o
CC tests/tco-test.o
CC tests/e1000-test.o
CC tests/rtl8139-test.o
CC tests/e1000e-test.o
CC tests/pcnet-test.o
CC tests/eepro100-test.o
CC tests/nvme-test.o
CC tests/ne2000-test.o
CC tests/ac97-test.o
CC tests/es1370-test.o
CC tests/virtio-net-test.o
CC tests/virtio-balloon-test.o
CC tests/virtio-blk-test.o
CC tests/virtio-rng-test.o
CC tests/virtio-serial-test.o
CC tests/virtio-scsi-test.o
CC tests/virtio-console-test.o
CC tests/tpci200-test.o
CC tests/ipoctal232-test.o
CC tests/display-vga-test.o
CC tests/intel-hda-test.o
CC tests/ivshmem-test.o
CC tests/vmxnet3-test.o
CC tests/pvpanic-test.o
CC tests/ioh3420-test.o
CC tests/i82801b11-test.o
CC tests/usb-hcd-ohci-test.o
CC tests/libqos/usb.o
CC tests/usb-hcd-uhci-test.o
CC tests/usb-hcd-ehci-test.o
CC tests/pc-cpu-test.o
CC tests/usb-hcd-xhci-test.o
CC tests/q35-test.o
CC tests/test-netfilter.o
CC tests/test-filter-mirror.o
CC tests/postcopy-test.o
CC tests/test-filter-redirector.o
CC tests/test-x86-cpuid-compat.o
CC tests/device-introspect-test.o
CC tests/qom-test.o
QTEST-x86_64 /tmp/qemu-test/src/tests/query-cpu-model-test.py
LINK tests/check-qdict
LINK tests/test-char
LINK tests/check-qfloat
LINK tests/check-qint
LINK tests/check-qstring
LINK tests/check-qlist
======================================================================
ERROR: testKVMModels (__main__.CPUModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/qemu-test/src/tests/query-cpu-model-test.py", line 383, in testKVMModels
if not self.kvm['present']:
AttributeError: 'CPUModelTest' object has no attribute 'kvm'
======================================================================
ERROR: testTCGModels (__main__.CPUModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/qemu-test/src/tests/query-cpu-model-test.py", line 380, in testTCGModels
self.checkAllCPUModels()
File "/tmp/qemu-test/src/tests/query-cpu-model-test.py", line 371, in checkAllCPUModels
to_test = MODELS_TO_TEST.get(self.target['arch'])
AttributeError: 'CPUModelTest' object has no attribute 'target'
----------------------------------------------------------------------
Ran 2 tests in 0.142s
FAILED (errors=2)
/tmp/qemu-test/src/tests/test-x86-cpuid-compat.c: In function ‘test_commas’:
/tmp/qemu-test/src/tests/test-x86-cpuid-compat.c:64: warning: implicit declaration of function ‘qom_get_bool’
/tmp/qemu-test/src/tests/test-x86-cpuid-compat.c:64: warning: nested extern declaration of ‘qom_get_bool’
make: *** [check-simpleqtest-/tmp/qemu-test/src/tests/query-cpu-model-test.py-x86_64] Error 1
make: *** Waiting for unfinished jobs....
make[1]: *** [docker-run] Error 2
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-b29wfeob/src'
make: *** [docker-run-test-quick@centos6] Error 2
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
` (9 preceding siblings ...)
2017-01-17 1:21 ` [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script no-reply
@ 2017-01-17 15:22 ` Jason J. Herne
2017-01-18 17:00 ` Eduardo Habkost
10 siblings, 1 reply; 24+ messages in thread
From: Jason J. Herne @ 2017-01-17 15:22 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel
Cc: David Hildenbrand, libvir-list, Markus Armbruster,
Christian Borntraeger, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson
On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
> This is a follow-up to the series that implements
> query-cpu-model-expansion. Before including the test script, the
> series has some fixes to allow the results of
> query-cpu-model-expansion to be used in the QEMU command-line.
>
> The script probably will work on s390x too, but I couldn't test
> it yet.
>
Eduardo,
This test seems to mostly work on s390. The only issue I ran into is
querying host model using tcg only. s390 requires kvm to query the host
model. Perhaps we could just skip the tcg host test case on s390?
hernejj: ['/usr/local/bin/qemu-system-s390x', '-chardev',
'socket,id=mon,path=/var/tmp/qom-fetch-monitor.sock', '-mon',
'chardev=mon,mode=control', '-display', 'none', '-vga', 'none',
'-qtest', 'unix:path=/var/tmp/qom-fetch-qtest.sock', '-qtest-log',
'/dev/null', '-machine', 'accel=qtest', '-machine', 'accel=tcg', '-S',
'-cpu', 'host']
qemu-system-s390x: CPU definition requires KVM
E
======================================================================
ERROR: testTCGModels (__main__.CPUModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./query-cpu-model-test.py", line 380, in testTCGModels
self.checkAllCPUModels()
File "./query-cpu-model-test.py", line 375, in checkAllCPUModels
self.checkOneCPUModel(m)
File "./query-cpu-model-test.py", line 304, in checkOneCPUModel
self.checkExpansions(model, msg)
File "./query-cpu-model-test.py", line 221, in checkExpansions
'%s.static' % (msg))
File "./query-cpu-model-test.py", line 177, in checkOneExpansion
type=type, model=model['model'])
File "./../scripts/qemu.py", line 185, in command
raise Exception(reply["error"]["desc"])
Exception: The CPU definition 'host' requires KVM
----------------------------------------------------------------------
Ran 2 tests in 74.622s
--
-- Jason J. Herne (jjherne@linux.vnet.ibm.com)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion
2017-01-17 1:02 ` [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion Eduardo Habkost
@ 2017-01-18 9:39 ` David Hildenbrand
2017-01-18 12:39 ` Eduardo Habkost
0 siblings, 1 reply; 24+ messages in thread
From: David Hildenbrand @ 2017-01-18 9:39 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel
Am 17.01.2017 um 02:02 schrieb Eduardo Habkost:
> + def checkExpansions(self, model, msg):
> + """Perform multiple expansion operations on model, validate results
> +
> + @model is a CpuModelExpansionInfo struct, with some extra keys:
> + * model['runnable'] should be set to True if the CPU model is
> + runnable on this host
> + * model['qom-props'] will be set to the full list of properties for
> + the CPU, if the model is runnable
> + """
> + exp_s = self.checkOneExpansion(model, 'static',
> + '%s.static' % (msg))
> + exp_f = self.checkOneExpansion(model, 'full',
> + '%s.full' % (msg))
> + exp_ss = self.checkOneExpansion(exp_s, 'static',
> + '%s.static.static' % (msg))
> + exp_sf = self.checkOneExpansion(exp_s, 'full',
> + '%s.static.full' % (msg))
> + exp_ff = self.checkOneExpansion(exp_f, 'full',
> + '%s.full.full' % (msg))
> +
> + # static expansion twice should result in the same data:
> + self.assertEquals(exp_s, exp_ss, '%s: static != static+static' % (msg))
> + # full expansion twice should also result in the same data:
> + self.assertEquals(exp_f, exp_ff, '%s: full != full+full' % (msg))
> +
> + # migration-safe CPU models have an extra feature:
> + # their static expansion should be equivalent to the full
> + # expansion (as their static expansion is also precise)
This is not true for s390x:
"z13-base" is both, static and migration-safe.
Doing a full expansion will expand all features (so your check against
QOM properties should succeed)
Doing a static expansion will expand no features, as z13-base is
already static, so there are no features to expand (no delta changes).
"z13" is only migration-safe.
Doing a full expansion will expand all features.
Doing a static expansion will only expand the features different to
"z13-base". (Remember, delta changes only to minimize reported
features).
And I wonder if that is also true for x86? This should only be true if
the "base" model contains absolutely no features.
> + if self.isMigrationSafe(model['model']):
> + self.assertEquals(exp_sf['model']['props'], exp_f['model']['props'],
> + '%s: props: static+full != full' % (msg))
> + self.assertEquals(exp_sf.get('qom-props'), exp_f.get('qom-props'),
> + '%s: qom-props: static+full != full' % (msg))
--
David
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion
2017-01-18 9:39 ` David Hildenbrand
@ 2017-01-18 12:39 ` Eduardo Habkost
2017-01-18 12:42 ` David Hildenbrand
0 siblings, 1 reply; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-18 12:39 UTC (permalink / raw)
To: David Hildenbrand; +Cc: qemu-devel
On Wed, Jan 18, 2017 at 10:39:46AM +0100, David Hildenbrand wrote:
> Am 17.01.2017 um 02:02 schrieb Eduardo Habkost:
> > + def checkExpansions(self, model, msg):
> > + """Perform multiple expansion operations on model, validate results
> > +
> > + @model is a CpuModelExpansionInfo struct, with some extra keys:
> > + * model['runnable'] should be set to True if the CPU model is
> > + runnable on this host
> > + * model['qom-props'] will be set to the full list of properties for
> > + the CPU, if the model is runnable
> > + """
> > + exp_s = self.checkOneExpansion(model, 'static',
> > + '%s.static' % (msg))
> > + exp_f = self.checkOneExpansion(model, 'full',
> > + '%s.full' % (msg))
> > + exp_ss = self.checkOneExpansion(exp_s, 'static',
> > + '%s.static.static' % (msg))
> > + exp_sf = self.checkOneExpansion(exp_s, 'full',
> > + '%s.static.full' % (msg))
> > + exp_ff = self.checkOneExpansion(exp_f, 'full',
> > + '%s.full.full' % (msg))
> > +
> > + # static expansion twice should result in the same data:
> > + self.assertEquals(exp_s, exp_ss, '%s: static != static+static' % (msg))
> > + # full expansion twice should also result in the same data:
> > + self.assertEquals(exp_f, exp_ff, '%s: full != full+full' % (msg))
> > +
> > + # migration-safe CPU models have an extra feature:
> > + # their static expansion should be equivalent to the full
> > + # expansion (as their static expansion is also precise)
>
> This is not true for s390x:
>
> "z13-base" is both, static and migration-safe.
>
> Doing a full expansion will expand all features (so your check against
> QOM properties should succeed)
>
> Doing a static expansion will expand no features, as z13-base is
> already static, so there are no features to expand (no delta changes).
>
> "z13" is only migration-safe.
>
> Doing a full expansion will expand all features.
>
> Doing a static expansion will only expand the features different to
> "z13-base". (Remember, delta changes only to minimize reported
> features).
I think my comment was confusing. By "equivalent" I don't mean
having the same expansion, but resulting in the same set of
features.
This is not comparing full_expansion(model) and
static_expansion(model). It is comparing full_expansion(model)
full_expansion(static_expansion(model)).
In other words, absolutely no feature should be lost or changed
during static expansion, and we verify that by doing a full
expansion after the static expansion (exp_sf) and comparing the
results with the full expansion (exp_f).
I believe this is true on s390x too, isn't it?
>
>
> And I wonder if that is also true for x86? This should only be true if
> the "base" model contains absolutely no features.
This is true on x86, but temporarily. "base" still contains no
features, but I plan to add extra information to type=full that
can't appear on type=static.
>
> > + if self.isMigrationSafe(model['model']):
> > + self.assertEquals(exp_sf['model']['props'], exp_f['model']['props'],
> > + '%s: props: static+full != full' % (msg))
> > + self.assertEquals(exp_sf.get('qom-props'), exp_f.get('qom-props'),
> > + '%s: qom-props: static+full != full' % (msg))
>
>
> --
>
> David
--
Eduardo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion
2017-01-18 12:39 ` Eduardo Habkost
@ 2017-01-18 12:42 ` David Hildenbrand
0 siblings, 0 replies; 24+ messages in thread
From: David Hildenbrand @ 2017-01-18 12:42 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: qemu-devel
Am 18.01.2017 um 13:39 schrieb Eduardo Habkost:
> On Wed, Jan 18, 2017 at 10:39:46AM +0100, David Hildenbrand wrote:
>> Am 17.01.2017 um 02:02 schrieb Eduardo Habkost:
>>> + def checkExpansions(self, model, msg):
>>> + """Perform multiple expansion operations on model, validate results
>>> +
>>> + @model is a CpuModelExpansionInfo struct, with some extra keys:
>>> + * model['runnable'] should be set to True if the CPU model is
>>> + runnable on this host
>>> + * model['qom-props'] will be set to the full list of properties for
>>> + the CPU, if the model is runnable
>>> + """
>>> + exp_s = self.checkOneExpansion(model, 'static',
>>> + '%s.static' % (msg))
>>> + exp_f = self.checkOneExpansion(model, 'full',
>>> + '%s.full' % (msg))
>>> + exp_ss = self.checkOneExpansion(exp_s, 'static',
>>> + '%s.static.static' % (msg))
>>> + exp_sf = self.checkOneExpansion(exp_s, 'full',
>>> + '%s.static.full' % (msg))
>>> + exp_ff = self.checkOneExpansion(exp_f, 'full',
>>> + '%s.full.full' % (msg))
>>> +
>>> + # static expansion twice should result in the same data:
>>> + self.assertEquals(exp_s, exp_ss, '%s: static != static+static' % (msg))
>>> + # full expansion twice should also result in the same data:
>>> + self.assertEquals(exp_f, exp_ff, '%s: full != full+full' % (msg))
>>> +
>>> + # migration-safe CPU models have an extra feature:
>>> + # their static expansion should be equivalent to the full
>>> + # expansion (as their static expansion is also precise)
>>
>> This is not true for s390x:
>>
>> "z13-base" is both, static and migration-safe.
>>
>> Doing a full expansion will expand all features (so your check against
>> QOM properties should succeed)
>>
>> Doing a static expansion will expand no features, as z13-base is
>> already static, so there are no features to expand (no delta changes).
>>
>> "z13" is only migration-safe.
>>
>> Doing a full expansion will expand all features.
>>
>> Doing a static expansion will only expand the features different to
>> "z13-base". (Remember, delta changes only to minimize reported
>> features).
>
> I think my comment was confusing. By "equivalent" I don't mean
> having the same expansion, but resulting in the same set of
> features.
>
> This is not comparing full_expansion(model) and
> static_expansion(model). It is comparing full_expansion(model)
> full_expansion(static_expansion(model)).
>
> In other words, absolutely no feature should be lost or changed
> during static expansion, and we verify that by doing a full
> expansion after the static expansion (exp_sf) and comparing the
> results with the full expansion (exp_f).
>
> I believe this is true on s390x too, isn't it?
Okay, I actually was confused by this comment. This makes sense!
full(z13) == full(static(z13))
Thanks for clarifying!
--
David
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-17 15:22 ` Jason J. Herne
@ 2017-01-18 17:00 ` Eduardo Habkost
2017-01-18 17:09 ` [Qemu-devel] [libvirt] " Jason J. Herne
0 siblings, 1 reply; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-18 17:00 UTC (permalink / raw)
To: Jason J. Herne
Cc: qemu-devel, David Hildenbrand, libvir-list, Markus Armbruster,
Christian Borntraeger, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson
On Tue, Jan 17, 2017 at 10:22:10AM -0500, Jason J. Herne wrote:
> On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
> > This is a follow-up to the series that implements
> > query-cpu-model-expansion. Before including the test script, the
> > series has some fixes to allow the results of
> > query-cpu-model-expansion to be used in the QEMU command-line.
> >
> > The script probably will work on s390x too, but I couldn't test
> > it yet.
> >
>
> Eduardo,
>
> This test seems to mostly work on s390. The only issue I ran into is
> querying host model using tcg only. s390 requires kvm to query the host
> model. Perhaps we could just skip the tcg host test case on s390?
We could still try to test "host", but add it to a greylist where
errors returned by query-cpu-model-expansion can be non-fatal.
query-cpu-model-expansion model="host" can also fail with KVM if
the host doesn't support CPU models.
>
>
> hernejj: ['/usr/local/bin/qemu-system-s390x', '-chardev',
> 'socket,id=mon,path=/var/tmp/qom-fetch-monitor.sock', '-mon',
> 'chardev=mon,mode=control', '-display', 'none', '-vga', 'none', '-qtest',
> 'unix:path=/var/tmp/qom-fetch-qtest.sock', '-qtest-log', '/dev/null',
> '-machine', 'accel=qtest', '-machine', 'accel=tcg', '-S', '-cpu', 'host']
> qemu-system-s390x: CPU definition requires KVM
> E
> ======================================================================
> ERROR: testTCGModels (__main__.CPUModelTest)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "./query-cpu-model-test.py", line 380, in testTCGModels
> self.checkAllCPUModels()
> File "./query-cpu-model-test.py", line 375, in checkAllCPUModels
> self.checkOneCPUModel(m)
> File "./query-cpu-model-test.py", line 304, in checkOneCPUModel
> self.checkExpansions(model, msg)
> File "./query-cpu-model-test.py", line 221, in checkExpansions
> '%s.static' % (msg))
> File "./query-cpu-model-test.py", line 177, in checkOneExpansion
> type=type, model=model['model'])
> File "./../scripts/qemu.py", line 185, in command
> raise Exception(reply["error"]["desc"])
> Exception: The CPU definition 'host' requires KVM
>
> ----------------------------------------------------------------------
> Ran 2 tests in 74.622s
>
>
> --
> -- Jason J. Herne (jjherne@linux.vnet.ibm.com)
>
--
Eduardo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-18 17:00 ` Eduardo Habkost
@ 2017-01-18 17:09 ` Jason J. Herne
2017-01-18 17:34 ` Eduardo Habkost
0 siblings, 1 reply; 24+ messages in thread
From: Jason J. Herne @ 2017-01-18 17:09 UTC (permalink / raw)
To: Eduardo Habkost
Cc: David Hildenbrand, libvir-list, qemu-devel,
Christian Borntraeger, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson, Collin L. Walling
On 01/18/2017 12:00 PM, Eduardo Habkost wrote:
> On Tue, Jan 17, 2017 at 10:22:10AM -0500, Jason J. Herne wrote:
>> On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
>>> This is a follow-up to the series that implements
>>> query-cpu-model-expansion. Before including the test script, the
>>> series has some fixes to allow the results of
>>> query-cpu-model-expansion to be used in the QEMU command-line.
>>>
>>> The script probably will work on s390x too, but I couldn't test
>>> it yet.
>>>
>>
>> Eduardo,
>>
>> This test seems to mostly work on s390. The only issue I ran into is
>> querying host model using tcg only. s390 requires kvm to query the host
>> model. Perhaps we could just skip the tcg host test case on s390?
>
> We could still try to test "host", but add it to a greylist where
> errors returned by query-cpu-model-expansion can be non-fatal.
> query-cpu-model-expansion model="host" can also fail with KVM if
> the host doesn't support CPU models.
>
David had the idea to just support -cpu host for tcg. We could do that.
In the meantime, I'm ok with your greylist idea too. This would allow the
script to work properly on s390 right from the start, and we can remove the
greylist when s390 supports specifying -cpu host for tcg.
--
-- Jason J. Herne (jjherne@linux.vnet.ibm.com)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-18 17:09 ` [Qemu-devel] [libvirt] " Jason J. Herne
@ 2017-01-18 17:34 ` Eduardo Habkost
2017-01-18 19:18 ` David Hildenbrand
0 siblings, 1 reply; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-18 17:34 UTC (permalink / raw)
To: Jason J. Herne
Cc: David Hildenbrand, libvir-list, qemu-devel,
Christian Borntraeger, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson, Collin L. Walling
On Wed, Jan 18, 2017 at 12:09:28PM -0500, Jason J. Herne wrote:
> On 01/18/2017 12:00 PM, Eduardo Habkost wrote:
> > On Tue, Jan 17, 2017 at 10:22:10AM -0500, Jason J. Herne wrote:
> > > On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
> > > > This is a follow-up to the series that implements
> > > > query-cpu-model-expansion. Before including the test script, the
> > > > series has some fixes to allow the results of
> > > > query-cpu-model-expansion to be used in the QEMU command-line.
> > > >
> > > > The script probably will work on s390x too, but I couldn't test
> > > > it yet.
> > > >
> > >
> > > Eduardo,
> > >
> > > This test seems to mostly work on s390. The only issue I ran into is
> > > querying host model using tcg only. s390 requires kvm to query the host
> > > model. Perhaps we could just skip the tcg host test case on s390?
> >
> > We could still try to test "host", but add it to a greylist where
> > errors returned by query-cpu-model-expansion can be non-fatal.
> > query-cpu-model-expansion model="host" can also fail with KVM if
> > the host doesn't support CPU models.
> >
>
> David had the idea to just support -cpu host for tcg. We could do that.
> In the meantime, I'm ok with your greylist idea too. This would allow the
> script to work properly on s390 right from the start, and we can remove the
> greylist when s390 supports specifying -cpu host for tcg.
I believe we will still need to ignore query-cpu-model-expansion
errors on some cases, otherwise the test script will fail on
hosts where KVM doesn't support CPU models in KVM.
But we probably don't need a hardcoded greylist, anyway: we could
just make the error non-fatal in case the CPU model is not
reported as migration-safe in query-cpu-definitions.
But I was wondering:
1) Isn't "-cpu host" the default CPU model on s390x on KVM,
even if the host doesn't support CPU models?
2) Is it really correct to return an error on
"query-cpu-model-expansion model=host type=full" if the host
doesn't support CPU models?
What if it just returned { name: "host", props: {} }
on those cases, meaning that the CPU model is valid and
usable, but QEMU is unable to provide extra information about
it.
--
Eduardo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-18 17:34 ` Eduardo Habkost
@ 2017-01-18 19:18 ` David Hildenbrand
2017-01-19 10:48 ` Eduardo Habkost
0 siblings, 1 reply; 24+ messages in thread
From: David Hildenbrand @ 2017-01-18 19:18 UTC (permalink / raw)
To: Eduardo Habkost, Jason J. Herne
Cc: libvir-list, qemu-devel, Christian Borntraeger, Cornelia Huck,
Igor Mammedov, Jiri Denemark, Richard Henderson,
Collin L. Walling
Am 18.01.2017 um 18:34 schrieb Eduardo Habkost:
> On Wed, Jan 18, 2017 at 12:09:28PM -0500, Jason J. Herne wrote:
>> On 01/18/2017 12:00 PM, Eduardo Habkost wrote:
>>> On Tue, Jan 17, 2017 at 10:22:10AM -0500, Jason J. Herne wrote:
>>>> On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
>>>>> This is a follow-up to the series that implements
>>>>> query-cpu-model-expansion. Before including the test script, the
>>>>> series has some fixes to allow the results of
>>>>> query-cpu-model-expansion to be used in the QEMU command-line.
>>>>>
>>>>> The script probably will work on s390x too, but I couldn't test
>>>>> it yet.
>>>>>
>>>>
>>>> Eduardo,
>>>>
>>>> This test seems to mostly work on s390. The only issue I ran into is
>>>> querying host model using tcg only. s390 requires kvm to query the host
>>>> model. Perhaps we could just skip the tcg host test case on s390?
>>>
>>> We could still try to test "host", but add it to a greylist where
>>> errors returned by query-cpu-model-expansion can be non-fatal.
>>> query-cpu-model-expansion model="host" can also fail with KVM if
>>> the host doesn't support CPU models.
>>>
>>
>> David had the idea to just support -cpu host for tcg. We could do that.
>> In the meantime, I'm ok with your greylist idea too. This would allow the
>> script to work properly on s390 right from the start, and we can remove the
>> greylist when s390 supports specifying -cpu host for tcg.
>
> I believe we will still need to ignore query-cpu-model-expansion
> errors on some cases, otherwise the test script will fail on
> hosts where KVM doesn't support CPU models in KVM.
That is indeed true. For "host" + KVM there would have to be an extra
check. non-fatal error sound right for this case (e.g. a warning)
>
> But we probably don't need a hardcoded greylist, anyway: we could
> just make the error non-fatal in case the CPU model is not
> reported as migration-safe in query-cpu-definitions.
>
> But I was wondering:
>
> 1) Isn't "-cpu host" the default CPU model on s390x on KVM,
> even if the host doesn't support CPU models?
Yes, it has an inbuilt compatibility mode when specified. If KVM support
for cpu models is missing, using "-cpu host" will work (as it worked on
QEMU versions without cpu model support), doing something like "-cpu
host,vx=on" will not work, as modifying features is not possible (as the
interface for query/config is missing).
Using "host" for all query-cpu-model is forbiden, as we can't tell what
this model looks like.
>
> 2) Is it really correct to return an error on
> "query-cpu-model-expansion model=host type=full" if the host
> doesn't support CPU models?
>
Yes it is, because there is no way to tell which features there are.
Returning { name: "host", props: {} } would be misleading, as it
would mean that there are no features. Which is wrong. We just can't
tell. It is up to the caller to handle this. E.g. ignoring and
continuing, doing compatibility stuff or simply reporting an error.
Also think about "query-cpu-model-expansion model=host type=static",
which will primarily be used by libvirt on s390x. There is no way to
expand this into a static cpu model. Faking anything will just hide errors.
If "host" can't be expanded, QEMU has to be treated like there is no CPU
model support (as for older QEMU versions).
> What if it just returned { name: "host", props: {} }
> on those cases, meaning that the CPU model is valid and
> usable, but QEMU is unable to provide extra information about
> it.
>
--
David
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-18 19:18 ` David Hildenbrand
@ 2017-01-19 10:48 ` Eduardo Habkost
2017-01-19 17:21 ` David Hildenbrand
0 siblings, 1 reply; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-19 10:48 UTC (permalink / raw)
To: David Hildenbrand
Cc: Jason J. Herne, libvir-list, qemu-devel, Christian Borntraeger,
Cornelia Huck, Igor Mammedov, Jiri Denemark, Richard Henderson,
Collin L. Walling
On Wed, Jan 18, 2017 at 08:18:40PM +0100, David Hildenbrand wrote:
> Am 18.01.2017 um 18:34 schrieb Eduardo Habkost:
> > On Wed, Jan 18, 2017 at 12:09:28PM -0500, Jason J. Herne wrote:
> >> On 01/18/2017 12:00 PM, Eduardo Habkost wrote:
> >>> On Tue, Jan 17, 2017 at 10:22:10AM -0500, Jason J. Herne wrote:
> >>>> On 01/16/2017 08:01 PM, Eduardo Habkost wrote:
> >>>>> This is a follow-up to the series that implements
> >>>>> query-cpu-model-expansion. Before including the test script, the
> >>>>> series has some fixes to allow the results of
> >>>>> query-cpu-model-expansion to be used in the QEMU command-line.
> >>>>>
> >>>>> The script probably will work on s390x too, but I couldn't test
> >>>>> it yet.
> >>>>>
> >>>>
> >>>> Eduardo,
> >>>>
> >>>> This test seems to mostly work on s390. The only issue I ran into is
> >>>> querying host model using tcg only. s390 requires kvm to query the host
> >>>> model. Perhaps we could just skip the tcg host test case on s390?
> >>>
> >>> We could still try to test "host", but add it to a greylist where
> >>> errors returned by query-cpu-model-expansion can be non-fatal.
> >>> query-cpu-model-expansion model="host" can also fail with KVM if
> >>> the host doesn't support CPU models.
> >>>
> >>
> >> David had the idea to just support -cpu host for tcg. We could do that.
> >> In the meantime, I'm ok with your greylist idea too. This would allow the
> >> script to work properly on s390 right from the start, and we can remove the
> >> greylist when s390 supports specifying -cpu host for tcg.
> >
> > I believe we will still need to ignore query-cpu-model-expansion
> > errors on some cases, otherwise the test script will fail on
> > hosts where KVM doesn't support CPU models in KVM.
>
> That is indeed true. For "host" + KVM there would have to be an extra
> check. non-fatal error sound right for this case (e.g. a warning)
>
> >
> > But we probably don't need a hardcoded greylist, anyway: we could
> > just make the error non-fatal in case the CPU model is not
> > reported as migration-safe in query-cpu-definitions.
> >
> > But I was wondering:
> >
> > 1) Isn't "-cpu host" the default CPU model on s390x on KVM,
> > even if the host doesn't support CPU models?
>
> Yes, it has an inbuilt compatibility mode when specified. If KVM support
> for cpu models is missing, using "-cpu host" will work (as it worked on
> QEMU versions without cpu model support), doing something like "-cpu
> host,vx=on" will not work, as modifying features is not possible (as the
> interface for query/config is missing).
>
> Using "host" for all query-cpu-model is forbiden, as we can't tell what
> this model looks like.
>
> >
> > 2) Is it really correct to return an error on
> > "query-cpu-model-expansion model=host type=full" if the host
> > doesn't support CPU models?
> >
>
> Yes it is, because there is no way to tell which features there are.
> Returning { name: "host", props: {} } would be misleading, as it
> would mean that there are no features. Which is wrong. We just can't
> tell. It is up to the caller to handle this. E.g. ignoring and
> continuing, doing compatibility stuff or simply reporting an error.
Well, if there's a risk { props: {} } will be interpreted as "all
features disabled" instead of "we don't know the real value for
any feature", then I agree that returning an error is better and
safer.
>
> Also think about "query-cpu-model-expansion model=host type=static",
> which will primarily be used by libvirt on s390x. There is no way to
> expand this into a static cpu model. Faking anything will just hide errors.
Yes, static expansion of host model must always return an error
if it's not possible to expand.
>
> If "host" can't be expanded, QEMU has to be treated like there is no CPU
> model support (as for older QEMU versions).
OK. I will propose a patch updating the query-cpu-model-expansion
documentation to be more explicit about it.
>
> > What if it just returned { name: "host", props: {} }
> > on those cases, meaning that the CPU model is valid and
> > usable, but QEMU is unable to provide extra information about
> > it.
> >
>
>
> --
>
> David
--
Eduardo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-19 10:48 ` Eduardo Habkost
@ 2017-01-19 17:21 ` David Hildenbrand
2017-01-19 17:45 ` Daniel P. Berrange
0 siblings, 1 reply; 24+ messages in thread
From: David Hildenbrand @ 2017-01-19 17:21 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Jason J. Herne, libvir-list, qemu-devel, Christian Borntraeger,
Cornelia Huck, Igor Mammedov, Jiri Denemark, Richard Henderson,
Collin L. Walling
>> Also think about "query-cpu-model-expansion model=host type=static",
>> which will primarily be used by libvirt on s390x. There is no way to
>> expand this into a static cpu model. Faking anything will just hide errors.
>
> Yes, static expansion of host model must always return an error
> if it's not possible to expand.
>
>>
>> If "host" can't be expanded, QEMU has to be treated like there is no CPU
>> model support (as for older QEMU versions).
>
> OK. I will propose a patch updating the query-cpu-model-expansion
> documentation to be more explicit about it.
The only real alternative I see would be disabling the query-cpu-model-*
interface completely if KVM support is not available.
This would however mean, that the same QEMU binary would have the
interface when running under TCG, but not when running under KVM on an
old KVM version.
That also doesn't really feel right, or what do you think?
--
David
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-19 17:21 ` David Hildenbrand
@ 2017-01-19 17:45 ` Daniel P. Berrange
2017-01-20 14:30 ` David Hildenbrand
0 siblings, 1 reply; 24+ messages in thread
From: Daniel P. Berrange @ 2017-01-19 17:45 UTC (permalink / raw)
To: David Hildenbrand
Cc: Eduardo Habkost, libvir-list, qemu-devel, Christian Borntraeger,
Collin L. Walling, Jason J. Herne, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson
On Thu, Jan 19, 2017 at 06:21:22PM +0100, David Hildenbrand wrote:
>
> >> Also think about "query-cpu-model-expansion model=host type=static",
> >> which will primarily be used by libvirt on s390x. There is no way to
> >> expand this into a static cpu model. Faking anything will just hide errors.
> >
> > Yes, static expansion of host model must always return an error
> > if it's not possible to expand.
> >
> >>
> >> If "host" can't be expanded, QEMU has to be treated like there is no CPU
> >> model support (as for older QEMU versions).
> >
> > OK. I will propose a patch updating the query-cpu-model-expansion
> > documentation to be more explicit about it.
>
> The only real alternative I see would be disabling the query-cpu-model-*
> interface completely if KVM support is not available.
>
> This would however mean, that the same QEMU binary would have the
> interface when running under TCG, but not when running under KVM on an
> old KVM version.
>
> That also doesn't really feel right, or what do you think?
Yeah that really isn't good. query-cpu-model-* needs to work on TCG
and *not* have a dependancy on KVM in that case, since you can be
running TCG s390 on a x86_64 host, so the host CPU is totally irrelevant
for TCG
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-19 17:45 ` Daniel P. Berrange
@ 2017-01-20 14:30 ` David Hildenbrand
2017-01-20 18:33 ` Eduardo Habkost
0 siblings, 1 reply; 24+ messages in thread
From: David Hildenbrand @ 2017-01-20 14:30 UTC (permalink / raw)
To: Daniel P. Berrange
Cc: Eduardo Habkost, libvir-list, qemu-devel, Christian Borntraeger,
Collin L. Walling, Jason J. Herne, Cornelia Huck, Igor Mammedov,
Jiri Denemark, Richard Henderson
Am 19.01.2017 um 18:45 schrieb Daniel P. Berrange:
> On Thu, Jan 19, 2017 at 06:21:22PM +0100, David Hildenbrand wrote:
>>
>>>> Also think about "query-cpu-model-expansion model=host type=static",
>>>> which will primarily be used by libvirt on s390x. There is no way to
>>>> expand this into a static cpu model. Faking anything will just hide errors.
>>>
>>> Yes, static expansion of host model must always return an error
>>> if it's not possible to expand.
>>>
>>>>
>>>> If "host" can't be expanded, QEMU has to be treated like there is no CPU
>>>> model support (as for older QEMU versions).
>>>
>>> OK. I will propose a patch updating the query-cpu-model-expansion
>>> documentation to be more explicit about it.
>>
>> The only real alternative I see would be disabling the query-cpu-model-*
>> interface completely if KVM support is not available.
>>
>> This would however mean, that the same QEMU binary would have the
>> interface when running under TCG, but not when running under KVM on an
>> old KVM version.
>>
>> That also doesn't really feel right, or what do you think?
>
> Yeah that really isn't good. query-cpu-model-* needs to work on TCG
> and *not* have a dependancy on KVM in that case, since you can be
> running TCG s390 on a x86_64 host, so the host CPU is totally irrelevant
> for TCG
>
Actually what I meant was:
TCG: query-cpu-model-* interface always provided
KVM (with cpu model support): query-cpu-model-* interface provided
KVM (without cpu model support): no query-cpu-model-* interface provided
This would avoid having to report an error when expanding "host" in the
third case (KVM without cpu model support) but would lead to one QEMU
binary having a different set of supported qmp calls when called from
TCG and KVM.
> Regards,
> Daniel
>
--
David
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [Qemu-devel] [libvirt] [PATCH 0/9] i386: query-cpu-model-expansion test script
2017-01-20 14:30 ` David Hildenbrand
@ 2017-01-20 18:33 ` Eduardo Habkost
0 siblings, 0 replies; 24+ messages in thread
From: Eduardo Habkost @ 2017-01-20 18:33 UTC (permalink / raw)
To: David Hildenbrand
Cc: Daniel P. Berrange, libvir-list, qemu-devel,
Christian Borntraeger, Collin L. Walling, Jason J. Herne,
Cornelia Huck, Igor Mammedov, Jiri Denemark, Richard Henderson
On Fri, Jan 20, 2017 at 03:30:54PM +0100, David Hildenbrand wrote:
> Am 19.01.2017 um 18:45 schrieb Daniel P. Berrange:
> > On Thu, Jan 19, 2017 at 06:21:22PM +0100, David Hildenbrand wrote:
> >>
> >>>> Also think about "query-cpu-model-expansion model=host type=static",
> >>>> which will primarily be used by libvirt on s390x. There is no way to
> >>>> expand this into a static cpu model. Faking anything will just hide errors.
> >>>
> >>> Yes, static expansion of host model must always return an error
> >>> if it's not possible to expand.
> >>>
> >>>>
> >>>> If "host" can't be expanded, QEMU has to be treated like there is no CPU
> >>>> model support (as for older QEMU versions).
> >>>
> >>> OK. I will propose a patch updating the query-cpu-model-expansion
> >>> documentation to be more explicit about it.
> >>
> >> The only real alternative I see would be disabling the query-cpu-model-*
> >> interface completely if KVM support is not available.
> >>
> >> This would however mean, that the same QEMU binary would have the
> >> interface when running under TCG, but not when running under KVM on an
> >> old KVM version.
> >>
> >> That also doesn't really feel right, or what do you think?
> >
> > Yeah that really isn't good. query-cpu-model-* needs to work on TCG
> > and *not* have a dependancy on KVM in that case, since you can be
> > running TCG s390 on a x86_64 host, so the host CPU is totally irrelevant
> > for TCG
> >
>
> Actually what I meant was:
>
> TCG: query-cpu-model-* interface always provided
> KVM (with cpu model support): query-cpu-model-* interface provided
> KVM (without cpu model support): no query-cpu-model-* interface provided
>
> This would avoid having to report an error when expanding "host" in the
> third case (KVM without cpu model support) but would lead to one QEMU
> binary having a different set of supported qmp calls when called from
> TCG and KVM.
I don't think we should do that. Expansion of static and
migration-safe CPU models is host-independent by design, so it
should always work on any host. Management software could even
choose to run CPU expansion on one host, and start the VM (using
the results of the expansion) on a different host.
--
Eduardo
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2017-01-20 18:33 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-17 1:01 [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 1/9] target-i386: Move "host" properties to base class Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 2/9] target-i386: Allow short strings to be used as vendor ID Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 3/9] cpu: Support comma escaping when parsing -cpu Eduardo Habkost
2017-01-17 1:01 ` [Qemu-devel] [PATCH 4/9] qemu.py: Make logging optional Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 5/9] qtest.py: Support QTEST_LOG environment variable Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 6/9] qtest.py: make logging optional Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 7/9] qtest.py: Make 'binary' parameter optional Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 8/9] tests: Add rules to non-gtester qtest test cases Eduardo Habkost
2017-01-17 1:02 ` [Qemu-devel] [PATCH 9/9] tests: Test case for query-cpu-model-expansion Eduardo Habkost
2017-01-18 9:39 ` David Hildenbrand
2017-01-18 12:39 ` Eduardo Habkost
2017-01-18 12:42 ` David Hildenbrand
2017-01-17 1:21 ` [Qemu-devel] [PATCH 0/9] i386: query-cpu-model-expansion test script no-reply
2017-01-17 15:22 ` Jason J. Herne
2017-01-18 17:00 ` Eduardo Habkost
2017-01-18 17:09 ` [Qemu-devel] [libvirt] " Jason J. Herne
2017-01-18 17:34 ` Eduardo Habkost
2017-01-18 19:18 ` David Hildenbrand
2017-01-19 10:48 ` Eduardo Habkost
2017-01-19 17:21 ` David Hildenbrand
2017-01-19 17:45 ` Daniel P. Berrange
2017-01-20 14:30 ` David Hildenbrand
2017-01-20 18:33 ` Eduardo Habkost
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.