Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1589126ybv; Thu, 20 Feb 2020 23:50:52 -0800 (PST) X-Google-Smtp-Source: APXvYqxXNMdC3hLe9rhw/VQzf6JLwGJtBcY4j7g6maAvpz+ql6Xof5w8MvDSKz9PhXkXgad+vRjn X-Received: by 2002:a9d:6c55:: with SMTP id g21mr27271107otq.264.1582271452398; Thu, 20 Feb 2020 23:50:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582271452; cv=none; d=google.com; s=arc-20160816; b=VtGrELnKjhA4BnE3uFfMYfFzfRqRdNtep8fLPseBBK8VVojxE0ZiN5JXfLsQDeilaL ozO3Z1aacjOnXIsljuUfPQAUubUVk0VOS3YNEumo/fOPEy6sB2wkyewRUGNx504icSnm UfUR6ZH4BpGzzOcQ8kUmuBRvxvxeGu6grkWQw9DALkxmKm4kXGfsHYjz2bdmKBZR020C 6GShPvKOHWN59K9NZ7zZiwS6sT+qj7qsLLP105zg+dNkzuXnqlJpxoYsHaQjwWiyO6Ks Xuz3TbkeoDu0UD7dErnYd0TNB9SZvsa8kEQ+DCRaWiwx360DXkHHPEpG5MTHNGPmb2cG pFQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=59TRvSVVGLHcW3gJygNgMtfDYoMOM7ZBn0QykfbKhuM=; b=nozERpeTaY99iTRHWTNlFnQl3FucWGx6bEir9X7VktnUsQkbj0l09sJxn8fFrLM9re O5B1Va6u9H6Wzj5DzeLKF5OauO0ksB2gSPNDmSB0T8f97DVlH2psghoZMP9JDIpn+tYU euCxr6s/jLVRVoq4GwiO+70RvGtl6PVqh3IUCUloOpusbN+adakp3ZNmIYSFDSo+OMLe WKwDHKJTiwPyvXnonp8zRZIwrYtSseN0zSPFHo7DtsKAhiMV3B2xFZwhnRGJNa08VW5X 2x7bJa/yCr3GHoHFtUgelheA13nylptRtwsu31QGMy7LVA0ItmryUyNjvaLbZ64HXCYG 6YVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OVNYsBfr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l5si1054565otf.37.2020.02.20.23.50.40; Thu, 20 Feb 2020 23:50:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OVNYsBfr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728803AbgBUHui (ORCPT + 99 others); Fri, 21 Feb 2020 02:50:38 -0500 Received: from mail.kernel.org ([198.145.29.99]:47544 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729576AbgBUHuh (ORCPT ); Fri, 21 Feb 2020 02:50:37 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9910E208C4; Fri, 21 Feb 2020 07:50:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582271436; bh=9jKTml5Ut7aNjGGWZVXQ6XT7y0ifxxAgeEEzRnZBi68=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OVNYsBfrLL2yS5fiaoiypi7zQN9+qTRWLl+QopkxUx5wqyQCxSXuR4+CzQR1CWX6Z fsKZCo7+nSzAY9/pT3yxUJ7KEB/CXEmTXvKQ9WTvqyfk0S1Bz45eRkbAli+1WLPnUK 3XGsX0MNSfYhjf/ZiFPtqmfdWXKf6wFQ0Bj4tECo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alim Akhtar , Bean Huo , Can Guo , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.5 166/399] scsi: ufs: Complete pending requests in host reset and restore path Date: Fri, 21 Feb 2020 08:38:11 +0100 Message-Id: <20200221072418.756532005@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200221072402.315346745@linuxfoundation.org> References: <20200221072402.315346745@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Can Guo [ Upstream commit 2df74b6985b51e77756e2e8faa16c45ca3ba53c5 ] In UFS host reset and restore path, before probe, we stop and start the host controller once. After host controller is stopped, the pending requests, if any, are cleared from the doorbell, but no completion IRQ would be raised due to the hba is stopped. These pending requests shall be completed along with the first NOP_OUT command (as it is the first command which can raise a transfer completion IRQ) sent during probe. Since the OCSs of these pending requests are not SUCCESS (because they are not yet literally finished), their UPIUs shall be dumped. When there are multiple pending requests, the UPIU dump can be overwhelming and may lead to stability issues because it is in atomic context. Therefore, before probe, complete these pending requests right after host controller is stopped and silence the UPIU dump from them. Link: https://lore.kernel.org/r/1574751214-8321-5-git-send-email-cang@qti.qualcomm.com Reviewed-by: Alim Akhtar Reviewed-by: Bean Huo Tested-by: Bean Huo Signed-off-by: Can Guo Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/ufs/ufshcd.c | 24 ++++++++++-------------- drivers/scsi/ufs/ufshcd.h | 2 ++ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 3fbf9ea16c64e..7d8300c9a0148 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4799,7 +4799,7 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) break; } /* end of switch */ - if (host_byte(result) != DID_OK) + if ((host_byte(result) != DID_OK) && !hba->silence_err_logs) ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); return result; } @@ -5351,8 +5351,8 @@ static void ufshcd_err_handler(struct work_struct *work) /* * if host reset is required then skip clearing the pending - * transfers forcefully because they will automatically get - * cleared after link startup. + * transfers forcefully because they will get cleared during + * host reset and restore */ if (needs_reset) goto skip_pending_xfer_clear; @@ -6282,9 +6282,15 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba) int err; unsigned long flags; - /* Reset the host controller */ + /* + * Stop the host controller and complete the requests + * cleared by h/w + */ spin_lock_irqsave(hba->host->host_lock, flags); ufshcd_hba_stop(hba, false); + hba->silence_err_logs = true; + ufshcd_complete_requests(hba); + hba->silence_err_logs = false; spin_unlock_irqrestore(hba->host->host_lock, flags); /* scale up clocks to max frequency before full reinitialization */ @@ -6318,7 +6324,6 @@ out: static int ufshcd_reset_and_restore(struct ufs_hba *hba) { int err = 0; - unsigned long flags; int retries = MAX_HOST_RESET_RETRIES; do { @@ -6328,15 +6333,6 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba) err = ufshcd_host_reset_and_restore(hba); } while (err && --retries); - /* - * After reset the door-bell might be cleared, complete - * outstanding requests in s/w here. - */ - spin_lock_irqsave(hba->host->host_lock, flags); - ufshcd_transfer_req_compl(hba); - ufshcd_tmc_handler(hba); - spin_unlock_irqrestore(hba->host->host_lock, flags); - return err; } diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 2740f6941ec69..2e59f9d8ab89e 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -513,6 +513,7 @@ struct ufs_stats { * @uic_error: UFS interconnect layer error status * @saved_err: sticky error mask * @saved_uic_err: sticky UIC error mask + * @silence_err_logs: flag to silence error logs * @dev_cmd: ufs device management command information * @last_dme_cmd_tstamp: time stamp of the last completed DME command * @auto_bkops_enabled: to track whether bkops is enabled in device @@ -670,6 +671,7 @@ struct ufs_hba { u32 saved_err; u32 saved_uic_err; struct ufs_stats ufs_stats; + bool silence_err_logs; /* Device management request data */ struct ufs_dev_cmd dev_cmd; -- 2.20.1