Re: [PATCH] scsi: core: configure runtime pm before calling device_add in scsi_add_host_with_dma

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

 



Am 03.08.2016 um 21:49 schrieb Heiner Kallweit:
> Runtime PM should be configured already once we call device_add. See also
> the description in this mail thread
> https://lists.linuxfoundation.org/pipermail/linux-pm/2009-November/023198.html
> or the order of calls e.g. in usb_new_device.
> 
> The changed order also helps to avoid scenarios where runtime pm for
> &shost->shost_gendev is activated whilst the parent is suspended,
> resulting in error message "runtime PM trying to activate child device
> hostx but parent yyy is not active".
> 
> In addition properly reverse the runtime pm calls in the error path.
> 
> Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx>
> ---
>  drivers/scsi/hosts.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
> index ba9af4a..9ab94ad 100644
> --- a/drivers/scsi/hosts.c
> +++ b/drivers/scsi/hosts.c
> @@ -246,10 +246,6 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
>  
>  	shost->dma_dev = dma_dev;
>  
> -	error = device_add(&shost->shost_gendev);
> -	if (error)
> -		goto out_destroy_freelist;
> -
>  	/*
>  	 * Increase usage count temporarily here so that calling
>  	 * scsi_autopm_put_host() will trigger runtime idle if there is
> @@ -260,6 +256,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
>  	pm_runtime_enable(&shost->shost_gendev);
>  	device_enable_async_suspend(&shost->shost_gendev);
>  
> +	error = device_add(&shost->shost_gendev);
> +	if (error)
> +		goto out_destroy_freelist;
> +
>  	scsi_host_set_state(shost, SHOST_RUNNING);
>  	get_device(shost->shost_gendev.parent);
>  
> @@ -309,6 +309,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
>   out_del_gendev:
>  	device_del(&shost->shost_gendev);
>   out_destroy_freelist:
> +	device_disable_async_suspend(&shost->shost_gendev);
> +	pm_runtime_disable(&shost->shost_gendev);
> +	pm_runtime_set_suspended(&shost->shost_gendev);
> +	pm_runtime_put_noidle(&shost->shost_gendev);
>  	scsi_destroy_command_freelist(shost);
>   out_destroy_tags:
>  	if (shost_use_blk_mq(shost))
> 
Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux