On Thu, Jul 24, 2014 at 10:55:09PM -0400, Benjamin Romer wrote: > Move the /proc/visorchipset/parahotplug interface to sysfs under > /sys/devices/platform/visorchipset/parahotplug/deviceenabled and > /sys/devices/platform/visorchipset/parahotplug/devicedisabled. > > The parahotplug interface is used to deal with SR-IOV recovery situations on > s-Par guest partitions. The command service partition will send a message to a > guest when an SR-IOV 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 one of the > parahotplug interfaces to send a message back to Command, indicating that the > recovery action has completed. > > When a guest that is sharing an SR-IOV device is restarted, that guest will > take down the PF driver on the device, but any guests with VFs will not know > that their device needs to be reset as well. The recovery script makes it so > the device will be shut down fully and then restarted after the sharing guest > comes back up, and ensures that the timing is correct. > > 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> > --- > v4: this patch is unchanged from v3. > v3: The interface was split in two, so only the ID need be passed as a parameter > to use the interfaces. Additional documentation was added. > v2: attribute creation was fixed and checks for controlvm_channel pointer were > removed. > > .../unisys/visorchipset/visorchipset_main.c | 99 +++++++++------------- > 1 file changed, 39 insertions(+), 60 deletions(-) > > diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c > index 13f4da8..7a7f515 100644 > --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c > +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c > @@ -98,19 +98,11 @@ static CONTROLVM_MESSAGE_PACKET g_DeviceChangeStatePacket; > #define is_diagpool_channel(channel_type_guid) \ > (uuid_le_cmp(channel_type_guid, UltraDiagPoolChannelProtocolGuid) == 0) > > -#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 > @@ -293,6 +285,14 @@ 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 devicedisabled_store(struct device *dev, > + struct device_attribute *attr, const char *buf, size_t count); > +static DEVICE_ATTR_WO(devicedisabled); > + > +static ssize_t deviceenabled_store(struct device *dev, > + struct device_attribute *attr, const char *buf, size_t count); > +static DEVICE_ATTR_WO(deviceenabled); > + > static struct attribute *visorchipset_install_attrs[] = { > &dev_attr_toolaction.attr, > &dev_attr_boottotool.attr, > @@ -317,9 +317,21 @@ static struct attribute_group visorchipset_guest_group = { > .attrs = visorchipset_guest_attrs > }; > > +static struct attribute *visorchipset_parahotplug_attrs[] = { > + &dev_attr_devicedisabled.attr, > + &dev_attr_deviceenabled.attr, > + NULL > +}; > + > +static struct attribute_group visorchipset_parahotplug_group = { > + .name = "parahotplug", > + .attrs = visorchipset_parahotplug_attrs > +}; > + > static const struct attribute_group *visorchipset_dev_groups[] = { > &visorchipset_install_group, > &visorchipset_guest_group, > + &visorchipset_parahotplug_group, > NULL > }; > > @@ -1723,53 +1735,36 @@ 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. > +/* The parahotplug/devicedisabled interface gets called by our support script > + * when an SR-IOV device has been shut down. The ID is passed to the script > + * and then passed back when the device has been removed. > */ > -static ssize_t > -parahotplug_proc_write(struct file *file, const char __user *buffer, > - size_t count, loff_t *ppos) > +ssize_t devicedisabled_store(struct device *dev, struct device_attribute *attr, > + const char *buf, size_t count) static? _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel