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.ro...@unisys.com>
> ---
> 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
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to