All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM
@ 2015-08-26 19:04 Wei Huang
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support Wei Huang
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Wei Huang @ 2015-08-26 19:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: wei, peter.maydell, drjones, ard.biesheuvel, ehabkost,
	ivan.khoronzhuk, mst, somlo, zhaoshenglong, leif.lindholm,
	roy.franz, pbonzini, imammedo, lersek, jdelvare, rth

SMBIOS tables present userful system hardware info to management
applications, such as DMI tools. Even though SMBIOS was originally
developed for Intel x86, it has been extended to both Itanium and 
ARM (32bit & 64bit). More and more ARM server releases, such as 
RHEL Server for ARM, start to integrate support for SMBIOS.

This patchset is intendted to provid SMBIOS tables for ARM mach-virt
machine. The SMBIOS tables are created and stored in fw_cfg, relying on
OVMF (AAVMF) to parse/present SMBIOS entry.

Given that refractoring patches have been accepted by upstream. This new
version (V5) integrates SMBIOS 3.0 support for ARM mach-virt. I have
tested this version using a customized AAVMF created by Laszlo, who
has submitted his patches to OVMF mailing list. Compatibility tests 
for x86 VMs (Linux & Windows) also passed.

V4->V5:
 * Fixed tests/bios-tables-test
 * Validated with ARM64/x86-64 VMs and passed "make test"

V3->V4:
 * Patch 1 - 3 accepted by mst tree. So start from Patch 4 & 5
 * Remove ep_length; Instead infer anchor_length from anchor string (mst)

V2->V3:
 * Removed unncessary ram_size paramemter (patch 3 in V2, Laszlo)
 * Fixed UUID encode (Laszlo)
 * Added -smbios option (Leif)
 * Fixed misc variable defintion (Laszlo)
 * V2 regression tested on x86 (Gabriel and Leif)

V1->V2:
 * Add NULL checking for fw_cfg (Shannon Zhao)
 * Init 3.0 entry point table max size to smbios_tables_len (Laszlo)
 * Minor re-arrangement of smbios.h layout with function headers to the bottom
 * Validated SMBIOS 3.0 tables with a customized AAVMF created by Laszlo

RFC->V1:
 * Add SMBIOS 3.0 support for buidling SMBIOS
 * Switch from SMBIOS 2.1 to 3.0 for ARM mach-virt
 * RFC version Tested-by Laszlo Ersek and Acked-by Gabriel Somlo

Thanks,
-Wei

Wei Huang (2):
  smbios: add smbios 3.0 support
  smbios: implement smbios support for mach-virt

 default-configs/arm-softmmu.mak |  1 +
 hw/arm/virt.c                   | 25 ++++++++++++
 hw/i386/pc_piix.c               |  3 +-
 hw/i386/pc_q35.c                |  3 +-
 hw/smbios/smbios.c              | 84 ++++++++++++++++++++++++++++++-----------
 include/hw/smbios/smbios.h      | 62 +++++++++++++++++++++++-------
 qemu-options.hx                 |  2 +-
 tests/bios-tables-test.c        |  6 +--
 8 files changed, 143 insertions(+), 43 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support
  2015-08-26 19:04 [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Wei Huang
@ 2015-08-26 19:04 ` Wei Huang
  2015-08-27  6:15   ` Laszlo Ersek
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt Wei Huang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Wei Huang @ 2015-08-26 19:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: wei, peter.maydell, drjones, ard.biesheuvel, ehabkost,
	ivan.khoronzhuk, mst, somlo, zhaoshenglong, leif.lindholm,
	roy.franz, pbonzini, imammedo, lersek, jdelvare, rth

This patch adds support for SMBIOS 3.0 entry point. When caller invokes
smbios_set_defaults(), it can specify entry point as 2.1 or 3.0. Then
smbios_get_tables() will return the entry point table in right format.

Acked-by: Gabriel Somlo <somlo@cmu.edu>
Tested-by: Gabriel Somlo <somlo@cmu.edu>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 hw/i386/pc_piix.c          |  3 +-
 hw/i386/pc_q35.c           |  3 +-
 hw/smbios/smbios.c         | 84 +++++++++++++++++++++++++++++++++-------------
 include/hw/smbios/smbios.h | 62 ++++++++++++++++++++++++++--------
 tests/bios-tables-test.c   |  6 ++--
 5 files changed, 116 insertions(+), 42 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 9558467..b82921d 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -173,7 +173,8 @@ static void pc_init1(MachineState *machine)
         MachineClass *mc = MACHINE_GET_CLASS(machine);
         /* These values are guest ABI, do not change */
         smbios_set_defaults("QEMU", "Standard PC (i440FX + PIIX, 1996)",
-                            mc->name, smbios_legacy_mode, smbios_uuid_encoded);
+                            mc->name, smbios_legacy_mode, smbios_uuid_encoded,
+                            SMBIOS_ENTRY_POINT_21);
     }
 
     /* allocate ram and load rom/bios */
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index c07d65b..7217cbf 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -165,7 +165,8 @@ static void pc_q35_init(MachineState *machine)
     if (smbios_defaults) {
         /* These values are guest ABI, do not change */
         smbios_set_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)",
-                            mc->name, smbios_legacy_mode, smbios_uuid_encoded);
+                            mc->name, smbios_legacy_mode, smbios_uuid_encoded,
+                            SMBIOS_ENTRY_POINT_21);
     }
 
     /* allocate ram and load rom/bios */
diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
index efdbb5d..b81a1d3 100644
--- a/hw/smbios/smbios.c
+++ b/hw/smbios/smbios.c
@@ -55,7 +55,9 @@ static uint8_t *smbios_tables;
 static size_t smbios_tables_len;
 static unsigned smbios_table_max;
 static unsigned smbios_table_cnt;
-static struct smbios_entry_point ep;
+static SmbiosEntryPointType smbios_ep_type = SMBIOS_ENTRY_POINT_21;
+
+static SmbiosEntryPoint ep;
 
 static int smbios_type4_count = 0;
 static bool smbios_immutable;
@@ -771,11 +773,12 @@ void smbios_set_cpuid(uint32_t version, uint32_t features)
 
 void smbios_set_defaults(const char *manufacturer, const char *product,
                          const char *version, bool legacy_mode,
-                         bool uuid_encoded)
+                         bool uuid_encoded, SmbiosEntryPointType ep_type)
 {
     smbios_have_defaults = true;
     smbios_legacy = legacy_mode;
     smbios_uuid_encoded = uuid_encoded;
+    smbios_ep_type = ep_type;
 
     /* drop unwanted version of command-line file blob(s) */
     if (smbios_legacy) {
@@ -808,26 +811,53 @@ void smbios_set_defaults(const char *manufacturer, const char *product,
 
 static void smbios_entry_point_setup(void)
 {
-    memcpy(ep.anchor_string, "_SM_", 4);
-    memcpy(ep.intermediate_anchor_string, "_DMI_", 5);
-    ep.length = sizeof(struct smbios_entry_point);
-    ep.entry_point_revision = 0; /* formatted_area reserved, per spec v2.1+ */
-    memset(ep.formatted_area, 0, 5);
-
-    /* compliant with smbios spec v2.8 */
-    ep.smbios_major_version = 2;
-    ep.smbios_minor_version = 8;
-    ep.smbios_bcd_revision = 0x28;
-
-    /* set during table construction, but BIOS may override: */
-    ep.structure_table_length = cpu_to_le16(smbios_tables_len);
-    ep.max_structure_size = cpu_to_le16(smbios_table_max);
-    ep.number_of_structures = cpu_to_le16(smbios_table_cnt);
-
-    /* BIOS must recalculate: */
-    ep.checksum = 0;
-    ep.intermediate_checksum = 0;
-    ep.structure_table_address = cpu_to_le32(0);
+    switch (smbios_ep_type) {
+    case SMBIOS_ENTRY_POINT_21:
+        memcpy(ep.ep21.anchor_string, "_SM_", 4);
+        memcpy(ep.ep21.intermediate_anchor_string, "_DMI_", 5);
+        ep.ep21.length = sizeof(struct smbios_21_entry_point);
+        ep.ep21.entry_point_revision = 0; /* formatted_area reserved */
+        memset(ep.ep21.formatted_area, 0, 5);
+
+        /* compliant with smbios spec v2.8 */
+        ep.ep21.smbios_major_version = 2;
+        ep.ep21.smbios_minor_version = 8;
+        ep.ep21.smbios_bcd_revision = 0x28;
+
+        /* set during table construction, but BIOS may override: */
+        ep.ep21.structure_table_length = cpu_to_le16(smbios_tables_len);
+        ep.ep21.max_structure_size = cpu_to_le16(smbios_table_max);
+        ep.ep21.number_of_structures = cpu_to_le16(smbios_table_cnt);
+
+        /* BIOS must recalculate */
+        ep.ep21.checksum = 0;
+        ep.ep21.intermediate_checksum = 0;
+        ep.ep21.structure_table_address = cpu_to_le32(0);
+
+        break;
+    case SMBIOS_ENTRY_POINT_30:
+        memcpy(ep.ep30.anchor_string, "_SM3_", 5);
+        ep.ep30.length = sizeof(struct smbios_30_entry_point);
+        ep.ep30.entry_point_revision = 1;
+        ep.ep30.reserved = 0;
+
+        /* compliant with smbios spec 3.0 */
+        ep.ep30.smbios_major_version = 3;
+        ep.ep30.smbios_minor_version = 0;
+        ep.ep30.smbios_doc_rev = 0;
+
+        /* set during table construct, but BIOS might override */
+        ep.ep30.structure_table_max_size = cpu_to_le32(smbios_tables_len);
+
+        /* BIOS must recalculate */
+        ep.ep30.checksum = 0;
+        ep.ep30.structure_table_address = cpu_to_le64(0);
+
+        break;
+    default:
+        abort();
+        break;
+    }
 }
 
 void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
@@ -885,7 +915,15 @@ void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
     *tables = smbios_tables;
     *tables_len = smbios_tables_len;
     *anchor = (uint8_t *)&ep;
-    *anchor_len = sizeof(struct smbios_entry_point);
+
+    /* calculate length based on anchor string */
+    if (!strncmp((char *)&ep, "_SM_", 4)) {
+        *anchor_len = sizeof(struct smbios_21_entry_point);
+    } else if (!strncmp((char *)&ep, "_SM3_", 5)) {
+        *anchor_len = sizeof(struct smbios_30_entry_point);
+    } else {
+        abort();
+    }
 }
 
 static void save_opt(const char **dest, QemuOpts *opts, const char *name)
diff --git a/include/hw/smbios/smbios.h b/include/hw/smbios/smbios.h
index 4269aab..76ccf70 100644
--- a/include/hw/smbios/smbios.h
+++ b/include/hw/smbios/smbios.h
@@ -23,25 +23,27 @@ struct smbios_phys_mem_area {
     uint64_t length;
 };
 
-void smbios_entry_add(QemuOpts *opts);
-void smbios_set_cpuid(uint32_t version, uint32_t features);
-void smbios_set_defaults(const char *manufacturer, const char *product,
-                         const char *version, bool legacy_mode,
-                         bool uuid_encoded);
-uint8_t *smbios_get_table_legacy(size_t *length);
-void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
-                       const unsigned int mem_array_size,
-                       uint8_t **tables, size_t *tables_len,
-                       uint8_t **anchor, size_t *anchor_len);
-
 /*
  * SMBIOS spec defined tables
  */
+typedef enum SmbiosEntryPointType {
+    SMBIOS_ENTRY_POINT_21,
+    SMBIOS_ENTRY_POINT_30,
+} SmbiosEntryPointType;
+
+/* SMBIOS Entry Point
+ * There are two types of entry points defined in the SMBIOS specification
+ * (see below). BIOS must place the entry point(s) at a 16-bit-aligned
+ * address between 0xf0000 and 0xfffff. Note that either entry point type
+ * can be used in a 64-bit target system, except that SMBIOS 2.1 entry point
+ * only allows the SMBIOS struct table to reside below 4GB address space.
+ */
 
-/* SMBIOS entry point (anchor).
- * BIOS must place this at a 16-bit-aligned address between 0xf0000 and 0xfffff.
+/* SMBIOS 2.1 (32-bit) Entry Point
+ *  - introduced since SMBIOS 2.1
+ *  - supports structure table below 4GB only
  */
-struct smbios_entry_point {
+struct smbios_21_entry_point {
     uint8_t anchor_string[4];
     uint8_t checksum;
     uint8_t length;
@@ -58,6 +60,28 @@ struct smbios_entry_point {
     uint8_t smbios_bcd_revision;
 } QEMU_PACKED;
 
+/* SMBIOS 3.0 (64-bit) Entry Point
+ *  - introduced since SMBIOS 3.0
+ *  - supports structure table at 64-bit address space
+ */
+struct smbios_30_entry_point {
+    uint8_t anchor_string[5];
+    uint8_t checksum;
+    uint8_t length;
+    uint8_t smbios_major_version;
+    uint8_t smbios_minor_version;
+    uint8_t smbios_doc_rev;
+    uint8_t entry_point_revision;
+    uint8_t reserved;
+    uint32_t structure_table_max_size;
+    uint64_t structure_table_address;
+} QEMU_PACKED;
+
+typedef union {
+    struct smbios_21_entry_point ep21;
+    struct smbios_30_entry_point ep30;
+} QEMU_PACKED SmbiosEntryPoint;
+
 /* This goes at the beginning of every SMBIOS structure. */
 struct smbios_structure_header {
     uint8_t type;
@@ -232,4 +256,14 @@ struct smbios_type_127 {
     struct smbios_structure_header header;
 } QEMU_PACKED;
 
+void smbios_entry_add(QemuOpts *opts);
+void smbios_set_cpuid(uint32_t version, uint32_t features);
+void smbios_set_defaults(const char *manufacturer, const char *product,
+                         const char *version, bool legacy_mode,
+                         bool uuid_encoded, SmbiosEntryPointType ep_type);
+uint8_t *smbios_get_table_legacy(size_t *length);
+void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
+                       const unsigned int mem_array_size,
+                       uint8_t **tables, size_t *tables_len,
+                       uint8_t **anchor, size_t *anchor_len);
 #endif /*QEMU_SMBIOS_H */
diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c
index 613867a..9686328 100644
--- a/tests/bios-tables-test.c
+++ b/tests/bios-tables-test.c
@@ -50,7 +50,7 @@ typedef struct {
     int rsdt_tables_nr;
     GArray *tables;
     uint32_t smbios_ep_addr;
-    struct smbios_entry_point smbios_ep_table;
+    struct smbios_21_entry_point smbios_ep_table;
 } test_data;
 
 #define LOW(x) ((x) & 0xff)
@@ -601,7 +601,7 @@ static void test_acpi_asl(test_data *data)
 
 static bool smbios_ep_table_ok(test_data *data)
 {
-    struct smbios_entry_point *ep_table = &data->smbios_ep_table;
+    struct smbios_21_entry_point *ep_table = &data->smbios_ep_table;
     uint32_t addr = data->smbios_ep_addr;
 
     ACPI_READ_ARRAY(ep_table->anchor_string, addr);
@@ -681,7 +681,7 @@ static inline bool smbios_single_instance(uint8_t type)
 static void test_smbios_structs(test_data *data)
 {
     DECLARE_BITMAP(struct_bitmap, SMBIOS_MAX_TYPE+1) = { 0 };
-    struct smbios_entry_point *ep_table = &data->smbios_ep_table;
+    struct smbios_21_entry_point *ep_table = &data->smbios_ep_table;
     uint32_t addr = ep_table->structure_table_address;
     int i, len, max_len = 0;
     uint8_t type, prv, crt;
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt
  2015-08-26 19:04 [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Wei Huang
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support Wei Huang
@ 2015-08-26 19:04 ` Wei Huang
  2015-09-01 15:58   ` Peter Maydell
  2015-08-27  6:18 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Laszlo Ersek
  2015-09-01 16:15 ` Peter Maydell
  3 siblings, 1 reply; 8+ messages in thread
From: Wei Huang @ 2015-08-26 19:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: wei, peter.maydell, drjones, ard.biesheuvel, ehabkost,
	ivan.khoronzhuk, mst, somlo, zhaoshenglong, leif.lindholm,
	roy.franz, pbonzini, imammedo, lersek, jdelvare, rth

This patch generates smbios tables for ARM mach-virt. Also add
CONFIG_SMBIOS=y for ARM default config.

Acked-by: Gabriel Somlo <somlo@cmu.edu>
Tested-by: Gabriel Somlo <somlo@cmu.edu>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Shannon Zhao <shannon.zhao@linaro.org>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 default-configs/arm-softmmu.mak |  1 +
 hw/arm/virt.c                   | 25 +++++++++++++++++++++++++
 qemu-options.hx                 |  2 +-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak
index 74f1db3..99b41e9 100644
--- a/default-configs/arm-softmmu.mak
+++ b/default-configs/arm-softmmu.mak
@@ -102,3 +102,4 @@ CONFIG_XIO3130=y
 CONFIG_IOH3420=y
 CONFIG_I82801B11=y
 CONFIG_ACPI=y
+CONFIG_SMBIOS=y
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index d5a8417..e3a8f36 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -50,6 +50,7 @@
 #include "hw/arm/fdt.h"
 #include "hw/intc/arm_gic_common.h"
 #include "kvm_arm.h"
+#include "hw/smbios/smbios.h"
 
 /* Number of external interrupt lines to configure the GIC with */
 #define NUM_IRQS 256
@@ -788,12 +789,36 @@ static void *machvirt_dtb(const struct arm_boot_info *binfo, int *fdt_size)
     return board->fdt;
 }
 
+static void virt_build_smbios(VirtGuestInfo *guest_info)
+{
+    FWCfgState *fw_cfg = guest_info->fw_cfg;
+    uint8_t *smbios_tables, *smbios_anchor;
+    size_t smbios_tables_len, smbios_anchor_len;
+
+    if (!fw_cfg)
+        return;
+
+    smbios_set_defaults("QEMU", "QEMU Virtual Machine",
+                        "1.0", false, true, SMBIOS_ENTRY_POINT_30);
+
+    smbios_get_tables(NULL, 0, &smbios_tables, &smbios_tables_len,
+                      &smbios_anchor, &smbios_anchor_len);
+
+    if (smbios_anchor) {
+        fw_cfg_add_file(fw_cfg, "etc/smbios/smbios-tables",
+                        smbios_tables, smbios_tables_len);
+        fw_cfg_add_file(fw_cfg, "etc/smbios/smbios-anchor",
+                        smbios_anchor, smbios_anchor_len);
+    }
+}
+
 static
 void virt_guest_info_machine_done(Notifier *notifier, void *data)
 {
     VirtGuestInfoState *guest_info_state = container_of(notifier,
                                               VirtGuestInfoState, machine_done);
     virt_acpi_setup(&guest_info_state->info);
+    virt_build_smbios(&guest_info_state->info);
 }
 
 static void machvirt_init(MachineState *machine)
diff --git a/qemu-options.hx b/qemu-options.hx
index 77f5853..efce775 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1412,7 +1412,7 @@ DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
     "-smbios type=17[,loc_pfx=str][,bank=str][,manufacturer=str][,serial=str]\n"
     "               [,asset=str][,part=str][,speed=%d]\n"
     "                specify SMBIOS type 17 fields\n",
-    QEMU_ARCH_I386)
+    QEMU_ARCH_I386 | QEMU_ARCH_ARM)
 STEXI
 @item -smbios file=@var{binary}
 @findex -smbios
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support Wei Huang
@ 2015-08-27  6:15   ` Laszlo Ersek
  2015-09-01 15:56     ` Peter Maydell
  0 siblings, 1 reply; 8+ messages in thread
From: Laszlo Ersek @ 2015-08-27  6:15 UTC (permalink / raw)
  To: Wei Huang, qemu-devel
  Cc: peter.maydell, drjones, ard.biesheuvel, ehabkost,
	ivan.khoronzhuk, mst, somlo, zhaoshenglong, leif.lindholm,
	roy.franz, pbonzini, imammedo, jdelvare, rth

On 08/26/15 21:04, Wei Huang wrote:
> This patch adds support for SMBIOS 3.0 entry point. When caller invokes
> smbios_set_defaults(), it can specify entry point as 2.1 or 3.0. Then
> smbios_get_tables() will return the entry point table in right format.
> 
> Acked-by: Gabriel Somlo <somlo@cmu.edu>
> Tested-by: Gabriel Somlo <somlo@cmu.edu>
> Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  hw/i386/pc_piix.c          |  3 +-
>  hw/i386/pc_q35.c           |  3 +-
>  hw/smbios/smbios.c         | 84 +++++++++++++++++++++++++++++++++-------------
>  include/hw/smbios/smbios.h | 62 ++++++++++++++++++++++++++--------
>  tests/bios-tables-test.c   |  6 ++--
>  5 files changed, 116 insertions(+), 42 deletions(-)

Diffed against v4.

Reviewed-by: Laszlo Ersek <lersek@redhat.com>

(although my reviews are obviously not the bottleneck here, so I wonder
why I bother at all)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM
  2015-08-26 19:04 [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Wei Huang
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support Wei Huang
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt Wei Huang
@ 2015-08-27  6:18 ` Laszlo Ersek
  2015-09-01 16:15 ` Peter Maydell
  3 siblings, 0 replies; 8+ messages in thread
From: Laszlo Ersek @ 2015-08-27  6:18 UTC (permalink / raw)
  To: Wei Huang, qemu-devel
  Cc: peter.maydell, drjones, ard.biesheuvel, ehabkost,
	ivan.khoronzhuk, mst, somlo, zhaoshenglong, leif.lindholm,
	roy.franz, pbonzini, imammedo, jdelvare, rth

On 08/26/15 21:04, Wei Huang wrote:
> SMBIOS tables present userful system hardware info to management
> applications, such as DMI tools. Even though SMBIOS was originally
> developed for Intel x86, it has been extended to both Itanium and 
> ARM (32bit & 64bit). More and more ARM server releases, such as 
> RHEL Server for ARM, start to integrate support for SMBIOS.
> 
> This patchset is intendted to provid SMBIOS tables for ARM mach-virt
> machine. The SMBIOS tables are created and stored in fw_cfg, relying on
> OVMF (AAVMF) to parse/present SMBIOS entry.
> 
> Given that refractoring patches have been accepted by upstream. This new
> version (V5) integrates SMBIOS 3.0 support for ARM mach-virt. I have
> tested this version using a customized AAVMF created by Laszlo, who
> has submitted his patches to OVMF mailing list.

To be precise, the necessary edk2 patches have been upstream for a
while. The commit range is b265ed92^..c3db5a8c.

Thanks
Laszlo

> Compatibility tests 
> for x86 VMs (Linux & Windows) also passed.
> 
> V4->V5:
>  * Fixed tests/bios-tables-test
>  * Validated with ARM64/x86-64 VMs and passed "make test"
> 
> V3->V4:
>  * Patch 1 - 3 accepted by mst tree. So start from Patch 4 & 5
>  * Remove ep_length; Instead infer anchor_length from anchor string (mst)
> 
> V2->V3:
>  * Removed unncessary ram_size paramemter (patch 3 in V2, Laszlo)
>  * Fixed UUID encode (Laszlo)
>  * Added -smbios option (Leif)
>  * Fixed misc variable defintion (Laszlo)
>  * V2 regression tested on x86 (Gabriel and Leif)
> 
> V1->V2:
>  * Add NULL checking for fw_cfg (Shannon Zhao)
>  * Init 3.0 entry point table max size to smbios_tables_len (Laszlo)
>  * Minor re-arrangement of smbios.h layout with function headers to the bottom
>  * Validated SMBIOS 3.0 tables with a customized AAVMF created by Laszlo
> 
> RFC->V1:
>  * Add SMBIOS 3.0 support for buidling SMBIOS
>  * Switch from SMBIOS 2.1 to 3.0 for ARM mach-virt
>  * RFC version Tested-by Laszlo Ersek and Acked-by Gabriel Somlo
> 
> Thanks,
> -Wei
> 
> Wei Huang (2):
>   smbios: add smbios 3.0 support
>   smbios: implement smbios support for mach-virt
> 
>  default-configs/arm-softmmu.mak |  1 +
>  hw/arm/virt.c                   | 25 ++++++++++++
>  hw/i386/pc_piix.c               |  3 +-
>  hw/i386/pc_q35.c                |  3 +-
>  hw/smbios/smbios.c              | 84 ++++++++++++++++++++++++++++++-----------
>  include/hw/smbios/smbios.h      | 62 +++++++++++++++++++++++-------
>  qemu-options.hx                 |  2 +-
>  tests/bios-tables-test.c        |  6 +--
>  8 files changed, 143 insertions(+), 43 deletions(-)
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support
  2015-08-27  6:15   ` Laszlo Ersek
@ 2015-09-01 15:56     ` Peter Maydell
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2015-09-01 15:56 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: Wei Huang, Andrew Jones, Ard Biesheuvel, Eduardo Habkost,
	Ivan Khoronzhuk, Michael S. Tsirkin, Gabriel L. Somlo,
	Shannon Zhao, QEMU Developers, Leif Lindholm, Roy Franz,
	Igor Mammedov, Paolo Bonzini, jdelvare, Richard Henderson

On 27 August 2015 at 07:15, Laszlo Ersek <lersek@redhat.com> wrote:
> On 08/26/15 21:04, Wei Huang wrote:
>> This patch adds support for SMBIOS 3.0 entry point. When caller invokes
>> smbios_set_defaults(), it can specify entry point as 2.1 or 3.0. Then
>> smbios_get_tables() will return the entry point table in right format.
>>
>> Acked-by: Gabriel Somlo <somlo@cmu.edu>
>> Tested-by: Gabriel Somlo <somlo@cmu.edu>
>> Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
>> Signed-off-by: Wei Huang <wei@redhat.com>
>> ---
>>  hw/i386/pc_piix.c          |  3 +-
>>  hw/i386/pc_q35.c           |  3 +-
>>  hw/smbios/smbios.c         | 84 +++++++++++++++++++++++++++++++++-------------
>>  include/hw/smbios/smbios.h | 62 ++++++++++++++++++++++++++--------
>>  tests/bios-tables-test.c   |  6 ++--
>>  5 files changed, 116 insertions(+), 42 deletions(-)
>
> Diffed against v4.
>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
>
> (although my reviews are obviously not the bottleneck here, so I wonder
> why I bother at all)

Just a note to say that I do appreciate the code review, especially
as here when the patches deal with something that's not my area of
expertise.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt
  2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt Wei Huang
@ 2015-09-01 15:58   ` Peter Maydell
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2015-09-01 15:58 UTC (permalink / raw)
  To: Wei Huang
  Cc: Andrew Jones, Ard Biesheuvel, Eduardo Habkost, Ivan Khoronzhuk,
	Michael S. Tsirkin, Gabriel L. Somlo, Shannon Zhao,
	QEMU Developers, Leif Lindholm, Roy Franz, Igor Mammedov,
	Paolo Bonzini, Laszlo Ersek, jdelvare, Richard Henderson

On 26 August 2015 at 20:04, Wei Huang <wei@redhat.com> wrote:
> This patch generates smbios tables for ARM mach-virt. Also add
> CONFIG_SMBIOS=y for ARM default config.
>
> Acked-by: Gabriel Somlo <somlo@cmu.edu>
> Tested-by: Gabriel Somlo <somlo@cmu.edu>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> Reviewed-by: Shannon Zhao <shannon.zhao@linaro.org>
> Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
> Signed-off-by: Wei Huang <wei@redhat.com>

> +static void virt_build_smbios(VirtGuestInfo *guest_info)
> +{
> +    FWCfgState *fw_cfg = guest_info->fw_cfg;
> +    uint8_t *smbios_tables, *smbios_anchor;
> +    size_t smbios_tables_len, smbios_anchor_len;
> +
> +    if (!fw_cfg)
> +        return;

Missing braces for if (). You can catch this sort of thing
yourself by running scripts/checkpatch.pl on your patches.

In this case this looks like the only issue with this patchset,
so I'll fix it when I put it into target-arm.next.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM
  2015-08-26 19:04 [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Wei Huang
                   ` (2 preceding siblings ...)
  2015-08-27  6:18 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Laszlo Ersek
@ 2015-09-01 16:15 ` Peter Maydell
  3 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2015-09-01 16:15 UTC (permalink / raw)
  To: Wei Huang
  Cc: Andrew Jones, Ard Biesheuvel, Eduardo Habkost, Ivan Khoronzhuk,
	Michael S. Tsirkin, Gabriel L. Somlo, Shannon Zhao,
	QEMU Developers, Leif Lindholm, Roy Franz, Igor Mammedov,
	Paolo Bonzini, Laszlo Ersek, jdelvare, Richard Henderson

On 26 August 2015 at 20:04, Wei Huang <wei@redhat.com> wrote:
> SMBIOS tables present userful system hardware info to management
> applications, such as DMI tools. Even though SMBIOS was originally
> developed for Intel x86, it has been extended to both Itanium and
> ARM (32bit & 64bit). More and more ARM server releases, such as
> RHEL Server for ARM, start to integrate support for SMBIOS.
>
> This patchset is intendted to provid SMBIOS tables for ARM mach-virt
> machine. The SMBIOS tables are created and stored in fw_cfg, relying on
> OVMF (AAVMF) to parse/present SMBIOS entry.
>
> Given that refractoring patches have been accepted by upstream. This new
> version (V5) integrates SMBIOS 3.0 support for ARM mach-virt. I have
> tested this version using a customized AAVMF created by Laszlo, who
> has submitted his patches to OVMF mailing list. Compatibility tests
> for x86 VMs (Linux & Windows) also passed.

Thanks, applied to target-arm.next.

-- PMM

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-09-01 16:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-26 19:04 [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Wei Huang
2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 1/2] smbios: add smbios 3.0 support Wei Huang
2015-08-27  6:15   ` Laszlo Ersek
2015-09-01 15:56     ` Peter Maydell
2015-08-26 19:04 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 2/2] smbios: implement smbios support for mach-virt Wei Huang
2015-09-01 15:58   ` Peter Maydell
2015-08-27  6:18 ` [Qemu-devel] [ARM SMBIOS V5 PATCH 0/2]SMBIOS Support for ARM Laszlo Ersek
2015-09-01 16:15 ` Peter Maydell

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.