Re: Can printk() sleep at runtime?

From: Jia-Ju Bai
Date: Thu May 31 2018 - 21:00:19 EST




On 2018/6/1 5:13, Steven Rostedt wrote:
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.

Agreed.


Best wishes,
Jia-Ju Bai