Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp5900273ybf; Thu, 5 Mar 2020 09:08:31 -0800 (PST) X-Google-Smtp-Source: ADFU+vvCK4L6tyjU8iXgIKZ+oovBcSCKNouOvPdC61G2p2Wvt9w4OTyVzq/4DKxcrQaRUVk7Lyry X-Received: by 2002:aca:be09:: with SMTP id o9mr6277oif.177.1583428111080; Thu, 05 Mar 2020 09:08:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583428111; cv=none; d=google.com; s=arc-20160816; b=KXrmZRjfyOil4HHcZGAsnhPHbvUM+pXwhUgnS9hWqV86vdFR/FapbXwCDIlcorbkhF 2q9GIQ8wFmNQxF2U357VqQVWXszU/Co/yap4t2UsK1gUg+JHmalclmh5hN2iqePlazRG FuHzbY/wshOgiXEzr3N31X8iRXBaXQ2N1EO3QlaJlQ7d1SaDerxHFT0VWMwKRiehRVO9 yE06nXvz8lMsqqhktAqmABH+aE1pffqoj2luys17zKIqh+h5OdolWs8Kr7YEx74Z0X9W IFuuCemFVGrp1nHdaX56p1tFdkYo7UlNbt4x7kcgMjxAnvkABON34tqJslWHk4l3kHn8 RtPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature; bh=4jKVb0RH11oa+FT4XfeYYMCV12ybOqDO5l6dlM8M5qA=; b=FSvYhJZppG02gd3cDCu2C7LtLChMdUX9go3cE/mLRxlCatYUWdbqqtXJ6i/ET2Ajs9 C1GvrmqRNgU+ZFwsn7Twuj1+1x/sG/MPRSztf7YGQahipDr7vIMnoBY+vLNIM+rcwh22 vVhvPe9IUrE05Quwq03w10nTwDb55R7tlsR/3hC3AjwtztXQJ5lQK3P6Y72yuqIwn70V gz59pxCoZb3uJYTtIxhHnX5nc39em5eemlDsCO6s2ccAuSxjIuSaVdoqpKqjZDhBvNT0 8T7Riq84vuNycMkkWXT7r1mv3oVs9SF0EUeihxbuDfqVHO8SNMYh95LMlvMTUX0l0N84 r02g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=f7BQEB8M; 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 l23si2193065ots.79.2020.03.05.09.08.18; Thu, 05 Mar 2020 09:08:31 -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=fail header.i=@mg.codeaurora.org header.s=smtp header.b=f7BQEB8M; 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 S1726233AbgCERHk (ORCPT + 99 others); Thu, 5 Mar 2020 12:07:40 -0500 Received: from mail27.static.mailgun.info ([104.130.122.27]:33803 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726007AbgCERHj (ORCPT ); Thu, 5 Mar 2020 12:07:39 -0500 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1583428058; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=4jKVb0RH11oa+FT4XfeYYMCV12ybOqDO5l6dlM8M5qA=; b=f7BQEB8M2pdPZpH41iTVOcmb84C9+D+ELJ26KznYjLz4MaIgIrV1D3QUhO7OB9F4K1c3Ojn4 8Y2zSMb79mPjEvfy22XhcIMLZ4NyKVTFKoP4qdXiiz8Vu9suxiugDwRm+jrhRbQQB2fmkrwr Mu1gsbLJ+9rwdHOdfSsjpARqXsc= X-Mailgun-Sending-Ip: 104.130.122.27 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 mxa.mailgun.org with ESMTP id 5e6131cb.7f1510ac2030-smtp-out-n03; Thu, 05 Mar 2020 17:07:23 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 0C44DC433A2; Thu, 5 Mar 2020 17:07:23 +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=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mkshah-linux.qualcomm.com (blr-c-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mkshah) by smtp.codeaurora.org (Postfix) with ESMTPSA id C97BFC447A3; Thu, 5 Mar 2020 17:07:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org C97BFC447A3 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=mkshah@codeaurora.org From: Maulik Shah To: swboyd@chromium.org, mka@chromium.org, evgreen@chromium.org, bjorn.andersson@linaro.org Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, agross@kernel.org, dianders@chromium.org, rnayak@codeaurora.org, ilina@codeaurora.org, lsrao@codeaurora.org, Maulik Shah Subject: [PATCH v12 2/4] soc: qcom: rpmh: Update dirty flag only when data changes Date: Thu, 5 Mar 2020 22:37:01 +0530 Message-Id: <1583428023-19559-3-git-send-email-mkshah@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1583428023-19559-1-git-send-email-mkshah@codeaurora.org> References: <1583428023-19559-1-git-send-email-mkshah@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently rpmh ctrlr dirty flag is set for all cases regardless of data is really changed or not. Add changes to update dirty flag when data is changed to newer values. Update dirty flag everytime when data in batch cache is updated since rpmh_flush() may get invoked from any CPU instead of only last CPU going to low power mode. Also move dirty flag updates to happen from within cache_lock and remove unnecessary INIT_LIST_HEAD() call and a default case from switch. Fixes: 600513dfeef3 ("drivers: qcom: rpmh: cache sleep/wake state requests") Signed-off-by: Maulik Shah Reviewed-by: Srinivas Rao L Reviewed-by: Evan Green --- drivers/soc/qcom/rpmh.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/soc/qcom/rpmh.c b/drivers/soc/qcom/rpmh.c index eb0ded0..03630ae 100644 --- a/drivers/soc/qcom/rpmh.c +++ b/drivers/soc/qcom/rpmh.c @@ -119,6 +119,7 @@ static struct cache_req *cache_rpm_request(struct rpmh_ctrlr *ctrlr, { struct cache_req *req; unsigned long flags; + u32 old_sleep_val, old_wake_val; spin_lock_irqsave(&ctrlr->cache_lock, flags); req = __find_req(ctrlr, cmd->addr); @@ -133,26 +134,27 @@ static struct cache_req *cache_rpm_request(struct rpmh_ctrlr *ctrlr, req->addr = cmd->addr; req->sleep_val = req->wake_val = UINT_MAX; - INIT_LIST_HEAD(&req->list); list_add_tail(&req->list, &ctrlr->cache); existing: + old_sleep_val = req->sleep_val; + old_wake_val = req->wake_val; + switch (state) { case RPMH_ACTIVE_ONLY_STATE: - if (req->sleep_val != UINT_MAX) - req->wake_val = cmd->data; - break; case RPMH_WAKE_ONLY_STATE: req->wake_val = cmd->data; break; case RPMH_SLEEP_STATE: req->sleep_val = cmd->data; break; - default: - break; } - ctrlr->dirty = true; + ctrlr->dirty = (req->sleep_val != old_sleep_val || + req->wake_val != old_wake_val) && + req->sleep_val != UINT_MAX && + req->wake_val != UINT_MAX; + unlock: spin_unlock_irqrestore(&ctrlr->cache_lock, flags); @@ -287,6 +289,7 @@ static void cache_batch(struct rpmh_ctrlr *ctrlr, struct batch_cache_req *req) spin_lock_irqsave(&ctrlr->cache_lock, flags); list_add_tail(&req->list, &ctrlr->batch_cache); + ctrlr->dirty = true; spin_unlock_irqrestore(&ctrlr->cache_lock, flags); } @@ -323,6 +326,7 @@ static void invalidate_batch(struct rpmh_ctrlr *ctrlr) list_for_each_entry_safe(req, tmp, &ctrlr->batch_cache, list) kfree(req); INIT_LIST_HEAD(&ctrlr->batch_cache); + ctrlr->dirty = true; spin_unlock_irqrestore(&ctrlr->cache_lock, flags); } @@ -507,7 +511,6 @@ int rpmh_invalidate(const struct device *dev) int ret; invalidate_batch(ctrlr); - ctrlr->dirty = true; do { ret = rpmh_rsc_invalidate(ctrlr_to_drv(ctrlr)); -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation