<div dir="ltr">The pnv_get_proc_freq() function was recently changed to call<br>cpufreq_get(), instead of cpufreq_quick_get(), in order to fetch<br>a more up-to-date value for the CPU frequency:<br><br>   cd77b5ce208c153260ed7882d8910f2395bfaabd<br>   powerpc/powernv/cpufreq: Fix the frequency read by /proc/cpuinfo<br><br>Unfortunately, this function is called from show_cpuinfo() in<br>arch/powerpc/kernel/setup-common.c with preemption disabled.  The<br>cpufreq_get() function might do a down_read(), which can sleep.<br><br>With CONFIG_DEBUG_KERNEL and CONFIG_DEBUG_ATOMIC_SLEEP set, a warning<br>like the following is generated when running 'cat /proc/cpuinfo':<br><br>    BUG: sleeping function called from invalid context at kernel/locking/rwsem.c:23<br>    in_atomic(): 1, irqs_disabled(): 0, pid: 16939, name: cat<br>    CPU: 33 PID: 16939 Comm: cat Tainted: G        W        4.15.0-smp-DEV #1<br>    Call Trace:<br>    [c000000fef07bab0] [c000000000a32c30] dump_stack+0xb0/0xf0 (unreliable)<br>    [c000000fef07baf0] [c0000000001343a8] ___might_sleep+0x178/0x1b0<br>    [c000000fef07bb70] [c000000000a50f58] down_read+0x38/0x90<br>    [c000000fef07bba0] [c0000000008287d0] cpufreq_get+0x50/0xc0<br>    [c000000fef07bbf0] [c000000000097a08] pnv_get_proc_freq+0x28/0x60<br>    [c000000fef07bc20] [c00000000002c554] show_cpuinfo+0x194/0x450<br>    [c000000fef07bcb0] [c00000000039c848] seq_read+0x1f8/0x590<br>    [c000000fef07bd40] [c00000000040d1d4] proc_reg_read+0xb4/0x180<br>    [c000000fef07bd90] [c00000000035d6a0] vfs_read+0x100/0x220<br>    [c000000fef07bde0] [c00000000035dc6c] SyS_read+0x6c/0x110<br>    [c000000fef07be30] [c00000000000b220] system_call+0x58/0x6c<br><div><br></div></div>