From: Jishnu Prakash <jishnu.prakash@oss.qualcomm.com>
To: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Amit Kucheria <amitk@kernel.org>,
Thara Gopinath <thara.gopinath@gmail.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Daniel Lezcano <daniel.lezcano@kernel.org>,
Zhang Rui <rui.zhang@intel.com>,
Lukasz Luba <lukasz.luba@arm.com>,
linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org, kamal.wadhwa@oss.qualcomm.com,
Pankaj Patil <pankaj.patil@oss.qualcomm.com>
Subject: Re: [PATCH] thermal: qcom-spmi-adc-tm5-gen3: move hardirq actions into threaded handler
Date: Thu, 12 Nov 2026 13:54:13 +0530 [thread overview]
Message-ID: <5c879271-6e88-4683-a280-eef292c442ba@oss.qualcomm.com> (raw)
In-Reply-To: <avR6cHb6ZUsDzIV2@ashevche-desk.local>
Hi Andy,
On 11/11/2026 7:53 PM, Andy Shevchenko wrote:
> On Wed, Nov 11, 2026 at 02:12:01PM +0530, Jishnu Prakash wrote:
>> adc_tm5_probe() registers the ADC_TM interrupt with both a primary
>> handler and thread function (adctm5_gen3_isr/adctm5_gen3_isr_thread)
>> with IRQF_ONESHOT. The primary handler calls adc5_gen3_read(), which
>> takes the SPMI regmap's lock (a regular, non-raw spinlock) from hardirq
>> context. With CONFIG_PROVE_LOCKING enabled, this leads to a warning
>> about an attempt to take a lock in an invalid wait context:
>>
>> swapper/0/0 is trying to lock:
>> ffff000b67201018
>> (qcom_spmi_pmic:259:(&spmi_regmap_config)->lock){....}-{3:3}, at:
>> regmap_lock_spinlock+0x20/0x40
>> other info that might help us debug this:
>> context-{2:2}
>> locks held by swapper/0/0: 0, last CPU#0
>> stack backtrace:
>>
>> CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 7.4.0-rc1 #1 PREEMPT(full)
>>
>> Call trace:
>
>> check_wait_context.isra.0+0x2d8/0x380
>> __lock_acquire+0x2ec/0x840
>> lock_acquire.part.0+0xe0/0x250
>> lock_acquire+0x8c/0x1e0
>
> Please, drop unneeded churn, since regmap_lock_spinlock() the rest is not needed.
> It's all documented in Submitting Patches, take your time to read and study that
> document.
Yes, I'll trim the call stack and drop the less relevant error lines.
>
>> _raw_spin_lock_irqsave+0x6c/0xd8
>> regmap_lock_spinlock+0x20/0x40
>> regmap_raw_read+0x88/0x328
>> regmap_bulk_read+0x10c/0x340
>> adc5_gen3_read+0x38/0x50 [qcom_spmi_adc5_gen3]
>> adctm5_gen3_isr+0x90/0x130 [qcom_spmi_adc_tm5_gen3]
>>
>> There is no requirement for any of the work done in the primary handler
>> to run in hardirq context. Drop the primary handler and move all the
>> actions in it to the threaded handler, which removes the invalid wait
>> context warning.
>
> ...
>
>> -static irqreturn_t adctm5_gen3_isr(int irq, void *dev_id)
>> +static irqreturn_t adctm5_gen3_isr_thread(int irq, void *dev_id)
>> {
>> struct adc_tm5_gen3_chip *adc_tm5 = dev_id;
>> - int ret, sdam_num;
>> + int sdam_index, ret;
>
> Was the variable rename so important for the fix? Can we defer it to the later
> cleanups, if ever needed?
>
>> u8 tm_status[2];
>> u8 status, val;
>
> ...
>
>> - struct adc_tm5_gen3_chip *adc_tm5 = dev_id;
>> - u8 tm_status[2];
>> - int sdam_index;
>
> Okay, I see the reason now why it's done, but I noticed no mention of this in
> the commit message. Also it's unclear which variable is used more often and
> what is the real semantics of its value. Is it number or index? With all this
> in mind, please at bare minimum elaborate in the commit message and, if it's
> actually a number, replace the other part instead.
In both adctm5_gen3_isr() and adctm5_gen3_isr_thread(), we needed a variable to
store the index of the SDAM whose IRQ was triggered. We called it 'sdam_num'
in adctm5_gen3_isr() and 'sdam_index' in adctm5_gen3_isr_thread(). In the rest
of the file, it is called 'sdam_index', so ideally that same name should have
been used in adctm5_gen3_isr() too, as it is more accurate than 'sdam_num'.
As I mentioned at the end of the commit message, I just meant to drop adctm5_gen3_isr()
and expand adctm5_gen3_isr_thread() to include the actions formerly done in
adctm5_gen3_isr(), but I see the diff makes it look more like I modified adctm5_gen3_isr()
into adctm5_gen3_isr_thread() with a variable rename, which is a bit misleading.
I can add a line in the commit message to emphasize that 'sdam_num' is the same as
'sdam_index' if you think it helps.
Thanks,
JIshnu
>
prev parent reply other threads:[~2026-11-12 8:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 8:42 Jishnu Prakash
2026-11-11 14:23 ` Andy Shevchenko
2026-11-12 8:24 ` Jishnu Prakash [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5c879271-6e88-4683-a280-eef292c442ba@oss.qualcomm.com \
--to=jishnu.prakash@oss.qualcomm.com \
--cc=amitk@kernel.org \
--cc=andriy.shevchenko@intel.com \
--cc=daniel.lezcano@kernel.org \
--cc=kamal.wadhwa@oss.qualcomm.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=pankaj.patil@oss.qualcomm.com \
--cc=rafael@kernel.org \
--cc=rui.zhang@intel.com \
--cc=thara.gopinath@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®