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.romer@xxxxxxxxxx> > --- > 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) { 2 values in one sysfs file? Not good :( Why? _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel