From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5oZw-0008Jx-Hj for qemu-devel@nongnu.org; Fri, 19 Jun 2015 01:11:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5oZs-0007jN-Mu for qemu-devel@nongnu.org; Fri, 19 Jun 2015 01:11:00 -0400 Received: from e28smtp05.in.ibm.com ([122.248.162.5]:59992) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5oZr-0007hr-Rt for qemu-devel@nongnu.org; Fri, 19 Jun 2015 01:10:56 -0400 Received: from /spool/local by e28smtp05.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 19 Jun 2015 10:40:54 +0530 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by d28dlp01.in.ibm.com (Postfix) with ESMTP id EA36AE0056 for ; Fri, 19 Jun 2015 10:44:22 +0530 (IST) Received: from d28av04.in.ibm.com (d28av04.in.ibm.com [9.184.220.66]) by d28relay01.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t5J5AXD357016392 for ; Fri, 19 Jun 2015 10:40:34 +0530 Received: from d28av04.in.ibm.com (localhost [127.0.0.1]) by d28av04.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t5J5AV8h000927 for ; Fri, 19 Jun 2015 10:40:32 +0530 From: Bharata B Rao Date: Fri, 19 Jun 2015 10:40:24 +0530 Message-Id: <1434690624-8628-5-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1434690624-8628-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1434690624-8628-1-git-send-email-bharata@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v2 4/4] numa: API to lookup NUMA node by address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, imammedo@redhat.com, Bharata B Rao , ehabkost@redhat.com, david@gibson.dropbear.id.au 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 Reviewed-by: David Gibson --- include/sysemu/numa.h | 1 + numa.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 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 463ea06..ef50a6e 100644 --- a/numa.c +++ b/numa.c @@ -90,6 +90,40 @@ 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 (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