Skip to contentSkip to conversation

Staging: hv: vmbus: Show the modalias in /sys/bus/vmbus/devices/*/

PATCH In review Olaf Hering 3 participants 6 messages Sep 2, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Staging: hv: vmbus: Show the modalias in /sys/bus/vmbus/devices/*/

Show a modalias file in /sys/bus/vmbus/devices/*/
Add a helper function to print the same content in modalias and uevent.

---
 drivers/staging/hv/vmbus_drv.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
drivers/staging/hv/vmbus_drv.c +16 -5
@@ -93,6 +93,14 @@ static void get_channel_info(struct hv_d
 		debug_info.outbound.bytes_avail_towrite;
 }
 
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid) * 2)
+static void print_alias_name(struct hv_device *hv_dev, char *alias_name)
+{
+	int i;
+	for (i = 0; i < VMBUS_ALIAS_LEN; i += 2)
+		sprintf(&alias_name[i], "%02x", hv_dev->dev_type.b[i/2]);
+}
+
 /*
  * vmbus_show_device_attr - Show the device attribute in sysfs.
  *
@@ -105,6 +113,7 @@ static ssize_t vmbus_show_device_attr(st
 {
 	struct hv_device *hv_dev = device_to_hv_device(dev);
 	struct hv_device_info device_info;
+	char alias_name[VMBUS_ALIAS_LEN + 1];
 
 	memset(&device_info, 0, sizeof(struct hv_device_info));
 
@@ -148,6 +157,9 @@ static ssize_t vmbus_show_device_attr(st
 			       device_info.chn_instance.b[13],
 			       device_info.chn_instance.b[14],
 			       device_info.chn_instance.b[15]);
+	} else if (!strcmp(dev_attr->attr.name, "modalias")) {
+		print_alias_name(hv_dev, alias_name);
+		return sprintf(buf, "vmbus:%s\n", alias_name);
 	} else if (!strcmp(dev_attr->attr.name, "state")) {
 		return sprintf(buf, "%d\n", device_info.chn_state);
 	} else if (!strcmp(dev_attr->attr.name, "id")) {
@@ -204,6 +216,7 @@ static struct device_attribute vmbus_dev
 	__ATTR(class_id, S_IRUGO, vmbus_show_device_attr, NULL),
 	__ATTR(device_id, S_IRUGO, vmbus_show_device_attr, NULL),
 	__ATTR(monitor_id, S_IRUGO, vmbus_show_device_attr, NULL),
+	__ATTR(modalias, S_IRUGO, vmbus_show_device_attr, NULL),
 
 	__ATTR(server_monitor_pending, S_IRUGO, vmbus_show_device_attr, NULL),
 	__ATTR(server_monitor_latency, S_IRUGO, vmbus_show_device_attr, NULL),
@@ -242,12 +255,10 @@ static struct device_attribute vmbus_dev
 static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env)
 {
 	struct hv_device *dev = device_to_hv_device(device);
-	int i, ret;
-	char alias_name[((sizeof((struct hv_vmbus_device_id *)0)->guid) + 1) * 2];
-
-	for (i = 0; i < ((sizeof((struct hv_vmbus_device_id *)0)->guid) * 2); i += 2)
-		sprintf(&alias_name[i], "%02x", dev->dev_type.b[i/2]);
+	int ret;
+	char alias_name[VMBUS_ALIAS_LEN + 1];
 
+	print_alias_name(dev, alias_name);
 	ret = add_uevent_var(env, "MODALIAS=vmbus:%s", alias_name);
 	return ret;
 }
#1 lore raw
Quoted 4 lines · Olaf Hering

Show a modalias file in /sys/bus/vmbus/devices/*/
Add a helper function to print the same content in modalias and uevent.

Nice idea, thanks for this, one minor nit below:

Quoted 22 lines
---
 drivers/staging/hv/vmbus_drv.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
drivers/staging/hv/vmbus_drv.c +8 -0
@@ -93,6 +93,14 @@ static void get_channel_info(struct hv_d
 		debug_info.outbound.bytes_avail_towrite;
 }
 
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid) * 2)
+static void print_alias_name(struct hv_device *hv_dev, char *alias_name)
+{
+	int i;
+	for (i = 0; i < VMBUS_ALIAS_LEN; i += 2)
+		sprintf(&alias_name[i], "%02x", hv_dev->dev_type.b[i/2]);
+}
+
 /*
  * vmbus_show_device_attr - Show the device attribute in sysfs.
  *

drivers/staging/hv/vmbus_drv.c static ssize_t vmbus_show_device_attr(st · line 116

Quoted 4 lines
drivers/staging/hv/vmbus_drv.c +1 -0
@@ -105,6 +113,7 @@ static ssize_t vmbus_show_device_attr(st
 {
 	struct hv_device *hv_dev = device_to_hv_device(dev);
 	struct hv_device_info device_info;
+	char alias_name[VMBUS_ALIAS_LEN + 1];

Is that too big to put on the stack? 64 bytes, right? Hm, maybe not.

Wait, hv_device_info is huge, that should be dynamic in the first place. Olaf, not your issue, but KY, want to fix that up?

thanks,

greg k-h

#2 lore raw
Quoted 7 lines · Greg KH

Review

Quoted 3 lines · Olaf Hering
(quoted diff) +2 -0
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid) * 2)
 
+	char alias_name[VMBUS_ALIAS_LEN + 1];

Is that too big to put on the stack? 64 bytes, right? Hm, maybe not.

16 * 2 + 1 = 33 bytes.

Olaf

#3 lore raw
In reply to Greg KH
Quoted 49 lines

-----Original Message-----
From: Greg KH [mailto:[email protected]]
Sent: Friday, September 02, 2011 12:36 PM
To: Olaf Hering
Cc: KY Srinivasan; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH] Staging: hv: vmbus: Show the modalias in /sys/bus/vmbus/devices/*/

Quoted 4 lines · Olaf Hering

Show a modalias file in /sys/bus/vmbus/devices/*/
Add a helper function to print the same content in modalias and uevent.

Nice idea, thanks for this, one minor nit below:

drivers/staging/hv/vmbus_drv.c static void get_channel_info(struct hv_d · line 96

Quoted 11 lines
---
 drivers/staging/hv/vmbus_drv.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
drivers/staging/hv/vmbus_drv.c +1 -0
@@ -93,6 +93,14 @@ static void get_channel_info(struct hv_d
 		debug_info.outbound.bytes_avail_towrite;
 }
 
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid)

* 2)

Quoted 11 lines
drivers/staging/hv/vmbus_drv.c +7 -0
+static void print_alias_name(struct hv_device *hv_dev, char *alias_name)
+{
+	int i;
+	for (i = 0; i < VMBUS_ALIAS_LEN; i += 2)
+		sprintf(&alias_name[i], "%02x", hv_dev->dev_type.b[i/2]);
+}
+
 /*
  * vmbus_show_device_attr - Show the device attribute in sysfs.
  *

drivers/staging/hv/vmbus_drv.c static ssize_t vmbus_show_device_attr(st · line 116

Quoted 4 lines
drivers/staging/hv/vmbus_drv.c +1 -0
@@ -105,6 +113,7 @@ static ssize_t vmbus_show_device_attr(st
 {
 	struct hv_device *hv_dev = device_to_hv_device(dev);
 	struct hv_device_info device_info;
+	char alias_name[VMBUS_ALIAS_LEN + 1];

Is that too big to put on the stack? 64 bytes, right? Hm, maybe not.

Quoted 2 lines

Wait, hv_device_info is huge, that should be dynamic in the first place. Olaf, not your issue, but KY, want to fix that up?

hv_device_info is about 101 bytes. I will fix this. Greg, if you are applying Olaf's patch, I will generate my patch on top of Olaf's. Let me know.

Regards,

K. Y

#4 lore raw
Quoted 49 lines · KY Srinivasan
Quoted 49 lines

-----Original Message-----
From: Greg KH [mailto:[email protected]]
Sent: Friday, September 02, 2011 12:36 PM
To: Olaf Hering
Cc: KY Srinivasan; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH] Staging: hv: vmbus: Show the modalias in /sys/bus/vmbus/devices/*/

Quoted 4 lines · Olaf Hering

Show a modalias file in /sys/bus/vmbus/devices/*/
Add a helper function to print the same content in modalias and uevent.

Nice idea, thanks for this, one minor nit below:

drivers/staging/hv/vmbus_drv.c static void get_channel_info(struct hv_d · line 96

Quoted 11 lines
---
 drivers/staging/hv/vmbus_drv.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
drivers/staging/hv/vmbus_drv.c +1 -0
@@ -93,6 +93,14 @@ static void get_channel_info(struct hv_d
 		debug_info.outbound.bytes_avail_towrite;
 }
 
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid)

* 2)

Quoted 11 lines
drivers/staging/hv/vmbus_drv.c +7 -0
+static void print_alias_name(struct hv_device *hv_dev, char *alias_name)
+{
+	int i;
+	for (i = 0; i < VMBUS_ALIAS_LEN; i += 2)
+		sprintf(&alias_name[i], "%02x", hv_dev->dev_type.b[i/2]);
+}
+
 /*
  * vmbus_show_device_attr - Show the device attribute in sysfs.
  *

drivers/staging/hv/vmbus_drv.c static ssize_t vmbus_show_device_attr(st · line 116

Quoted 4 lines
drivers/staging/hv/vmbus_drv.c +1 -0
@@ -105,6 +113,7 @@ static ssize_t vmbus_show_device_attr(st
 {
 	struct hv_device *hv_dev = device_to_hv_device(dev);
 	struct hv_device_info device_info;
+	char alias_name[VMBUS_ALIAS_LEN + 1];

Is that too big to put on the stack? 64 bytes, right? Hm, maybe not.

Quoted 5 lines
Quoted 2 lines

Wait, hv_device_info is huge, that should be dynamic in the first place. Olaf, not your issue, but KY, want to fix that up?

hv_device_info is about 101 bytes. I will fix this. Greg, if you are applying Olaf's patch, I will generate my patch on top of Olaf's. Let me know.

I'll take his, and then feel free to send me one on top of that fixing this.

But again, as kernel.org is still down, I can't apply anything until next week at the earliest, sorry.

greg k-h

Acked-by on v1 1/1
#5 lore raw
In reply to Olaf Hering
Quoted 82 lines

-----Original Message-----
From: Olaf Hering [mailto:[email protected]]
Sent: Friday, September 02, 2011 12:26 PM
To: KY Srinivasan
Cc: [email protected]; [email protected]; [email protected]; [email protected]
Subject: [PATCH] Staging: hv: vmbus: Show the modalias in /sys/bus/vmbus/devices/*/

Show a modalias file in /sys/bus/vmbus/devices/*/
Add a helper function to print the same content in modalias and uevent.

---
 drivers/staging/hv/vmbus_drv.c |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
drivers/staging/hv/vmbus_drv.c +8 -0
@@ -93,6 +93,14 @@ static void get_channel_info(struct hv_d
 		debug_info.outbound.bytes_avail_towrite;
 }
 
+#define VMBUS_ALIAS_LEN ((sizeof((struct hv_vmbus_device_id *)0)->guid) *
 2)
+static void print_alias_name(struct hv_device *hv_dev, char *alias_name)
+{
+	int i;
+	for (i = 0; i < VMBUS_ALIAS_LEN; i += 2)
+		sprintf(&alias_name[i], "%02x", hv_dev->dev_type.b[i/2]);
+}
+
 /*
  * vmbus_show_device_attr - Show the device attribute in sysfs.

*

drivers/staging/hv/vmbus_drv.c +5 -0
@@ -105,6 +113,7 @@ static ssize_t vmbus_show_device_attr(st
 {
 	struct hv_device *hv_dev = device_to_hv_device(dev);
 	struct hv_device_info device_info;
+	char alias_name[VMBUS_ALIAS_LEN + 1];
 
 	memset(&device_info, 0, sizeof(struct hv_device_info));
 
@@ -148,6 +157,9 @@ static ssize_t vmbus_show_device_attr(st
 			       device_info.chn_instance.b[13],
 			       device_info.chn_instance.b[14],
 			       device_info.chn_instance.b[15]);
+	} else if (!strcmp(dev_attr->attr.name, "modalias")) {
+		print_alias_name(hv_dev, alias_name);
+		return sprintf(buf, "vmbus:%s\n", alias_name);
 	} else if (!strcmp(dev_attr->attr.name, "state")) {
 		return sprintf(buf, "%d\n", device_info.chn_state);
 	} else if (!strcmp(dev_attr->attr.name, "id")) {
@@ -204,6 +216,7 @@ static struct device_attribute vmbus_dev
 	__ATTR(class_id, S_IRUGO, vmbus_show_device_attr, NULL),
 	__ATTR(device_id, S_IRUGO, vmbus_show_device_attr, NULL),
 	__ATTR(monitor_id, S_IRUGO, vmbus_show_device_attr, NULL),
+	__ATTR(modalias, S_IRUGO, vmbus_show_device_attr, NULL),
 
 	__ATTR(server_monitor_pending, S_IRUGO, vmbus_show_device_attr,
 NULL),

__ATTR(server_monitor_latency, S_IRUGO, vmbus_show_device_attr,
NULL),

drivers/staging/hv/vmbus_drv.c +3 -5
@@ -242,12 +255,10 @@ static struct device_attribute vmbus_dev
 static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env)
 {
 	struct hv_device *dev = device_to_hv_device(device);
-	int i, ret;
-	char alias_name[((sizeof((struct hv_vmbus_device_id *)0)->guid) + 1) *
 2];
-
-	for (i = 0; i < ((sizeof((struct hv_vmbus_device_id *)0)->guid) * 2); i += 2)
-		sprintf(&alias_name[i], "%02x", dev->dev_type.b[i/2]);
+	int ret;
+	char alias_name[VMBUS_ALIAS_LEN + 1];
 
+	print_alias_name(dev, alias_name);
 	ret = add_uevent_var(env, "MODALIAS=vmbus:%s", alias_name);
 	return ret;
Quoted 1 line

}