hvm: NUMA guest: inject NUMA topology into the guest (resend)
PATCH 2/2 hvm: NUMA guest: inject NUMA topology into the guest (resend)
This patch extends the hvm_info_table to store the number of guest nodes and will create a suitable ACPI SRAT table to describe the used guest NUMA topology.
Rediffed to apply against staging 18036.
Signed-off-by Andre Przywara <[email protected]>
Signature · 9 lines
Andre Przywara AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 277-84917 ----to satisfy European Law for business letters: AMD Saxony Limited Liability Company & Co. KG, Wilschdorfer Landstr. 101, 01109 Dresden, Germany Register Court Dresden: HRA 4896, General Partner authorized to represent: AMD Saxony LLC (Wilmington, Delaware, US) General Manager of AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
tools/firmware/hvmloader/acpi/acpi2_0.h +57 -0
@@ -356,6 +356,61 @@ };/* +* 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',' ')
@@ -366,6 +421,7 @@#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.
@@ -378,6 +434,7 @@#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 +146 -0
170 lines not on this page · raw message
tools/firmware/hvmloader/util.c +6 -0
@@ -594,6 +594,12 @@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
@@ -104,6 +104,7 @@/* HVM-builder info. */ int get_vcpu_nr (void ); +int get_numanodes (void );int get_acpi_enabled (void );int get_apic_mode (void );
tools/python/xen/lowlevel/xc/xc.c +13 -0
@@ -861,6 +861,18 @@#endif /* __i386__ || __x86_64__ */ +static unsigned hweight_long (unsigned long value) +{ +int ret=0 ; + +while (value>0 ) + { +if (value&1 ) ++ret; + value>>=1 ; + } +return ret; +} +static PyObject *pyxc_hvm_build (XcObject *self,PyObject *args,PyObject *kwds)
@@ -900,6 +912,7 @@ va_hvm->acpi_enabled = acpi; va_hvm->apic_mode = apic; va_hvm->nr_vcpus = vcpus; + va_hvm->numanodes =hweight_long (nodemask);for ( i =0 , sum =0 ; i < va_hvm->length; i++ ) sum += ((uint8_t *)va_hvm)[i]; va_hvm->checksum = -sum;
xen/include/public/hvm/hvm_info_table.h +1 -0
@@ -36,6 +36,7 @@uint8_t acpi_enabled;uint8_t apic_mode;uint32_t nr_vcpus; + uint32_t numanodes; };#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel