Skip to contentSkip to conversation

inject created SRAT table into the guest

PATCH In review Andre Przywara 1 participant 1 message Aug 13, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 4/4 inject created SRAT table into the guest

# HG changeset patch
# User [email protected]
# Date 1186568085 -7200
# Node ID 1f3def9d51b4aacdb87862166998c29622649dcc # Parent f5e9f20109d9dc3c82bfadcedd4af77a35e8c5fb export SRAT table to the guest

tools/firmware/hvmloader/acpi/acpi2_0.h +57 -0
diff -r f5e9f20109d9 -r 1f3def9d51b4 tools/firmware/hvmloader/acpi/acpi2_0.h
@@ -369,6 +369,61 @@ struct acpi_20_madt_intsrcovr {
 };
 
 /*
+ * System Resource Affinity Table header definition (SRAT).
+ */
+struct acpi_20_srat {
+    struct acpi_header header;
+    uint32_t table_revision;
+    uint32_t reserved2[2];
+};
+
+#define ACPI_SRAT_TABLE_REVISION 1
+
+/*
+ * System Resource Affinity Table structure types.
+ */
+#define ACPI_PROCESSOR_AFFIN           0x00
+#define ACPI_MEMORY_AFFIN              0x01
+
+struct acpi_20_srat_processor {
+	uint8_t type;
+	uint8_t length;
+	uint8_t domain;
+	uint8_t apic_id;
+	uint32_t flags;
+	uint8_t sapic_id;
+	uint8_t domain_hi[3];
+	uint32_t reserved;
+};
+
+/*
+ * Local APIC Affinity Flags.  All other bits are reserved and must be 0.
+ */
+#define ACPI_LOCAL_APIC_AFFIN_ENABLED (1 << 0)
+
+struct acpi_20_srat_memory {
+	uint8_t type;
+	uint8_t length;
+	uint8_t domain;
+	uint8_t domain_hi[3];	/* this is ACPI 3.0, reserved in 2.0 */
+	uint16_t reserved;
+	uint32_t base_address_lo;
+	uint32_t base_address_hi;
+	uint32_t length_lo;
+	uint32_t length_hi;
+	uint32_t reserved2;
+	uint32_t flags;
+	uint32_t reserved3[2];
+};
+
+/*
+ * Memory Affinity Flags.  All other bits are reserved and must be 0.
+ */
+#define ACPI_MEM_AFFIN_ENABLED (1 << 0)
+#define ACPI_MEM_AFFIN_HOTPLUGGABLE (1 << 1)
+#define ACPI_MEM_AFFIN_NONVOLATILE (1 << 2)  /* this is ACPI 3.0 */
+
+/*
  * Table Signatures.
  */
 #define ACPI_2_0_RSDP_SIGNATURE ASCII64('R','S','D',' ','P','T','R',' ')
@@ -379,6 +434,7 @@ struct acpi_20_madt_intsrcovr {
 #define ACPI_2_0_XSDT_SIGNATURE ASCII32('X','S','D','T')
 #define ACPI_2_0_TCPA_SIGNATURE ASCII32('T','C','P','A')
 #define ACPI_2_0_HPET_SIGNATURE ASCII32('H','P','E','T')
+#define ACPI_2_0_SRAT_SIGNATURE ASCII32('S','R','A','T')
 
 /*
  * Table revision numbers.
@@ -391,6 +447,7 @@ struct acpi_20_madt_intsrcovr {
 #define ACPI_2_0_TCPA_REVISION 0x02
 #define ACPI_2_0_HPET_REVISION 0x01
 #define ACPI_1_0_FADT_REVISION 0x01
+#define ACPI_2_0_SRAT_REVISION 0x01
 
 #pragma pack ()
 
tools/firmware/hvmloader/acpi/build.c +142 -1

173 lines not on this page · raw message

tools/firmware/hvmloader/util.c +6 -0
diff -r f5e9f20109d9 -r 1f3def9d51b4 tools/firmware/hvmloader/util.c
@@ -574,6 +574,12 @@ int get_vcpu_nr(void)
     return (t ? t->nr_vcpus : 1);
 }
 
+int get_numanodes(void)
+{
+    struct hvm_info_table *t = get_hvm_info_table();
+    return (t ? t->numanodes : 1);
+}
+
 int get_acpi_enabled(void)
 {
     struct hvm_info_table *t = get_hvm_info_table();
tools/firmware/hvmloader/util.h +1 -0
diff -r f5e9f20109d9 -r 1f3def9d51b4 tools/firmware/hvmloader/util.h
@@ -54,6 +54,7 @@ void cpuid(uint32_t idx, uint32_t *eax, 
 
 /* HVM-builder info. */
 int get_vcpu_nr(void);
+int get_numanodes(void);
 int get_acpi_enabled(void);
 int get_apic_mode(void);
 

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel