From: Bharata B Rao <bharata@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, imammedo@redhat.com,
Bharata B Rao <bharata@linux.vnet.ibm.com>,
ehabkost@redhat.com, david@gibson.dropbear.id.au
Subject: [Qemu-devel] [PATCH v4 6/6] numa: API to lookup NUMA node by address
Date: Mon, 29 Jun 2015 13:50:27 +0530 [thread overview]
Message-ID: <1435566027-17061-7-git-send-email-bharata@linux.vnet.ibm.com> (raw)
In-Reply-To: <1435566027-17061-1-git-send-email-bharata@linux.vnet.ibm.com>
Introduce an API numa_get_node(ram_addr_t addr, Error **errp) that
returns the NUMA node to which the given address belongs to. This
API works uniformly for both boot time as well as hotplugged memory.
This API is needed by sPAPR PowerPC to support
ibm,dynamic-reconfiguration-memory device tree node which is needed for
memory hotplug.
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
---
include/sysemu/numa.h | 1 +
numa.c | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/include/sysemu/numa.h b/include/sysemu/numa.h
index 7176364..a6392bc 100644
--- a/include/sysemu/numa.h
+++ b/include/sysemu/numa.h
@@ -31,5 +31,6 @@ void query_numa_node_mem(uint64_t node_mem[]);
extern QemuOptsList qemu_numa_opts;
void numa_set_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
void numa_unset_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
+uint32_t numa_get_node(ram_addr_t addr, Error **errp);
#endif
diff --git a/numa.c b/numa.c
index a73f648..3c80059 100644
--- a/numa.c
+++ b/numa.c
@@ -97,6 +97,47 @@ static void numa_set_mem_ranges(void)
}
}
+/*
+ * Check if @addr falls under NUMA @node.
+ */
+static bool numa_addr_belongs_to_node(ram_addr_t addr, uint32_t node)
+{
+ struct numa_addr_range *range;
+
+ QLIST_FOREACH(range, &numa_info[node].addr, entry) {
+ if (addr >= range->mem_start && addr <= range->mem_end) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/*
+ * Given an address, return the index of the NUMA node to which the
+ * address belongs to.
+ */
+uint32_t numa_get_node(ram_addr_t addr, Error **errp)
+{
+ uint32_t i;
+
+ /* For non NUMA configurations, check if the addr falls under node 0 */
+ if (!nb_numa_nodes) {
+ if (numa_addr_belongs_to_node(addr, 0)) {
+ return 0;
+ }
+ }
+
+ for (i = 0; i < nb_numa_nodes; i++) {
+ if (numa_addr_belongs_to_node(addr, i)) {
+ return i;
+ }
+ }
+
+ error_setg(errp, "Address 0x" RAM_ADDR_FMT " doesn't belong to any "
+ "NUMA node", addr);
+ return -1;
+}
+
static void numa_node_parse(NumaNodeOptions *node, QemuOpts *opts, Error **errp)
{
uint16_t nodenr;
--
2.1.0
next prev parent reply other threads:[~2015-06-29 8:21 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-29 8:20 [Qemu-devel] [PATCH v4 0/6] Refactoring pc_dimm_plug and NUMA node lookup API Bharata B Rao
2015-06-29 8:20 ` [Qemu-devel] [PATCH v4 1/6] pc, pc-dimm: Extract hotplug related fields in PCMachineState to a structure Bharata B Rao
2015-06-29 8:49 ` Igor Mammedov
2015-06-29 8:20 ` [Qemu-devel] [PATCH v4 2/6] pc, pc-dimm: Factor out reusable parts in pc_dimm_plug to a separate routine Bharata B Rao
2015-06-29 11:52 ` Igor Mammedov
2015-06-30 2:53 ` David Gibson
2015-06-29 8:20 ` [Qemu-devel] [PATCH v4 3/6] pc: Abort if HotplugHandlerClass::plug() fails Bharata B Rao
2015-06-29 11:53 ` Igor Mammedov
2015-06-30 2:54 ` David Gibson
2015-06-29 8:20 ` [Qemu-devel] [PATCH v4 4/6] numa, pc-dimm: Store pc-dimm memory information in numa_info Bharata B Rao
2015-06-29 12:08 ` Igor Mammedov
2015-06-29 13:41 ` Bharata B Rao
2015-06-29 14:53 ` Igor Mammedov
2015-07-02 4:07 ` Bharata B Rao
2015-06-30 2:55 ` David Gibson
2015-06-29 8:20 ` [Qemu-devel] [PATCH v4 5/6] numa: Store boot memory address range in node_info Bharata B Rao
2015-06-30 2:56 ` David Gibson
2015-06-29 8:20 ` Bharata B Rao [this message]
2015-06-30 2:57 ` [Qemu-devel] [PATCH v4 6/6] numa: API to lookup NUMA node by address David Gibson
2015-06-29 12:32 ` [Qemu-devel] [PATCH v4 0/6] Refactoring pc_dimm_plug and NUMA node lookup API Igor Mammedov
2015-06-29 13:53 ` Bharata B Rao
2015-06-30 19:39 ` Eduardo Habkost
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1435566027-17061-7-git-send-email-bharata@linux.vnet.ibm.com \
--to=bharata@linux.vnet.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).