Signed-off-by: Alex Wang <al...@nicira.com>
---
 lib/ovs-numa.c |   18 ++++++++++++++++++
 lib/ovs-numa.h |    7 +++++++
 2 files changed, 25 insertions(+)

diff --git a/lib/ovs-numa.c b/lib/ovs-numa.c
index 545b075..2de2aa2 100644
--- a/lib/ovs-numa.c
+++ b/lib/ovs-numa.c
@@ -168,6 +168,24 @@ ovs_numa_get_n_cores(void)
                                    : OVS_CORE_UNSPEC;
 }
 
+/* Given 'core_id', returns the corresponding socket id.  Returns
+ * OVS_SOCKET_UNSPEC if 'core_id' is invalid. */
+int
+ovs_numa_get_socket_id(int core_id)
+{
+    if (ovs_numa_cpu_core_id_is_valid(core_id)) {
+        struct cpu_core *core;
+
+        core = CONTAINER_OF(hmap_first_with_hash(&all_cpu_cores,
+                                                 hash_int(core_id, 0)),
+                            struct cpu_core, hmap_node);
+
+        return core->socket->socket_id;
+    }
+
+    return OVS_SOCKET_UNSPEC;
+}
+
 /* Returns the number of cpu cores on socket.  Returns OVS_CORE_UNSPEC
  * if 'socket_id' is invalid. */
 int
diff --git a/lib/ovs-numa.h b/lib/ovs-numa.h
index 95884c5..46d5750 100644
--- a/lib/ovs-numa.h
+++ b/lib/ovs-numa.h
@@ -32,6 +32,7 @@ bool ovs_numa_cpu_socket_id_is_valid(int sid);
 bool ovs_numa_cpu_core_id_is_valid(int cid);
 int ovs_numa_get_n_sockets(void);
 int ovs_numa_get_n_cores(void);
+int ovs_numa_get_socket_id(int core_id);
 int ovs_numa_get_n_cores_on_socket(int socket_id);
 int ovs_numa_get_n_unpinned_cores_on_socket(int socket_id);
 bool ovs_numa_try_pin_core_specific(int core_id);
@@ -72,6 +73,12 @@ ovs_numa_get_n_cores(void)
 }
 
 static inline int
+ovs_numa_get_socket_id(int core_id OVS_UNUSED)
+{
+    return OVS_SOCKET_UNSPEC;
+}
+
+static inline int
 ovs_numa_get_n_cores_on_socket(int socket_id OVS_UNUSED)
 {
     return OVS_CORE_UNSPEC;
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to