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.ro...@unisys.com
---
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