Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1517027ybt; Thu, 25 Jun 2020 07:53:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfE4extJrm6X+ds8sCKupJ/hafw3pAnK/1DZrVBK7ybu8jHUkGumriPH9PUFdrKQhC6CwM X-Received: by 2002:a17:906:1d5b:: with SMTP id o27mr29589894ejh.344.1593096839344; Thu, 25 Jun 2020 07:53:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593096839; cv=none; d=google.com; s=arc-20160816; b=E4UX5W3nHSxoHpP96veJq/ULAEYWKIWzu01ijiZbKQRVGWYLlZhffwgz7xRT0ugR28 kUaJ4M0fL6Y+eoMR+q7Akxb3LA1taAlQoGgnd2rbHHy1e/4wuXitdpDOJh4neSj3ofzS sJ1yxZncLG5eRm6bAvIwI4YfFVt6ZgsOYjrhKYFscYhzB8w5MxUBldeUoY/+TcZKJWZL GCLI1LH/xwNFQ84jGXgvpwu5wgsTcSyhP+LoANHh9uSy4XvSdXdSB+sjZOSOvgQi4aKg K+l05e6TUedSOtN9ugT8Kq6vbbh3zCqhCx1rpXOftV8fzD9XyR+PtpDjeIx1vCEJz07A TZ5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=Iw5e/ZTEkSf4sd+iak/vijH+S4bx21gGdoDGAuEMuX8=; b=p45bzSrKOdHxmMDNNtpVMR9BDMDAKg8ED2gtTqMRt4UUcT1VtiX7ZJCueC22sE88b8 5NUBQhopCnUjwYIRLDVcKjOulG5TUXuCfg3S5Gd2N3P74fJFSCJo79IBOPH9zlOBxK38 3QC4HIczffU0EvX/HiovUYw9lRd9DRRlJx4EQyj0/kp3WkJRHrM4xWVMPQAdF+g5Cn5U z49Kn3qhxLqd0NWjXMz1iSesxMU+E2nHJfu5Po+328eMYqpoqm4JTMeG89wvC7n6Y73t GovVzzfyTXnLI8cMwWMz1JAcjGCIN5XwtEqsIDjRWnwFj1qR0FObtQOUR5u8zFOnQFv1 Wu2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d4si9522731ejb.349.2020.06.25.07.53.35; Thu, 25 Jun 2020 07:53:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405536AbgFYOw6 (ORCPT + 99 others); Thu, 25 Jun 2020 10:52:58 -0400 Received: from netrider.rowland.org ([192.131.102.5]:55953 "HELO netrider.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S2405525AbgFYOw6 (ORCPT ); Thu, 25 Jun 2020 10:52:58 -0400 Received: (qmail 258042 invoked by uid 1000); 25 Jun 2020 10:52:56 -0400 Date: Thu, 25 Jun 2020 10:52:56 -0400 From: Alan Stern To: Martin Kepplinger Cc: Bart Van Assche , jejb@linux.ibm.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@puri.sm Subject: Re: [PATCH] scsi: sd: add runtime pm to open / release Message-ID: <20200625145256.GA257526@rowland.harvard.edu> References: <20200623111018.31954-1-martin.kepplinger@puri.sm> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 25, 2020 at 10:16:06AM +0200, Martin Kepplinger wrote: > On 24.06.20 15:33, Bart Van Assche wrote: > > On 2020-06-23 04:10, Martin Kepplinger wrote: > >> This add a very conservative but simple implementation for runtime PM > >> to the sd scsi driver: > >> Resume when opened (mounted) and suspend when released (unmounted). > >> > >> Improvements that allow suspending while a device is "open" can > >> be added later, but now we save power when no filesystem is mounted > >> and runtime PM is enabled. > >> > >> Signed-off-by: Martin Kepplinger > >> --- > >> drivers/scsi/sd.c | 6 ++++++ > >> 1 file changed, 6 insertions(+) > >> > >> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > >> index d90fefffe31b..fe4cb7c50ec1 100644 > >> --- a/drivers/scsi/sd.c > >> +++ b/drivers/scsi/sd.c > >> @@ -1372,6 +1372,7 @@ static int sd_open(struct block_device *bdev, fmode_t mode) > >> SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n")); > >> > >> sdev = sdkp->device; > >> + scsi_autopm_get_device(sdev); > >> > >> /* > >> * If the device is in error recovery, wait until it is done. > >> @@ -1418,6 +1419,9 @@ static int sd_open(struct block_device *bdev, fmode_t mode) > >> > >> error_out: > >> scsi_disk_put(sdkp); > >> + > >> + scsi_autopm_put_device(sdev); > >> + > >> return retval; > >> } > >> > >> @@ -1441,6 +1445,8 @@ static void sd_release(struct gendisk *disk, fmode_t mode) > >> > >> SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n")); > >> > >> + scsi_autopm_put_device(sdev); > >> + > >> if (atomic_dec_return(&sdkp->openers) == 0 && sdev->removable) { > >> if (scsi_block_when_processing_errors(sdev)) > >> scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW); > > > > My understanding of the above patch is that it introduces a regression, > > namely by disabling runtime suspend as long as an sd device is held open. > > > > Bart. > > > > > > hi Bart, > > Alan says the same (on block request, the block layer should initiate a > runtime resume), so merging with the thread from > https://lore.kernel.org/linux-usb/8738e4d3-62b1-0144-107d-ff42000ed6c6@puri.sm/T/ > now and answer to both Bart and Alan here:] > > I see scsi-pm.c using the blk-pm.c API but I'm not sure how the block > layer would itself resume the scsi device (I use it via usb_storage, so > that usb_stor_resume() follows in my case but I guess that doesn't > matter here): The block layer does this in block/blk-core.c:blk_queue_enter(), as part of the condition check in the call to wait_event() near the end of the function. The blk_pm_request_resume() inline routine calls pm_request_resume(). At least, that's what is _supposed_ to happen. See commit 0d25bd072b49 ("block: Schedule runtime resume earlier"). > my understanding of "sd" is: enable runtime pm in probe(), so *allow* > the device to be suspended (if enabled by the user), but never > resume(?). Also, why isn't "autopm" used in its ioctl() implementation > (as opposed to in "sr")? I don't remember the reason. It may be that the code in sr.c isn't needed. > here's roughly what happens when enabling runtime PM in sysfs (again, > because sd_probe() calls autopm_put() and thus allows it: > > [ 27.384446] sd 0:0:0:0: scsi_runtime_suspend > [ 27.432282] blk_pre_runtime_suspend > [ 27.435783] sd_suspend_common > [ 27.438782] blk_post_runtime_suspend > [ 27.442427] scsi target0:0:0: scsi_runtime_suspend > [ 27.447303] scsi host0: scsi_runtime_suspend > > then I "mount /dev/sda1 /mnt" and none of the resume() functions get > called. To me it looks like the sd driver should initiate resuming, and > that's not implemented. > > what am I doing wrong or overlooking? how exactly does (or should) the > block layer initiate resume here? I don't know what's going wrong. Bart, can you look into it? As far as I can tell, you're the last person to touch the block-layer's runtime PM code. Alan Stern