Commit 7bb52384 authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Greg Kroah-Hartman

Staging: hv: vmbus: Do not allocate struct hv_device_info on the stack

struct hv_device_info is about 101 bytes in size. Do not allocate this structure
on the stack.
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent b0bb5517
...@@ -112,101 +112,105 @@ static ssize_t vmbus_show_device_attr(struct device *dev, ...@@ -112,101 +112,105 @@ static ssize_t vmbus_show_device_attr(struct device *dev,
char *buf) char *buf)
{ {
struct hv_device *hv_dev = device_to_hv_device(dev); struct hv_device *hv_dev = device_to_hv_device(dev);
struct hv_device_info device_info; struct hv_device_info *device_info;
char alias_name[VMBUS_ALIAS_LEN + 1]; char alias_name[VMBUS_ALIAS_LEN + 1];
int ret = 0;
memset(&device_info, 0, sizeof(struct hv_device_info)); device_info = kzalloc(sizeof(struct hv_device_info), GFP_KERNEL);
if (!device_info)
return ret;
get_channel_info(hv_dev, &device_info); get_channel_info(hv_dev, device_info);
if (!strcmp(dev_attr->attr.name, "class_id")) { if (!strcmp(dev_attr->attr.name, "class_id")) {
return sprintf(buf, "{%02x%02x%02x%02x-%02x%02x-%02x%02x-" ret = sprintf(buf, "{%02x%02x%02x%02x-%02x%02x-%02x%02x-"
"%02x%02x%02x%02x%02x%02x%02x%02x}\n", "%02x%02x%02x%02x%02x%02x%02x%02x}\n",
device_info.chn_type.b[3], device_info->chn_type.b[3],
device_info.chn_type.b[2], device_info->chn_type.b[2],
device_info.chn_type.b[1], device_info->chn_type.b[1],
device_info.chn_type.b[0], device_info->chn_type.b[0],
device_info.chn_type.b[5], device_info->chn_type.b[5],
device_info.chn_type.b[4], device_info->chn_type.b[4],
device_info.chn_type.b[7], device_info->chn_type.b[7],
device_info.chn_type.b[6], device_info->chn_type.b[6],
device_info.chn_type.b[8], device_info->chn_type.b[8],
device_info.chn_type.b[9], device_info->chn_type.b[9],
device_info.chn_type.b[10], device_info->chn_type.b[10],
device_info.chn_type.b[11], device_info->chn_type.b[11],
device_info.chn_type.b[12], device_info->chn_type.b[12],
device_info.chn_type.b[13], device_info->chn_type.b[13],
device_info.chn_type.b[14], device_info->chn_type.b[14],
device_info.chn_type.b[15]); device_info->chn_type.b[15]);
} else if (!strcmp(dev_attr->attr.name, "device_id")) { } else if (!strcmp(dev_attr->attr.name, "device_id")) {
return sprintf(buf, "{%02x%02x%02x%02x-%02x%02x-%02x%02x-" ret = sprintf(buf, "{%02x%02x%02x%02x-%02x%02x-%02x%02x-"
"%02x%02x%02x%02x%02x%02x%02x%02x}\n", "%02x%02x%02x%02x%02x%02x%02x%02x}\n",
device_info.chn_instance.b[3], device_info->chn_instance.b[3],
device_info.chn_instance.b[2], device_info->chn_instance.b[2],
device_info.chn_instance.b[1], device_info->chn_instance.b[1],
device_info.chn_instance.b[0], device_info->chn_instance.b[0],
device_info.chn_instance.b[5], device_info->chn_instance.b[5],
device_info.chn_instance.b[4], device_info->chn_instance.b[4],
device_info.chn_instance.b[7], device_info->chn_instance.b[7],
device_info.chn_instance.b[6], device_info->chn_instance.b[6],
device_info.chn_instance.b[8], device_info->chn_instance.b[8],
device_info.chn_instance.b[9], device_info->chn_instance.b[9],
device_info.chn_instance.b[10], device_info->chn_instance.b[10],
device_info.chn_instance.b[11], device_info->chn_instance.b[11],
device_info.chn_instance.b[12], device_info->chn_instance.b[12],
device_info.chn_instance.b[13], device_info->chn_instance.b[13],
device_info.chn_instance.b[14], device_info->chn_instance.b[14],
device_info.chn_instance.b[15]); device_info->chn_instance.b[15]);
} else if (!strcmp(dev_attr->attr.name, "modalias")) { } else if (!strcmp(dev_attr->attr.name, "modalias")) {
print_alias_name(hv_dev, alias_name); print_alias_name(hv_dev, alias_name);
return sprintf(buf, "vmbus:%s\n", alias_name); ret = sprintf(buf, "vmbus:%s\n", alias_name);
} else if (!strcmp(dev_attr->attr.name, "state")) { } else if (!strcmp(dev_attr->attr.name, "state")) {
return sprintf(buf, "%d\n", device_info.chn_state); ret = sprintf(buf, "%d\n", device_info->chn_state);
} else if (!strcmp(dev_attr->attr.name, "id")) { } else if (!strcmp(dev_attr->attr.name, "id")) {
return sprintf(buf, "%d\n", device_info.chn_id); ret = sprintf(buf, "%d\n", device_info->chn_id);
} else if (!strcmp(dev_attr->attr.name, "out_intr_mask")) { } else if (!strcmp(dev_attr->attr.name, "out_intr_mask")) {
return sprintf(buf, "%d\n", device_info.outbound.int_mask); ret = sprintf(buf, "%d\n", device_info->outbound.int_mask);
} else if (!strcmp(dev_attr->attr.name, "out_read_index")) { } else if (!strcmp(dev_attr->attr.name, "out_read_index")) {
return sprintf(buf, "%d\n", device_info.outbound.read_idx); ret = sprintf(buf, "%d\n", device_info->outbound.read_idx);
} else if (!strcmp(dev_attr->attr.name, "out_write_index")) { } else if (!strcmp(dev_attr->attr.name, "out_write_index")) {
return sprintf(buf, "%d\n", device_info.outbound.write_idx); ret = sprintf(buf, "%d\n", device_info->outbound.write_idx);
} else if (!strcmp(dev_attr->attr.name, "out_read_bytes_avail")) { } else if (!strcmp(dev_attr->attr.name, "out_read_bytes_avail")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.outbound.bytes_avail_toread); device_info->outbound.bytes_avail_toread);
} else if (!strcmp(dev_attr->attr.name, "out_write_bytes_avail")) { } else if (!strcmp(dev_attr->attr.name, "out_write_bytes_avail")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.outbound.bytes_avail_towrite); device_info->outbound.bytes_avail_towrite);
} else if (!strcmp(dev_attr->attr.name, "in_intr_mask")) { } else if (!strcmp(dev_attr->attr.name, "in_intr_mask")) {
return sprintf(buf, "%d\n", device_info.inbound.int_mask); ret = sprintf(buf, "%d\n", device_info->inbound.int_mask);
} else if (!strcmp(dev_attr->attr.name, "in_read_index")) { } else if (!strcmp(dev_attr->attr.name, "in_read_index")) {
return sprintf(buf, "%d\n", device_info.inbound.read_idx); ret = sprintf(buf, "%d\n", device_info->inbound.read_idx);
} else if (!strcmp(dev_attr->attr.name, "in_write_index")) { } else if (!strcmp(dev_attr->attr.name, "in_write_index")) {
return sprintf(buf, "%d\n", device_info.inbound.write_idx); ret = sprintf(buf, "%d\n", device_info->inbound.write_idx);
} else if (!strcmp(dev_attr->attr.name, "in_read_bytes_avail")) { } else if (!strcmp(dev_attr->attr.name, "in_read_bytes_avail")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.inbound.bytes_avail_toread); device_info->inbound.bytes_avail_toread);
} else if (!strcmp(dev_attr->attr.name, "in_write_bytes_avail")) { } else if (!strcmp(dev_attr->attr.name, "in_write_bytes_avail")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.inbound.bytes_avail_towrite); device_info->inbound.bytes_avail_towrite);
} else if (!strcmp(dev_attr->attr.name, "monitor_id")) { } else if (!strcmp(dev_attr->attr.name, "monitor_id")) {
return sprintf(buf, "%d\n", device_info.monitor_id); ret = sprintf(buf, "%d\n", device_info->monitor_id);
} else if (!strcmp(dev_attr->attr.name, "server_monitor_pending")) { } else if (!strcmp(dev_attr->attr.name, "server_monitor_pending")) {
return sprintf(buf, "%d\n", device_info.server_monitor_pending); ret = sprintf(buf, "%d\n", device_info->server_monitor_pending);
} else if (!strcmp(dev_attr->attr.name, "server_monitor_latency")) { } else if (!strcmp(dev_attr->attr.name, "server_monitor_latency")) {
return sprintf(buf, "%d\n", device_info.server_monitor_latency); ret = sprintf(buf, "%d\n", device_info->server_monitor_latency);
} else if (!strcmp(dev_attr->attr.name, "server_monitor_conn_id")) { } else if (!strcmp(dev_attr->attr.name, "server_monitor_conn_id")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.server_monitor_conn_id); device_info->server_monitor_conn_id);
} else if (!strcmp(dev_attr->attr.name, "client_monitor_pending")) { } else if (!strcmp(dev_attr->attr.name, "client_monitor_pending")) {
return sprintf(buf, "%d\n", device_info.client_monitor_pending); ret = sprintf(buf, "%d\n", device_info->client_monitor_pending);
} else if (!strcmp(dev_attr->attr.name, "client_monitor_latency")) { } else if (!strcmp(dev_attr->attr.name, "client_monitor_latency")) {
return sprintf(buf, "%d\n", device_info.client_monitor_latency); ret = sprintf(buf, "%d\n", device_info->client_monitor_latency);
} else if (!strcmp(dev_attr->attr.name, "client_monitor_conn_id")) { } else if (!strcmp(dev_attr->attr.name, "client_monitor_conn_id")) {
return sprintf(buf, "%d\n", ret = sprintf(buf, "%d\n",
device_info.client_monitor_conn_id); device_info->client_monitor_conn_id);
} else {
return 0;
} }
kfree(device_info);
return ret;
} }
/* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */ /* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment