kernel-rt: mm/memcg: refill_obj_stock() is being called from IRQ context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sebastian et al,

I am reporting this here, at first, to confirm if there is an obvious solution
for the problem or if it is really a problem.

In short, refill_obj_stock() is being called from IRQ context and lockdep
is complaining about the local lock stock_lock probably not being enough to
protect the data.

The problem is 100% reproducible.

Kernel: v6.3.0-rt11

Reproducer:

    # stress-ng  --sched deadline  --sched-period 1000000000 --sched-runtime 500000000 --sched-deadline 1000000000 --cpu 1 -l 95 -t 120


[  387.365953] ================================
[  387.365954] WARNING: inconsistent lock state
[  387.365954] 6.3.0-rt11 #3 Not tainted
[  387.365956] --------------------------------
[  387.365956] inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
[  387.365957] swapper/7/0 [HC1[1]:SC0[0]:HE0:SE1] takes:
[  387.365958] ffff934e8fdb0338 ((stock_lock)){?.+.}-{2:2}, at: refill_obj_stock+0x3d/0x2d0
[  387.365965] {HARDIRQ-ON-W} state was registered at:
[  387.365965]   __lock_acquire+0x2fa/0xe70
[  387.365968]   lock_acquire+0xca/0x2f0
[  387.365969]   rt_spin_lock+0x27/0xd0
[  387.365971]   obj_cgroup_charge+0x3c/0x150
[  387.365973]   slab_pre_alloc_hook.constprop.0+0x119/0x320
[  387.365975]   kmem_cache_alloc_lru+0x4c/0x200
[  387.365976]   __d_alloc+0x29/0x250
[  387.365978]   d_alloc+0x1e/0xa0
[  387.365980]   __lookup_hash+0x53/0xa0
[  387.365982]   filename_create+0xb0/0x160
[  387.365983]   do_mkdirat+0x4b/0x160
[  387.365984]   __x64_sys_mkdir+0x48/0x70
[  387.365986]   do_syscall_64+0x59/0x90
[  387.365989]   entry_SYSCALL_64_after_hwframe+0x72/0xdc
[  387.365990] irq event stamp: 432988
[  387.365991] hardirqs last  enabled at (432987): [<ffffffffaa92b6eb>] cpuidle_enter_state+0xcb/0x340
[  387.365993] hardirqs last disabled at (432988): [<ffffffffaa92919b>] sysvec_apic_timer_interrupt+0xb/0xd0
[  387.365996] softirqs last  enabled at (0): [<ffffffffa9d13c1b>] copy_process+0x7cb/0x19b0
[  387.365999] softirqs last disabled at (0): [<0000000000000000>] 0x0
[  387.366001] 
               other info that might help us debug this:
[  387.366001]  Possible unsafe locking scenario:

[  387.366002]        CPU0
[  387.366002]        ----
[  387.366003]   lock((stock_lock));
[  387.366004]   <Interrupt>
[  387.366004]     lock((stock_lock));
[  387.366005] 
                *** DEADLOCK ***

[  387.366006] no locks held by swapper/7/0.
[  387.366007] 
               stack backtrace:
[  387.366007] CPU: 7 PID: 0 Comm: swapper/7 Kdump: loaded Not tainted 6.3.0-rt11 #3
[  387.366009] Hardware name: Dell Inc. PowerEdge R330/0H5N7P, BIOS 2.10.1 06/11/2020
[  387.366010] Call Trace:
[  387.366011]  <IRQ>
[  387.366012]  dump_stack_lvl+0x47/0x80
[  387.366015]  mark_lock_irq+0x3bb/0x5d0
[  387.366017]  ? stack_trace_save+0x4b/0x70
[  387.366021]  ? save_trace+0x55/0x180
[  387.366025]  mark_lock.part.0+0x1c0/0x3d0
[  387.366027]  mark_usage+0x129/0x150
[  387.366028]  __lock_acquire+0x2fa/0xe70
[  387.366032]  lock_acquire+0xca/0x2f0
[  387.366034]  ? refill_obj_stock+0x3d/0x2d0
[  387.366036]  ? lock_is_held_type+0xd7/0x130
[  387.366039]  ? __pfx_put_cred_rcu+0x10/0x10
[  387.366042]  rt_spin_lock+0x27/0xd0
[  387.366044]  ? refill_obj_stock+0x3d/0x2d0
[  387.366046]  refill_obj_stock+0x3d/0x2d0
[  387.366047]  ? __put_task_struct+0xe9/0x120
[  387.366050]  kmem_cache_free+0x150/0x3c0
[  387.366054]  __put_task_struct+0xe9/0x120
[  387.366056]  inactive_task_timer+0x1af/0x4c0
[  387.366060]  ? __pfx_inactive_task_timer+0x10/0x10
[  387.366063]  __hrtimer_run_queues+0x26b/0x3c0
[  387.366067]  hrtimer_interrupt+0x10a/0x240
[  387.366070]  __sysvec_apic_timer_interrupt+0x93/0x220
[  387.366073]  sysvec_apic_timer_interrupt+0x9d/0xd0
[  387.366075]  </IRQ>
[  387.366076]  <TASK>
[  387.366077]  asm_sysvec_apic_timer_interrupt+0x16/0x20
[  387.366078] RIP: 0010:cpuidle_enter_state+0xcf/0x340
[  387.366080] Code: ff 8b 73 04 bf ff ff ff ff 49 89 c6 e8 2a 37 cb ff 31 ff e8 63 83 45 ff 45 84 ff 0f 85 de 01 00 00 e8 65 46 57 ff fb 45 85 ed <0f> 88 15 01 00 00 49 63 cd 4c 89 f2 48 2b 14 24 48 8d 04 49 48 8d
[  387.366081] RSP: 0018:ffffa9178025be80 EFLAGS: 00000206
[  387.366083] RAX: 0000000000069b5b RBX: ffffc9177fd873d8 RCX: 000000000000001f
[  387.366084] RDX: 0000000000000000 RSI: ffffffffab23caed RDI: ffffffffab1d1d1e
[  387.366085] RBP: 0000000000000006 R08: 0000000000000001 R09: 0000000000000001
[  387.366086] R10: 0000000000000000 R11: 0000000000000000 R12: ffffffffabd7a8e0
[  387.366087] R13: 0000000000000006 R14: 0000005a30cf27dd R15: 0000000000000000
[  387.366093]  cpuidle_enter+0x29/0x40
[  387.366096]  cpuidle_idle_call+0x109/0x180
[  387.366099]  do_idle+0x91/0x100
[  387.366100]  cpu_startup_entry+0x19/0x20
[  387.366102]  start_secondary+0x112/0x130
[  387.366104]  secondary_startup_64_no_verify+0xe5/0xeb
[  387.366110]  </TASK>




[Index of Archives]     [Linux USB Development]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux