Devicetree
 help / color / mirror / Atom feed
From: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: <alexandre.belloni@bootlin.com>, <robh@kernel.org>,
	<krzk+dt@kernel.org>, <conor+dt@kernel.org>,
	<jarkko.nikula@linux.intel.com>, <linux-i3c@lists.infradead.org>,
	<linux-arm-msm@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <andersson@kernel.org>,
	<konradybcio@kernel.org>
Subject: Re: [PATCH v3 2/3] i3c: master: Add Qualcomm I3C controller driver
Date: Wed, 9 Apr 2025 12:14:33 +0530	[thread overview]
Message-ID: <c4994d69-a8f6-40ca-96e6-6cd9ed2081ae@quicinc.com> (raw)
In-Reply-To: <7bbe235d-be3a-4851-b9db-c3c9e956a9fd@kernel.org>

Thanks Krzysztof !

On 4/9/2025 11:40 AM, Krzysztof Kozlowski wrote:
> On 09/04/2025 07:48, Mukesh Kumar Savaliya wrote:
>> Hi Krzysztof,
>>
>> On 4/9/2025 12:11 AM, Krzysztof Kozlowski wrote:
>>> On 08/04/2025 15:23, Mukesh Kumar Savaliya wrote:
>>>>>> +
>>>>>> +static int i3c_geni_runtime_get_mutex_lock(struct geni_i3c_dev *gi3c)
>>>>>> +{
>>>>>
>>>>> You miss sparse/lockdep annotations.
>>>>>
>>>> This is called in pair only, but to avoid repeated code in caller
>>>> functions, we have designed this wrapper.
>>>> i3c_geni_runtime_get_mutex_lock()
>>>> i3c_geni_runtime_put_mutex_unlock().
>>>>
>>>> caller function maintains the parity. e.g. geni_i3c_master_priv_xfers().
>>>>
>>>> Does a comment help here ? Then i can write up to add.
>>>
>>> I do not see how this is relevant to my comment at all.
>>>
>> What i understood is you suspect about lock/unlock imbalance right ?
>> I know that Lockdep annotations will be used to check if locks are
>> acquired and released in a proper order.
>>
>> You want me to add below code in both the functions mentioned ?
>>       lockdep_assert_held(&gi3c->lock);
>>
>> What exact sparse/attribute can be added ? I am not sure about that.
> 
> I don't think you tried enough.
> 
> git grep sparse -- Documentation/
> which gives you the file name, so:
> git grep lock -- Documentation/dev-tools/sparse.rst
> 
Thanks ! it seems little more deep to go for me. Appreciate your 
pointers here.
> Use sparse instead of lockdep.
> 
>>>>
>>>>>> +	int ret;
>>>>>> +
>>>>>> +	mutex_lock(&gi3c->lock);
>>>>>> +	reinit_completion(&gi3c->done);
>>>>>> +	ret = pm_runtime_get_sync(gi3c->se.dev);
>>>>>> +	if (ret < 0) {
>>>>>> +		dev_err(gi3c->se.dev, "error turning on SE resources:%d\n", ret);
>>>>>> +		pm_runtime_put_noidle(gi3c->se.dev);
>>>>>> +		/* Set device in suspended since resume failed */
>>>>>> +		pm_runtime_set_suspended(gi3c->se.dev);
>>>>>> +		mutex_unlock(&gi3c->lock);
>>>>>
>>>>> Either you lock or don't lock, don't mix these up.
>>>>>
>>>> Caller is taking care of not calling i3c_geni_runtime_put_mutex_unlock()
>>>> if this failed.
>>>
>>>
>>> I do not see how this is relevant to my comment at all.
>>>
>> same as above
> 
> 
>>>>>> +		return ret;
>>>>>> +	}
>>>>>> +
>>>>>> +	return 0;
>>>>>> +}
>>>>>> +
>>>>>> +static void i3c_geni_runtime_put_mutex_unlock(struct geni_i3c_dev *gi3c)
>>>>>> +{
>>>>>
>>>>> Missing annotations.
>>>>>
>>>> Shall i add a comment here ?
>>>
>>> Do you understand what is sparse? And lockdep?
>>>
>> Little but not clear on exact sparse attribute to be added. please help
>> me. if you can help with some clear comment and sample, will be easier
>> if you can.
> 
> You did not even bother to grep for simple term.
> 
No, mine was quick research, what i got is below from my search and i 
mentioned in crisp. What you pointed above 
Documentation/dev-tools/sparse.rst looks great.

===
Sparse and Lockdep are tools used in the Linux kernel development to 
help with code analysis and debugging.

Sparse
Sparse is a static code analyzer specifically designed for the Linux 
kernel. It helps developers find potential issues in their code by 
performing checks that are not typically done by the compiler. Sparse 
annotations are special comments or attributes added to the code to 
guide Sparse in its analysis. Some common Sparse annotations include:

__attribute__((noderef)): Indicates that a pointer should not be 
dereferenced.
__attribute__((address_space(x))): Specifies the address space of a pointer.
__attribute__((force)): Forces a type conversion that Sparse would 
normally warn about.
Lockdep
Lockdep is a runtime lock validator used in the Linux kernel to detect 
potential deadlocks. It records information about the order in which 
locks are acquired and checks for inconsistencies that could lead to 
deadlocks. Lockdep annotations are used to perform runtime checks on 
locking correctness. Some common Lockdep annotations include:

lockdep_assert_held(&lock): Asserts that a particular lock is held at a 
certain time and generates a warning if it is not.
lockdep_pin_lock(&lock): Prevents accidental unlocking of a lock.
These tools are crucial for maintaining the stability and reliability of 
the kernel by catching potential issues early in the development process.
===

> 
> Best regards,
> Krzysztof


  reply	other threads:[~2025-04-09  6:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-03 13:46 [PATCH v3 0/3] Add Qualcomm i3c controller driver support Mukesh Kumar Savaliya
2025-04-03 13:46 ` [PATCH v3 1/3] dt-bindings: i3c: Add support for Qualcomm I3C controller Mukesh Kumar Savaliya
2025-04-03 15:29   ` Rob Herring (Arm)
2025-04-03 17:39   ` Mukesh Kumar Savaliya
2025-04-04 10:26   ` Krzysztof Kozlowski
2025-04-08 13:22     ` Mukesh Kumar Savaliya
2025-04-03 13:46 ` [PATCH v3 2/3] i3c: master: Add Qualcomm I3C controller driver Mukesh Kumar Savaliya
2025-04-04 10:32   ` Krzysztof Kozlowski
2025-04-08 13:23     ` Mukesh Kumar Savaliya
2025-04-08 18:41       ` Krzysztof Kozlowski
2025-04-09  5:48         ` Mukesh Kumar Savaliya
2025-04-09  6:10           ` Krzysztof Kozlowski
2025-04-09  6:44             ` Mukesh Kumar Savaliya [this message]
2025-04-04 13:13   ` Frank Li
2025-04-08 13:24     ` Mukesh Kumar Savaliya
2025-04-03 13:46 ` [PATCH v3 3/3] MAINTAINERS: Add maintainer for Qualcomm's " Mukesh Kumar Savaliya

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=c4994d69-a8f6-40ca-96e6-6cd9ed2081ae@quicinc.com \
    --to=quic_msavaliy@quicinc.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=andersson@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jarkko.nikula@linux.intel.com \
    --cc=konradybcio@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=krzk@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-i3c@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh@kernel.org \
    /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