Move the /proc/visorchipset/parahotplug interface to sysfs under /sys/devices/platform/visorchipset/guest/parahotplug. The parahotplug interface is used to deal with recovery situations on s-Par guest partitions. The command service partition will send a message to a guest when a device that guest is using needs to be temporarily removed. The message triggers a udev event that will cause a recovery script to run. When that script has completed its work, it will write to the parahotplug interface to send a message back to Command indicating that it is safe to remove the device. Moving this interface to sysfs orphans the visorchipset_proc_read_writeonly() function, so it is also removed. Signed-off-by: Benjamin Romer <benjamin.romer@xxxxxxxxxx> --- v2: attribute creation was fixed and checks for controlvm_channel pointer were removed. .../unisys/visorchipset/visorchipset_main.c | 59 ++++------------------ 1 file changed, 11 insertions(+), 48 deletions(-) diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 74ab15b..c88f95f 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -129,19 +129,12 @@ static MYPROCTYPE *PartitionType; #define VISORCHIPSET_DIAG_PROC_ENTRY_FN "diagdump" static struct proc_dir_entry *diag_proc_dir; -#define VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN "parahotplug" -static struct proc_dir_entry *parahotplug_proc_dir; - static LIST_HEAD(BusInfoList); static LIST_HEAD(DevInfoList); static struct proc_dir_entry *ProcDir; static VISORCHANNEL *ControlVm_channel; -static ssize_t visorchipset_proc_read_writeonly(struct file *file, - char __user *buf, - size_t len, loff_t *offset); - typedef struct { U8 __iomem *ptr; /* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm @@ -324,6 +317,10 @@ static ssize_t chipsetready_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static DEVICE_ATTR_WO(chipsetready); +static ssize_t parahotplug_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); +static DEVICE_ATTR_WO(parahotplug); + static struct attribute *visorchipset_install_attrs[] = { &dev_attr_toolaction.attr, &dev_attr_boottotool.attr, @@ -340,6 +337,7 @@ static struct attribute_group visorchipset_install_group = { static struct attribute *visorchipset_guest_attrs[] = { &dev_attr_chipsetready.attr, + &dev_attr_parahotplug.attr, NULL }; @@ -1812,30 +1810,17 @@ parahotplug_process_message(CONTROLVM_MESSAGE *inmsg) /* * Gets called when the udev script writes to - * /proc/visorchipset/parahotplug. Expects input in the form of "<id> - * <active>" where <id> is the identifier passed to the script that - * matches a request on the request list, and <active> is 0 or 1 - * indicating whether the device is now enabled or not. + * /sys/devices/platform/visorchipset/guest/parahotplug. + * Expects input in the form of "<id> <active>" where <id> is the identifier + * passed to the script that matches a request on the request list, and <active> + * is 0 or 1 indicating whether the device is now enabled or not. */ -static ssize_t -parahotplug_proc_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) +ssize_t parahotplug_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) { - char buf[64]; uint id; ushort active; - if (count > sizeof(buf) - 1) { - LOGERR("parahotplug_proc_write: count (%d) exceeds size of buffer (%d)", - (int) count, (int) sizeof(buf)); - return -EINVAL; - } - if (copy_from_user(buf, buffer, count)) { - LOGERR("parahotplug_proc_write: copy_from_user failed"); - return -EFAULT; - } - buf[count] = '\0'; - if (sscanf(buf, "%u %hu", &id, &active) != 2) { id = 0; active = 0; @@ -1851,12 +1836,6 @@ parahotplug_proc_write(struct file *file, const char __user *buffer, return count; } -static const struct file_operations parahotplug_proc_fops = { - .owner = THIS_MODULE, - .read = visorchipset_proc_read_writeonly, - .write = parahotplug_proc_write, -}; - /* Process a controlvm message. * Return result: * FALSE - this function will return FALSE only in the case where the @@ -2405,13 +2384,6 @@ ssize_t chipsetready_store(struct device *dev, struct device_attribute *attr, return count; } -static ssize_t -visorchipset_proc_read_writeonly(struct file *file, char __user *buf, - size_t len, loff_t *offset) -{ - return 0; -} - static int __init visorchipset_init(void) { @@ -2494,9 +2466,6 @@ visorchipset_init(void) memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - parahotplug_proc_dir = - proc_create(VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN, 0200, - ProcDir, ¶hotplug_proc_fops); memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); Putfile_buffer_list_pool = @@ -2597,12 +2566,6 @@ visorchipset_exit(void) memset(&g_ChipSetMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); - if (parahotplug_proc_dir) { - remove_proc_entry(VISORCHIPSET_PARAHOTPLUG_PROC_ENTRY_FN, - ProcDir); - parahotplug_proc_dir = NULL; - } - memset(&g_DelDumpMsgHdr, 0, sizeof(CONTROLVM_MESSAGE_HEADER)); proc_DeInit(); -- 1.9.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel