diff mbox series

[v2,1/3] hw/smbios: code cleanup - use macro definitions for table base addresses

Message ID 20220207113129.2701722-2-ani@anisinha.ca (mailing list archive)
State New, archived
Headers show
Series hw/smbios: fix table memory corruption with large memory vms | expand

Commit Message

Ani Sinha Feb. 7, 2022, 11:31 a.m. UTC
This is a minor cleanup. Using macro definitions makes the code more
readable. It is at once clear which tables use which starting base addresses.
It also makes it easy to calculate the gaps between the addresses and modify
them if needed.

Signed-off-by: Ani Sinha <ani@anisinha.ca>
---
 hw/smbios/smbios.c | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

Comments

Igor Mammedov Feb. 11, 2022, 8:43 a.m. UTC | #1
On Mon,  7 Feb 2022 17:01:27 +0530
Ani Sinha <ani@anisinha.ca> wrote:

> This is a minor cleanup. Using macro definitions makes the code more
> readable. It is at once clear which tables use which starting base addresses.
> It also makes it easy to calculate the gaps between the addresses and modify
> them if needed.
> 
> Signed-off-by: Ani Sinha <ani@anisinha.ca>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  hw/smbios/smbios.c | 38 ++++++++++++++++++++++++++------------
>  1 file changed, 26 insertions(+), 12 deletions(-)
> 
> diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
> index 6013df1698..56b412ce35 100644
> --- a/hw/smbios/smbios.c
> +++ b/hw/smbios/smbios.c
> @@ -549,9 +549,23 @@ bool smbios_skip_table(uint8_t type, bool required_table)
>      return true;
>  }
>  
> +#define T0_BASE 0x000
> +#define T1_BASE 0x100
> +#define T2_BASE 0x200
> +#define T3_BASE 0x300
> +#define T4_BASE 0x400
> +#define T11_BASE 0xe00
> +
> +#define T16_BASE 0x1000
> +#define T17_BASE 0x1100
> +#define T19_BASE 0x1300
> +#define T32_BASE 0x2000
> +#define T41_BASE 0x2900
> +#define T127_BASE 0x7F00
> +
>  static void smbios_build_type_0_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(0, 0x000, false); /* optional, leave up to BIOS */
> +    SMBIOS_BUILD_TABLE_PRE(0, T0_BASE, false); /* optional, leave up to BIOS */
>  
>      SMBIOS_TABLE_SET_STR(0, vendor_str, type0.vendor);
>      SMBIOS_TABLE_SET_STR(0, bios_version_str, type0.version);
> @@ -599,7 +613,7 @@ static void smbios_encode_uuid(struct smbios_uuid *uuid, QemuUUID *in)
>  
>  static void smbios_build_type_1_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(1, 0x100, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(1, T1_BASE, true); /* required */
>  
>      SMBIOS_TABLE_SET_STR(1, manufacturer_str, type1.manufacturer);
>      SMBIOS_TABLE_SET_STR(1, product_name_str, type1.product);
> @@ -619,7 +633,7 @@ static void smbios_build_type_1_table(void)
>  
>  static void smbios_build_type_2_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(2, 0x200, false); /* optional */
> +    SMBIOS_BUILD_TABLE_PRE(2, T2_BASE, false); /* optional */
>  
>      SMBIOS_TABLE_SET_STR(2, manufacturer_str, type2.manufacturer);
>      SMBIOS_TABLE_SET_STR(2, product_str, type2.product);
> @@ -637,7 +651,7 @@ static void smbios_build_type_2_table(void)
>  
>  static void smbios_build_type_3_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(3, 0x300, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(3, T3_BASE, true); /* required */
>  
>      SMBIOS_TABLE_SET_STR(3, manufacturer_str, type3.manufacturer);
>      t->type = 0x01; /* Other */
> @@ -662,7 +676,7 @@ static void smbios_build_type_4_table(MachineState *ms, unsigned instance)
>  {
>      char sock_str[128];
>  
> -    SMBIOS_BUILD_TABLE_PRE(4, 0x400 + instance, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(4, T4_BASE + instance, true); /* required */
>  
>      snprintf(sock_str, sizeof(sock_str), "%s%2x", type4.sock_pfx, instance);
>      SMBIOS_TABLE_SET_STR(4, socket_designation_str, sock_str);
> @@ -702,7 +716,7 @@ static void smbios_build_type_11_table(void)
>          return;
>      }
>  
> -    SMBIOS_BUILD_TABLE_PRE(11, 0xe00, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(11, T11_BASE, true); /* required */
>  
>      snprintf(count_str, sizeof(count_str), "%zu", type11.nvalues);
>      t->count = type11.nvalues;
> @@ -722,7 +736,7 @@ static void smbios_build_type_16_table(unsigned dimm_cnt)
>  {
>      uint64_t size_kb;
>  
> -    SMBIOS_BUILD_TABLE_PRE(16, 0x1000, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(16, T16_BASE, true); /* required */
>  
>      t->location = 0x01; /* Other */
>      t->use = 0x03; /* System memory */
> @@ -749,7 +763,7 @@ static void smbios_build_type_17_table(unsigned instance, uint64_t size)
>      char loc_str[128];
>      uint64_t size_mb;
>  
> -    SMBIOS_BUILD_TABLE_PRE(17, 0x1100 + instance, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(17, T17_BASE + instance, true); /* required */
>  
>      t->physical_memory_array_handle = cpu_to_le16(0x1000); /* Type 16 above */
>      t->memory_error_information_handle = cpu_to_le16(0xFFFE); /* Not provided */
> @@ -790,7 +804,7 @@ static void smbios_build_type_19_table(unsigned instance,
>  {
>      uint64_t end, start_kb, end_kb;
>  
> -    SMBIOS_BUILD_TABLE_PRE(19, 0x1300 + instance, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(19, T19_BASE + instance, true); /* required */
>  
>      end = start + size - 1;
>      assert(end > start);
> @@ -814,7 +828,7 @@ static void smbios_build_type_19_table(unsigned instance,
>  
>  static void smbios_build_type_32_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(32, 0x2000, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(32, T32_BASE, true); /* required */
>  
>      memset(t->reserved, 0, 6);
>      t->boot_status = 0; /* No errors detected */
> @@ -828,7 +842,7 @@ static void smbios_build_type_41_table(Error **errp)
>      struct type41_instance *t41;
>  
>      QTAILQ_FOREACH(t41, &type41, next) {
> -        SMBIOS_BUILD_TABLE_PRE(41, 0x2900 + instance, true);
> +        SMBIOS_BUILD_TABLE_PRE(41, T41_BASE + instance, true);
>  
>          SMBIOS_TABLE_SET_STR(41, reference_designation_str, t41->designation);
>          t->device_type = t41->kind;
> @@ -871,7 +885,7 @@ static void smbios_build_type_41_table(Error **errp)
>  
>  static void smbios_build_type_127_table(void)
>  {
> -    SMBIOS_BUILD_TABLE_PRE(127, 0x7F00, true); /* required */
> +    SMBIOS_BUILD_TABLE_PRE(127, T127_BASE, true); /* required */
>      SMBIOS_BUILD_TABLE_POST;
>  }
>
diff mbox series

Patch

diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
index 6013df1698..56b412ce35 100644
--- a/hw/smbios/smbios.c
+++ b/hw/smbios/smbios.c
@@ -549,9 +549,23 @@  bool smbios_skip_table(uint8_t type, bool required_table)
     return true;
 }
 
+#define T0_BASE 0x000
+#define T1_BASE 0x100
+#define T2_BASE 0x200
+#define T3_BASE 0x300
+#define T4_BASE 0x400
+#define T11_BASE 0xe00
+
+#define T16_BASE 0x1000
+#define T17_BASE 0x1100
+#define T19_BASE 0x1300
+#define T32_BASE 0x2000
+#define T41_BASE 0x2900
+#define T127_BASE 0x7F00
+
 static void smbios_build_type_0_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(0, 0x000, false); /* optional, leave up to BIOS */
+    SMBIOS_BUILD_TABLE_PRE(0, T0_BASE, false); /* optional, leave up to BIOS */
 
     SMBIOS_TABLE_SET_STR(0, vendor_str, type0.vendor);
     SMBIOS_TABLE_SET_STR(0, bios_version_str, type0.version);
@@ -599,7 +613,7 @@  static void smbios_encode_uuid(struct smbios_uuid *uuid, QemuUUID *in)
 
 static void smbios_build_type_1_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(1, 0x100, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(1, T1_BASE, true); /* required */
 
     SMBIOS_TABLE_SET_STR(1, manufacturer_str, type1.manufacturer);
     SMBIOS_TABLE_SET_STR(1, product_name_str, type1.product);
@@ -619,7 +633,7 @@  static void smbios_build_type_1_table(void)
 
 static void smbios_build_type_2_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(2, 0x200, false); /* optional */
+    SMBIOS_BUILD_TABLE_PRE(2, T2_BASE, false); /* optional */
 
     SMBIOS_TABLE_SET_STR(2, manufacturer_str, type2.manufacturer);
     SMBIOS_TABLE_SET_STR(2, product_str, type2.product);
@@ -637,7 +651,7 @@  static void smbios_build_type_2_table(void)
 
 static void smbios_build_type_3_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(3, 0x300, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(3, T3_BASE, true); /* required */
 
     SMBIOS_TABLE_SET_STR(3, manufacturer_str, type3.manufacturer);
     t->type = 0x01; /* Other */
@@ -662,7 +676,7 @@  static void smbios_build_type_4_table(MachineState *ms, unsigned instance)
 {
     char sock_str[128];
 
-    SMBIOS_BUILD_TABLE_PRE(4, 0x400 + instance, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(4, T4_BASE + instance, true); /* required */
 
     snprintf(sock_str, sizeof(sock_str), "%s%2x", type4.sock_pfx, instance);
     SMBIOS_TABLE_SET_STR(4, socket_designation_str, sock_str);
@@ -702,7 +716,7 @@  static void smbios_build_type_11_table(void)
         return;
     }
 
-    SMBIOS_BUILD_TABLE_PRE(11, 0xe00, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(11, T11_BASE, true); /* required */
 
     snprintf(count_str, sizeof(count_str), "%zu", type11.nvalues);
     t->count = type11.nvalues;
@@ -722,7 +736,7 @@  static void smbios_build_type_16_table(unsigned dimm_cnt)
 {
     uint64_t size_kb;
 
-    SMBIOS_BUILD_TABLE_PRE(16, 0x1000, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(16, T16_BASE, true); /* required */
 
     t->location = 0x01; /* Other */
     t->use = 0x03; /* System memory */
@@ -749,7 +763,7 @@  static void smbios_build_type_17_table(unsigned instance, uint64_t size)
     char loc_str[128];
     uint64_t size_mb;
 
-    SMBIOS_BUILD_TABLE_PRE(17, 0x1100 + instance, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(17, T17_BASE + instance, true); /* required */
 
     t->physical_memory_array_handle = cpu_to_le16(0x1000); /* Type 16 above */
     t->memory_error_information_handle = cpu_to_le16(0xFFFE); /* Not provided */
@@ -790,7 +804,7 @@  static void smbios_build_type_19_table(unsigned instance,
 {
     uint64_t end, start_kb, end_kb;
 
-    SMBIOS_BUILD_TABLE_PRE(19, 0x1300 + instance, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(19, T19_BASE + instance, true); /* required */
 
     end = start + size - 1;
     assert(end > start);
@@ -814,7 +828,7 @@  static void smbios_build_type_19_table(unsigned instance,
 
 static void smbios_build_type_32_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(32, 0x2000, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(32, T32_BASE, true); /* required */
 
     memset(t->reserved, 0, 6);
     t->boot_status = 0; /* No errors detected */
@@ -828,7 +842,7 @@  static void smbios_build_type_41_table(Error **errp)
     struct type41_instance *t41;
 
     QTAILQ_FOREACH(t41, &type41, next) {
-        SMBIOS_BUILD_TABLE_PRE(41, 0x2900 + instance, true);
+        SMBIOS_BUILD_TABLE_PRE(41, T41_BASE + instance, true);
 
         SMBIOS_TABLE_SET_STR(41, reference_designation_str, t41->designation);
         t->device_type = t41->kind;
@@ -871,7 +885,7 @@  static void smbios_build_type_41_table(Error **errp)
 
 static void smbios_build_type_127_table(void)
 {
-    SMBIOS_BUILD_TABLE_PRE(127, 0x7F00, true); /* required */
+    SMBIOS_BUILD_TABLE_PRE(127, T127_BASE, true); /* required */
     SMBIOS_BUILD_TABLE_POST;
 }