Re: [PATCH 1/2] virtio: introduce virtio_dev_to_node helper
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2021-09-27 09:32:12
Also in:
kvm, linux-block
On Sun, Sep 26, 2021 at 05:55:17PM +0300, Max Gurtovoy wrote:
Also expose numa_node field as a sysfs attribute. Now virtio device drivers will be able to allocate memory that is node-local to the device. This significantly helps performance and it's oftenly used in other drivers such as NVMe, for example. Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
If you have to respin this, it is better to split this in two patches, one with the helper one adding a sysfs attribute.
quoted hunk
--- drivers/virtio/virtio.c | 10 ++++++++++ include/linux/virtio.h | 13 +++++++++++++ 2 files changed, 23 insertions(+)diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 588e02fb91d3..bdbd76c5c58c 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c@@ -60,12 +60,22 @@ static ssize_t features_show(struct device *_d, } static DEVICE_ATTR_RO(features); +static ssize_t numa_node_show(struct device *_d, + struct device_attribute *attr, char *buf) +{ + struct virtio_device *vdev = dev_to_virtio(_d); + + return sysfs_emit(buf, "%d\n", virtio_dev_to_node(vdev)); +} +static DEVICE_ATTR_RO(numa_node); + static struct attribute *virtio_dev_attrs[] = { &dev_attr_device.attr, &dev_attr_vendor.attr, &dev_attr_status.attr, &dev_attr_modalias.attr, &dev_attr_features.attr, + &dev_attr_numa_node.attr, NULL, }; ATTRIBUTE_GROUPS(virtio_dev);diff --git a/include/linux/virtio.h b/include/linux/virtio.h index 41edbc01ffa4..05b586ac71d1 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h@@ -125,6 +125,19 @@ static inline struct virtio_device *dev_to_virtio(struct device *_dev) return container_of(_dev, struct virtio_device, dev); } +/** + * virtio_dev_to_node - return the NUMA node for a given virtio device + * @vdev: device to get the NUMA node for. + */ +static inline int virtio_dev_to_node(struct virtio_device *vdev) +{ + struct device *parent = vdev->dev.parent; + + if (!parent) + return NUMA_NO_NODE; + return dev_to_node(parent); +} + void virtio_add_status(struct virtio_device *dev, unsigned int status); int register_virtio_device(struct virtio_device *dev); void unregister_virtio_device(struct virtio_device *dev);-- 2.18.1
_______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization