linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 03/11] scsi: ufshpb: Transform set_dirty to iterate_rgn
Date: Wed, 31 Mar 2021 10:39:44 +0300	[thread overview]
Message-ID: <20210331073952.102162-4-avri.altman@wdc.com> (raw)
In-Reply-To: <20210331073952.102162-1-avri.altman@wdc.com>

Given a transfer length, set_dirty meticulously runs over all the
entries, across subregions and regions if needed. Currently its only use
is to mark dirty blocks, but soon HCM may profit from it as well, when
managing its read counters.

Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/scsi/ufs/ufshpb.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c
index 6111019ca31a..252fcfb48862 100644
--- a/drivers/scsi/ufs/ufshpb.c
+++ b/drivers/scsi/ufs/ufshpb.c
@@ -144,13 +144,14 @@ static bool ufshpb_is_hpb_rsp_valid(struct ufs_hba *hba,
 	return true;
 }
 
-static void ufshpb_set_ppn_dirty(struct ufshpb_lu *hpb, int rgn_idx,
-				 int srgn_idx, int srgn_offset, int cnt)
+static void ufshpb_iterate_rgn(struct ufshpb_lu *hpb, int rgn_idx, int srgn_idx,
+			       int srgn_offset, int cnt, bool set_dirty)
 {
 	struct ufshpb_region *rgn;
 	struct ufshpb_subregion *srgn;
 	int set_bit_len;
 	int bitmap_len;
+	unsigned long flags;
 
 next_srgn:
 	rgn = hpb->rgn_tbl + rgn_idx;
@@ -166,11 +167,14 @@ static void ufshpb_set_ppn_dirty(struct ufshpb_lu *hpb, int rgn_idx,
 	else
 		set_bit_len = cnt;
 
-	set_bit(RGN_FLAG_DIRTY, &rgn->rgn_flags);
+	if (set_dirty)
+		set_bit(RGN_FLAG_DIRTY, &rgn->rgn_flags);
 
-	if (rgn->rgn_state != HPB_RGN_INACTIVE &&
+	spin_lock_irqsave(&hpb->rgn_state_lock, flags);
+	if (set_dirty && rgn->rgn_state != HPB_RGN_INACTIVE &&
 	    srgn->srgn_state == HPB_SRGN_VALID)
 		bitmap_set(srgn->mctx->ppn_dirty, srgn_offset, set_bit_len);
+	spin_unlock_irqrestore(&hpb->rgn_state_lock, flags);
 
 	srgn_offset = 0;
 	if (++srgn_idx == hpb->srgns_per_rgn) {
@@ -592,10 +596,8 @@ int ufshpb_prep(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 
 	/* If command type is WRITE or DISCARD, set bitmap as drity */
 	if (ufshpb_is_write_or_discard_cmd(cmd)) {
-		spin_lock_irqsave(&hpb->rgn_state_lock, flags);
-		ufshpb_set_ppn_dirty(hpb, rgn_idx, srgn_idx, srgn_offset,
-				 transfer_len);
-		spin_unlock_irqrestore(&hpb->rgn_state_lock, flags);
+		ufshpb_iterate_rgn(hpb, rgn_idx, srgn_idx, srgn_offset,
+				   transfer_len, true);
 		return 0;
 	}
 
-- 
2.25.1


  parent reply	other threads:[~2021-03-31  7:41 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 ` Avri Altman [this message]
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 ` [PATCH v7 07/11] scsi: ufshpb: Add hpb dev reset response Avri Altman
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-4-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 NNTP newsgroup(s).