[PATCH] powerpc/pseries: Fix dtl_access_lock to be a rw_semaphore

Michael Ellerman patch-notifications at ellerman.id.au
Thu Nov 7 19:42:26 AEDT 2024


On Mon, 19 Aug 2024 22:24:01 +1000, Michael Ellerman wrote:
> The dtl_access_lock needs to be a rw_sempahore, a sleeping lock, because
> the code calls kmalloc() while holding it, which can sleep:
> 
>   # echo 1 > /proc/powerpc/vcpudispatch_stats
>   BUG: sleeping function called from invalid context at include/linux/sched/mm.h:337
>   in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 199, name: sh
>   preempt_count: 1, expected: 0
>   3 locks held by sh/199:
>    #0: c00000000a0743f8 (sb_writers#3){.+.+}-{0:0}, at: vfs_write+0x324/0x438
>    #1: c0000000028c7058 (dtl_enable_mutex){+.+.}-{3:3}, at: vcpudispatch_stats_write+0xd4/0x5f4
>    #2: c0000000028c70b8 (dtl_access_lock){+.+.}-{2:2}, at: vcpudispatch_stats_write+0x220/0x5f4
>   CPU: 0 PID: 199 Comm: sh Not tainted 6.10.0-rc4 #152
>   Hardware name: IBM pSeries (emulated by qemu) POWER9 (raw) 0x4e1202 0xf000005 of:SLOF,HEAD hv:linux,kvm pSeries
>   Call Trace:
>     dump_stack_lvl+0x130/0x148 (unreliable)
>     __might_resched+0x174/0x410
>     kmem_cache_alloc_noprof+0x340/0x3d0
>     alloc_dtl_buffers+0x124/0x1ac
>     vcpudispatch_stats_write+0x2a8/0x5f4
>     proc_reg_write+0xf4/0x150
>     vfs_write+0xfc/0x438
>     ksys_write+0x88/0x148
>     system_call_exception+0x1c4/0x5a0
>     system_call_common+0xf4/0x258
> 
> [...]

Applied to powerpc/next.

[1/1] powerpc/pseries: Fix dtl_access_lock to be a rw_semaphore
      https://git.kernel.org/powerpc/c/cadae3a45d23aa4f6485938a67cbc47aaaa25e38

cheers


More information about the Linuxppc-dev mailing list