Guest User

Untitled

a guest
Jun 22nd, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
  2. index 64713ff..e51b080 100644
  3. --- a/drivers/hv/vmbus_drv.c
  4. +++ b/drivers/hv/vmbus_drv.c
  5. @@ -476,6 +476,68 @@ static ssize_t channel_vp_mapping_show(struct device *dev,
  6. }
  7. static DEVICE_ATTR_RO(channel_vp_mapping);
  8.  
  9. +static ssize_t channel_rb_show(struct device *dev,
  10. + struct device_attribute *dev_attr,
  11. + char *buf)
  12. +{
  13. + struct hv_device *hv_dev = device_to_hv_device(dev);
  14. + struct vmbus_channel *channel = hv_dev->channel, *cur_sc;
  15. + unsigned long flags;
  16. + int buf_size = PAGE_SIZE, n_written, tot_written;
  17. + struct list_head *cur;
  18. +
  19. + struct hv_ring_buffer_debug_info inbound;
  20. + struct hv_ring_buffer_debug_info outbound;
  21. + int nr = 0;
  22. +
  23. + if (!channel)
  24. + return -ENODEV;
  25. +
  26. + hv_ringbuffer_get_debuginfo(&channel->inbound, &inbound);
  27. + hv_ringbuffer_get_debuginfo(&channel->outbound, &outbound);
  28. +
  29. + tot_written = snprintf(buf, buf_size,
  30. +"channel #[%d:%d]: in_intr_mask=%u, in_pending_send_sz=%u, in_read_bytes_avail=%u, in_write_bytes_avail=%u, in_read_index=%u, in_write_index=%u;out_intr_mask=%u, out_pending_send_sz=%u, out_read_bytes_avail=%u, out_write_bytes_avail=%u, out_read_index=%u, out_write_index=%u\n",
  31. + nr, channel->offermsg.child_relid, inbound.current_interrupt_mask,
  32. + channel->inbound.ring_buffer->pending_send_sz,
  33. + inbound.bytes_avail_toread, inbound.bytes_avail_towrite,
  34. + inbound.current_read_index, inbound.current_write_index,
  35. + outbound.current_interrupt_mask,
  36. + channel->outbound.ring_buffer->pending_send_sz,
  37. + outbound.bytes_avail_toread, outbound.bytes_avail_towrite,
  38. + outbound.current_read_index, outbound.current_write_index);
  39. +
  40. + spin_lock_irqsave(&channel->lock, flags);
  41. +
  42. + list_for_each(cur, &channel->sc_list) {
  43. + if (tot_written >= buf_size - 1)
  44. + break;
  45. +
  46. + cur_sc = list_entry(cur, struct vmbus_channel, sc_list);
  47. + hv_ringbuffer_get_debuginfo(&cur_sc->inbound, &inbound);
  48. + hv_ringbuffer_get_debuginfo(&cur_sc->outbound, &outbound);
  49. +
  50. + ++nr;
  51. + n_written = scnprintf(buf + tot_written,
  52. + buf_size - tot_written,
  53. +"channel #[%d:%d]: in_intr_mask=%u, in_pending_send_sz=%u, in_read_bytes_avail=%u, in_write_bytes_avail=%u, in_read_index=%u, in_write_index=%u;out_intr_mask=%u, out_pending_send_sz=%u, out_read_bytes_avail=%u, out_write_bytes_avail=%u, out_read_index=%u, out_write_index=%u\n",
  54. + nr, cur_sc->offermsg.child_relid, inbound.current_interrupt_mask,
  55. + cur_sc->inbound.ring_buffer->pending_send_sz,
  56. + inbound.bytes_avail_toread, inbound.bytes_avail_towrite,
  57. + inbound.current_read_index, inbound.current_write_index,
  58. + outbound.current_interrupt_mask,
  59. + cur_sc->outbound.ring_buffer->pending_send_sz,
  60. + outbound.bytes_avail_toread, outbound.bytes_avail_towrite,
  61. + outbound.current_read_index, outbound.current_write_index);
  62. + tot_written += n_written;
  63. + }
  64. +
  65. + spin_unlock_irqrestore(&channel->lock, flags);
  66. +
  67. + return tot_written;
  68. +}
  69. +static DEVICE_ATTR_RO(channel_rb);
  70. +
  71. static ssize_t vendor_show(struct device *dev,
  72. struct device_attribute *dev_attr,
  73. char *buf)
  74. @@ -519,6 +581,7 @@ static struct attribute *vmbus_attrs[] = {
  75. &dev_attr_in_read_bytes_avail.attr,
  76. &dev_attr_in_write_bytes_avail.attr,
  77. &dev_attr_channel_vp_mapping.attr,
  78. + &dev_attr_channel_rb.attr,
  79. &dev_attr_vendor.attr,
  80. &dev_attr_device.attr,
  81. NULL,
Add Comment
Please, Sign In to add comment