From: Avri Altman <avri.altman@wdc.com>
To: "James E . J . Bottomley" <jejb@linux.vnet.ibm.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: gregkh@linuxfoundation.org, Bart Van Assche <bvanassche@acm.org>,
yongmyung lee <ymhungry.lee@samsung.com>,
Daejun Park <daejun7.park@samsung.com>,
alim.akhtar@samsung.com, asutoshd@codeaurora.org,
Zang Leigang <zangleigang@hisilicon.com>,
Avi Shchislowski <avi.shchislowski@wdc.com>,
Bean Huo <beanhuo@micron.com>,
cang@codeaurora.org, stanley.chu@mediatek.com,
Avri Altman <avri.altman@wdc.com>
Subject: [PATCH v7 07/11] scsi: ufshpb: Add hpb dev reset response
Date: Wed, 31 Mar 2021 10:39:48 +0300 [thread overview]
Message-ID: <20210331073952.102162-8-avri.altman@wdc.com> (raw)
In-Reply-To: <20210331073952.102162-1-avri.altman@wdc.com>
The spec does not define what is the host's recommended response when
the device send hpb dev reset response (oper 0x2).
We will update all active hpb regions: mark them and do that on the next
read.
Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
drivers/scsi/ufs/ufshpb.c | 32 +++++++++++++++++++++++++++++++-
drivers/scsi/ufs/ufshpb.h | 1 +
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c
index fcc954f51bcf..1d99099ebd41 100644
--- a/drivers/scsi/ufs/ufshpb.c
+++ b/drivers/scsi/ufs/ufshpb.c
@@ -195,7 +195,8 @@ static void ufshpb_iterate_rgn(struct ufshpb_lu *hpb, int rgn_idx, int srgn_idx,
}
spin_unlock(&rgn->rgn_lock);
- if (activate) {
+ if (activate ||
+ test_and_clear_bit(RGN_FLAG_UPDATE, &rgn->rgn_flags)) {
spin_lock_irqsave(&hpb->rsp_list_lock, flags);
ufshpb_update_active_info(hpb, rgn_idx, srgn_idx);
spin_unlock_irqrestore(&hpb->rsp_list_lock, flags);
@@ -1412,6 +1413,20 @@ static void ufshpb_rsp_req_region_update(struct ufshpb_lu *hpb,
queue_work(ufshpb_wq, &hpb->map_work);
}
+static void ufshpb_dev_reset_handler(struct ufshpb_lu *hpb)
+{
+ struct victim_select_info *lru_info = &hpb->lru_info;
+ struct ufshpb_region *rgn;
+ unsigned long flags;
+
+ spin_lock_irqsave(&hpb->rgn_state_lock, flags);
+
+ list_for_each_entry(rgn, &lru_info->lh_lru_rgn, list_lru_rgn)
+ set_bit(RGN_FLAG_UPDATE, &rgn->rgn_flags);
+
+ spin_unlock_irqrestore(&hpb->rgn_state_lock, flags);
+}
+
/*
* This function will parse recommended active subregion information in sense
* data field of response UPIU with SAM_STAT_GOOD state.
@@ -1486,6 +1501,18 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
case HPB_RSP_DEV_RESET:
dev_warn(&hpb->sdev_ufs_lu->sdev_dev,
"UFS device lost HPB information during PM.\n");
+
+ if (hpb->is_hcm) {
+ struct scsi_device *sdev;
+
+ __shost_for_each_device(sdev, hba->host) {
+ struct ufshpb_lu *h = sdev->hostdata;
+
+ if (h)
+ ufshpb_dev_reset_handler(h);
+ }
+ }
+
break;
default:
dev_notice(&hpb->sdev_ufs_lu->sdev_dev,
@@ -1812,6 +1839,8 @@ static int ufshpb_alloc_region_tbl(struct ufs_hba *hba, struct ufshpb_lu *hpb)
} else {
rgn->rgn_state = HPB_RGN_INACTIVE;
}
+
+ rgn->rgn_flags = 0;
}
return 0;
@@ -2139,6 +2168,7 @@ static void ufshpb_cancel_jobs(struct ufshpb_lu *hpb)
{
if (hpb->is_hcm)
cancel_work_sync(&hpb->ufshpb_normalization_work);
+
cancel_work_sync(&hpb->map_work);
}
diff --git a/drivers/scsi/ufs/ufshpb.h b/drivers/scsi/ufs/ufshpb.h
index 1ea58c17a4de..b863540e28d6 100644
--- a/drivers/scsi/ufs/ufshpb.h
+++ b/drivers/scsi/ufs/ufshpb.h
@@ -127,6 +127,7 @@ struct ufshpb_region {
struct list_head list_lru_rgn;
unsigned long rgn_flags;
#define RGN_FLAG_DIRTY 0
+#define RGN_FLAG_UPDATE 1
/* region reads - for host mode */
spinlock_t rgn_lock;
--
2.25.1
next prev parent reply other threads:[~2021-03-31 7:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-31 7:39 [PATCH v7 00/11] Add Host control mode to HPB Avri Altman
2021-03-31 7:39 ` [PATCH v7 01/11] scsi: ufshpb: Cache HPB Control mode on init Avri Altman
2021-03-31 7:39 ` [PATCH v7 02/11] scsi: ufshpb: Add host control mode support to rsp_upiu Avri Altman
2021-03-31 7:39 ` [PATCH v7 03/11] scsi: ufshpb: Transform set_dirty to iterate_rgn Avri Altman
2021-03-31 7:39 ` [PATCH v7 04/11] scsi: ufshpb: Add reads counter Avri Altman
2021-03-31 7:39 ` [PATCH v7 05/11] scsi: ufshpb: Make eviction depends on region's reads Avri Altman
2021-03-31 7:39 ` [PATCH v7 06/11] scsi: ufshpb: Region inactivation in host mode Avri Altman
2021-04-06 4:53 ` Can Guo
2021-04-06 5:20 ` Avri Altman
2021-04-06 6:00 ` Can Guo
2021-04-06 6:16 ` Avri Altman
2021-04-06 6:26 ` Can Guo
2021-04-06 7:16 ` Avri Altman
2021-04-10 1:09 ` Avri Altman
2021-03-31 7:39 ` Avri Altman [this message]
2021-03-31 7:39 ` [PATCH v7 08/11] scsi: ufshpb: Add "Cold" regions timer Avri Altman
2021-03-31 7:39 ` [PATCH v7 09/11] scsi: ufshpb: Limit the number of inflight map requests Avri Altman
2021-03-31 7:39 ` [PATCH v7 10/11] scsi: ufshpb: Add support for host control mode Avri Altman
2021-03-31 7:39 ` [PATCH v7 11/11] scsi: ufshpb: Make host mode parameters configurable Avri Altman
[not found] ` <CGME20210331074004epcas2p3e6d0b2d1bf0f43708902b2d5583069c4@epcms2p6>
2021-04-05 9:29 ` [PATCH v7 00/11] Add Host control mode to HPB Daejun Park
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210331073952.102162-8-avri.altman@wdc.com \
--to=avri.altman@wdc.com \
--cc=alim.akhtar@samsung.com \
--cc=asutoshd@codeaurora.org \
--cc=avi.shchislowski@wdc.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=cang@codeaurora.org \
--cc=daejun7.park@samsung.com \
--cc=gregkh@linuxfoundation.org \
--cc=jejb@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stanley.chu@mediatek.com \
--cc=ymhungry.lee@samsung.com \
--cc=zangleigang@hisilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).