[PATCH 1/6] clk: Handle error pointers in clk_valid()
Samuel Holland
samuel at sholland.org
Sat Mar 4 20:54:12 CET 2023
On 2/20/23 13:42, Michal Suchánek wrote:
> On Mon, Feb 20, 2023 at 10:57:17AM -0500, Sean Anderson wrote:
>>
>> On 2/20/23 05:46, Michal Suchánek wrote:
>>> On Sun, Feb 19, 2023 at 11:59:34PM -0600, Samuel Holland wrote:
>>>> Some clk uclass functions, such as devm_clk_get() and clk_get_parent(),
>>>> return error pointers. clk_valid() should not consider these pointers
>>>> to be valid.
>>>>
>>>> Fixes: 8a1661f20e6c ("drivers: clk: Handle gracefully NULL pointers")
>>>> Signed-off-by: Samuel Holland <samuel at sholland.org>
>>>> ---
>>>>
>>>> include/clk.h | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/include/clk.h b/include/clk.h
>>>> index d91285235f7..4acb878ec6d 100644
>>>> --- a/include/clk.h
>>>> +++ b/include/clk.h
>>>> @@ -671,7 +671,7 @@ static inline bool clk_dev_binded(struct clk *clk)
>>>> */
>>>> static inline bool clk_valid(struct clk *clk)
>>>> {
>>>> - return clk && !!clk->dev;
>>>> + return clk && !IS_ERR(clk) && !!clk->dev;
>>>> }
>>>> int soc_clk_dump(void);
>>>
>>> Maybe it would be better to avoid the error pointers instead, there
>>> should not be that many places where they are returned.
>>
>> This not quite the right way to phrase this. Instead, I would ask: where
>> are places where the return value is not checked correctly? It's perfectly
>
> Pretty much everywhere where clk_get_parent is used outside of core code
> absolutely no error checking is done.
There are 105 uses of ERR_PTR in drivers/clk, mostly in CCF clock
registration functions. There is also devm_clk_get() with about 30
callers. Those mostly seem to have reasonable error checking; the error
pointer ends up as the driver probe function's return value via PTR_ERR.
>> fine to pass NULL or uninitialized clocks to other clock functions, but it's
>> not OK to ignore errors.
>
> Is there some documentation on what is the distinction, specifically?
>
> If there isn't it's meaningless and NULL can be returned on error
> simplifying the code, thinking about the code, debugging, pretty much
> everything.
What should I do for v2? Keep this patch? Convert clk_get_parent() to
return NULL instead of ERR_PTR, and hope nobody uses clk_valid() on the
pointer returned from devm_clk_get()?
Regards,
Samuel
More information about the U-Boot
mailing list