diff mbox series

[3/8] tests/unit/test-smp-parse.c: Make test cases aware of the book/drawer

Message ID 20240118144857.2124034-4-zhao1.liu@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series tests/unit/test-smp-parse.c: Add more CPU topology test cases | expand

Commit Message

Zhao Liu Jan. 18, 2024, 2:48 p.m. UTC
From: Zhao Liu <zhao1.liu@intel.com>

Currently, -smp supports 2 more new levels: book and drawer.

It is necessary to consider the effects of book and drawer in the test
cases to ensure that the calculations are correct. This is also the
preparation to add new book and drawer test cases.

Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
 tests/unit/test-smp-parse.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

Comments

Thomas Huth March 1, 2024, 7:49 a.m. UTC | #1
On 18/01/2024 15.48, Zhao Liu wrote:
> From: Zhao Liu <zhao1.liu@intel.com>
> 
> Currently, -smp supports 2 more new levels: book and drawer.
> 
> It is necessary to consider the effects of book and drawer in the test
> cases to ensure that the calculations are correct. This is also the
> preparation to add new book and drawer test cases.
> 
> Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
> ---
>   tests/unit/test-smp-parse.c | 25 ++++++++++++++++++++++---
>   1 file changed, 22 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
> index 55ba13bf7d15..a8eb3bbb35ed 100644
> --- a/tests/unit/test-smp-parse.c
> +++ b/tests/unit/test-smp-parse.c
> @@ -384,6 +384,8 @@ static char *smp_config_to_string(const SMPConfiguration *config)
>       return g_strdup_printf(
>           "(SMPConfiguration) {\n"
>           "    .has_cpus     = %5s, cpus     = %" PRId64 ",\n"
> +        "    .has_drawers  = %5s, drawers  = %" PRId64 ",\n"
> +        "    .has_books    = %5s, books    = %" PRId64 ",\n"
>           "    .has_sockets  = %5s, sockets  = %" PRId64 ",\n"
>           "    .has_dies     = %5s, dies     = %" PRId64 ",\n"
>           "    .has_clusters = %5s, clusters = %" PRId64 ",\n"
> @@ -392,6 +394,8 @@ static char *smp_config_to_string(const SMPConfiguration *config)
>           "    .has_maxcpus  = %5s, maxcpus  = %" PRId64 ",\n"
>           "}",
>           config->has_cpus ? "true" : "false", config->cpus,
> +        config->has_drawers ? "true" : "false", config->drawers,
> +        config->has_books ? "true" : "false", config->books,
>           config->has_sockets ? "true" : "false", config->sockets,
>           config->has_dies ? "true" : "false", config->dies,
>           config->has_clusters ? "true" : "false", config->clusters,
> @@ -404,10 +408,10 @@ static char *smp_config_to_string(const SMPConfiguration *config)
>   static unsigned int cpu_topology_get_threads_per_socket(const CpuTopology *topo)
>   {
>       /* Check the divisor to avoid invalid topology examples causing SIGFPE. */
> -    if (!topo->sockets) {
> +    if (!topo->drawers || !topo->books || !topo->sockets) {
>           return 0;
>       } else {
> -        return topo->max_cpus / topo->sockets;
> +        return topo->max_cpus / topo->drawers / topo->books / topo->sockets;
>       }
>   }
>   
> @@ -429,6 +433,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo,
>       return g_strdup_printf(
>           "(CpuTopology) {\n"
>           "    .cpus               = %u,\n"
> +        "    .drawers            = %u,\n"
> +        "    .books              = %u,\n"
>           "    .sockets            = %u,\n"
>           "    .dies               = %u,\n"
>           "    .clusters           = %u,\n"
> @@ -438,7 +444,8 @@ static char *cpu_topology_to_string(const CpuTopology *topo,
>           "    .threads_per_socket = %u,\n"
>           "    .cores_per_socket   = %u,\n"
>           "}",
> -        topo->cpus, topo->sockets, topo->dies, topo->clusters,
> +        topo->cpus, topo->drawers, topo->books,
> +        topo->sockets, topo->dies, topo->clusters,
>           topo->cores, topo->threads, topo->max_cpus,
>           threads_per_socket, cores_per_socket);
>   }
> @@ -473,6 +480,8 @@ static void check_parse(MachineState *ms, const SMPConfiguration *config,
>       if (is_valid) {
>           if ((err == NULL) &&
>               (ms->smp.cpus == expect_topo->cpus) &&
> +            (ms->smp.drawers == expect_topo->drawers) &&
> +            (ms->smp.books == expect_topo->books) &&
>               (ms->smp.sockets == expect_topo->sockets) &&
>               (ms->smp.dies == expect_topo->dies) &&
>               (ms->smp.clusters == expect_topo->clusters) &&
> @@ -564,6 +573,16 @@ static void unsupported_params_init(const MachineClass *mc, SMPTestData *data)
>           data->expect_prefer_sockets.clusters = 1;
>           data->expect_prefer_cores.clusters = 1;
>       }
> +
> +    if (!mc->smp_props.books_supported) {
> +        data->expect_prefer_sockets.books = 1;
> +        data->expect_prefer_cores.books = 1;
> +    }
> +
> +    if (!mc->smp_props.drawers_supported) {
> +        data->expect_prefer_sockets.drawers = 1;
> +        data->expect_prefer_cores.drawers = 1;
> +    }
>   }
>   

Reviewed-by: Thomas Huth <thuth@redhat.com>
diff mbox series

Patch

diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c
index 55ba13bf7d15..a8eb3bbb35ed 100644
--- a/tests/unit/test-smp-parse.c
+++ b/tests/unit/test-smp-parse.c
@@ -384,6 +384,8 @@  static char *smp_config_to_string(const SMPConfiguration *config)
     return g_strdup_printf(
         "(SMPConfiguration) {\n"
         "    .has_cpus     = %5s, cpus     = %" PRId64 ",\n"
+        "    .has_drawers  = %5s, drawers  = %" PRId64 ",\n"
+        "    .has_books    = %5s, books    = %" PRId64 ",\n"
         "    .has_sockets  = %5s, sockets  = %" PRId64 ",\n"
         "    .has_dies     = %5s, dies     = %" PRId64 ",\n"
         "    .has_clusters = %5s, clusters = %" PRId64 ",\n"
@@ -392,6 +394,8 @@  static char *smp_config_to_string(const SMPConfiguration *config)
         "    .has_maxcpus  = %5s, maxcpus  = %" PRId64 ",\n"
         "}",
         config->has_cpus ? "true" : "false", config->cpus,
+        config->has_drawers ? "true" : "false", config->drawers,
+        config->has_books ? "true" : "false", config->books,
         config->has_sockets ? "true" : "false", config->sockets,
         config->has_dies ? "true" : "false", config->dies,
         config->has_clusters ? "true" : "false", config->clusters,
@@ -404,10 +408,10 @@  static char *smp_config_to_string(const SMPConfiguration *config)
 static unsigned int cpu_topology_get_threads_per_socket(const CpuTopology *topo)
 {
     /* Check the divisor to avoid invalid topology examples causing SIGFPE. */
-    if (!topo->sockets) {
+    if (!topo->drawers || !topo->books || !topo->sockets) {
         return 0;
     } else {
-        return topo->max_cpus / topo->sockets;
+        return topo->max_cpus / topo->drawers / topo->books / topo->sockets;
     }
 }
 
@@ -429,6 +433,8 @@  static char *cpu_topology_to_string(const CpuTopology *topo,
     return g_strdup_printf(
         "(CpuTopology) {\n"
         "    .cpus               = %u,\n"
+        "    .drawers            = %u,\n"
+        "    .books              = %u,\n"
         "    .sockets            = %u,\n"
         "    .dies               = %u,\n"
         "    .clusters           = %u,\n"
@@ -438,7 +444,8 @@  static char *cpu_topology_to_string(const CpuTopology *topo,
         "    .threads_per_socket = %u,\n"
         "    .cores_per_socket   = %u,\n"
         "}",
-        topo->cpus, topo->sockets, topo->dies, topo->clusters,
+        topo->cpus, topo->drawers, topo->books,
+        topo->sockets, topo->dies, topo->clusters,
         topo->cores, topo->threads, topo->max_cpus,
         threads_per_socket, cores_per_socket);
 }
@@ -473,6 +480,8 @@  static void check_parse(MachineState *ms, const SMPConfiguration *config,
     if (is_valid) {
         if ((err == NULL) &&
             (ms->smp.cpus == expect_topo->cpus) &&
+            (ms->smp.drawers == expect_topo->drawers) &&
+            (ms->smp.books == expect_topo->books) &&
             (ms->smp.sockets == expect_topo->sockets) &&
             (ms->smp.dies == expect_topo->dies) &&
             (ms->smp.clusters == expect_topo->clusters) &&
@@ -564,6 +573,16 @@  static void unsupported_params_init(const MachineClass *mc, SMPTestData *data)
         data->expect_prefer_sockets.clusters = 1;
         data->expect_prefer_cores.clusters = 1;
     }
+
+    if (!mc->smp_props.books_supported) {
+        data->expect_prefer_sockets.books = 1;
+        data->expect_prefer_cores.books = 1;
+    }
+
+    if (!mc->smp_props.drawers_supported) {
+        data->expect_prefer_sockets.drawers = 1;
+        data->expect_prefer_cores.drawers = 1;
+    }
 }
 
 static void machine_base_class_init(ObjectClass *oc, void *data)