[PATCH 2/4] staging: unisys: added virthba debugfs dir and info entry

2014-07-21 Thread Erik Arfvidson
This patch adds virthba debugfs directory and info entry

Signed-off-by: Erik Arfvidson erik.arfvid...@unisys.com
---
 drivers/staging/unisys/virthba/virthba.c | 79 
 1 file changed, 79 insertions(+)

diff --git a/drivers/staging/unisys/virthba/virthba.c 
b/drivers/staging/unisys/virthba/virthba.c
index b9cbcf2..121cc05 100644
--- a/drivers/staging/unisys/virthba/virthba.c
+++ b/drivers/staging/unisys/virthba/virthba.c
@@ -50,6 +50,7 @@
 #include scsi/scsi_cmnd.h
 #include scsi/scsi_device.h
 #include asm/param.h
+#include linux/debugfs.h
 #include linux/types.h
 
 #include virthba.h
@@ -66,6 +67,11 @@
 /* NOTE:  L1_CACHE_BYTES =128 */
 #define DEVICE_ATTRIBUTE struct device_attribute
 
+ /* MAX_BUF = 6 lines x 10 MAXVHBA x 80 characters
+ * = 4800 bytes ~ 2^13 = 8192 bytes
+ */
+#define MAX_BUF 8192
+
 /*/
 /* Forward declarations  */
 /*/
@@ -104,6 +110,8 @@ static int virthba_serverup(struct virtpci_dev *virtpcidev);
 static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state);
 static void doDiskAddRemove(struct work_struct *work);
 static void virthba_serverdown_complete(struct work_struct *work);
+static ssize_t info_debugfs_read(struct file *file, char __user *buf,
+   size_t len, loff_t *offset);
 
 /*/
 /* Globals   */
@@ -221,9 +229,18 @@ struct virthba_devices_open {
struct virthba_info *virthbainfo;
 };
 
+static const struct file_operations debugfs_info_fops = {
+   .read = info_debugfs_read,
+};
+
+/*/
+/* Structs   */
+/*/
+
 #define VIRTHBASOPENMAX 1
 /* array of open devices maintained by open() and close(); */
 static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX];
+static struct dentry *virthba_debugfs_dir;
 
 /*/
 /* Local Functions  */
@@ -1342,6 +1359,62 @@ process_incoming_rsps(void *v)
complete_and_exit(dc-threadinfo.has_stopped, 0);
 }
 
+/*/
+/* Debugfs filesystem functions  */
+/*/
+
+static ssize_t info_debugfs_read(struct file *file,
+   char __user *buf, size_t len, loff_t *offset)
+{
+   ssize_t bytes_read = 0;
+   int str_pos = 0;
+   U64 phys_flags_addr;
+   int i;
+   struct virthba_info *virthbainfo;
+   char *vbuf;
+
+   if (len  MAX_BUF)
+   len = MAX_BUF;
+   vbuf = kzalloc(len, GFP_KERNEL);
+   if (!vbuf)
+   return -ENOMEM;
+
+   for (i = 0; i  VIRTHBASOPENMAX; i++) {
+   if (VirtHbasOpen[i].virthbainfo == NULL)
+   continue;
+
+   virthbainfo = VirtHbasOpen[i].virthbainfo;
+
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, MaxBuffLen:%u\n, MaxBuffLen);
+
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \nvirthba result queue poll wait:%d usecs.\n,
+   rsltq_wait_usecs);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \ninterrupts_rcvd = %llu, interrupts_disabled 
= %llu\n,
+   virthbainfo-interrupts_rcvd,
+   virthbainfo-interrupts_disabled);
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, \ninterrupts_notme = %llu,\n,
+   virthbainfo-interrupts_notme);
+   phys_flags_addr = virt_to_phys((__force  void *)
+  virthbainfo-flags_addr);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   flags_addr = %p, phys_flags_addr=0x%016llx, 
FeatureFlags=%llu\n,
+   virthbainfo-flags_addr, phys_flags_addr,
+   (__le64)readq(virthbainfo-flags_addr));
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, acquire_failed_cnt:%llu\n,
+   virthbainfo-acquire_failed_cnt);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos, \n);
+   }
+
+   bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
+   kfree(vbuf);
+   return bytes_read;
+}
+
 /* As per VirtpciFunc returns 1 for success and 0 for failure */
 static int
 virthba_serverup(struct virtpci_dev *virtpcidev)
@@ -1526,6 +1599,10 @@ virthba_mod_init(void)
 

[PATCH 2/4] staging: unisys: added virthba debugfs dir and info entry

2014-07-21 Thread Erik Arfvidson
This patch adds virthba debugfs directory and info entry

Signed-off-by: Erik Arfvidson erik.arfvid...@unisys.com
Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
---
 drivers/staging/unisys/virthba/virthba.c | 79 
 1 file changed, 79 insertions(+)

diff --git a/drivers/staging/unisys/virthba/virthba.c 
b/drivers/staging/unisys/virthba/virthba.c
index b9cbcf2..121cc05 100644
--- a/drivers/staging/unisys/virthba/virthba.c
+++ b/drivers/staging/unisys/virthba/virthba.c
@@ -50,6 +50,7 @@
 #include scsi/scsi_cmnd.h
 #include scsi/scsi_device.h
 #include asm/param.h
+#include linux/debugfs.h
 #include linux/types.h
 
 #include virthba.h
@@ -66,6 +67,11 @@
 /* NOTE:  L1_CACHE_BYTES =128 */
 #define DEVICE_ATTRIBUTE struct device_attribute
 
+ /* MAX_BUF = 6 lines x 10 MAXVHBA x 80 characters
+ * = 4800 bytes ~ 2^13 = 8192 bytes
+ */
+#define MAX_BUF 8192
+
 /*/
 /* Forward declarations  */
 /*/
@@ -104,6 +110,8 @@ static int virthba_serverup(struct virtpci_dev *virtpcidev);
 static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state);
 static void doDiskAddRemove(struct work_struct *work);
 static void virthba_serverdown_complete(struct work_struct *work);
+static ssize_t info_debugfs_read(struct file *file, char __user *buf,
+   size_t len, loff_t *offset);
 
 /*/
 /* Globals   */
@@ -221,9 +229,18 @@ struct virthba_devices_open {
struct virthba_info *virthbainfo;
 };
 
+static const struct file_operations debugfs_info_fops = {
+   .read = info_debugfs_read,
+};
+
+/*/
+/* Structs   */
+/*/
+
 #define VIRTHBASOPENMAX 1
 /* array of open devices maintained by open() and close(); */
 static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX];
+static struct dentry *virthba_debugfs_dir;
 
 /*/
 /* Local Functions  */
@@ -1342,6 +1359,62 @@ process_incoming_rsps(void *v)
complete_and_exit(dc-threadinfo.has_stopped, 0);
 }
 
+/*/
+/* Debugfs filesystem functions  */
+/*/
+
+static ssize_t info_debugfs_read(struct file *file,
+   char __user *buf, size_t len, loff_t *offset)
+{
+   ssize_t bytes_read = 0;
+   int str_pos = 0;
+   U64 phys_flags_addr;
+   int i;
+   struct virthba_info *virthbainfo;
+   char *vbuf;
+
+   if (len  MAX_BUF)
+   len = MAX_BUF;
+   vbuf = kzalloc(len, GFP_KERNEL);
+   if (!vbuf)
+   return -ENOMEM;
+
+   for (i = 0; i  VIRTHBASOPENMAX; i++) {
+   if (VirtHbasOpen[i].virthbainfo == NULL)
+   continue;
+
+   virthbainfo = VirtHbasOpen[i].virthbainfo;
+
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, MaxBuffLen:%u\n, MaxBuffLen);
+
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \nvirthba result queue poll wait:%d usecs.\n,
+   rsltq_wait_usecs);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \ninterrupts_rcvd = %llu, interrupts_disabled 
= %llu\n,
+   virthbainfo-interrupts_rcvd,
+   virthbainfo-interrupts_disabled);
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, \ninterrupts_notme = %llu,\n,
+   virthbainfo-interrupts_notme);
+   phys_flags_addr = virt_to_phys((__force  void *)
+  virthbainfo-flags_addr);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   flags_addr = %p, phys_flags_addr=0x%016llx, 
FeatureFlags=%llu\n,
+   virthbainfo-flags_addr, phys_flags_addr,
+   (__le64)readq(virthbainfo-flags_addr));
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, acquire_failed_cnt:%llu\n,
+   virthbainfo-acquire_failed_cnt);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos, \n);
+   }
+
+   bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
+   kfree(vbuf);
+   return bytes_read;
+}
+
 /* As per VirtpciFunc returns 1 for success and 0 for failure */
 static int
 virthba_serverup(struct virtpci_dev *virtpcidev)
@@ 

[PATCH 2/4] staging: unisys: added virthba debugfs dir and info entry

2014-07-21 Thread Erik Arfvidson
This patch adds virthba debugfs directory and info entry

Signed-off-by: Erik Arfvidson erik.arfvid...@unisys.com
Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
---
 drivers/staging/unisys/virthba/virthba.c | 79 
 1 file changed, 79 insertions(+)

diff --git a/drivers/staging/unisys/virthba/virthba.c 
b/drivers/staging/unisys/virthba/virthba.c
index b9cbcf2..121cc05 100644
--- a/drivers/staging/unisys/virthba/virthba.c
+++ b/drivers/staging/unisys/virthba/virthba.c
@@ -50,6 +50,7 @@
 #include scsi/scsi_cmnd.h
 #include scsi/scsi_device.h
 #include asm/param.h
+#include linux/debugfs.h
 #include linux/types.h
 
 #include virthba.h
@@ -66,6 +67,11 @@
 /* NOTE:  L1_CACHE_BYTES =128 */
 #define DEVICE_ATTRIBUTE struct device_attribute
 
+ /* MAX_BUF = 6 lines x 10 MAXVHBA x 80 characters
+ * = 4800 bytes ~ 2^13 = 8192 bytes
+ */
+#define MAX_BUF 8192
+
 /*/
 /* Forward declarations  */
 /*/
@@ -104,6 +110,8 @@ static int virthba_serverup(struct virtpci_dev *virtpcidev);
 static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state);
 static void doDiskAddRemove(struct work_struct *work);
 static void virthba_serverdown_complete(struct work_struct *work);
+static ssize_t info_debugfs_read(struct file *file, char __user *buf,
+   size_t len, loff_t *offset);
 
 /*/
 /* Globals   */
@@ -221,9 +229,18 @@ struct virthba_devices_open {
struct virthba_info *virthbainfo;
 };
 
+static const struct file_operations debugfs_info_fops = {
+   .read = info_debugfs_read,
+};
+
+/*/
+/* Structs   */
+/*/
+
 #define VIRTHBASOPENMAX 1
 /* array of open devices maintained by open() and close(); */
 static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX];
+static struct dentry *virthba_debugfs_dir;
 
 /*/
 /* Local Functions  */
@@ -1342,6 +1359,62 @@ process_incoming_rsps(void *v)
complete_and_exit(dc-threadinfo.has_stopped, 0);
 }
 
+/*/
+/* Debugfs filesystem functions  */
+/*/
+
+static ssize_t info_debugfs_read(struct file *file,
+   char __user *buf, size_t len, loff_t *offset)
+{
+   ssize_t bytes_read = 0;
+   int str_pos = 0;
+   U64 phys_flags_addr;
+   int i;
+   struct virthba_info *virthbainfo;
+   char *vbuf;
+
+   if (len  MAX_BUF)
+   len = MAX_BUF;
+   vbuf = kzalloc(len, GFP_KERNEL);
+   if (!vbuf)
+   return -ENOMEM;
+
+   for (i = 0; i  VIRTHBASOPENMAX; i++) {
+   if (VirtHbasOpen[i].virthbainfo == NULL)
+   continue;
+
+   virthbainfo = VirtHbasOpen[i].virthbainfo;
+
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, MaxBuffLen:%u\n, MaxBuffLen);
+
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \nvirthba result queue poll wait:%d usecs.\n,
+   rsltq_wait_usecs);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   \ninterrupts_rcvd = %llu, interrupts_disabled 
= %llu\n,
+   virthbainfo-interrupts_rcvd,
+   virthbainfo-interrupts_disabled);
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, \ninterrupts_notme = %llu,\n,
+   virthbainfo-interrupts_notme);
+   phys_flags_addr = virt_to_phys((__force  void *)
+  virthbainfo-flags_addr);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+   flags_addr = %p, phys_flags_addr=0x%016llx, 
FeatureFlags=%llu\n,
+   virthbainfo-flags_addr, phys_flags_addr,
+   (__le64)readq(virthbainfo-flags_addr));
+   str_pos += scnprintf(vbuf + str_pos,
+   len - str_pos, acquire_failed_cnt:%llu\n,
+   virthbainfo-acquire_failed_cnt);
+   str_pos += scnprintf(vbuf + str_pos, len - str_pos, \n);
+   }
+
+   bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
+   kfree(vbuf);
+   return bytes_read;
+}
+
 /* As per VirtpciFunc returns 1 for success and 0 for failure */
 static int
 virthba_serverup(struct virtpci_dev *virtpcidev)
@@ 

Re: [PATCH 2/4] staging: unisys: added virthba debugfs dir and info entry

2014-07-21 Thread Greg KH
On Mon, Jul 21, 2014 at 02:47:43PM -0400, Erik Arfvidson wrote:
 This patch adds virthba debugfs directory and info entry
 
 Signed-off-by: Erik Arfvidson erik.arfvid...@unisys.com
 Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
 ---
  drivers/staging/unisys/virthba/virthba.c | 79 
 
  1 file changed, 79 insertions(+)
 
 diff --git a/drivers/staging/unisys/virthba/virthba.c 
 b/drivers/staging/unisys/virthba/virthba.c
 index b9cbcf2..121cc05 100644
 --- a/drivers/staging/unisys/virthba/virthba.c
 +++ b/drivers/staging/unisys/virthba/virthba.c
 @@ -50,6 +50,7 @@
  #include scsi/scsi_cmnd.h
  #include scsi/scsi_device.h
  #include asm/param.h
 +#include linux/debugfs.h
  #include linux/types.h
  
  #include virthba.h
 @@ -66,6 +67,11 @@
  /* NOTE:  L1_CACHE_BYTES =128 */
  #define DEVICE_ATTRIBUTE struct device_attribute
  
 + /* MAX_BUF = 6 lines x 10 MAXVHBA x 80 characters
 + * = 4800 bytes ~ 2^13 = 8192 bytes
 + */
 +#define MAX_BUF 8192
 +
  /*/
  /* Forward declarations  */
  /*/
 @@ -104,6 +110,8 @@ static int virthba_serverup(struct virtpci_dev 
 *virtpcidev);
  static int virthba_serverdown(struct virtpci_dev *virtpcidev, u32 state);
  static void doDiskAddRemove(struct work_struct *work);
  static void virthba_serverdown_complete(struct work_struct *work);
 +static ssize_t info_debugfs_read(struct file *file, char __user *buf,
 + size_t len, loff_t *offset);
  
  /*/
  /* Globals   */
 @@ -221,9 +229,18 @@ struct virthba_devices_open {
   struct virthba_info *virthbainfo;
  };
  
 +static const struct file_operations debugfs_info_fops = {
 + .read = info_debugfs_read,
 +};
 +
 +/*/
 +/* Structs   */
 +/*/
 +
  #define VIRTHBASOPENMAX 1
  /* array of open devices maintained by open() and close(); */
  static struct virthba_devices_open VirtHbasOpen[VIRTHBASOPENMAX];
 +static struct dentry *virthba_debugfs_dir;
  
  /*/
  /* Local Functions*/
 @@ -1342,6 +1359,62 @@ process_incoming_rsps(void *v)
   complete_and_exit(dc-threadinfo.has_stopped, 0);
  }
  
 +/*/
 +/* Debugfs filesystem functions  */
 +/*/
 +
 +static ssize_t info_debugfs_read(struct file *file,
 + char __user *buf, size_t len, loff_t *offset)
 +{
 + ssize_t bytes_read = 0;
 + int str_pos = 0;
 + U64 phys_flags_addr;
 + int i;
 + struct virthba_info *virthbainfo;
 + char *vbuf;
 +
 + if (len  MAX_BUF)
 + len = MAX_BUF;
 + vbuf = kzalloc(len, GFP_KERNEL);
 + if (!vbuf)
 + return -ENOMEM;
 +
 + for (i = 0; i  VIRTHBASOPENMAX; i++) {
 + if (VirtHbasOpen[i].virthbainfo == NULL)
 + continue;
 +
 + virthbainfo = VirtHbasOpen[i].virthbainfo;
 +
 + str_pos += scnprintf(vbuf + str_pos,
 + len - str_pos, MaxBuffLen:%u\n, MaxBuffLen);
 +
 + str_pos += scnprintf(vbuf + str_pos, len - str_pos,
 + \nvirthba result queue poll wait:%d usecs.\n,
 + rsltq_wait_usecs);
 + str_pos += scnprintf(vbuf + str_pos, len - str_pos,
 + \ninterrupts_rcvd = %llu, interrupts_disabled 
 = %llu\n,
 + virthbainfo-interrupts_rcvd,
 + virthbainfo-interrupts_disabled);
 + str_pos += scnprintf(vbuf + str_pos,
 + len - str_pos, \ninterrupts_notme = %llu,\n,
 + virthbainfo-interrupts_notme);
 + phys_flags_addr = virt_to_phys((__force  void *)
 +virthbainfo-flags_addr);
 + str_pos += scnprintf(vbuf + str_pos, len - str_pos,
 + flags_addr = %p, phys_flags_addr=0x%016llx, 
 FeatureFlags=%llu\n,
 + virthbainfo-flags_addr, phys_flags_addr,
 + (__le64)readq(virthbainfo-flags_addr));
 + str_pos += scnprintf(vbuf + str_pos,
 + len - str_pos, acquire_failed_cnt:%llu\n,
 + virthbainfo-acquire_failed_cnt);
 + str_pos += scnprintf(vbuf + str_pos, len - str_pos, \n);
 + }
 +
 + bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
 + kfree(vbuf);
 + return bytes_read;
 +}
 +
  /* As per VirtpciFunc returns 1