From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51152) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z0T3R-0005Qt-Jo for qemu-devel@nongnu.org; Thu, 04 Jun 2015 07:11:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z0T3Q-0001nI-J4 for qemu-devel@nongnu.org; Thu, 04 Jun 2015 07:11:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36916) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z0T3Q-0001nC-Cf for qemu-devel@nongnu.org; Thu, 04 Jun 2015 07:11:20 -0400 Date: Thu, 4 Jun 2015 13:11:16 +0200 From: "Michael S. Tsirkin" Message-ID: <1433416111-19022-22-git-send-email-mst@redhat.com> References: <1433416111-19022-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1433416111-19022-1-git-send-email-mst@redhat.com> Subject: [Qemu-devel] [PULL 21/28] hw/pxb: add numa_node parameter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Paolo Bonzini , Laszlo Ersek , Richard Henderson From: Marcel Apfelbaum 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 Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Acked-by: Laszlo Ersek --- hw/i386/acpi-build.c | 6 ++++++ hw/pci-bridge/pci_expander_bridge.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1290983..45c36a8 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -902,6 +902,7 @@ build_ssdt(GArray *table_data, GArray *linker, if (bus) { QLIST_FOREACH(bus, &bus->child, sibling) { uint8_t bus_num = pci_bus_num(bus); + uint8_t numa_node = pci_bus_numa_node(bus); /* look only for expander root buses */ if (!pci_bus_is_root(bus)) { @@ -918,6 +919,11 @@ build_ssdt(GArray *table_data, GArray *linker, aml_name_decl("_UID", aml_string("PC%.02X", bus_num))); aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A03"))); aml_append(dev, aml_name_decl("_BBN", aml_int(bus_num))); + + 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_HOST_BRIDGE(BUS(bus)->parent), io_ranges, mem_ranges); diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c index 8660a00..ec2bb45 100644 --- a/hw/pci-bridge/pci_expander_bridge.c +++ b/hw/pci-bridge/pci_expander_bridge.c @@ -17,6 +17,7 @@ #include "hw/i386/pc.h" #include "qemu/range.h" #include "qemu/error-report.h" +#include "sysemu/numa.h" #define TYPE_PXB_BUS "pxb-bus" #define PXB_BUS(obj) OBJECT_CHECK(PXBBus, (obj), TYPE_PXB_BUS) @@ -38,6 +39,7 @@ typedef struct PXBDev { /*< public >*/ uint8_t bus_nr; + uint16_t numa_node; } PXBDev; #define TYPE_PXB_HOST "pxb-host" @@ -54,12 +56,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 = { @@ -145,6 +155,12 @@ static int pxb_dev_initfn(PCIDevice *dev) PCIBus *bus; const char *dev_name = NULL; + 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; } @@ -180,6 +196,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(), }; -- MST