Received: by 2002:ac0:e350:0:0:0:0:0 with SMTP id g16csp2259712imn; Mon, 1 Aug 2022 17:52:37 -0700 (PDT) X-Google-Smtp-Source: AA6agR7DObRtf1yY62K4HcF3OnRZxIOh/jamlg18K5XkvQ8hNmAHd0hoGjj3W7YuLP2mBpQYd7zU X-Received: by 2002:a17:902:e0c9:b0:16d:bfe8:f7e0 with SMTP id e9-20020a170902e0c900b0016dbfe8f7e0mr19659504pla.131.1659401557075; Mon, 01 Aug 2022 17:52:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659401557; cv=none; d=google.com; s=arc-20160816; b=wpOfWb3M/nm6NtKYUnvhdyLp5cxFGCV3aZOSz84TvnxedxJNNODu0ZDwLMQenRR2gn NEghnCkY+Af8R+WxmWIQp4lL2IxMsqsMdnrUzr1QEdi/stndsYfEtwAdYSZJrFwuhlKP B26dNctiNWELMQ5WnGjUkylCnsGiNLOBKm4Y+3yS5/ubKg8vfAzlxWtbykSNIKOxPvwp n8mF1enTerPBffYmYqpTFyOqIPYADKXoAmCAuWMI5DKkOpMa9mDzV7H15SiC6tSBEky9 9ef//c9olu7SRtWiA3MJjYidol+0GopLiJsctBqhFwMZHnnfOlkEWpZLnf4ieL1Y4AJI okhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=P896A15ebEpZdNo5vHx5OEHcywwIEWdjK6w2RcDQzYQ=; b=si0lCrQsVd9okq1vSAUvBZkGSjdbVX6QYAzj8IvaVT8nBVtaIe/xGKI6di8irqmFIA 9/MM43WP+fFfrtnvTqA7Mi5VKH5zOkW7ue+KR5Y7dvDvU1eQYmnN00i29ouaLwyGzWEz J6UgYMhoo7palBjvBM2WPKcO9tLlJksUv9j+h4NcFDvVBxCc8K+7ZZwlN+ZyGWFIu2pG SwBcZKRhOV0QZH9m+xLDVGXAOVSAWq+re2I+Uirc/O1MRAltutoX1R/4vAu2gSMmJHdr It4BFNBb4LqqLsBBBB4c+c3HFoXDWT1yqNQQGFqD/snN7rZiUPmJmxafi/ugx4+Crflt 8EAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ktHCjpZb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jz21-20020a17090b14d500b001ca64c6f839si17099356pjb.15.2022.08.01.17.52.23; Mon, 01 Aug 2022 17:52:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ktHCjpZb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234949AbiHBAb3 (ORCPT + 99 others); Mon, 1 Aug 2022 20:31:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230203AbiHBAb1 (ORCPT ); Mon, 1 Aug 2022 20:31:27 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B9ACE29822; Mon, 1 Aug 2022 17:31:26 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id u1so9495270lfq.4; Mon, 01 Aug 2022 17:31:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=P896A15ebEpZdNo5vHx5OEHcywwIEWdjK6w2RcDQzYQ=; b=ktHCjpZb1Z2kJDU0u5GRsUdvWmKhZDoEFQglUL5YDs0RgWXLUpkCfU5c2oJk8hVU8L PvaN8QUdTiHPmL+VZ6duW2eOJ4Kt094QfG3L5QkSzO+/CTx9JuWJhwS4SLXIYlEXq6ZA if1yzvHY79LaXpeQFej7d+KILUayCixXFqpmJ9ymbt7BYHTWR9Jwo2CIGmBlbjABXCcH nDbgwDCjb3wbPral3S6n5A4oGkccO9dcJ2pya29O58tY6xEZP1OIHbpDahtsvxiOn86O g2HJE6kfJh909goeO91eWtgY9LW4lWLzKaeeRtbExno1jtgrPNmqc8ZrzhJ6xECyXdhZ nT8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=P896A15ebEpZdNo5vHx5OEHcywwIEWdjK6w2RcDQzYQ=; b=CsvGa0ASIVZ/wTDY0/KPYVQMGMH9Yjxxit5MR+0cqL2S4WE3S2zIvh0FKnsbzkuBBt b1Jhdv6ZvL6Eh2Q2g3ruyJOjV3SzvzzKJlaDyJdHjB0bzK9Nz2P+2bfmsyVk2SuOJjUv SAqITXRgDwtGDTi2GmlY2ZpniPZL2VYbQsNTWNncEfbUyL6nNmuBpBGgnzeOH/yJ4UsI FJUTQqLtNj76C0v6o3FIPIdWzsBBjCA8r/5AGoFd4M7V7jcrXM73ydsBylt5AsFY8I+Y dkC6HVlZwDAkvfHf6LF9zpCT4xyLRPC8WZXtfqs6c5jRwNYmIbvKTcyhMl9qZBD/PR69 DK6g== X-Gm-Message-State: ACgBeo3OxaApNky4P+pwZ70hyTlLKcwglFyYZHklcOte4jqWMF34KQBG +Gt4TGFhNhQPzFq/NTvrx5MaqpgVtOmOHpdovg== X-Received: by 2002:a05:6512:3dac:b0:48b:694:bb35 with SMTP id k44-20020a0565123dac00b0048b0694bb35mr1059764lfv.215.1659400284735; Mon, 01 Aug 2022 17:31:24 -0700 (PDT) MIME-Version: 1.0 References: <20220729075519.4665-1-stanley.chu@mediatek.com> <7e8c58cf-64c1-8426-bf22-97d3df85ed38@acm.org> In-Reply-To: From: Stanley Chu Date: Tue, 2 Aug 2022 08:31:12 +0800 Message-ID: Subject: Re: [PATCH v1] scsi: ufs: Fix ufshcd_scale_clks decision in recovery flow To: Bart Van Assche Cc: Stanley Chu , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, "Martin K . Petersen" , Avri Altman , ALIM AKHTAR , "James E.J. Bottomley" , peter.wang@mediatek.com, Chun-Hung Wu , alice.chao@mediatek.com, powen.kao@mediatek.com, mason.zhang@mediatek.com, qilin.tan@mediatek.com, lin.gui@mediatek.com, eddie.huang@mediatek.com, tun-yu.yu@mediatek.com, cc.chou@mediatek.com, chaotian.jing@mediatek.com, jiajie.hao@mediatek.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Bart, On Tue, Aug 2, 2022 at 1:34 AM Bart Van Assche wrote: > > On 7/30/22 00:08, Stanley Chu wrote: > > Hi Bart, > > > > On Sat, Jul 30, 2022 at 4:12 AM Bart Van Assche wrote: > >> > >> On 7/29/22 00:55, Stanley Chu wrote: > >>> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > >>> index 581d88af07ab..dc57a7988023 100644 > >>> --- a/drivers/ufs/core/ufshcd.c > >>> +++ b/drivers/ufs/core/ufshcd.c > >>> @@ -1574,8 +1574,6 @@ static ssize_t ufshcd_clkscale_enable_store(struct device *dev, > >>> ufshcd_rpm_get_sync(hba); > >>> ufshcd_hold(hba, false); > >>> > >>> - hba->clk_scaling.is_enabled = value; > >>> - > >>> if (value) { > >>> ufshcd_resume_clkscaling(hba); > >>> } else { > >>> @@ -1586,6 +1584,8 @@ static ssize_t ufshcd_clkscale_enable_store(struct device *dev, > >>> __func__, err); > >>> } > >>> > >>> + hba->clk_scaling.is_enabled = value; > >>> + > >>> ufshcd_release(hba); > >>> ufshcd_rpm_put_sync(hba); > >>> out: > >>> @@ -7259,7 +7259,8 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba) > >>> hba->silence_err_logs = false; > >>> > >>> /* scale up clocks to max frequency before full reinitialization */ > >>> - ufshcd_scale_clks(hba, true); > >>> + if (ufshcd_is_clkscaling_supported(hba) && hba->clk_scaling.is_enabled) > >>> + ufshcd_scale_clks(hba, true); > >>> > >>> err = ufshcd_hba_enable(hba); > >> > >> I see a race condition between the hba->clk_scaling.is_enabled check in > >> ufshcd_host_reset_and_restore() and the code that sets > >> ufshcd_clkscale_enable_store(). Shouldn't the code in > >> ufshcd_host_reset_and_restore() that scales up the clocks be serialized > >> against ufshcd_clkscale_enable_store()? > > > > Both check and set paths are serialized by hba->host_sem currently. > > > > Would I miss any other unserialized paths? > > Where in ufshcd_host_reset_and_restore() or in its callers is > hba->host_sem obtained? I don't see it. Am I perhaps overlooking something? It looks like that some callers do not obtain hba->host_sem. I will fix this in the next version. The direct callers of ufshcd_host_reset_and_restore() are, - ufshcd_link_recovery(), host_sem is obtained by its callers: ufshcd_err_handler() and ufshcd_wl_resume() - ufshcd_reset_and_restore(): the same as above - __ufshcd_wl_suspend(): host_sem is obtained by the caller ufshcd_wl_suspend() but not obtained by other callers. Thanks, Stanley