From patchwork Mon Mar 7 15:30:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 12772000 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 157F1C433EF for ; Mon, 7 Mar 2022 15:31:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232666AbiCGPcK (ORCPT ); Mon, 7 Mar 2022 10:32:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239794AbiCGPcK (ORCPT ); Mon, 7 Mar 2022 10:32:10 -0500 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 101DF6D952 for ; Mon, 7 Mar 2022 07:31:15 -0800 (PST) Received: by mail-lf1-x132.google.com with SMTP id bt26so7099846lfb.3 for ; Mon, 07 Mar 2022 07:31:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mzzJB7/1+x4ObuDP7KlAr0feJZSWs8EfgXuS3ZrA+UU=; b=FAT+k8fSKkkIpdTQYB9n5xAT/EkrRJSNfGIsjAwHV31fWxC0KEcsmCDeoPBZ3aIpiJ nV1txfiKxtAXTatlaxy6GZ8IXWFWddNATTXIaRVdHolq+zXRbx80huoAmQQesNkKutLZ HC69+rP6SvwiRC6J2sfGg90XQx2wf9l8J9CYZvTe175P4bf3BigT+UFor5Q+ld1SRKRn zfMECn06pIJPfVsXJRTDkE7Wh3RrhYGT+vvU1oKtRAsRJ5IQckk1q/0y0VE9veC0vzNB 9PN2Oi1GT2zQNOPeTZj8YM12z+V9wgQfFu952JMc9E14RWel9brUjEH7ivLRcUN6pffR 0lJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mzzJB7/1+x4ObuDP7KlAr0feJZSWs8EfgXuS3ZrA+UU=; b=ZxWDMawD8T59m0pO1I1d92aknCRw3fC1u+rU0KOfEIrWaJwcyidqwg/4h+BJgKzLv4 HQutxfvuT0frSq9F8phEGlbXOHFjhAX49k4ldJzd5qWJeWjogOKLPa41c7jPbpLJvF7F C0Y0b+/ghjiLCnc3pqiZFRz+MCSBhuW1fissgEHsNNX+sPnC0sFzhKdh0ZZ6AcWsWK0s i+jCufOZ7qOF2My6fUd9z8EK6STLSQ5PNY/srJ+n3x5L6hQIOxOJUl9YXoy1hRU2eL+d 6F8cWxIBCxuFhr/JqY0Le3bEdMNlJ6WetyvpuLtgZzf8hQ/Vglpqu00uGmDr1v3XqLcF tKdw== X-Gm-Message-State: AOAM533K47IB5fr4bIrPVeQKRtCEFdK5oXetBZeIZ8rWFveO4plcPNQm 8oDUnvGVBA7Vl1fF36JPEbIZ4A== X-Google-Smtp-Source: ABdhPJw8INgNGbdwdQV26RzaBi+dJhni5zk737tPTT00wvy1/P1/5qXipe0v8ewhExpMvn7nQHsdow== X-Received: by 2002:a05:6512:2808:b0:43f:4baa:7e5f with SMTP id cf8-20020a056512280800b0043f4baa7e5fmr7666803lfb.498.1646667069636; Mon, 07 Mar 2022 07:31:09 -0800 (PST) Received: from eriador.lan ([2001:470:dd84:abc0::8a5]) by smtp.gmail.com with ESMTPSA id t1-20020a2e8e61000000b00247dd27e05bsm1662062ljk.100.2022.03.07.07.31.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Mar 2022 07:31:09 -0800 (PST) From: Dmitry Baryshkov To: Andy Gross , Bjorn Andersson , "Rafael J. Wysocki" , Viresh Kumar Cc: linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 1/4] cpufreq: qcom-hw: drop affinity hint before freeing the IRQ Date: Mon, 7 Mar 2022 18:30:47 +0300 Message-Id: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Drop affinity hint before freeing the throttling IRQ to fix the following trace: [ 185.114773] ------------[ cut here ]------------ [ 185.119517] WARNING: CPU: 7 PID: 43 at kernel/irq/manage.c:1887 free_irq+0x3a4/0x3dc [ 185.127474] Modules linked in: [ 185.130618] CPU: 7 PID: 43 Comm: cpuhp/7 Tainted: G S W 5.17.0-rc6-00386-g67382a5b705d-dirty #690 [ 185.147125] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 185.154269] pc : free_irq+0x3a4/0x3dc [ 185.158031] lr : free_irq+0x33c/0x3dc [ 185.161792] sp : ffff80000841bc90 [ 185.165195] x29: ffff80000841bc90 x28: ffffa6edc5c3d000 x27: ffff6d93729e5908 [ 185.172515] x26: 0000000000000000 x25: ffff6d910109fc00 x24: ffff6d91011490e0 [ 185.179838] x23: ffff6d9101149218 x22: 0000000000000080 x21: 0000000000000000 [ 185.187163] x20: ffff6d9101149000 x19: ffff6d910ab61500 x18: ffffffffffffffff [ 185.194487] x17: 2e35202020202020 x16: 2020202020202020 x15: ffff80008841b9a7 [ 185.201805] x14: 00000000000003c9 x13: 0000000000000001 x12: 0000000000000040 [ 185.209135] x11: ffff6d91005aab58 x10: ffff6d91005aab5a x9 : ffffc6a5ad1c5408 [ 185.216455] x8 : ffff6d91005adb88 x7 : 0000000000000000 x6 : ffffc6a5ab5a91f4 [ 185.223776] x5 : 0000000000000000 x4 : ffff6d91011490a8 x3 : ffffc6a5ad266108 [ 185.231098] x2 : 0000000013033204 x1 : ffff6d9101149000 x0 : ffff6d910a9cc000 [ 185.238421] Call trace: [ 185.240932] free_irq+0x3a4/0x3dc [ 185.244334] qcom_cpufreq_hw_cpu_exit+0x78/0xcc [ 185.248985] cpufreq_offline.isra.0+0x228/0x270 [ 185.253639] cpuhp_cpufreq_offline+0x10/0x20 [ 185.258027] cpuhp_invoke_callback+0x16c/0x2b0 [ 185.262592] cpuhp_thread_fun+0x190/0x250 [ 185.266710] smpboot_thread_fn+0x12c/0x230 [ 185.270914] kthread+0xfc/0x100 [ 185.274145] ret_from_fork+0x10/0x20 [ 185.277820] irq event stamp: 212 [ 185.281136] hardirqs last enabled at (211): [] _raw_spin_unlock_irqrestore+0x8c/0xa0 [ 185.290775] hardirqs last disabled at (212): [] __schedule+0x710/0xa10 [ 185.299081] softirqs last enabled at (0): [] copy_process+0x7d0/0x1a14 [ 185.307475] softirqs last disabled at (0): [<0000000000000000>] 0x0 Fixes: 275157b367f4 ("cpufreq: qcom-cpufreq-hw: Add dcvs interrupt support") Signed-off-by: Dmitry Baryshkov --- drivers/cpufreq/qcom-cpufreq-hw.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index effbb680b453..740518d8ae16 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -412,6 +412,7 @@ static void qcom_cpufreq_hw_lmh_exit(struct qcom_cpufreq_data *data) mutex_unlock(&data->throttle_lock); cancel_delayed_work_sync(&data->throttle_work); + irq_set_affinity_hint(data->throttle_irq, NULL); free_irq(data->throttle_irq, data); } From patchwork Mon Mar 7 15:30:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 12772001 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2E30C433EF for ; Mon, 7 Mar 2022 15:31:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243727AbiCGPcP (ORCPT ); Mon, 7 Mar 2022 10:32:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239794AbiCGPcO (ORCPT ); Mon, 7 Mar 2022 10:32:14 -0500 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BE1A75E40 for ; Mon, 7 Mar 2022 07:31:18 -0800 (PST) Received: by mail-lf1-x133.google.com with SMTP id w27so26876126lfa.5 for ; Mon, 07 Mar 2022 07:31:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UAufLERw8MkwvkTbq61o/HNe1XRsM+QcoRT3PGoZF2M=; b=to07ZqJ037ZLwa48faxkbnqXN2Ei8NpUD1tMAZk642lKhs2WjW9jiQL9+IwvLyjXtR vfYVz56gyZo8c+62nO3BUzMggbUedaFZegNjO1sk3iuha4Yr9QYoh9wHpimqHnFRGyLZ RCX0xA3kc8vUquOilTJ6lmTW1gBobX3N+K5wNPyWvrb/l3pnQt9VuqUXX3GtP4BoQPjv xJDErQVBAaPi8tz3kw2X580Bb4pCleBuFWgDQeCtLetnZHbqyvfUxFB2xhntnlRodwbc B4COrOncV+MXRK+AYrk1MxlgXqrnSSgdObCCoImuhwcLe27CcIi0ju60SbjMwO9nRTVL 2DtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UAufLERw8MkwvkTbq61o/HNe1XRsM+QcoRT3PGoZF2M=; b=AscGw5P/2z+ziyqHz1569AImxc/2peE8eoVMJkES7x2JZA/SC75ZT7jciqc9iYg4GG SkQhQS0Vi/Li/JBQnY9ZQGqNhM8Q43G6PaA+nopu05eSn/iAqr5IISmXMi3ZETgLYFZH UChRPMryZUOrDvnumoM5k6kep7CyuNcOX72UgRVvAmUBuF7AUCdXusF7FLRWjEKpFth6 X/YbkUVnkW/zOGTh/Nm4GvtemD0rbznTGCtOpzNxGZu/Kl1Hb0B1VcLjtxBLzRGQdekR KqaZXrBhg4E0VVVBU0ya22pvkMSeXVd52Ip2eAAx5SIouM1jEchmekXykdCYNej54qlI 6cWA== X-Gm-Message-State: AOAM5305xKr0/Q6mTtafpUlvAYX8V1FN2vydsISn1Moxqbs0sQf543gk dS6LoIEWmDt8Q1ar0SepyarRpQ== X-Google-Smtp-Source: ABdhPJx7/Z/mAoN+Dg4cUP20/VdI3YrwCOvEoAB4qqAimIDsX4w3BUeh0rgZmgOoQ2JZmfUhJ+MeBw== X-Received: by 2002:a05:6512:313a:b0:443:5f49:b6cf with SMTP id p26-20020a056512313a00b004435f49b6cfmr8222186lfd.472.1646667074207; Mon, 07 Mar 2022 07:31:14 -0800 (PST) Received: from eriador.lan ([2001:470:dd84:abc0::8a5]) by smtp.gmail.com with ESMTPSA id t1-20020a2e8e61000000b00247dd27e05bsm1662062ljk.100.2022.03.07.07.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Mar 2022 07:31:13 -0800 (PST) From: Dmitry Baryshkov To: Andy Gross , Bjorn Andersson , "Rafael J. Wysocki" , Viresh Kumar Cc: linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 2/4] cpufreq: qcom-hw: fix the race between LMH worker and cpuhp Date: Mon, 7 Mar 2022 18:30:48 +0300 Message-Id: <20220307153050.3392700-2-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> References: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org qcom_lmh_dcvs_poll() can be running when the cpu is being put offline. This results in the following warning. The driver would disable the worker, but it happens closer to the end of cpufreq_offline(). Change the locking in the qcom_lmh_dcvs_poll(), so that the worker can not run in parallel with cpufreq_offline() call. [ 37.122433] ------------[ cut here ]------------ [ 37.127225] WARNING: CPU: 0 PID: 187 at drivers/base/arch_topology.c:180 topology_update_thermal_pressure+0xec/0x100 [ 37.138098] Modules linked in: [ 37.141279] CPU: 0 PID: 187 Comm: kworker/0:3 Tainted: G S 5.17.0-rc6-00389-g37c83d0b8710-dirty #713 [ 37.158306] Workqueue: events qcom_lmh_dcvs_poll [ 37.163095] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 37.170278] pc : topology_update_thermal_pressure+0xec/0x100 [ 37.176131] lr : topology_update_thermal_pressure+0x20/0x100 [ 37.181977] sp : ffff800009b6bce0 [ 37.185402] x29: ffff800009b6bce0 x28: ffffd87abe92b000 x27: ffff04bd7292e205 [ 37.192792] x26: ffffd87abe930af8 x25: ffffd87abe94e4c8 x24: 0000000000000000 [ 37.200180] x23: ffff04bb01177018 x22: ffff04bb011770c0 x21: ffff04bb01177000 [ 37.207567] x20: ffff04bb0a419000 x19: 00000000000c4e00 x18: 0000000000000000 [ 37.214954] x17: 000000040044ffff x16: 004000b2b5503510 x15: 0000006aaa1326d2 [ 37.222333] x14: 0000000000000232 x13: 0000000000000001 x12: 0000000000000040 [ 37.229718] x11: ffff04bb00400000 x10: 968f57bd39f701c8 x9 : ffff04bb0acc8674 [ 37.237095] x8 : fefefefefefefeff x7 : 0000000000000018 x6 : ffffd87abd90092c [ 37.244478] x5 : 0000000000000016 x4 : 0000000000000000 x3 : 0000000000000100 [ 37.251852] x2 : ffff04bb0a419020 x1 : 0000000000000100 x0 : 0000000000000100 [ 37.259235] Call trace: [ 37.261771] topology_update_thermal_pressure+0xec/0x100 [ 37.267266] qcom_lmh_dcvs_poll+0xbc/0x154 [ 37.271505] process_one_work+0x288/0x69c [ 37.275654] worker_thread+0x74/0x470 [ 37.279450] kthread+0xfc/0x100 [ 37.282712] ret_from_fork+0x10/0x20 [ 37.286417] irq event stamp: 74 [ 37.289664] hardirqs last enabled at (73): [] _raw_spin_unlock_irq+0x44/0x80 [ 37.298632] hardirqs last disabled at (74): [] __schedule+0x710/0xa10 [ 37.306885] softirqs last enabled at (58): [] _stext+0x410/0x588 [ 37.314778] softirqs last disabled at (51): [] __irq_exit_rcu+0x158/0x174 [ 37.323386] ---[ end trace 0000000000000000 ]--- Fixes: 275157b367f4 ("cpufreq: qcom-cpufreq-hw: Add dcvs interrupt support") Signed-off-by: Dmitry Baryshkov --- drivers/cpufreq/qcom-cpufreq-hw.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index 740518d8ae16..920c80d91c21 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -283,6 +283,23 @@ static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data) struct dev_pm_opp *opp; unsigned int freq; + /* + * Synchronize against CPU going offline. + * cpufreq_offline() will get the write lock on policy->rwsem. + */ +retry: + if (unlikely(!down_read_trylock(&policy->rwsem))) { + mutex_lock(&data->throttle_lock); + if (data->cancel_throttle) { + mutex_unlock(&data->throttle_lock); + return; + } + + mutex_unlock(&data->throttle_lock); + + schedule(); + goto retry; + } /* * Get the h/w throttled frequency, normalize it using the * registered opp table and use it to calculate thermal pressure. @@ -301,9 +318,10 @@ static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data) /* * In the unlikely case policy is unregistered do not enable - * polling or h/w interrupt + * polling or h/w interrupt. + * If we are here, we have the policy->rwsem read lock, + * cancel_throttle can be toggled only with the write lock. */ - mutex_lock(&data->throttle_lock); if (data->cancel_throttle) goto out; @@ -318,7 +336,7 @@ static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data) msecs_to_jiffies(10)); out: - mutex_unlock(&data->throttle_lock); + up_read(&policy->rwsem); } static void qcom_lmh_dcvs_poll(struct work_struct *work) From patchwork Mon Mar 7 15:30:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 12772002 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B583C433EF for ; Mon, 7 Mar 2022 15:31:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243804AbiCGPcT (ORCPT ); Mon, 7 Mar 2022 10:32:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243738AbiCGPcS (ORCPT ); Mon, 7 Mar 2022 10:32:18 -0500 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2348F75E40 for ; Mon, 7 Mar 2022 07:31:23 -0800 (PST) Received: by mail-lj1-x22c.google.com with SMTP id 25so7383168ljv.10 for ; Mon, 07 Mar 2022 07:31:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tXNSIsYgkAheNlErzdFHvmWgPc2DM/Cp9hl+TSMT1Xs=; b=nylEV9v0x8WLWAOzFclGGx7zfLDyVoIfL+/Iwl0XNjHqp669FVrANzuSnzljc9Y9fn DRoVy+Q4+n2E+M8VK4TI4gJA9amRCVrPSQ2IXAeZj6veg07F8pYaLEcMU0ZW/dwQMAEx b0b7V8E5KvnLFGNUCgjoTABLD12bayq9Sks056wyaLDdC9IKSZGLoW2KI42+5BFcAytI CvgZ9f2U5LpoWohX3/L6E7BSv/9K405yWKdH0u+iwow015ewuKEtWGKODh/RvlVndhfT 6zbkwU2OzxycrgXvuMiwZtRNPwPq9V0pnL4uHUNmM8Eu0KCZQgbjDLnS5YLw5JIiRf7L ZzGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tXNSIsYgkAheNlErzdFHvmWgPc2DM/Cp9hl+TSMT1Xs=; b=0Rim1VKzFCrdroLyryYxPuAHkLBmPdQrE7LvUFMJ2mMWZhM2O+NIhnUgxYVObMg0hi 5ybgh16WKTJbiY0RCJIUn9uV/wgqqSx0HHx3UuaISusp8iDV+g8cxZMNal33MQh3l7I+ PKFLKFCi00Ca/0IWHQafynQXhEjEoiF/yK//bpFqzbKLiVtX0A+pYQxN8UwiYdyrVXyY gvfd6tQEhGdNUnhqjBE82gny4PQrt/frYZu05mRY1k1/I7M/xVZJ3kgwjV5/hKcyQq0Z ZzhmiqKivi/HWXQ4Ro3TofGsaUO6otsnq/XwTdpZza3wIDqXq5iTNXktIIVBe9LGEYjr dAWw== X-Gm-Message-State: AOAM531gKU7RUKF3bNyCI8CrD6mRP7O2W/MdjwmFdyhxKsim8X7YnT4k WSDXjssQVtRsm6JaZACbm9uHdUSp31nWPg== X-Google-Smtp-Source: ABdhPJz0DmTctGMQMr6peNG5GJLKJQ19Cz7RhXL7l8Id8aKSehn20FQbORsi9Y+rMT0/vZYaKWyWcw== X-Received: by 2002:a05:651c:386:b0:244:e2ab:87f9 with SMTP id e6-20020a05651c038600b00244e2ab87f9mr8135297ljp.201.1646667078901; Mon, 07 Mar 2022 07:31:18 -0800 (PST) Received: from eriador.lan ([2001:470:dd84:abc0::8a5]) by smtp.gmail.com with ESMTPSA id t1-20020a2e8e61000000b00247dd27e05bsm1662062ljk.100.2022.03.07.07.31.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Mar 2022 07:31:18 -0800 (PST) From: Dmitry Baryshkov To: Andy Gross , Bjorn Andersson , "Rafael J. Wysocki" , Viresh Kumar Cc: linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 3/4] cpufreq: qcom-hw: fix the opp entries refcounting Date: Mon, 7 Mar 2022 18:30:49 +0300 Message-Id: <20220307153050.3392700-3-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> References: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org The qcom_lmh_dcvs_notify() will get the dev_pm_opp instance for throttling, but will not put it, ending up with leaking a reference count and the following backtrace when putting the CPU offline. Correctly put the reference count of the returned opp instance. [ 84.418025] ------------[ cut here ]------------ [ 84.422770] WARNING: CPU: 7 PID: 43 at drivers/opp/core.c:1396 _opp_table_kref_release+0x188/0x190 [ 84.431966] Modules linked in: [ 84.435106] CPU: 7 PID: 43 Comm: cpuhp/7 Tainted: G S 5.17.0-rc6-00388-g7cf3c0d89c44-dirty #721 [ 84.451631] pstate: 82400005 (Nzcv daif +PAN -UAO +TCO -DIT -SSBS BTYPE=--) [ 84.458781] pc : _opp_table_kref_release+0x188/0x190 [ 84.463878] lr : _opp_table_kref_release+0x78/0x190 [ 84.468885] sp : ffff80000841bc70 [ 84.472294] x29: ffff80000841bc70 x28: ffff6664afe3d000 x27: ffff1db6729e5908 [ 84.479621] x26: 0000000000000000 x25: 0000000000000000 x24: ffff1db6729e58e0 [ 84.486946] x23: ffff8000080a5000 x22: ffff1db40aad80e0 x21: ffff1db4002fec80 [ 84.494277] x20: ffff1db40aad8000 x19: ffffb751c3186300 x18: ffffffffffffffff [ 84.501603] x17: 5300326563697665 x16: 645f676e696c6f6f x15: 00001186c1df5448 [ 84.508928] x14: 00000000000002e9 x13: 0000000000000000 x12: 0000000000000000 [ 84.516256] x11: ffffb751c3186368 x10: ffffb751c39a2a70 x9 : 0000000000000000 [ 84.523585] x8 : ffff1db4008edf00 x7 : ffffb751c328c000 x6 : 0000000000000001 [ 84.530916] x5 : 0000000000040000 x4 : 0000000000000001 x3 : ffff1db4008edf00 [ 84.538247] x2 : 0000000000000000 x1 : ffff1db400aa6100 x0 : ffff1db40aad80d0 [ 84.545579] Call trace: [ 84.548101] _opp_table_kref_release+0x188/0x190 [ 84.552842] dev_pm_opp_remove_all_dynamic+0x8c/0xc0 [ 84.557949] qcom_cpufreq_hw_cpu_exit+0x30/0xdc [ 84.562608] cpufreq_offline.isra.0+0x1b4/0x1d8 [ 84.567270] cpuhp_cpufreq_offline+0x10/0x6c [ 84.571663] cpuhp_invoke_callback+0x16c/0x2b0 [ 84.576231] cpuhp_thread_fun+0x190/0x250 [ 84.580353] smpboot_thread_fn+0x12c/0x230 [ 84.584568] kthread+0xfc/0x100 [ 84.587810] ret_from_fork+0x10/0x20 [ 84.591490] irq event stamp: 3482 [ 84.594901] hardirqs last enabled at (3481): [] call_rcu+0x39c/0x50c [ 84.603119] hardirqs last disabled at (3482): [] el1_dbg+0x24/0x8c [ 84.611074] softirqs last enabled at (310): [] _stext+0x410/0x588 [ 84.619028] softirqs last disabled at (305): [] __irq_exit_rcu+0x158/0x174 [ 84.627691] ---[ end trace 0000000000000000 ]--- Fixes: 275157b367f4 ("cpufreq: qcom-cpufreq-hw: Add dcvs interrupt support") Signed-off-by: Dmitry Baryshkov --- drivers/cpufreq/qcom-cpufreq-hw.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index 920c80d91c21..580520215ee7 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -309,12 +309,16 @@ static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data) opp = dev_pm_opp_find_freq_floor(dev, &freq_hz); if (IS_ERR(opp) && PTR_ERR(opp) == -ERANGE) - dev_pm_opp_find_freq_ceil(dev, &freq_hz); + opp = dev_pm_opp_find_freq_ceil(dev, &freq_hz); - throttled_freq = freq_hz / HZ_PER_KHZ; + if (IS_ERR(opp)) { + dev_warn(dev, "Can't find the OPP for throttling: %pe!\n", opp); + } else { + /* Update thermal pressure (the boost frequencies are accepted) */ + arch_update_thermal_pressure(policy->related_cpus, throttled_freq); - /* Update thermal pressure (the boost frequencies are accepted) */ - arch_update_thermal_pressure(policy->related_cpus, throttled_freq); + dev_pm_opp_put(opp); + } /* * In the unlikely case policy is unregistered do not enable From patchwork Mon Mar 7 15:30:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 12772003 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D5E2C433F5 for ; Mon, 7 Mar 2022 15:31:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243765AbiCGPcY (ORCPT ); Mon, 7 Mar 2022 10:32:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242647AbiCGPcW (ORCPT ); Mon, 7 Mar 2022 10:32:22 -0500 Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B034775E56 for ; Mon, 7 Mar 2022 07:31:27 -0800 (PST) Received: by mail-lj1-x22f.google.com with SMTP id s25so20992706lji.5 for ; Mon, 07 Mar 2022 07:31:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9ZOpZdLyL3HZ2X9zNORxvj4ZQfp0+dq2bVSFb321NTA=; b=OrvCJhFG3x4dAvAx2h6LkJU17MzPZcML+fTYymOPz6Pmk6Fh3w8GIfyMMbQGuIZMwR yKRdXcAjHNXGuhIwc2tDqWD/pKm2VAugE2N3KMManZaKSWLVQ9E5N/W0LXRdvQmlFfiX 4sHevO1VCwMCndKUEqZIP9iNrUOKE9pYbC0Hw6QwJ9QX4EWeXbXrhO+7fBFCHvdY7IO2 4rz0QbZaT3kcbLQiNfNgmfaF9D5xQxq4gZuW1DMwDjVAWHNOILE1xX6SY4ZYK5LH7/Gy BEr4rttzlKK4LoNdRbuSkp44NviL6hswQEfwgA3YHWCCgrbVzaS6bSqImQTZApj6QtTR 9PvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9ZOpZdLyL3HZ2X9zNORxvj4ZQfp0+dq2bVSFb321NTA=; b=FEmBYteAFR/bIj6Jea+FxeE4yTj0oCZL9ckzxSU27CBGifFNoo+lIvaq2mhSEU+Stg N6KDVk/ckHAHO2iWsou35KRhIOIIgInuaATbtoMQUU/6aqMQElDt6Ai8mjl2qoqtXve5 GVFa5PQw80iZXnEEEvcF7a+2XCjpSYpDxthBLOvoaAf/7Mp+CJy11ARRxigQP2il2byf 8t6cXUXZr8MLHxEfX4VLvRhUZbKjJ/24UhnahFC5lUafhU4rJHlDX6paqoDFGY0E3KQr ZQR5bU381E+7glJwipKpDbsGTcKMzW793pxOtdRgFpHmrsx8UPy5VNi7ldr9lpIQfxQF x8Hg== X-Gm-Message-State: AOAM5319CXx2vIuzs33XmPkRicpcyX/eu+liRS3XkJaffsNTmnaN6yJM zwdY+9f/cAz6h7Sj3PoxfwcIfg== X-Google-Smtp-Source: ABdhPJwu65zUpOQUplCwv4Rv0LDQD4DCoGGsu1HdhhPCADVl5sjoz4d6gXi9QTx5AbqEq70BjOJeWw== X-Received: by 2002:a05:651c:1503:b0:244:c075:2103 with SMTP id e3-20020a05651c150300b00244c0752103mr7818254ljf.442.1646667082904; Mon, 07 Mar 2022 07:31:22 -0800 (PST) Received: from eriador.lan ([2001:470:dd84:abc0::8a5]) by smtp.gmail.com with ESMTPSA id t1-20020a2e8e61000000b00247dd27e05bsm1662062ljk.100.2022.03.07.07.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Mar 2022 07:31:22 -0800 (PST) From: Dmitry Baryshkov To: Andy Gross , Bjorn Andersson , "Rafael J. Wysocki" , Viresh Kumar Cc: linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 4/4] cpufreq: qcom-hw: provide online/offline operations Date: Mon, 7 Mar 2022 18:30:50 +0300 Message-Id: <20220307153050.3392700-4-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> References: <20220307153050.3392700-1-dmitry.baryshkov@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Provide lightweight online and offline operations. This saves us from parsing and tearing down the OPP tables each time the CPU is put online or offline. Signed-off-by: Dmitry Baryshkov --- drivers/cpufreq/qcom-cpufreq-hw.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index 580520215ee7..12b67f16b78f 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -424,10 +424,26 @@ static int qcom_cpufreq_hw_lmh_init(struct cpufreq_policy *policy, int index) return 0; } -static void qcom_cpufreq_hw_lmh_exit(struct qcom_cpufreq_data *data) +static int qcom_cpufreq_hw_cpu_online(struct cpufreq_policy *policy) { + struct qcom_cpufreq_data *data = policy->driver_data; + struct platform_device *pdev = cpufreq_get_driver_data(); + int ret; + + ret = irq_set_affinity_hint(data->throttle_irq, policy->cpus); + if (ret) + dev_err(&pdev->dev, "Failed to set CPU affinity of %s[%d]\n", + data->irq_name, data->throttle_irq); + + return ret; +} + +static int qcom_cpufreq_hw_cpu_offline(struct cpufreq_policy *policy) +{ + struct qcom_cpufreq_data *data = policy->driver_data; + if (data->throttle_irq <= 0) - return; + return 0; mutex_lock(&data->throttle_lock); data->cancel_throttle = true; @@ -435,6 +451,12 @@ static void qcom_cpufreq_hw_lmh_exit(struct qcom_cpufreq_data *data) cancel_delayed_work_sync(&data->throttle_work); irq_set_affinity_hint(data->throttle_irq, NULL); + + return 0; +} + +static void qcom_cpufreq_hw_lmh_exit(struct qcom_cpufreq_data *data) +{ free_irq(data->throttle_irq, data); } @@ -588,6 +610,8 @@ static struct cpufreq_driver cpufreq_qcom_hw_driver = { .get = qcom_cpufreq_hw_get, .init = qcom_cpufreq_hw_cpu_init, .exit = qcom_cpufreq_hw_cpu_exit, + .online = qcom_cpufreq_hw_cpu_online, + .offline = qcom_cpufreq_hw_cpu_offline, .register_em = cpufreq_register_em_with_opp, .fast_switch = qcom_cpufreq_hw_fast_switch, .name = "qcom-cpufreq-hw",