aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hv
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-13 14:32:58 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-26 12:01:17 -0400
commit4947c7453b184bc33a0056cf95af61c3cad11ef6 (patch)
tree3a83a2c0f705b5f202f32b5257fc24b38797695c /drivers/hv
parent1cee272b0249c5007391da6cf42903b8f30dbc5a (diff)
hv: move "client/server_monitor_conn_id" bus attributes to dev_groups
This moves the "client_monitor_conn_id" and "server_monitor_conn_id" bus attributes to the dev_groups structure, removing the need for it to be in a temporary structure. Tested-by: "K. Y. Srinivasan" <kys@microsoft.com> Cc: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/hv')
-rw-r--r--drivers/hv/channel.c14
-rw-r--r--drivers/hv/vmbus_drv.c55
2 files changed, 38 insertions, 31 deletions
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index ff61464f57ca..75c26da3e011 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -65,20 +65,6 @@ static void vmbus_setevent(struct vmbus_channel *channel)
65void vmbus_get_debug_info(struct vmbus_channel *channel, 65void vmbus_get_debug_info(struct vmbus_channel *channel,
66 struct vmbus_channel_debug_info *debuginfo) 66 struct vmbus_channel_debug_info *debuginfo)
67{ 67{
68 struct hv_monitor_page *monitorpage;
69 u8 monitor_group = (u8)channel->offermsg.monitorid / 32;
70 u8 monitor_offset = (u8)channel->offermsg.monitorid % 32;
71
72 monitorpage = vmbus_connection.monitor_pages[0];
73 debuginfo->servermonitor_connectionid =
74 monitorpage->parameter[monitor_group]
75 [monitor_offset].connectionid.u.id;
76
77 monitorpage = vmbus_connection.monitor_pages[1];
78 debuginfo->clientmonitor_connectionid =
79 monitorpage->parameter[monitor_group]
80 [monitor_offset].connectionid.u.id;
81
82 hv_ringbuffer_get_debuginfo(&channel->inbound, &debuginfo->inbound); 68 hv_ringbuffer_get_debuginfo(&channel->inbound, &debuginfo->inbound);
83 hv_ringbuffer_get_debuginfo(&channel->outbound, &debuginfo->outbound); 69 hv_ringbuffer_get_debuginfo(&channel->outbound, &debuginfo->outbound);
84} 70}
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 461b989835b6..73cb456e256b 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -47,9 +47,6 @@ static struct completion probe_event;
47static int irq; 47static int irq;
48 48
49struct hv_device_info { 49struct hv_device_info {
50 u32 server_monitor_conn_id;
51 u32 client_monitor_conn_id;
52
53 struct hv_dev_port_info inbound; 50 struct hv_dev_port_info inbound;
54 struct hv_dev_port_info outbound; 51 struct hv_dev_port_info outbound;
55}; 52};
@@ -73,10 +70,6 @@ static void get_channel_info(struct hv_device *device,
73 70
74 vmbus_get_debug_info(device->channel, &debug_info); 71 vmbus_get_debug_info(device->channel, &debug_info);
75 72
76 info->server_monitor_conn_id = debug_info.servermonitor_connectionid;
77
78 info->client_monitor_conn_id = debug_info.clientmonitor_connectionid;
79
80 info->inbound.int_mask = debug_info.inbound.current_interrupt_mask; 73 info->inbound.int_mask = debug_info.inbound.current_interrupt_mask;
81 info->inbound.read_idx = debug_info.inbound.current_read_index; 74 info->inbound.read_idx = debug_info.inbound.current_read_index;
82 info->inbound.write_idx = debug_info.inbound.current_write_index; 75 info->inbound.write_idx = debug_info.inbound.current_write_index;
@@ -147,12 +140,6 @@ static ssize_t vmbus_show_device_attr(struct device *dev,
147 } else if (!strcmp(dev_attr->attr.name, "in_write_bytes_avail")) { 140 } else if (!strcmp(dev_attr->attr.name, "in_write_bytes_avail")) {
148 ret = sprintf(buf, "%d\n", 141 ret = sprintf(buf, "%d\n",
149 device_info->inbound.bytes_avail_towrite); 142 device_info->inbound.bytes_avail_towrite);
150 } else if (!strcmp(dev_attr->attr.name, "server_monitor_conn_id")) {
151 ret = sprintf(buf, "%d\n",
152 device_info->server_monitor_conn_id);
153 } else if (!strcmp(dev_attr->attr.name, "client_monitor_conn_id")) {
154 ret = sprintf(buf, "%d\n",
155 device_info->client_monitor_conn_id);
156 } 143 }
157 144
158 kfree(device_info); 145 kfree(device_info);
@@ -184,6 +171,14 @@ static u32 channel_latency(struct vmbus_channel *channel,
184 return monitor_page->latency[monitor_group][monitor_offset]; 171 return monitor_page->latency[monitor_group][monitor_offset];
185} 172}
186 173
174static u32 channel_conn_id(struct vmbus_channel *channel,
175 struct hv_monitor_page *monitor_page)
176{
177 u8 monitor_group = channel_monitor_group(channel);
178 u8 monitor_offset = channel_monitor_offset(channel);
179 return monitor_page->parameter[monitor_group][monitor_offset].connectionid.u.id;
180}
181
187static ssize_t id_show(struct device *dev, struct device_attribute *dev_attr, 182static ssize_t id_show(struct device *dev, struct device_attribute *dev_attr,
188 char *buf) 183 char *buf)
189{ 184{
@@ -308,6 +303,34 @@ static ssize_t client_monitor_latency_show(struct device *dev,
308} 303}
309static DEVICE_ATTR_RO(client_monitor_latency); 304static DEVICE_ATTR_RO(client_monitor_latency);
310 305
306static ssize_t server_monitor_conn_id_show(struct device *dev,
307 struct device_attribute *dev_attr,
308 char *buf)
309{
310 struct hv_device *hv_dev = device_to_hv_device(dev);
311
312 if (!hv_dev->channel)
313 return -ENODEV;
314 return sprintf(buf, "%d\n",
315 channel_conn_id(hv_dev->channel,
316 vmbus_connection.monitor_pages[0]));
317}
318static DEVICE_ATTR_RO(server_monitor_conn_id);
319
320static ssize_t client_monitor_conn_id_show(struct device *dev,
321 struct device_attribute *dev_attr,
322 char *buf)
323{
324 struct hv_device *hv_dev = device_to_hv_device(dev);
325
326 if (!hv_dev->channel)
327 return -ENODEV;
328 return sprintf(buf, "%d\n",
329 channel_conn_id(hv_dev->channel,
330 vmbus_connection.monitor_pages[1]));
331}
332static DEVICE_ATTR_RO(client_monitor_conn_id);
333
311static struct attribute *vmbus_attrs[] = { 334static struct attribute *vmbus_attrs[] = {
312 &dev_attr_id.attr, 335 &dev_attr_id.attr,
313 &dev_attr_state.attr, 336 &dev_attr_state.attr,
@@ -319,16 +342,14 @@ static struct attribute *vmbus_attrs[] = {
319 &dev_attr_client_monitor_pending.attr, 342 &dev_attr_client_monitor_pending.attr,
320 &dev_attr_server_monitor_latency.attr, 343 &dev_attr_server_monitor_latency.attr,
321 &dev_attr_client_monitor_latency.attr, 344 &dev_attr_client_monitor_latency.attr,
345 &dev_attr_server_monitor_conn_id.attr,
346 &dev_attr_client_monitor_conn_id.attr,
322 NULL, 347 NULL,
323}; 348};
324ATTRIBUTE_GROUPS(vmbus); 349ATTRIBUTE_GROUPS(vmbus);
325 350
326/* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */ 351/* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
327static struct device_attribute vmbus_device_attrs[] = { 352static struct device_attribute vmbus_device_attrs[] = {
328 __ATTR(server_monitor_conn_id, S_IRUGO, vmbus_show_device_attr, NULL),
329
330 __ATTR(client_monitor_conn_id, S_IRUGO, vmbus_show_device_attr, NULL),
331
332 __ATTR(out_intr_mask, S_IRUGO, vmbus_show_device_attr, NULL), 353 __ATTR(out_intr_mask, S_IRUGO, vmbus_show_device_attr, NULL),
333 __ATTR(out_read_index, S_IRUGO, vmbus_show_device_attr, NULL), 354 __ATTR(out_read_index, S_IRUGO, vmbus_show_device_attr, NULL),
334 __ATTR(out_write_index, S_IRUGO, vmbus_show_device_attr, NULL), 355 __ATTR(out_write_index, S_IRUGO, vmbus_show_device_attr, NULL),