[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 24/24] hw/pxb: add numa_node p
From: |
Marcel Apfelbaum |
Subject: |
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 24/24] hw/pxb: add numa_node parameter |
Date: |
Thu, 5 Mar 2015 16:55:22 +0200 |
The pxb can be attach to and existing numa node by specifying
numa_node option that equals the desired numa nodeid.
Signed-off-by: Marcel Apfelbaum <address@hidden>
---
hw/i386/acpi-build.c | 12 ++++++++++++
hw/pci-bridge/pci_expander_bridge.c | 17 +++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index c915509..6063bba 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -921,6 +921,7 @@ build_ssdt(GArray *table_data, GArray *linker,
for (info = info_list; info; info = info->next) {
PciInfo *bus_info = info->value;
+ PCIHostState *host;
if (bus_info->bus == 0) {
continue;
@@ -937,6 +938,17 @@ build_ssdt(GArray *table_data, GArray *linker,
aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A03")));
aml_append(dev,
aml_name_decl("_BBN", aml_int((uint8_t)bus_info->bus)));
+
+ HOST_BRIDGE_FOREACH(host) {
+ if (pci_bus_num(host->bus) == bus_info->bus) {
+ int numa_node = pci_bus_numa_node(host->bus);
+ if (numa_node != NUMA_NODE_UNASSIGNED) {
+ aml_append(dev,
+ aml_name_decl("_PXM", aml_int(numa_node)));
+ }
+ }
+ }
+
aml_append(dev, build_prt());
crs = build_crs(pci, bus_info, &io_ranges, &mem_ranges);
aml_append(dev, aml_name_decl("_CRS", crs));
diff --git a/hw/pci-bridge/pci_expander_bridge.c
b/hw/pci-bridge/pci_expander_bridge.c
index 87515c1..9329aab 100644
--- a/hw/pci-bridge/pci_expander_bridge.c
+++ b/hw/pci-bridge/pci_expander_bridge.c
@@ -16,6 +16,7 @@
#include "hw/pci/pci_bus.h"
#include "qemu/range.h"
#include "qemu/error-report.h"
+#include "sysemu/sysemu.h"
#define TYPE_PXB_BUS "pxb-bus"
#define PXB_BUS(obj) OBJECT_CHECK(PXBBus, (obj), TYPE_PXB_BUS)
@@ -37,6 +38,7 @@ typedef struct PXBDev {
/*< public >*/
uint8_t bus_nr;
+ uint16_t numa_node;
} PXBDev;
#define TYPE_PXB_HOST "pxb-host"
@@ -53,12 +55,20 @@ static bool pxb_is_root(PCIBus *bus)
return true; /* by definition */
}
+static uint16_t pxb_bus_numa_node(PCIBus *bus)
+{
+ PXBDev *pxb = PXB_DEV(bus->parent_dev);
+
+ return pxb->numa_node;
+}
+
static void pxb_bus_class_init(ObjectClass *class, void *data)
{
PCIBusClass *pbc = PCI_BUS_CLASS(class);
pbc->bus_num = pxb_bus_num;
pbc->is_root = pxb_is_root;
+ pbc->numa_node = pxb_bus_numa_node;
}
static const TypeInfo pxb_bus_info = {
@@ -126,6 +136,12 @@ static int pxb_dev_initfn(PCIDevice *dev)
}
}
+ if (pxb->numa_node != NUMA_NODE_UNASSIGNED &&
+ pxb->numa_node >= nb_numa_nodes) {
+ error_report("Illegal numa node %d.", pxb->numa_node);
+ return -EINVAL;
+ }
+
if (dev->qdev.id && *dev->qdev.id) {
dev_name = dev->qdev.id;
}
@@ -157,6 +173,7 @@ static int pxb_dev_initfn(PCIDevice *dev)
static Property pxb_dev_properties[] = {
/* Note: 0 is not a legal a PXB bus number. */
DEFINE_PROP_UINT8("bus_nr", PXBDev, bus_nr, 0),
+ DEFINE_PROP_UINT16("numa_node", PXBDev, numa_node, NUMA_NODE_UNASSIGNED),
DEFINE_PROP_END_OF_LIST(),
};
--
2.1.0
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 10/24] hw/apci: add _PRT method for extra PCI root busses, (continued)
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 14/24] hw/pci: made pci_bus_is_root a PCIBusClass method, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 13/24] hw/pci: move pci bus related code to separate files, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 16/24] hw/pci: introduce TYPE_PCI_MAIN_HOST_BRIDGE interface, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 17/24] hw/pci: removed 'rootbus nr is 0' assumption from qmp_pci_query, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 18/24] hw/pci: implement iteration over multiple host bridges, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 20/24] hw/pci: inform bios if the system has more than one pci bridge, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 21/24] hw/pci: piix - suport multiple host bridges, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 22/24] hw/pxb: add map_irq func, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 24/24] hw/pxb: add numa_node parameter,
Marcel Apfelbaum <=
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 12/24] hw/acpi: remove from root bus 0 the crs resources used by other busses., Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 11/24] hw/acpi: add _CRS method for extra root busses, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 19/24] hw/pci: introduce PCI Expander Bridge (PXB), Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 23/24] hw/pci_bus: add support for NUMA nodes, Marcel Apfelbaum, 2015/03/05
[Qemu-ppc] [Qemu-devel] [PATCH v3 for-2.3 15/24] hw/pci: made pci_bus_num a PCIBusClass method, Marcel Apfelbaum, 2015/03/05