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: 12771996 X-Patchwork-Delegate: viresh.linux@gmail.com 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 E2A02C433F5 for ; Mon, 7 Mar 2022 15:31:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236452AbiCGPcJ (ORCPT ); Mon, 7 Mar 2022 10:32:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232666AbiCGPcJ (ORCPT ); Mon, 7 Mar 2022 10:32:09 -0500 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E2FDE69CF5 for ; Mon, 7 Mar 2022 07:31:13 -0800 (PST) Received: by mail-lf1-x136.google.com with SMTP id g39so26842319lfv.10 for ; Mon, 07 Mar 2022 07:31:13 -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=UoI3JibFyKwGXwavBxSvOemJ7f8r8uT9j8i4aGA0J13cV4t2OJ1JjvVEpmoRQ/gs4U jO47OY+m8wvFwRQj8LylEbipEaOVVTdKqG14WlpHY8WJBQjcx67mbFwfLOb5XOl5A6Lr HnE+kAVjoZWcRes4udvC1MoFTaQ1E4sOQ9h2vCWj8BfYyoxVAU8lT+LeyiYF73LW10uQ wp1cG13MbSqBp0jibluqKW3V85+VcIhRxiLysf2xY35gep7VgZsLi2IqLJ1HuChOaAOo BAp2dSu2Ye6RcdTRid5TAsgeYJ9iCRlHZAnyb/tPyQslhl6sDxzLMNMU42QmBd4R1jBY n50A== X-Gm-Message-State: AOAM533XnxplqOHvXcBt57nT65W5GlSN8N43rS6z5dTxniQ1s0oNkHyM 5TvQW70sQ7c1udUwOmx0kR6QTaT7G+A6TA== 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-pm@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: 12771997 X-Patchwork-Delegate: viresh.linux@gmail.com 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 6089BC433F5 for ; Mon, 7 Mar 2022 15:31:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239794AbiCGPcP (ORCPT ); Mon, 7 Mar 2022 10:32:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242851AbiCGPcO (ORCPT ); Mon, 7 Mar 2022 10:32:14 -0500 Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DD3775E56 for ; Mon, 7 Mar 2022 07:31:18 -0800 (PST) Received: by mail-lf1-x12a.google.com with SMTP id h14so1862342lfk.11 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=aiaeFHjoYj5v+AhkC6g1xPOC0fhH9a7Ay5dxGxn6QwK4qyHVzoCks97UGvvS0XvF4I bNsZBsFd8GI1EHW+F7jCvxyheoZJpAvOmuFpac9yG16faiomxE6gW7dw9raaCOKjC/Mb 9/jWMnTsnG/I6goZMwfaYAvqYU85cwSs+4ab6jhHFL41TabwntHKsWBUSJNnWqhY0BQU lG+s1+aunIXEKNRtyfR08sMgUwEXOQ0PO8N5V2pAxooNAGi7u1KhoDB6rhw5j7w72Jvi uRJwgSFzgRiCw36kNBSgU4HoiU8Ar9F5dM5bLb08F1x2o7/mQUDT9sJ5fmu5f4tPhTad LaHQ== X-Gm-Message-State: AOAM533O738K9g2/fbVoFdSICqPx8JF0bC40TzacyXTeTHohLj0bnPG+ tYjnOluFjgYc1RMK1lHJLOsHrw== 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-pm@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: 12771998 X-Patchwork-Delegate: viresh.linux@gmail.com 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 60AA7C433F5 for ; Mon, 7 Mar 2022 15:31:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242851AbiCGPcT (ORCPT ); Mon, 7 Mar 2022 10:32:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243751AbiCGPcS (ORCPT ); Mon, 7 Mar 2022 10:32:18 -0500 Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2408975E56 for ; Mon, 7 Mar 2022 07:31:23 -0800 (PST) Received: by mail-lj1-x234.google.com with SMTP id v28so20965729ljv.9 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=M5amurvonw3fPEeibx0iUY+jI3GH+jDgEponUflwq1mDKexNCJNNrSkKMaSnSmX1jo RsEu5B3sSpg1668TGiTs5KfWltf2wa7czmVFBYqpppIuCyLb4hxRp9o5qfe53zsoWy6e u0ocAUKtb7rQPETA0iAbnXhCdNvcpb5prVsEXhoGTuxyAP/TDJGeZ4J3MDJiZXhXXJVs olYnEH+UYTUq6t9LLps/SKqqSOh1BLXr93O5QnrlOyBOHe1Rvz4Ks6ZYYLVzL1Kujj0x gdAca61vlr2YkEE1rKKIOuV1iiluSt42DM83zrXyynGTFHCTyxRGdTleZaoVvoH8llSm 1kGA== X-Gm-Message-State: AOAM532vlvUme8WCjdrxZyLaCX/C03Tx59i6J9R7U9mT47ic6HTvLK4x m+hBR8sAjkuN9/ppDcex/l/QWw== 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-pm@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: 12771999 X-Patchwork-Delegate: viresh.linux@gmail.com 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 0DEDEC433EF for ; Mon, 7 Mar 2022 15:31:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243738AbiCGPcY (ORCPT ); Mon, 7 Mar 2022 10:32:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243751AbiCGPcW (ORCPT ); Mon, 7 Mar 2022 10:32:22 -0500 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6A1475E40 for ; Mon, 7 Mar 2022 07:31:27 -0800 (PST) Received: by mail-lj1-x230.google.com with SMTP id u3so4487994ljd.0 for ; Mon, 07 Mar 2022 07:31:26 -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=ggkTd3hC8hxifF6RJFwdhQRSNXau8hqaj+Xo+ngHCzOv53/GPuEHIcVfi2WDnf2XMI /f7GuDVp5hvFkAH3RnGJQyScw/sYNRUas/Jh0urMeCjgn2mf4hWOMDOVF7zDt2tN9JlN qfYfqrHUMHW4/bpdAQn5+qjMDhHgtVONUoer6gMGVQwZg9Zb8khHXQYzJPSbwF0ZJJiu U4qCbXEq+HtEoGvaH7PiHp0GGZcmTH8QOcX4aK1uzQe2QTn1sMxgiNBWH2VtHwJCP2D2 xfqXhh7d5NTk95/fSysDRWnsbjg20Mq5X+VtntMr+U8dxYlbXXy8YqytUIgM6XrsT2jy +Dsw== X-Gm-Message-State: AOAM532WW+vSEMZ76M2LC3TE2rqti42EDP/6YsbSEzpc1GjMUVnUdLCB K/iiDBJswPomWB8ZThF7zJ4UXw== 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-pm@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",