[PATCH 4/8 v2] staging: unisys: move chipsetready to sysfs

2014-07-22 Thread Benjamin Romer
Move the chipsetready proc entry to sysfs under a new directory guest. This
entry is used by Unisys application software on the guest to acknowledge
completion of specific events for integration purposes, but these
acknowledgements are not required for the guest to operate correctly.

The store function is simplified as well, to use scanf() instead of copying
the buffer and using strsep().

Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
---
v2: attribute creation was fixed and checks for controlvm_channel pointer were
removed. The off-by-one error in the sscanf() was fixed. Error -1 that was 
being returned was changed to -EINVAL.

 .../unisys/visorchipset/visorchipset_main.c| 88 --
 1 file changed, 33 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c 
b/drivers/staging/unisys/visorchipset/visorchipset_main.c
index a20e21b..74ab15b 100644
--- a/drivers/staging/unisys/visorchipset/visorchipset_main.c
+++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c
@@ -129,9 +129,6 @@ static MYPROCTYPE *PartitionType;
 #define VISORCHIPSET_DIAG_PROC_ENTRY_FN diagdump
 static struct proc_dir_entry *diag_proc_dir;
 
-#define VISORCHIPSET_CHIPSET_PROC_ENTRY_FN chipsetready
-static struct proc_dir_entry *chipset_proc_dir;
-
 #define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN parahotplug
 static struct proc_dir_entry *parahotplug_proc_dir;
 
@@ -323,6 +320,10 @@ static ssize_t remaining_steps_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count);
 static DEVICE_ATTR_RW(remaining_steps);
 
+static ssize_t chipsetready_store(struct device *dev,
+   struct device_attribute *attr, const char *buf, size_t count);
+static DEVICE_ATTR_WO(chipsetready);
+
 static struct attribute *visorchipset_install_attrs[] = {
dev_attr_toolaction.attr,
dev_attr_boottotool.attr,
@@ -337,8 +338,19 @@ static struct attribute_group visorchipset_install_group = 
{
.attrs = visorchipset_install_attrs
 };
 
+static struct attribute *visorchipset_guest_attrs[] = {
+   dev_attr_chipsetready.attr,
+   NULL
+};
+
+static struct attribute_group visorchipset_guest_group = {
+   .name = guest,
+   .attrs = visorchipset_guest_attrs
+};
+
 static const struct attribute_group *visorchipset_dev_groups[] = {
visorchipset_install_group,
+   visorchipset_guest_group,
NULL
 };
 
@@ -2369,49 +2381,27 @@ visorchipset_cache_free(struct kmem_cache *pool, void 
*p, char *fn, int ln)
kmem_cache_free(pool, p);
 }
 
-#define gettoken(bufp) strsep(bufp,  -\t\n)
-
-static ssize_t
-chipset_proc_write(struct file *file, const char __user *buffer,
-  size_t count, loff_t *ppos)
+ssize_t chipsetready_store(struct device *dev, struct device_attribute *attr,
+   const char *buf, size_t count)
 {
-   char buf[512];
-   char *token, *p;
-
-   if (count  sizeof(buf) - 1) {
-   LOGERR(chipset_proc_write: count (%d) exceeds size of buffer 
(%d),
-(int) count, (int) sizeof(buffer));
-   return -EINVAL;
-   }
-   if (copy_from_user(buf, buffer, count)) {
-   LOGERR(chipset_proc_write: copy_from_user failed);
-   return -EFAULT;
-   }
-   buf[count] = '\0';
-
-   p = buf;
-   token = gettoken(p);
-
-   if (strcmp(token, CALLHOMEDISK_MOUNTED) == 0) {
-   token = gettoken(p);
-   /* The Call Home Disk has been mounted */
-   if (strcmp(token, 0) == 0)
-   chipset_events[0] = 1;
-   } else if (strcmp(token, MODULES_LOADED) == 0) {
-   token = gettoken(p);
-   /* All modules for the partition have been loaded */
-   if (strcmp(token, 0) == 0)
-   chipset_events[1] = 1;
-   } else if (token == NULL) {
-   /* No event specified */
-   LOGERR(No event was specified to send CHIPSET_READY response);
-   return -1;
+   char msgtype[64];
+   int msgparam;
+
+   if (sscanf(buf, %63s %d, msgtype, msgparam) == 2) {
+   if (strcmp(msgtype, CALLHOMEDISK_MOUNTED) == 0) {
+   /* The Call Home Disk has been mounted */
+   if (msgparam == 0)
+   chipset_events[0] = 1;
+   } else if (strcmp(msgtype, MODULES_LOADED) == 0) {
+   /* All modules for the partition have been loaded */
+   if (msgparam == 0)
+   chipset_events[1] = 1;
+   } else {
+   return -EINVAL;
+   }
} else {
-   /* Unsupported event specified */
-   LOGERR(%s is an invalid event for sending CHIPSET_READY 
response,  token);
-   return -1;
+   return -EINVAL;
   

Re: [PATCH 4/8 v2] staging: unisys: move chipsetready to sysfs

2014-07-22 Thread Greg KH
On Tue, Jul 22, 2014 at 09:56:28AM -0400, Benjamin Romer wrote:
 Move the chipsetready proc entry to sysfs under a new directory guest. This
 entry is used by Unisys application software on the guest to acknowledge
 completion of specific events for integration purposes, but these
 acknowledgements are not required for the guest to operate correctly.
 
 The store function is simplified as well, to use scanf() instead of copying
 the buffer and using strsep().
 
 Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com
 ---
 v2: attribute creation was fixed and checks for controlvm_channel pointer were
 removed. The off-by-one error in the sscanf() was fixed. Error -1 that was 
 being returned was changed to -EINVAL.
 
  .../unisys/visorchipset/visorchipset_main.c| 88 
 --
  1 file changed, 33 insertions(+), 55 deletions(-)
 
 diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c 
 b/drivers/staging/unisys/visorchipset/visorchipset_main.c
 index a20e21b..74ab15b 100644
 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c
 +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c
 @@ -129,9 +129,6 @@ static MYPROCTYPE *PartitionType;
  #define VISORCHIPSET_DIAG_PROC_ENTRY_FN diagdump
  static struct proc_dir_entry *diag_proc_dir;
  
 -#define VISORCHIPSET_CHIPSET_PROC_ENTRY_FN chipsetready
 -static struct proc_dir_entry *chipset_proc_dir;
 -
  #define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN parahotplug
  static struct proc_dir_entry *parahotplug_proc_dir;
  
 @@ -323,6 +320,10 @@ static ssize_t remaining_steps_store(struct device *dev,
   struct device_attribute *attr, const char *buf, size_t count);
  static DEVICE_ATTR_RW(remaining_steps);
  
 +static ssize_t chipsetready_store(struct device *dev,
 + struct device_attribute *attr, const char *buf, size_t count);
 +static DEVICE_ATTR_WO(chipsetready);
 +
  static struct attribute *visorchipset_install_attrs[] = {
   dev_attr_toolaction.attr,
   dev_attr_boottotool.attr,
 @@ -337,8 +338,19 @@ static struct attribute_group visorchipset_install_group 
 = {
   .attrs = visorchipset_install_attrs
  };
  
 +static struct attribute *visorchipset_guest_attrs[] = {
 + dev_attr_chipsetready.attr,
 + NULL
 +};
 +
 +static struct attribute_group visorchipset_guest_group = {
 + .name = guest,
 + .attrs = visorchipset_guest_attrs
 +};
 +
  static const struct attribute_group *visorchipset_dev_groups[] = {
   visorchipset_install_group,
 + visorchipset_guest_group,
   NULL
  };
  
 @@ -2369,49 +2381,27 @@ visorchipset_cache_free(struct kmem_cache *pool, void 
 *p, char *fn, int ln)
   kmem_cache_free(pool, p);
  }
  
 -#define gettoken(bufp) strsep(bufp,  -\t\n)
 -
 -static ssize_t
 -chipset_proc_write(struct file *file, const char __user *buffer,
 -size_t count, loff_t *ppos)
 +ssize_t chipsetready_store(struct device *dev, struct device_attribute *attr,
 + const char *buf, size_t count)

Shouldn't this, and your other sysfs file attribute functions, be
static?   You said they were above, but not here, so, which does the
compiler decide to use?  I think the last one, but please be consistant.

Same goes for all of the patches in this series...

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel