mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

> 


      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®