Re: Can printk() sleep at runtime?

From: Steven Rostedt
Date: Thu May 31 2018 - 17:13:17 EST


On Thu, 31 May 2018 18:42:48 +0200
Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote:

> Hi Stephen,
>
> On Thu, May 31, 2018 at 5:19 PM, Stephen Boyd <sboyd@xxxxxxxxxx> wrote:
> > Quoting Linus Torvalds (2018-05-31 07:32:10)
> >> On Thu, May 31, 2018 at 5:05 AM Petr Mladek <pmladek@xxxxxxxx> wrote:
> >> > Anyway, we need to fix or remove this format. vsprintf-like functions
> >> > are called in any context and nobody expect that they might sleep.
> >>
> >> Ack. I guess the argument is that "%pCr" is rare, and none of *those*
> >> users may care, but I do think that doing things wrong as-is.
> >>
> >> It's too subtle to have to know you're in a particular locking context
> >> when you use a particular %p modifier.
> >
> > Agreed. Removing the format seems to be the best approach. It looks like
> > only Geert has used it in the last few years and it hasn't been used
> > much otherwise.
>
> Indeed, just 3 users (the broadcom one isn't mine):
> drivers/clk/renesas/renesas-cpg-mssr.c
> drivers/thermal/broadcom/bcm2835_thermal.c
> drivers/tty/serial/sh-sci.c
>
> Alternatively, can we have a special version __clk_get_rate() that just
> returns clk->core->rate?
> Or would that be too inaccurate in the presence of CLK_GET_RATE_NOCACHE?
> The function could still return 0 in case the flag is set.

If it's only used in three locations, I think it would be better to
simply remove it from vsprintf() and have the three callers call
clk_get_rate() directly.

-- Steve