* [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests
@ 2021-12-15 16:48 Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 1/8] tests/unit/test-smp-parse: Pass machine type as argument to tests Philippe Mathieu-Daudé
` (7 more replies)
0 siblings, 8 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Eduardo Habkost, Philippe Mathieu-Daudé
Since v4:
- Rebase (skipping merged patches)
- Renamed tests (Yanan Wang)
Since v2:
- Restore 'dies_supported' field in test_with_dies (Yanan)
- Add R-b tags
- QOM-ify the TYPE_MACHINE classes
Supersedes: <20211115145900.2531865-1-philmd@redhat.com>
Philippe Mathieu-Daudé (8):
tests/unit/test-smp-parse: Pass machine type as argument to tests
tests/unit/test-smp-parse: Split the 'generic' test in valid / invalid
tests/unit/test-smp-parse: Add 'smp-with-dies' machine type
tests/unit/test-smp-parse: Add 'smp-generic-invalid' machine type
tests/unit/test-smp-parse: Add 'smp-generic-valid' machine type
tests/unit/test-smp-parse: Simplify pointer to compound literal use
tests/unit/test-smp-parse: Constify some pointer/struct
hw/core: Rename smp_parse() -> machine_parse_smp_config()
include/hw/boards.h | 3 +-
hw/core/machine-smp.c | 6 +-
hw/core/machine.c | 2 +-
tests/unit/test-smp-parse.c | 181 +++++++++++++++++++++++-------------
4 files changed, 121 insertions(+), 71 deletions(-)
--
2.33.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v5 1/8] tests/unit/test-smp-parse: Pass machine type as argument to tests
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 2/8] tests/unit/test-smp-parse: Split the 'generic' test in valid / invalid Philippe Mathieu-Daudé
` (6 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
Use g_test_add_data_func() instead of g_test_add_func() so we can
pass the machine type to the tests (we will soon have different
machine types).
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index b02450e25a3..37c6b4981db 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -487,9 +487,10 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
mc->name = g_strdup(SMP_MACHINE_NAME);
}
-static void test_generic(void)
+static void test_generic(const void *opaque)
{
- Object *obj = object_new(TYPE_MACHINE);
+ const char *machine_type = opaque;
+ Object *obj = object_new(machine_type);
MachineState *ms = MACHINE(obj);
MachineClass *mc = MACHINE_GET_CLASS(obj);
SMPTestData *data = &(SMPTestData){{ }};
@@ -525,9 +526,10 @@ static void test_generic(void)
object_unref(obj);
}
-static void test_with_dies(void)
+static void test_with_dies(const void *opaque)
{
- Object *obj = object_new(TYPE_MACHINE);
+ const char *machine_type = opaque;
+ Object *obj = object_new(machine_type);
MachineState *ms = MACHINE(obj);
MachineClass *mc = MACHINE_GET_CLASS(obj);
SMPTestData *data = &(SMPTestData){{ }};
@@ -599,8 +601,12 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL);
- g_test_add_func("/test-smp-parse/generic", test_generic);
- g_test_add_func("/test-smp-parse/with_dies", test_with_dies);
+ g_test_add_data_func("/test-smp-parse/generic",
+ TYPE_MACHINE,
+ test_generic);
+ g_test_add_data_func("/test-smp-parse/with_dies",
+ TYPE_MACHINE,
+ test_with_dies);
g_test_run();
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 2/8] tests/unit/test-smp-parse: Split the 'generic' test in valid / invalid
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 1/8] tests/unit/test-smp-parse: Pass machine type as argument to tests Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 3/8] tests/unit/test-smp-parse: Add 'smp-with-dies' machine type Philippe Mathieu-Daudé
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
Split the 'generic' test in two tests: 'valid' and 'invalid'.
This will allow us to remove the hack which modifies the
MachineClass internal state.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 37c6b4981db..425ed6b6b92 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -487,7 +487,7 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
mc->name = g_strdup(SMP_MACHINE_NAME);
}
-static void test_generic(const void *opaque)
+static void test_generic_valid(const void *opaque)
{
const char *machine_type = opaque;
Object *obj = object_new(machine_type);
@@ -508,6 +508,18 @@ static void test_generic(const void *opaque)
smp_parse_test(ms, data, true);
}
+ object_unref(obj);
+}
+
+static void test_generic_invalid(const void *opaque)
+{
+ const char *machine_type = opaque;
+ Object *obj = object_new(machine_type);
+ MachineState *ms = MACHINE(obj);
+ MachineClass *mc = MACHINE_GET_CLASS(obj);
+ SMPTestData *data = &(SMPTestData){};
+ int i;
+
/* Force invalid min CPUs and max CPUs */
mc->min_cpus = 2;
mc->max_cpus = 511;
@@ -601,9 +613,12 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL);
- g_test_add_data_func("/test-smp-parse/generic",
+ g_test_add_data_func("/test-smp-parse/generic/valid",
TYPE_MACHINE,
- test_generic);
+ test_generic_valid);
+ g_test_add_data_func("/test-smp-parse/generic/invalid",
+ TYPE_MACHINE,
+ test_generic_invalid);
g_test_add_data_func("/test-smp-parse/with_dies",
TYPE_MACHINE,
test_with_dies);
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 3/8] tests/unit/test-smp-parse: Add 'smp-with-dies' machine type
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 1/8] tests/unit/test-smp-parse: Pass machine type as argument to tests Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 2/8] tests/unit/test-smp-parse: Split the 'generic' test in valid / invalid Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' " Philippe Mathieu-Daudé
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
Avoid modifying the MachineClass internals by adding the
'smp-with-dies' machine, which inherits from TYPE_MACHINE.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Tested-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 425ed6b6b92..f66cf7bb598 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -487,6 +487,16 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
mc->name = g_strdup(SMP_MACHINE_NAME);
}
+static void machine_with_dies_class_init(ObjectClass *oc, void *data)
+{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
+ mc->min_cpus = MIN_CPUS;
+ mc->max_cpus = MAX_CPUS;
+
+ mc->smp_props.dies_supported = true;
+}
+
static void test_generic_valid(const void *opaque)
{
const char *machine_type = opaque;
@@ -548,9 +558,6 @@ static void test_with_dies(const void *opaque)
unsigned int num_dies = 2;
int i;
- /* Force the SMP compat properties */
- mc->smp_props.dies_supported = true;
-
for (i = 0; i < ARRAY_SIZE(data_generic_valid); i++) {
*data = data_generic_valid[i];
unsupported_params_init(mc, data);
@@ -588,9 +595,6 @@ static void test_with_dies(const void *opaque)
smp_parse_test(ms, data, false);
}
- /* Restore the SMP compat properties */
- mc->smp_props.dies_supported = false;
-
object_unref(obj);
}
@@ -602,6 +606,10 @@ static const TypeInfo smp_machine_types[] = {
.class_init = machine_base_class_init,
.class_size = sizeof(MachineClass),
.instance_size = sizeof(MachineState),
+ }, {
+ .name = MACHINE_TYPE_NAME("smp-with-dies"),
+ .parent = TYPE_MACHINE,
+ .class_init = machine_with_dies_class_init,
}
};
@@ -620,7 +628,7 @@ int main(int argc, char *argv[])
TYPE_MACHINE,
test_generic_invalid);
g_test_add_data_func("/test-smp-parse/with_dies",
- TYPE_MACHINE,
+ MACHINE_TYPE_NAME("smp-with-dies"),
test_with_dies);
g_test_run();
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' machine type
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2021-12-15 16:48 ` [PATCH v5 3/8] tests/unit/test-smp-parse: Add 'smp-with-dies' machine type Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-16 3:20 ` wangyanan (Y) via
2021-12-15 16:48 ` [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' " Philippe Mathieu-Daudé
` (3 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, Philippe Mathieu-Daudé
Avoid modifying the MachineClass internals by adding the
'smp-generic-invalid' machine, which inherits from TYPE_MACHINE.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index f66cf7bb598..72e7236afd9 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -487,6 +487,17 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
mc->name = g_strdup(SMP_MACHINE_NAME);
}
+static void machine_without_dies_invalid_class_init(ObjectClass *oc, void *data)
+{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
+ /* Force invalid min CPUs and max CPUs */
+ mc->min_cpus = 2;
+ mc->max_cpus = 511;
+
+ mc->smp_props.dies_supported = false;
+}
+
static void machine_with_dies_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -530,10 +541,6 @@ static void test_generic_invalid(const void *opaque)
SMPTestData *data = &(SMPTestData){};
int i;
- /* Force invalid min CPUs and max CPUs */
- mc->min_cpus = 2;
- mc->max_cpus = 511;
-
for (i = 0; i < ARRAY_SIZE(data_generic_invalid); i++) {
*data = data_generic_invalid[i];
unsupported_params_init(mc, data);
@@ -541,10 +548,6 @@ static void test_generic_invalid(const void *opaque)
smp_parse_test(ms, data, false);
}
- /* Reset the supported min CPUs and max CPUs */
- mc->min_cpus = MIN_CPUS;
- mc->max_cpus = MAX_CPUS;
-
object_unref(obj);
}
@@ -606,6 +609,10 @@ static const TypeInfo smp_machine_types[] = {
.class_init = machine_base_class_init,
.class_size = sizeof(MachineClass),
.instance_size = sizeof(MachineState),
+ }, {
+ .name = MACHINE_TYPE_NAME("smp-generic-invalid"),
+ .parent = TYPE_MACHINE,
+ .class_init = machine_without_dies_invalid_class_init,
}, {
.name = MACHINE_TYPE_NAME("smp-with-dies"),
.parent = TYPE_MACHINE,
@@ -625,7 +632,7 @@ int main(int argc, char *argv[])
TYPE_MACHINE,
test_generic_valid);
g_test_add_data_func("/test-smp-parse/generic/invalid",
- TYPE_MACHINE,
+ MACHINE_TYPE_NAME("smp-generic-invalid"),
test_generic_invalid);
g_test_add_data_func("/test-smp-parse/with_dies",
MACHINE_TYPE_NAME("smp-with-dies"),
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' machine type
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2021-12-15 16:48 ` [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' " Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-16 3:21 ` wangyanan (Y) via
2021-12-15 16:48 ` [PATCH v5 6/8] tests/unit/test-smp-parse: Simplify pointer to compound literal use Philippe Mathieu-Daudé
` (2 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, Philippe Mathieu-Daudé
Keep the common TYPE_MACHINE class initialization in
machine_base_class_init(), make it abstract, and move
the non-common code to a new class: "smp-generic-valid".
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 72e7236afd9..5349ae14824 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -478,13 +478,19 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ mc->smp_props.prefer_sockets = true;
+
+ mc->name = g_strdup(SMP_MACHINE_NAME);
+}
+
+static void machine_without_dies_valid_class_init(ObjectClass *oc, void *data)
+{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->min_cpus = MIN_CPUS;
mc->max_cpus = MAX_CPUS;
- mc->smp_props.prefer_sockets = true;
mc->smp_props.dies_supported = false;
-
- mc->name = g_strdup(SMP_MACHINE_NAME);
}
static void machine_without_dies_invalid_class_init(ObjectClass *oc, void *data)
@@ -606,9 +612,14 @@ static const TypeInfo smp_machine_types[] = {
{
.name = TYPE_MACHINE,
.parent = TYPE_OBJECT,
+ .abstract = true,
.class_init = machine_base_class_init,
.class_size = sizeof(MachineClass),
.instance_size = sizeof(MachineState),
+ }, {
+ .name = MACHINE_TYPE_NAME("smp-generic-valid"),
+ .parent = TYPE_MACHINE,
+ .class_init = machine_without_dies_valid_class_init,
}, {
.name = MACHINE_TYPE_NAME("smp-generic-invalid"),
.parent = TYPE_MACHINE,
@@ -629,7 +640,7 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL);
g_test_add_data_func("/test-smp-parse/generic/valid",
- TYPE_MACHINE,
+ MACHINE_TYPE_NAME("smp-generic-valid"),
test_generic_valid);
g_test_add_data_func("/test-smp-parse/generic/invalid",
MACHINE_TYPE_NAME("smp-generic-invalid"),
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 6/8] tests/unit/test-smp-parse: Simplify pointer to compound literal use
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2021-12-15 16:48 ` [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' " Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 7/8] tests/unit/test-smp-parse: Constify some pointer/struct Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 8/8] hw/core: Rename smp_parse() -> machine_parse_smp_config() Philippe Mathieu-Daudé
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Andrew Jones, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
We can simply use a local variable (and pass its pointer) instead
of a pointer to a compound literal.
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Tested-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 66 ++++++++++++++++++-------------------
1 file changed, 33 insertions(+), 33 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 5349ae14824..251c83c60c2 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -520,19 +520,19 @@ static void test_generic_valid(const void *opaque)
Object *obj = object_new(machine_type);
MachineState *ms = MACHINE(obj);
MachineClass *mc = MACHINE_GET_CLASS(obj);
- SMPTestData *data = &(SMPTestData){{ }};
+ SMPTestData data = {};
int i;
for (i = 0; i < ARRAY_SIZE(data_generic_valid); i++) {
- *data = data_generic_valid[i];
- unsupported_params_init(mc, data);
+ data = data_generic_valid[i];
+ unsupported_params_init(mc, &data);
- smp_parse_test(ms, data, true);
+ smp_parse_test(ms, &data, true);
/* Unsupported parameters can be provided with their values as 1 */
- data->config.has_dies = true;
- data->config.dies = 1;
- smp_parse_test(ms, data, true);
+ data.config.has_dies = true;
+ data.config.dies = 1;
+ smp_parse_test(ms, &data, true);
}
object_unref(obj);
@@ -544,14 +544,14 @@ static void test_generic_invalid(const void *opaque)
Object *obj = object_new(machine_type);
MachineState *ms = MACHINE(obj);
MachineClass *mc = MACHINE_GET_CLASS(obj);
- SMPTestData *data = &(SMPTestData){};
+ SMPTestData data = {};
int i;
for (i = 0; i < ARRAY_SIZE(data_generic_invalid); i++) {
- *data = data_generic_invalid[i];
- unsupported_params_init(mc, data);
+ data = data_generic_invalid[i];
+ unsupported_params_init(mc, &data);
- smp_parse_test(ms, data, false);
+ smp_parse_test(ms, &data, false);
}
object_unref(obj);
@@ -563,45 +563,45 @@ static void test_with_dies(const void *opaque)
Object *obj = object_new(machine_type);
MachineState *ms = MACHINE(obj);
MachineClass *mc = MACHINE_GET_CLASS(obj);
- SMPTestData *data = &(SMPTestData){{ }};
+ SMPTestData data = {};
unsigned int num_dies = 2;
int i;
for (i = 0; i < ARRAY_SIZE(data_generic_valid); i++) {
- *data = data_generic_valid[i];
- unsupported_params_init(mc, data);
+ data = data_generic_valid[i];
+ unsupported_params_init(mc, &data);
/* when dies parameter is omitted, it will be set as 1 */
- data->expect_prefer_sockets.dies = 1;
- data->expect_prefer_cores.dies = 1;
+ data.expect_prefer_sockets.dies = 1;
+ data.expect_prefer_cores.dies = 1;
- smp_parse_test(ms, data, true);
+ smp_parse_test(ms, &data, true);
/* when dies parameter is specified */
- data->config.has_dies = true;
- data->config.dies = num_dies;
- if (data->config.has_cpus) {
- data->config.cpus *= num_dies;
+ data.config.has_dies = true;
+ data.config.dies = num_dies;
+ if (data.config.has_cpus) {
+ data.config.cpus *= num_dies;
}
- if (data->config.has_maxcpus) {
- data->config.maxcpus *= num_dies;
+ if (data.config.has_maxcpus) {
+ data.config.maxcpus *= num_dies;
}
- data->expect_prefer_sockets.dies = num_dies;
- data->expect_prefer_sockets.cpus *= num_dies;
- data->expect_prefer_sockets.max_cpus *= num_dies;
- data->expect_prefer_cores.dies = num_dies;
- data->expect_prefer_cores.cpus *= num_dies;
- data->expect_prefer_cores.max_cpus *= num_dies;
+ data.expect_prefer_sockets.dies = num_dies;
+ data.expect_prefer_sockets.cpus *= num_dies;
+ data.expect_prefer_sockets.max_cpus *= num_dies;
+ data.expect_prefer_cores.dies = num_dies;
+ data.expect_prefer_cores.cpus *= num_dies;
+ data.expect_prefer_cores.max_cpus *= num_dies;
- smp_parse_test(ms, data, true);
+ smp_parse_test(ms, &data, true);
}
for (i = 0; i < ARRAY_SIZE(data_with_dies_invalid); i++) {
- *data = data_with_dies_invalid[i];
- unsupported_params_init(mc, data);
+ data = data_with_dies_invalid[i];
+ unsupported_params_init(mc, &data);
- smp_parse_test(ms, data, false);
+ smp_parse_test(ms, &data, false);
}
object_unref(obj);
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 7/8] tests/unit/test-smp-parse: Constify some pointer/struct
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2021-12-15 16:48 ` [PATCH v5 6/8] tests/unit/test-smp-parse: Simplify pointer to compound literal use Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 8/8] hw/core: Rename smp_parse() -> machine_parse_smp_config() Philippe Mathieu-Daudé
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Andrew Jones, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
Declare structures const when we don't need to modify
them at runtime.
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Tested-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
tests/unit/test-smp-parse.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 251c83c60c2..1f26edc5f82 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -83,7 +83,7 @@ typedef struct SMPTestData {
* then test the automatic calculation algorithm of the missing
* values in the parser.
*/
-static struct SMPTestData data_generic_valid[] = {
+static const struct SMPTestData data_generic_valid[] = {
{
/* config: no configuration provided
* expect: cpus=1,sockets=1,cores=1,threads=1,maxcpus=1 */
@@ -285,7 +285,7 @@ static struct SMPTestData data_generic_valid[] = {
},
};
-static struct SMPTestData data_generic_invalid[] = {
+static const struct SMPTestData data_generic_invalid[] = {
{
/* config: -smp 2,dies=2 */
.config = SMP_CONFIG_WITH_DIES(T, 2, F, 0, T, 2, F, 0, F, 0, F, 0),
@@ -319,7 +319,7 @@ static struct SMPTestData data_generic_invalid[] = {
},
};
-static struct SMPTestData data_with_dies_invalid[] = {
+static const struct SMPTestData data_with_dies_invalid[] = {
{
/* config: -smp 16,sockets=2,dies=2,cores=4,threads=2,maxcpus=16 */
.config = SMP_CONFIG_WITH_DIES(T, 16, T, 2, T, 2, T, 4, T, 2, T, 16),
@@ -356,7 +356,7 @@ static char *smp_config_to_string(SMPConfiguration *config)
config->has_maxcpus ? "true" : "false", config->maxcpus);
}
-static char *cpu_topology_to_string(CpuTopology *topo)
+static char *cpu_topology_to_string(const CpuTopology *topo)
{
return g_strdup_printf(
"(CpuTopology) {\n"
@@ -372,7 +372,7 @@ static char *cpu_topology_to_string(CpuTopology *topo)
}
static void check_parse(MachineState *ms, SMPConfiguration *config,
- CpuTopology *expect_topo, const char *expect_err,
+ const CpuTopology *expect_topo, const char *expect_err,
bool is_valid)
{
g_autofree char *config_str = smp_config_to_string(config);
@@ -466,7 +466,7 @@ static void smp_parse_test(MachineState *ms, SMPTestData *data, bool is_valid)
}
/* The parsed results of the unsupported parameters should be 1 */
-static void unsupported_params_init(MachineClass *mc, SMPTestData *data)
+static void unsupported_params_init(const MachineClass *mc, SMPTestData *data)
{
if (!mc->smp_props.dies_supported) {
data->expect_prefer_sockets.dies = 1;
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v5 8/8] hw/core: Rename smp_parse() -> machine_parse_smp_config()
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2021-12-15 16:48 ` [PATCH v5 7/8] tests/unit/test-smp-parse: Constify some pointer/struct Philippe Mathieu-Daudé
@ 2021-12-15 16:48 ` Philippe Mathieu-Daudé
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-15 16:48 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Andrew Jones, Richard Henderson, Yanan Wang,
Philippe Mathieu-Daudé
All methods related to MachineState are prefixed with "machine_".
smp_parse() does not need to be an exception. Rename it and
const'ify the SMPConfiguration argument, since it doesn't need
to be modified.
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
Tested-by: Yanan Wang <wangyanan55@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
include/hw/boards.h | 3 ++-
hw/core/machine-smp.c | 6 ++++--
hw/core/machine.c | 2 +-
tests/unit/test-smp-parse.c | 8 ++++----
4 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 9c1c1901046..7597cec4400 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -34,7 +34,8 @@ HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machine);
void machine_set_cpu_numa_node(MachineState *machine,
const CpuInstanceProperties *props,
Error **errp);
-void smp_parse(MachineState *ms, SMPConfiguration *config, Error **errp);
+void machine_parse_smp_config(MachineState *ms,
+ const SMPConfiguration *config, Error **errp);
/**
* machine_class_allow_dynamic_sysbus_dev: Add type to list of valid devices
diff --git a/hw/core/machine-smp.c b/hw/core/machine-smp.c
index 116a0cbbfab..2cbfd574293 100644
--- a/hw/core/machine-smp.c
+++ b/hw/core/machine-smp.c
@@ -44,7 +44,8 @@ static char *cpu_hierarchy_to_string(MachineState *ms)
}
/*
- * smp_parse - Generic function used to parse the given SMP configuration
+ * machine_parse_smp_config: Generic function used to parse the given
+ * SMP configuration
*
* Any missing parameter in "cpus/maxcpus/sockets/cores/threads" will be
* automatically computed based on the provided ones.
@@ -63,7 +64,8 @@ static char *cpu_hierarchy_to_string(MachineState *ms)
* introduced topology members which are likely to be target specific should
* be directly set as 1 if they are omitted (e.g. dies for PC since 4.1).
*/
-void smp_parse(MachineState *ms, SMPConfiguration *config, Error **errp)
+void machine_parse_smp_config(MachineState *ms,
+ const SMPConfiguration *config, Error **errp)
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
unsigned cpus = config->has_cpus ? config->cpus : 0;
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 53a99abc560..3993c534b90 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -761,7 +761,7 @@ static void machine_set_smp(Object *obj, Visitor *v, const char *name,
return;
}
- smp_parse(ms, config, errp);
+ machine_parse_smp_config(ms, config, errp);
}
static void machine_class_init(ObjectClass *oc, void *data)
diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 1f26edc5f82..7f5c4ad222f 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -337,7 +337,7 @@ static const struct SMPTestData data_with_dies_invalid[] = {
},
};
-static char *smp_config_to_string(SMPConfiguration *config)
+static char *smp_config_to_string(const SMPConfiguration *config)
{
return g_strdup_printf(
"(SMPConfiguration) {\n"
@@ -371,7 +371,7 @@ static char *cpu_topology_to_string(const CpuTopology *topo)
topo->cores, topo->threads, topo->max_cpus);
}
-static void check_parse(MachineState *ms, SMPConfiguration *config,
+static void check_parse(MachineState *ms, const SMPConfiguration *config,
const CpuTopology *expect_topo, const char *expect_err,
bool is_valid)
{
@@ -380,8 +380,8 @@ static void check_parse(MachineState *ms, SMPConfiguration *config,
g_autofree char *output_topo_str = NULL;
Error *err = NULL;
- /* call the generic parser smp_parse() */
- smp_parse(ms, config, &err);
+ /* call the generic parser */
+ machine_parse_smp_config(ms, config, &err);
output_topo_str = cpu_topology_to_string(&ms->smp);
--
2.33.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' machine type
2021-12-15 16:48 ` [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' " Philippe Mathieu-Daudé
@ 2021-12-16 3:20 ` wangyanan (Y) via
2021-12-16 8:30 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 12+ messages in thread
From: wangyanan (Y) via @ 2021-12-16 3:20 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Eduardo Habkost, Richard Henderson
Hi Philippe,
On 2021/12/16 0:48, Philippe Mathieu-Daudé wrote:
> Avoid modifying the MachineClass internals by adding the
> 'smp-generic-invalid' machine, which inherits from TYPE_MACHINE.
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> tests/unit/test-smp-parse.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
> index f66cf7bb598..72e7236afd9 100644
> --- a/tests/unit/test-smp-parse.c
> +++ b/tests/unit/test-smp-parse.c
> @@ -487,6 +487,17 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
> mc->name = g_strdup(SMP_MACHINE_NAME);
> }
>
> +static void machine_without_dies_invalid_class_init(ObjectClass *oc, void *data)
> +{
> + MachineClass *mc = MACHINE_CLASS(oc);
> +
> + /* Force invalid min CPUs and max CPUs */
> + mc->min_cpus = 2;
> + mc->max_cpus = 511;
> +
> + mc->smp_props.dies_supported = false;
> +}
> +
> static void machine_with_dies_class_init(ObjectClass *oc, void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
> @@ -530,10 +541,6 @@ static void test_generic_invalid(const void *opaque)
> SMPTestData *data = &(SMPTestData){};
> int i;
>
> - /* Force invalid min CPUs and max CPUs */
> - mc->min_cpus = 2;
> - mc->max_cpus = 511;
> -
> for (i = 0; i < ARRAY_SIZE(data_generic_invalid); i++) {
> *data = data_generic_invalid[i];
> unsupported_params_init(mc, data);
> @@ -541,10 +548,6 @@ static void test_generic_invalid(const void *opaque)
> smp_parse_test(ms, data, false);
> }
>
> - /* Reset the supported min CPUs and max CPUs */
> - mc->min_cpus = MIN_CPUS;
> - mc->max_cpus = MAX_CPUS;
> -
> object_unref(obj);
> }
>
> @@ -606,6 +609,10 @@ static const TypeInfo smp_machine_types[] = {
> .class_init = machine_base_class_init,
> .class_size = sizeof(MachineClass),
> .instance_size = sizeof(MachineState),
> + }, {
> + .name = MACHINE_TYPE_NAME("smp-generic-invalid"),
> + .parent = TYPE_MACHINE,
> + .class_init = machine_without_dies_invalid_class_init,
Maybe it's better to rename "machine_without_dies_invalid_class_init" to
"machine_generic_invalid_class_init" to be consistent with the .name field.
Thanks,
Yanan
> }, {
> .name = MACHINE_TYPE_NAME("smp-with-dies"),
> .parent = TYPE_MACHINE,
> @@ -625,7 +632,7 @@ int main(int argc, char *argv[])
> TYPE_MACHINE,
> test_generic_valid);
> g_test_add_data_func("/test-smp-parse/generic/invalid",
> - TYPE_MACHINE,
> + MACHINE_TYPE_NAME("smp-generic-invalid"),
> test_generic_invalid);
> g_test_add_data_func("/test-smp-parse/with_dies",
> MACHINE_TYPE_NAME("smp-with-dies"),
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' machine type
2021-12-15 16:48 ` [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' " Philippe Mathieu-Daudé
@ 2021-12-16 3:21 ` wangyanan (Y) via
0 siblings, 0 replies; 12+ messages in thread
From: wangyanan (Y) via @ 2021-12-16 3:21 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Eduardo Habkost, Richard Henderson
On 2021/12/16 0:48, Philippe Mathieu-Daudé wrote:
> Keep the common TYPE_MACHINE class initialization in
> machine_base_class_init(), make it abstract, and move
> the non-common code to a new class: "smp-generic-valid".
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> tests/unit/test-smp-parse.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
> index 72e7236afd9..5349ae14824 100644
> --- a/tests/unit/test-smp-parse.c
> +++ b/tests/unit/test-smp-parse.c
> @@ -478,13 +478,19 @@ static void machine_base_class_init(ObjectClass *oc, void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
>
> + mc->smp_props.prefer_sockets = true;
> +
> + mc->name = g_strdup(SMP_MACHINE_NAME);
> +}
> +
> +static void machine_without_dies_valid_class_init(ObjectClass *oc, void *data)
> +{
> + MachineClass *mc = MACHINE_CLASS(oc);
> +
> mc->min_cpus = MIN_CPUS;
> mc->max_cpus = MAX_CPUS;
>
> - mc->smp_props.prefer_sockets = true;
> mc->smp_props.dies_supported = false;
> -
> - mc->name = g_strdup(SMP_MACHINE_NAME);
> }
>
> static void machine_without_dies_invalid_class_init(ObjectClass *oc, void *data)
> @@ -606,9 +612,14 @@ static const TypeInfo smp_machine_types[] = {
> {
> .name = TYPE_MACHINE,
> .parent = TYPE_OBJECT,
> + .abstract = true,
> .class_init = machine_base_class_init,
> .class_size = sizeof(MachineClass),
> .instance_size = sizeof(MachineState),
> + }, {
> + .name = MACHINE_TYPE_NAME("smp-generic-valid"),
> + .parent = TYPE_MACHINE,
> + .class_init = machine_without_dies_valid_class_init,
Similar to patch #4, can we also rename
"machine_without_dies_valid_class_init"
to "machine_generic_valid_class_init" ?
Thanks,
Yanan
> }, {
> .name = MACHINE_TYPE_NAME("smp-generic-invalid"),
> .parent = TYPE_MACHINE,
> @@ -629,7 +640,7 @@ int main(int argc, char *argv[])
> g_test_init(&argc, &argv, NULL);
>
> g_test_add_data_func("/test-smp-parse/generic/valid",
> - TYPE_MACHINE,
> + MACHINE_TYPE_NAME("smp-generic-valid"),
> test_generic_valid);
> g_test_add_data_func("/test-smp-parse/generic/invalid",
> MACHINE_TYPE_NAME("smp-generic-invalid"),
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' machine type
2021-12-16 3:20 ` wangyanan (Y) via
@ 2021-12-16 8:30 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-12-16 8:30 UTC (permalink / raw)
To: wangyanan (Y), qemu-devel; +Cc: Eduardo Habkost, Richard Henderson
On 12/16/21 04:20, wangyanan (Y) wrote:
> Hi Philippe,
>
> On 2021/12/16 0:48, Philippe Mathieu-Daudé wrote:
>> Avoid modifying the MachineClass internals by adding the
>> 'smp-generic-invalid' machine, which inherits from TYPE_MACHINE.
>>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
>> tests/unit/test-smp-parse.c | 25 ++++++++++++++++---------
>> 1 file changed, 16 insertions(+), 9 deletions(-)
>> @@ -606,6 +609,10 @@ static const TypeInfo smp_machine_types[] = {
>> .class_init = machine_base_class_init,
>> .class_size = sizeof(MachineClass),
>> .instance_size = sizeof(MachineState),
>> + }, {
>> + .name = MACHINE_TYPE_NAME("smp-generic-invalid"),
>> + .parent = TYPE_MACHINE,
>> + .class_init = machine_without_dies_invalid_class_init,
> Maybe it's better to rename "machine_without_dies_invalid_class_init" to
> "machine_generic_invalid_class_init" to be consistent with the .name field.
Indeed I missed that... Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-12-16 8:32 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-15 16:48 [PATCH v5 0/8] tests/unit: Rework test-smp-parse tests Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 1/8] tests/unit/test-smp-parse: Pass machine type as argument to tests Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 2/8] tests/unit/test-smp-parse: Split the 'generic' test in valid / invalid Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 3/8] tests/unit/test-smp-parse: Add 'smp-with-dies' machine type Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 4/8] tests/unit/test-smp-parse: Add 'smp-generic-invalid' " Philippe Mathieu-Daudé
2021-12-16 3:20 ` wangyanan (Y) via
2021-12-16 8:30 ` Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 5/8] tests/unit/test-smp-parse: Add 'smp-generic-valid' " Philippe Mathieu-Daudé
2021-12-16 3:21 ` wangyanan (Y) via
2021-12-15 16:48 ` [PATCH v5 6/8] tests/unit/test-smp-parse: Simplify pointer to compound literal use Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 7/8] tests/unit/test-smp-parse: Constify some pointer/struct Philippe Mathieu-Daudé
2021-12-15 16:48 ` [PATCH v5 8/8] hw/core: Rename smp_parse() -> machine_parse_smp_config() Philippe Mathieu-Daudé
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.