Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3066413pxf; Sun, 14 Mar 2021 23:48:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwmMVHFpMUrVWBwt4szIsROoP3CH7hyTMnMYmeWAvHns37BfwFdurY6+vZmDXe0sNzMZilr X-Received: by 2002:a17:906:e48:: with SMTP id q8mr10360554eji.84.1615790883936; Sun, 14 Mar 2021 23:48:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615790883; cv=none; d=google.com; s=arc-20160816; b=sAN7HeYFNWPaF6fd1AXvWORPbYcU23mfNtJgpFh0v7NXceD3PzyISGWvE0TJhSd38d kJv/o7740gy35p1yYBZ3GQt8gmhh8x7frVJTx0+1sppFkv9bVd6a5D3cWyVn4beaHIiB acTygtk62sGQm01iDOQgRsvcnID8nCHEsEOI9x4F+VQvd/1ok1sblasocDJXYmOtKZST q9xom0F3CSQC7vhOqVCiQmcQYlnpj8zGgWDGRiLyBpUkvd5z0HoPEzRWKO5YCDH1GR+s rQ5MpaexqKyVybDor/VgyzhRUk7mI1h4OpdX83E6hVW4zupewoiBTG6Eg34cBQu4ipVk uatA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:message-id:references:in-reply-to :subject:cc:to:from:date:content-transfer-encoding:mime-version :sender:dkim-signature; bh=Eh+zXNDaC2MynIN0OjXzWVKeG6TXNvkytir5AC33S4Y=; b=irKBfGTUaEssK5T82HWf/XtB0glpHvIoOTwCCvwxbfNnERoK6npNEzwXSrNp/vlF1B Y5HPmwUsualkq0fhZhVCaDqnqaPiH/aY7Nltne6U9ObMs/9kdjvAcjhCNS/6HI6SZ4dw fcvrNA3V9rsaZJ1i5RQctXAXFLK5inUuhED2yc/WgfUFvF5Sy78ABvh0eM5VT4n2rZNT VvO8AtwotPMPaQoIck5AleLL6vzLbRWGgYrOEs9qfhsdidwtDaP0UWSMj2DW7tZZRd/u B0Ly/V1AIm58BqhfeMlhsAoL+6kRb8IiuEdwziVC4M4xFk5YOEIAQeO7+UzzKGHZE1DU f7kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=LSWMoiSB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l15si7216455edb.89.2021.03.14.23.47.41; Sun, 14 Mar 2021 23:48:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=LSWMoiSB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230129AbhCOGlY (ORCPT + 99 others); Mon, 15 Mar 2021 02:41:24 -0400 Received: from m42-2.mailgun.net ([69.72.42.2]:42269 "EHLO m42-2.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230078AbhCOGlA (ORCPT ); Mon, 15 Mar 2021 02:41:00 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1615790460; h=Message-ID: References: In-Reply-To: Subject: Cc: To: From: Date: Content-Transfer-Encoding: Content-Type: MIME-Version: Sender; bh=Eh+zXNDaC2MynIN0OjXzWVKeG6TXNvkytir5AC33S4Y=; b=LSWMoiSBeSZoZPq9Vq2e8CjIO1pDJl69Ch69bwo7Nzn9sqe+0stJcvcyITTTuA7RVdkzFG4u WXOO8WYG8vu/qBlPLzjArHXE3HNrpwHlM94sCr9P6LqhmuL3raSN5h2OmntIhr/gSbIFwdAP 9kYe8CYna4zl8J4xK4KYf7vmmH8= X-Mailgun-Sending-Ip: 69.72.42.2 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n06.prod.us-west-2.postgun.com with SMTP id 604f017be2200c0a0df39d4a (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Mon, 15 Mar 2021 06:40:59 GMT Sender: cang=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id E911BC4346D; Mon, 15 Mar 2021 06:40:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: cang) by smtp.codeaurora.org (Postfix) with ESMTPSA id 6FF3EC43467; Mon, 15 Mar 2021 06:40:56 +0000 (UTC) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Mon, 15 Mar 2021 14:40:56 +0800 From: Can Guo To: Avri Altman Cc: "James E . J . Bottomley" , "Martin K . Petersen" , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, Bart Van Assche , yongmyung lee , Daejun Park , alim.akhtar@samsung.com, asutoshd@codeaurora.org, Zang Leigang , Avi Shchislowski , Bean Huo , stanley.chu@mediatek.com Subject: Re: [PATCH v5 06/10] scsi: ufshpb: Add hpb dev reset response In-Reply-To: <9d9237bc77332bd1f9ff17aaf98718a8@codeaurora.org> References: <20210302132503.224670-1-avri.altman@wdc.com> <20210302132503.224670-7-avri.altman@wdc.com> <9d9237bc77332bd1f9ff17aaf98718a8@codeaurora.org> Message-ID: <8b4e8dc1fd91f52a191d681b7096ef48@codeaurora.org> X-Sender: cang@codeaurora.org User-Agent: Roundcube Webmail/1.3.9 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021-03-15 09:34, Can Guo wrote: > On 2021-03-02 21:24, Avri Altman wrote: >> 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 >> --- >> drivers/scsi/ufs/ufshpb.c | 47 >> ++++++++++++++++++++++++++++++++++++--- >> drivers/scsi/ufs/ufshpb.h | 2 ++ >> 2 files changed, 46 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c >> index 0744feb4d484..0034fa03fdc6 100644 >> --- a/drivers/scsi/ufs/ufshpb.c >> +++ b/drivers/scsi/ufs/ufshpb.c >> @@ -642,7 +642,8 @@ int ufshpb_prep(struct ufs_hba *hba, struct >> ufshcd_lrb *lrbp) >> if (rgn->reads == ACTIVATION_THRESHOLD) >> activate = true; >> spin_unlock_irqrestore(&rgn->rgn_lock, flags); >> - 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); >> hpb->stats.rb_active_cnt++; >> @@ -1480,6 +1481,20 @@ 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; > bool need_reset = false; >> + >> + __shost_for_each_device(sdev, hba->host) { >> + struct ufshpb_lu *h = sdev->hostdata; >> + >> + if (!h) >> + continue; >> + >> + need_reset = true; >> + } > > if (need_reset) > schedule_work(&hpb->ufshpb_lun_reset_work); > > At last, scheduling only one reset work shall be enough, otherwise > multiple > reset work can be flying in parallel, so maybe above changes? Forget about this one, I misunderstood it - reset work is for each ufshpb_lu... Regards, Can Guo. > >> + } >> + >> break; >> default: >> dev_notice(&hpb->sdev_ufs_lu->sdev_dev, >> @@ -1594,6 +1609,25 @@ static void >> ufshpb_run_inactive_region_list(struct ufshpb_lu *hpb) >> spin_unlock_irqrestore(&hpb->rsp_list_lock, flags); >> } >> >> +static void ufshpb_reset_work_handler(struct work_struct *work) >> +{ >> + struct ufshpb_lu *hpb; > > struct ufshpb_lu *hpb = container_of(work, struct ufshpb_lu, > ufshpb_lun_reset_work); > >> + struct victim_select_info *lru_info; > > struct victim_select_info *lru_info = &hpb->lru_info; > > This can save some lines. > > Thanks, > Can Guo. > >> + 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); >> +} >> + >> static void ufshpb_normalization_work_handler(struct work_struct >> *work) >> { >> struct ufshpb_lu *hpb; >> @@ -1798,6 +1832,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; >> @@ -2012,9 +2048,12 @@ static int ufshpb_lu_hpb_init(struct ufs_hba >> *hba, struct ufshpb_lu *hpb) >> INIT_LIST_HEAD(&hpb->list_hpb_lu); >> >> INIT_WORK(&hpb->map_work, ufshpb_map_work_handler); >> - if (hpb->is_hcm) >> + if (hpb->is_hcm) { >> INIT_WORK(&hpb->ufshpb_normalization_work, >> ufshpb_normalization_work_handler); >> + INIT_WORK(&hpb->ufshpb_lun_reset_work, >> + ufshpb_reset_work_handler); >> + } >> >> hpb->map_req_cache = kmem_cache_create("ufshpb_req_cache", >> sizeof(struct ufshpb_req), 0, 0, NULL); >> @@ -2114,8 +2153,10 @@ static void ufshpb_discard_rsp_lists(struct >> ufshpb_lu *hpb) >> >> static void ufshpb_cancel_jobs(struct ufshpb_lu *hpb) >> { >> - if (hpb->is_hcm) >> + if (hpb->is_hcm) { >> + cancel_work_sync(&hpb->ufshpb_lun_reset_work); >> 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 84598a317897..37c1b0ea0c0a 100644 >> --- a/drivers/scsi/ufs/ufshpb.h >> +++ b/drivers/scsi/ufs/ufshpb.h >> @@ -121,6 +121,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; >> @@ -217,6 +218,7 @@ struct ufshpb_lu { >> /* for selecting victim */ >> struct victim_select_info lru_info; >> struct work_struct ufshpb_normalization_work; >> + struct work_struct ufshpb_lun_reset_work; >> >> /* pinned region information */ >> u32 lu_pinned_start;