aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hv/channel.c14
-rw-r--r--drivers/hv/vmbus_drv.c55
-rw-r--r--include/linux/hyperv.h3
3 files changed, 38 insertions, 34 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),
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index ec1e5033bb99..332e80ce9b8a 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -900,9 +900,6 @@ enum vmbus_channel_state {
900}; 900};
901 901
902struct vmbus_channel_debug_info { 902struct vmbus_channel_debug_info {
903 u32 servermonitor_connectionid;
904 u32 clientmonitor_connectionid;
905
906 struct hv_ring_buffer_debug_info inbound; 903 struct hv_ring_buffer_debug_info inbound;
907 struct hv_ring_buffer_debug_info outbound; 904 struct hv_ring_buffer_debug_info outbound;
908}; 905};