Re: [PATCH 3/3] staging: unisys: Don't hold device responses until driver loads

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

 



On Fri, Jun 12, 2015 at 01:43:34PM -0400, Benjamin Romer wrote:
> From: David Kershner <david.kershner@xxxxxxxxxx>
> 
> Currently if a driver is not loaded for a device, we will not
> respond to the device create until it is done. This causes
> s-Par to not mark the partition running if the driver for the
> device is not loaded. Since there are several devices that
> could be assigned to a guest that don't have an actual
> driver this will cause us to never go running.
> 
> If the device driver is loaded, we WILL continue to only
> respond to the device PAUSE message when the device driver
> has responded that it is done with the device.
> 
> Signed-off-by: David Kershner <david.kershner@xxxxxxxxxx>
> Signed-off-by: Benjamin Romer <benjamin.romer@xxxxxxxxxx>
> ---
>  drivers/staging/unisys/visorbus/visorbus_main.c | 28 +++++++------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c b/drivers/staging/unisys/visorbus/visorbus_main.c
> index dcce1f0..ce35e85 100644
> --- a/drivers/staging/unisys/visorbus/visorbus_main.c
> +++ b/drivers/staging/unisys/visorbus/visorbus_main.c
> @@ -70,7 +70,6 @@ static const struct attribute_group *visorbus_bus_groups[] = {
>  	NULL,
>  };
>  
> -
>  /** This describes the TYPE of bus.
>   *  (Don't confuse this with an INSTANCE of the bus.)
>   */
> @@ -745,19 +744,6 @@ visordriver_probe_device(struct device *xdev)
>  away:
>  	if (rc != 0)
>  		put_device(&dev->device);
> -	/*  We could get here more than once if the child driver module is
> -	 *  unloaded and re-loaded while devices are present.  That's why we
> -	 *  need a flag to be sure that we only respond to the device_create
> -	 *  once.  We cannot respond to the device_create prior to here,
> -	 *  because until we call drv->probe() above, the channel has not been
> -	 *  initialized.
> -	 */
> -	if (!dev->responded_to_device_create) {
> -
> -		dev->responded_to_device_create = true;
> -		if (chipset_responders.device_create)
> -			(*chipset_responders.device_create)(dev, rc);
> -	}
>  	return rc;
>  }
>  
> @@ -1306,15 +1292,15 @@ chipset_device_create(struct visor_device *dev_info)
>  			 POSTCODE_SEVERITY_INFO);
>  
>  	rc = create_visor_device(dev_info);
> -	if (rc < 0) {
> +	if (chipset_responders.device_create)
> +		(*chipset_responders.device_create)(dev_info, rc);

Shouldn't that just be:
	chipset_responders.device_create(dev_info, rc);

thanks,

greg k-h
_______________________________________________
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