From: Stephen Hemminger <step...@networkplumber.org>

Being able to find the numa_node for a device is useful for userspace
drivers (DPDK) and also for diagnosing performance issues.  This makes
vmbus similar to pci.

Signed-off-by: Stephen Hemminger <sthem...@microsoft.com>
Signed-off-by: K. Y. Srinivasan <k...@microsoft.com>
---
 Documentation/ABI/stable/sysfs-bus-vmbus |  7 +++++++
 drivers/hv/vmbus_drv.c                   | 17 +++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/Documentation/ABI/stable/sysfs-bus-vmbus 
b/Documentation/ABI/stable/sysfs-bus-vmbus
index 3eaffbb2d468..3fed8fdb873d 100644
--- a/Documentation/ABI/stable/sysfs-bus-vmbus
+++ b/Documentation/ABI/stable/sysfs-bus-vmbus
@@ -42,6 +42,13 @@ Contact:     K. Y. Srinivasan <k...@microsoft.com>
 Description:   The 16 bit vendor ID of the device
 Users:         tools/hv/lsvmbus and user level RDMA libraries
 
+What:          /sys/bus/vmbus/devices/<UUID>/numa_node
+Date:          Jul 2018
+KernelVersion: 4.19
+Contact:       Stephen Hemminger <sthem...@microsoft.com>
+Description:   This NUMA node to which the VMBUS device is
+               attached, or -1 if the node is unknown.
+
 What:          /sys/bus/vmbus/devices/<UUID>/channels/<N>
 Date:          September. 2017
 KernelVersion: 4.14
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index db145e1a7049..b1b548a21f91 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -210,6 +210,20 @@ static ssize_t modalias_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(modalias);
 
+#ifdef CONFIG_NUMA
+static ssize_t numa_node_show(struct device *dev,
+                             struct device_attribute *attr, char *buf)
+{
+       struct hv_device *hv_dev = device_to_hv_device(dev);
+
+       if (!hv_dev->channel)
+               return -ENODEV;
+
+       return sprintf(buf, "%d\n", hv_dev->channel->numa_node);
+}
+static DEVICE_ATTR_RO(numa_node);
+#endif
+
 static ssize_t server_monitor_pending_show(struct device *dev,
                                           struct device_attribute *dev_attr,
                                           char *buf)
@@ -492,6 +506,9 @@ static struct attribute *vmbus_dev_attrs[] = {
        &dev_attr_class_id.attr,
        &dev_attr_device_id.attr,
        &dev_attr_modalias.attr,
+#ifdef CONFIG_NUMA
+       &dev_attr_numa_node.attr,
+#endif
        &dev_attr_server_monitor_pending.attr,
        &dev_attr_client_monitor_pending.attr,
        &dev_attr_server_monitor_latency.attr,
-- 
2.17.1

Reply via email to