From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=3.0 tests=DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,T_DKIM_INVALID, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97173ECDFBB for ; Fri, 20 Jul 2018 23:50:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4CCE02084A for ; Fri, 20 Jul 2018 23:50:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="kiTuJVGa"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="kiTuJVGa" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4CCE02084A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728834AbeGUAlE (ORCPT ); Fri, 20 Jul 2018 20:41:04 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:47468 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727845AbeGUAlD (ORCPT ); Fri, 20 Jul 2018 20:41:03 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id E505360274; Fri, 20 Jul 2018 23:50:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1532130631; bh=EYgZyTY+JquTfc47QVg5BvacMMAmkIZyxARhjeVgKjU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=kiTuJVGa9wj3ja1WSgOVf6l6Zii0x+glZ7Czwhq2HCNkEo0yKMfKGTKaT8hN7X4/l faDrViCi6N6RW/u9MsG7qRzG1d+RwvbRPA2UAxnJw5RFOMH39Pk+zEmDG5Y5sb6NXc 5kLyy7Gl4xge5ugnlS/zgSux/1re/J2t6H3dHgrk= Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 15AED60274; Fri, 20 Jul 2018 23:50:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1532130631; bh=EYgZyTY+JquTfc47QVg5BvacMMAmkIZyxARhjeVgKjU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=kiTuJVGa9wj3ja1WSgOVf6l6Zii0x+glZ7Czwhq2HCNkEo0yKMfKGTKaT8hN7X4/l faDrViCi6N6RW/u9MsG7qRzG1d+RwvbRPA2UAxnJw5RFOMH39Pk+zEmDG5Y5sb6NXc 5kLyy7Gl4xge5ugnlS/zgSux/1re/J2t6H3dHgrk= MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 20 Jul 2018 16:50:31 -0700 From: Subhash Jadavani To: Asutosh Das Cc: cang@codeaurora.org, vivek.gautam@codeaurora.org, rnayak@codeaurora.org, vinholikatti@gmail.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Sujit Reddy Thumma , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v1 2/9] scsi: Allow auto suspend override by low-level driver In-Reply-To: <8135b00502f7e089478c9b988806ed40b7d5d40b.1530880006.git.asutoshd@codeaurora.org> References: <8135b00502f7e089478c9b988806ed40b7d5d40b.1530880006.git.asutoshd@codeaurora.org> Message-ID: <2c51ab099a01e17163bc219b1c4a135b@codeaurora.org> X-Sender: subhashj@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2018-07-06 05:30, Asutosh Das wrote: > From: Sujit Reddy Thumma > > Until now the scsi mid-layer forbids runtime suspend till userspace > enables it. This is mainly to quarantine some disks with broken > runtime power management or have high latencies executing suspend > resume callbacks. If the userspace doesn't enable the runtime suspend > the underlying hardware will be always on even when it is not doing > any useful work and thus wasting power. > > Some low-level drivers for the controllers can efficiently use runtime > power management to reduce power consumption and improve battery life. > Allow runtime suspend parameters override within the LLD itself > instead of waiting for userspace to control the power management. > > Signed-off-by: Sujit Reddy Thumma > Signed-off-by: Subhash Jadavani > Signed-off-by: Asutosh Das > --- > drivers/scsi/scsi_scan.c | 4 ++++ > drivers/scsi/scsi_sysfs.c | 3 ++- > drivers/scsi/sd.c | 2 ++ > include/scsi/scsi_device.h | 3 +++ > 4 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c > index 0880d97..5b7232a 100644 > --- a/drivers/scsi/scsi_scan.c > +++ b/drivers/scsi/scsi_scan.c > @@ -969,6 +969,10 @@ static int scsi_add_lun(struct scsi_device *sdev, > unsigned char *inq_result, > > transport_configure_device(&sdev->sdev_gendev); > > + /* The LLD can override auto suspend tunables in ->slave_configure() > */ > + sdev->use_rpm_auto = 0; > + sdev->autosuspend_delay = SCSI_DEFAULT_AUTOSUSPEND_DELAY; > + > if (sdev->host->hostt->slave_configure) { > ret = sdev->host->hostt->slave_configure(sdev); > if (ret) { > diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c > index 7943b76..706e778 100644 > --- a/drivers/scsi/scsi_sysfs.c > +++ b/drivers/scsi/scsi_sysfs.c > @@ -1266,7 +1266,8 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev) > device_enable_async_suspend(&sdev->sdev_gendev); > scsi_autopm_get_target(starget); > pm_runtime_set_active(&sdev->sdev_gendev); > - pm_runtime_forbid(&sdev->sdev_gendev); > + if (!sdev->use_rpm_auto) > + pm_runtime_forbid(&sdev->sdev_gendev); > pm_runtime_enable(&sdev->sdev_gendev); > scsi_autopm_put_target(starget); > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index a6201e6..205624f 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -3269,6 +3269,8 @@ static void sd_probe_async(void *data, > async_cookie_t cookie) > } > > blk_pm_runtime_init(sdp->request_queue, dev); > + if (sdp->autosuspend_delay >= 0) > + pm_runtime_set_autosuspend_delay(dev, sdp->autosuspend_delay); > device_add_disk(dev, gd); > if (sdkp->capacity) > sd_dif_config_host(sdkp); > diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h > index 4c36af6..1d5ae90 100644 > --- a/include/scsi/scsi_device.h > +++ b/include/scsi/scsi_device.h > @@ -197,7 +197,10 @@ struct scsi_device { > unsigned broken_fua:1; /* Don't set FUA bit */ > unsigned lun_in_cdb:1; /* Store LUN bits in CDB[1] */ > unsigned unmap_limit_for_ws:1; /* Use the UNMAP limit for WRITE SAME > */ > + unsigned use_rpm_auto:1; /* Enable runtime PM auto suspend */ > > +#define SCSI_DEFAULT_AUTOSUSPEND_DELAY -1 > + int autosuspend_delay; > atomic_t disk_events_disable_depth; /* disable depth for disk events > */ > > DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported > events */ Looks good to me. Reviewed-by: Subhash Jadavani -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project