From patchwork Wed Jun 30 08:44:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kepplinger X-Patchwork-Id: 12351607 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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 41631C11F65 for ; Wed, 30 Jun 2021 08:45:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1460F61360 for ; Wed, 30 Jun 2021 08:45:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233507AbhF3IsG (ORCPT ); Wed, 30 Jun 2021 04:48:06 -0400 Received: from comms.puri.sm ([159.203.221.185]:59140 "EHLO comms.puri.sm" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232984AbhF3IsF (ORCPT ); Wed, 30 Jun 2021 04:48:05 -0400 Received: from localhost (localhost [127.0.0.1]) by comms.puri.sm (Postfix) with ESMTP id 4D230E02F3; Wed, 30 Jun 2021 01:45:06 -0700 (PDT) Received: from comms.puri.sm ([127.0.0.1]) by localhost (comms.puri.sm [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vGm7-S1nAwlR; Wed, 30 Jun 2021 01:45:05 -0700 (PDT) From: Martin Kepplinger To: martin.kepplinger@puri.sm, bvanassche@acm.org Cc: jejb@linux.ibm.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-scsi@vger.kernel.org, martin.petersen@oracle.com, kernel@puri.sm, stern@rowland.harvard.edu Subject: [PATCH v5 1/3] scsi: devinfo: add new flag BLIST_MEDIA_CHANGE Date: Wed, 30 Jun 2021 10:44:51 +0200 Message-Id: <20210630084453.186764-2-martin.kepplinger@puri.sm> In-Reply-To: <20210630084453.186764-1-martin.kepplinger@puri.sm> References: <20210630084453.186764-1-martin.kepplinger@puri.sm> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org add a new flag for devices that issue MEDIA CHANGE unit attentions when actually no medium changed. Drivers can then act accordingly in case they need to work around it, i.e. in resume(). Signed-off-by: Martin Kepplinger Reviewed-by: Bart Van Assche --- include/scsi/scsi_devinfo.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h index 3fdb322d4c4b..766fa876598e 100644 --- a/include/scsi/scsi_devinfo.h +++ b/include/scsi/scsi_devinfo.h @@ -28,7 +28,8 @@ #define BLIST_LARGELUN ((__force blist_flags_t)(1ULL << 9)) /* override additional length field */ #define BLIST_INQUIRY_36 ((__force blist_flags_t)(1ULL << 10)) -#define __BLIST_UNUSED_11 ((__force blist_flags_t)(1ULL << 11)) +/* ignore one MEDIA CHANGE unit attention after resuming from runtime suspend */ +#define BLIST_MEDIA_CHANGE ((__force blist_flags_t)(1ULL << 11)) /* do not do automatic start on add */ #define BLIST_NOSTARTONADD ((__force blist_flags_t)(1ULL << 12)) #define __BLIST_UNUSED_13 ((__force blist_flags_t)(1ULL << 13)) @@ -73,8 +74,7 @@ #define __BLIST_HIGH_UNUSED (~(__BLIST_LAST_USED | \ (__force blist_flags_t) \ ((__force __u64)__BLIST_LAST_USED - 1ULL))) -#define __BLIST_UNUSED_MASK (__BLIST_UNUSED_11 | \ - __BLIST_UNUSED_13 | \ +#define __BLIST_UNUSED_MASK (__BLIST_UNUSED_13 | \ __BLIST_UNUSED_14 | \ __BLIST_UNUSED_15 | \ __BLIST_UNUSED_16 | \ From patchwork Wed Jun 30 08:44:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kepplinger X-Patchwork-Id: 12351611 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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 69583C11F6A for ; Wed, 30 Jun 2021 08:45:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 53D2561CD7 for ; Wed, 30 Jun 2021 08:45:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233717AbhF3IsN (ORCPT ); Wed, 30 Jun 2021 04:48:13 -0400 Received: from comms.puri.sm ([159.203.221.185]:59144 "EHLO comms.puri.sm" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233597AbhF3IsH (ORCPT ); Wed, 30 Jun 2021 04:48:07 -0400 Received: from localhost (localhost [127.0.0.1]) by comms.puri.sm (Postfix) with ESMTP id B2C16E0304; Wed, 30 Jun 2021 01:45:08 -0700 (PDT) Received: from comms.puri.sm ([127.0.0.1]) by localhost (comms.puri.sm [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fRWSAhGHjiXu; Wed, 30 Jun 2021 01:45:07 -0700 (PDT) From: Martin Kepplinger To: martin.kepplinger@puri.sm, bvanassche@acm.org Cc: jejb@linux.ibm.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-scsi@vger.kernel.org, martin.petersen@oracle.com, kernel@puri.sm, stern@rowland.harvard.edu Subject: [PATCH v5 2/3] scsi: sd: send REQUEST SENSE for BLIST_MEDIA_CHANGE devices in runtime_resume() Date: Wed, 30 Jun 2021 10:44:52 +0200 Message-Id: <20210630084453.186764-3-martin.kepplinger@puri.sm> In-Reply-To: <20210630084453.186764-1-martin.kepplinger@puri.sm> References: <20210630084453.186764-1-martin.kepplinger@puri.sm> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org For SD cardreader devices that have the BLIST_MEDIA_CHANGE flag set, a MEDIA CHANGE unit attention is received after resuming from runtime suspend. Send a REQUEST SENSE to avoid that. The "downside" is that for these devices we now rely on users not to really change the medium (SD card) *during* a runtime suspend/resume cycle, i.e. when not unmounting. To enable runtime PM for an SD cardreader (device number 0:0:0:0), do: echo 0 > /sys/module/block/parameters/events_dfl_poll_msecs echo 1000 > /sys/bus/scsi/devices/0:0:0:0/power/autosuspend_delay_ms echo auto > /sys/bus/scsi/devices/0:0:0:0/power/control Signed-off-by: Martin Kepplinger Reviewed-by: Bart Van Assche --- drivers/scsi/sd.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 6d2d63629a90..b02378f40620 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -63,6 +63,7 @@ #include #include #include +#include #include #include #include @@ -114,6 +115,7 @@ static void sd_shutdown(struct device *); static int sd_suspend_system(struct device *); static int sd_suspend_runtime(struct device *); static int sd_resume(struct device *); +static int sd_resume_runtime(struct device *); static void sd_rescan(struct device *); static blk_status_t sd_init_command(struct scsi_cmnd *SCpnt); static void sd_uninit_command(struct scsi_cmnd *SCpnt); @@ -608,7 +610,7 @@ static const struct dev_pm_ops sd_pm_ops = { .poweroff = sd_suspend_system, .restore = sd_resume, .runtime_suspend = sd_suspend_runtime, - .runtime_resume = sd_resume, + .runtime_resume = sd_resume_runtime, }; static struct scsi_driver sd_template = { @@ -3720,6 +3722,28 @@ static int sd_resume(struct device *dev) return ret; } +static int sd_resume_runtime(struct device *dev) +{ + struct scsi_disk *sdkp = dev_get_drvdata(dev); + struct scsi_device *sdp = sdkp->device; + int timeout, res; + + timeout = sdp->request_queue->rq_timeout * SD_FLUSH_TIMEOUT_MULTIPLIER; + + if (sdp->sdev_bflags & BLIST_MEDIA_CHANGE) { + /* clear the devices' sense data */ + static const u8 cmd[10] = { REQUEST_SENSE }; + + res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, + NULL, timeout, 1, 0, RQF_PM, NULL); + if (res) + sd_printk(KERN_NOTICE, sdkp, + "Failed to clear sense data\n"); + } + + return sd_resume(dev); +} + /** * init_sd - entry point for this driver (both when built in or when * a module). From patchwork Wed Jun 30 08:44:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kepplinger X-Patchwork-Id: 12351613 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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 C3F71C11F6B for ; Wed, 30 Jun 2021 08:45:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ADE3C61CFC for ; Wed, 30 Jun 2021 08:45:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233675AbhF3IsO (ORCPT ); Wed, 30 Jun 2021 04:48:14 -0400 Received: from comms.puri.sm ([159.203.221.185]:59146 "EHLO comms.puri.sm" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233644AbhF3IsJ (ORCPT ); Wed, 30 Jun 2021 04:48:09 -0400 Received: from localhost (localhost [127.0.0.1]) by comms.puri.sm (Postfix) with ESMTP id DEBACE02F2; Wed, 30 Jun 2021 01:45:10 -0700 (PDT) Received: from comms.puri.sm ([127.0.0.1]) by localhost (comms.puri.sm [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hta2rhVC1CFp; Wed, 30 Jun 2021 01:45:10 -0700 (PDT) From: Martin Kepplinger To: martin.kepplinger@puri.sm, bvanassche@acm.org Cc: jejb@linux.ibm.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-scsi@vger.kernel.org, martin.petersen@oracle.com, kernel@puri.sm, stern@rowland.harvard.edu Subject: [PATCH v5 3/3] scsi: devinfo: add BLIST_MEDIA_CHANGE for Ultra HS-SD/MMC usb cardreaders Date: Wed, 30 Jun 2021 10:44:53 +0200 Message-Id: <20210630084453.186764-4-martin.kepplinger@puri.sm> In-Reply-To: <20210630084453.186764-1-martin.kepplinger@puri.sm> References: <20210630084453.186764-1-martin.kepplinger@puri.sm> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org These cardreader devices issue a MEDIA CHANGE unit attention not only when actually a medium changed but also simply when resuming from suspend. Setting the BLIST_MEDIA_CHANGE flag enables using runtime pm for SD cardreaders. Signed-off-by: Martin Kepplinger Reviewed-by: Bart Van Assche --- drivers/scsi/scsi_devinfo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index d33355ab6e14..8ac0a11ac541 100644 --- a/drivers/scsi/scsi_devinfo.c +++ b/drivers/scsi/scsi_devinfo.c @@ -171,6 +171,7 @@ static struct { {"FUJITSU", "ETERNUS_DXM", "*", BLIST_RETRY_ASC_C1}, {"Generic", "USB SD Reader", "1.00", BLIST_FORCELUN | BLIST_INQUIRY_36}, {"Generic", "USB Storage-SMC", NULL, BLIST_FORCELUN | BLIST_INQUIRY_36}, /* FW: 0180 and 0207 */ + {"Generic", "Ultra HS-SD/MMC", "2.09", BLIST_MEDIA_CHANGE | BLIST_INQUIRY_36}, {"HITACHI", "DF400", "*", BLIST_REPORTLUN2}, {"HITACHI", "DF500", "*", BLIST_REPORTLUN2}, {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2},