Re: [PATCH v5] staging: unisys: move parahotplug to sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 28, 2014 at 09:22:36AM -0400, Benjamin Romer wrote:
> @@ -1736,53 +1748,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)
> +static ssize_t devicedisabled_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));
> +	if (kstrtouint(buf, 10, &id) != 1)
>  		return -EINVAL;
> -	}

This is the same bug I mentioned ealier in a different patch.

> -	if (copy_from_user(buf, buffer, count)) {
> -		LOGERR("parahotplug_proc_write: copy_from_user failed");
> -		return -EFAULT;
> -	}
> -	buf[count] = '\0';
> +	parahotplug_request_complete((int) id, 0);

This cast is not needed.  The kernel also has a kstrtoint() function, if
you would prefer to use that.

> +	return count;
> +}
>  
> -	if (sscanf(buf, "%u %hu", &id, &active) != 2) {
> -		id = 0;
> -		active = 0;
> -	}
> +/* The parahotplug/deviceenabled interface gets called by our support script
> + * when an SR-IOV device has been recovered. The ID is passed to the script
> + * and then passed back when the device has been brought back up.
> + */
> +static ssize_t deviceenabled_store(struct device *dev,
> +	struct device_attribute *attr, const char *buf, size_t count)
> +{
> +	uint id;
>  
> -	if (active != 1 && active != 0) {
> -		LOGERR("parahotplug_proc_write: invalid active field");
> +	if (kstrtouint(buf, 10, &id) != 1)
>  		return -EINVAL;
> -	}

Nope.

> -
> -	parahotplug_request_complete((int) id, (U16) active);
> -
> +	parahotplug_request_complete((int) id, 1);

Remove the case.  Also there should be no space between the cast and the
thing being casted to remind you that casting is a high precedence
operation.

>  	return count;
>  }

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux