Skip to contentSkip to conversation

Drivers: hv: vmbus: Add device and vendor ID to vmbus devices

PATCH In review K. Y. Srinivasan 2 participants 3 messages Dec 17, 2014 – Dec 18, 2014 Hyper-V/Azure core and drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Drivers: hv: vmbus: Add device and vendor ID to vmbus devices

Add vendor and device ID attributes to vmbus devices. This would allow us to support vmbus based devices that can support guest RDMA.

---
 drivers/hv/vmbus_drv.c |   20 ++++++++++++++++++++
 include/linux/hyperv.h |    2 ++
 2 files changed, 22 insertions(+), 0 deletions(-)
drivers/hv/vmbus_drv.c +20 -0
index 4d6b269..215aac9 100644
@@ -385,6 +385,24 @@ static ssize_t in_write_bytes_avail_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(in_write_bytes_avail);
 
+static ssize_t vendor_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->vendor_id);
+}
+static DEVICE_ATTR_RO(vendor);
+
+static ssize_t device_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->device_id);
+}
+static DEVICE_ATTR_RO(device);
+
 /* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
 static struct attribute *vmbus_attrs[] = {
 	&dev_attr_id.attr,
@@ -409,6 +427,8 @@ static struct attribute *vmbus_attrs[] = {
 	&dev_attr_in_write_index.attr,
 	&dev_attr_in_read_bytes_avail.attr,
 	&dev_attr_in_write_bytes_avail.attr,
+	&dev_attr_vendor.attr,
+	&dev_attr_device.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(vmbus);
include/linux/hyperv.h +2 -0
index 476c685..6fe4dfe 100644
@@ -891,6 +891,8 @@ struct hv_device {
 
 	/* the device instance id of this device */
 	uuid_le dev_instance;
+	u16 vendor_id;
+	u16 device_id;
 
 	struct device device;
 
Signature · 1 line
1.7.4.1
#1 lore raw
Quoted 52 lines · K. Y. Srinivasan

Add vendor and device ID attributes to vmbus devices. This would allow us to support vmbus based devices that can support guest RDMA.

---
 drivers/hv/vmbus_drv.c |   20 ++++++++++++++++++++
 include/linux/hyperv.h |    2 ++
 2 files changed, 22 insertions(+), 0 deletions(-)
drivers/hv/vmbus_drv.c +20 -0
index 4d6b269..215aac9 100644
@@ -385,6 +385,24 @@ static ssize_t in_write_bytes_avail_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(in_write_bytes_avail);
 
+static ssize_t vendor_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->vendor_id);
+}
+static DEVICE_ATTR_RO(vendor);
+
+static ssize_t device_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->device_id);
+}
+static DEVICE_ATTR_RO(device);
+
 /* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
 static struct attribute *vmbus_attrs[] = {
 	&dev_attr_id.attr,
@@ -409,6 +427,8 @@ static struct attribute *vmbus_attrs[] = {
 	&dev_attr_in_write_index.attr,
 	&dev_attr_in_read_bytes_avail.attr,
 	&dev_attr_in_write_bytes_avail.attr,
+	&dev_attr_vendor.attr,
+	&dev_attr_device.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(vmbus);
include/linux/hyperv.h +0 -0
index 476c685..6fe4dfe 100644

include/linux/hyperv.h struct hv_device { · line 898

Quoted 8 lines
include/linux/hyperv.h +2 -0
@@ -891,6 +891,8 @@ struct hv_device {
 
 	/* the device instance id of this device */
 	uuid_le dev_instance;
+	u16 vendor_id;
+	u16 device_id;
 
 	struct device device;
 

You are adding new sysfs files without proper Documentation/ABI/ updates as well? You know better than that...

And I don't see anything setting these fields, seems kind of pointless as-is, right?

greg k-h

#2 lore raw
Quoted 67 lines

-----Original Message-----
From: Greg KH [mailto:[email protected]]
Sent: Wednesday, December 17, 2014 4:17 PM
To: KY Srinivasan
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 1/1] Drivers: hv: vmbus: Add device and vendor ID to vmbus devices

Quoted 55 lines · K. Y. Srinivasan

Add vendor and device ID attributes to vmbus devices. This would allow us to support vmbus based devices that can support guest RDMA.

---
 drivers/hv/vmbus_drv.c |   20 ++++++++++++++++++++
 include/linux/hyperv.h |    2 ++
 2 files changed, 22 insertions(+), 0 deletions(-)
drivers/hv/vmbus_drv.c index renamed from drivers/hv/vmbus_drv.c +0 -0

4d6b269..215aac9 100644

drivers/hv/vmbus_drv.c +18 -0
@@ -385,6 +385,24 @@ static ssize_t in_write_bytes_avail_show(struct
 device *dev,  }  static DEVICE_ATTR_RO(in_write_bytes_avail);
 
+static ssize_t vendor_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->vendor_id); } static
+DEVICE_ATTR_RO(vendor);
+
+static ssize_t device_show(struct device *dev,
+			   struct device_attribute *dev_atttr,
+			   char *buf)
+{
+	struct hv_device *hv_dev = device_to_hv_device(dev);
+	return sprintf(buf, "0x%x\n", hv_dev->device_id); } static
+DEVICE_ATTR_RO(device);
+
 /* Set up per device attributes in /sys/bus/vmbus/devices/<bus
 device> */  static struct attribute *vmbus_attrs[] = {
 	&dev_attr_id.attr,
@@ -409,6 +427,8 @@ static struct attribute *vmbus_attrs[] = {
 	&dev_attr_in_write_index.attr,
 	&dev_attr_in_read_bytes_avail.attr,
 	&dev_attr_in_write_bytes_avail.attr,
+	&dev_attr_vendor.attr,
+	&dev_attr_device.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(vmbus);
include/linux/hyperv.h index renamed from include/linux/hyperv.h +0 -0

476c685..6fe4dfe 100644

include/linux/hyperv.h +2 -0
@@ -891,6 +891,8 @@ struct hv_device {
 
 	/* the device instance id of this device */
 	uuid_le dev_instance;
+	u16 vendor_id;
+	u16 device_id;
 
Quoted 8 lines

include/linux/hyperv.h struct hv_device { · line 898

Quoted 2 lines
include/linux/hyperv.h +0 -0
 	struct device device;
 

You are adding new sysfs files without proper Documentation/ABI/ updates as well? You know better than that...

And I don't see anything setting these fields, seems kind of pointless as-is, right?

Greg,

You are right, nothing sets these fields today but I am working on a guest infiniband RDMA driver that uses this.
This driver registers itself as an infiniband HW driver and the vendor device id is needed for IHV libraries to discover this driver from user mode. In some sense, these two fields are equivalent to the vendor ID and device of standard PCI devices as this VMBUS based infiniband driver needs to masquerade as the infiniband card in the host that is being presented to the guest.

I can resubmit this patch with the additional documentation.

Regards,

K. Y