tty lock dep

{3}[ 140.014102] ======================================================
{3}[ 140.021493] [ INFO: SOFTIRQ-READ-safe -> SOFTIRQ-READ-unsafe lock order detected ]
{3}[ 140.029575] 3.0.15 #0
{3}[ 140.031405] ------------------------------------------------------
{3}[ 140.037940] pppd/2978 [HC0[0]:SC0[4]:HE1:SE0] is trying to acquire:
{3}[ 140.044336] (&(&pch->downl)->rlock){+.....}, at: [<c025e2c4>] ppp_push+0x44/0xac
{3}[ 140.052058]
{3}[ 140.052062] and this task is already holding:
{3}[ 140.058394] (&(&ppp->wlock)->rlock){+.....}, at: [<c025f078>] ppp_xmit_process+0x1c/0xac
{3}[ 140.066814] which would create a new lock dependency:
{3}[ 140.072099] (&(&ppp->wlock)->rlock){+.....} -> (&(&pch->downl)->rlock){+.....}
{3}[ 140.079578]
{3}[ 140.079581] but this new dependency connects a SOFTIRQ-READ-irq-safe lock:
{3}[ 140.088502] (&pch->upl){++.-..}
{3}[ 140.091731] ... which became SOFTIRQ-READ-irq-safe at:
{3}[ 140.097357] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.102145] [<c00a9e38>] mark_irqflags+0x94/0x168
{3}[ 140.107338] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.112560] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.117578] [<c04f4840>] _raw_read_lock_bh+0x50/0x60
{3}[ 140.122889] [<c0260f30>] ppp_input+0x34/0x154
{3}[ 140.127736] [<c02622f8>] ppp_async_process+0x40/0x78
{3}[ 140.133047] [<c007fdac>] tasklet_action+0xb0/0x148
{3}[ 140.138252] [<c00802d8>] __do_softirq+0xa8/0x164
{3}[ 140.143289] [<c008045c>] run_ksoftirqd+0xc8/0x1d4
{3}[ 140.148411] [<c0095fd8>] kthread+0x98/0xa4
{3}[ 140.152922] [<c007de2c>] do_exit+0x0/0x2d0
{3}[ 140.157437]
{3}[ 140.157440] to a SOFTIRQ-READ-irq-unsafe lock:
{3}[ 140.163931] (&(&mx_tty[i].tty_spinlock)->rlock){+.+...}
{3}[ 140.169242] ... which became SOFTIRQ-READ-irq-unsafe at:
{3}[ 140.175041] ... [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.180092] [<c00a9eb4>] mark_irqflags+0x110/0x168
{3}[ 140.185372] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.190594] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.195612] [<c04f4124>] _raw_spin_lock+0x4c/0x5c
{3}[ 140.200663] [<c037b0c8>] mx_tty_open+0xa0/0x158
{3}[ 140.205610] [<c01fa8ec>] tty_open+0x238/0x384
{3}[ 140.210387] [<c00faa40>] chrdev_open+0x108/0x12c
{3}[ 140.215419] [<c00f5b14>] __dentry_open+0x120/0x218
{3}[ 140.220698] [<c00f5ce0>] nameidata_to_filp+0x5c/0x6c
{3}[ 140.226009] [<c0103e08>] do_last+0x464/0x4f0
{3}[ 140.230768] [<c0104d8c>] path_openat+0xc0/0x378
{3}[ 140.235644] [<c0105134>] do_filp_open+0x38/0x84
{3}[ 140.240662] [<c00f5900>] do_sys_open+0xe0/0x178
{3}[ 140.245538] [<c00f59d4>] sys_open+0x28/0x2c
{3}[ 140.250140] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.255348]
{3}[ 140.255350] other info that might help us debug this:
{3}[ 140.255355]
{3}[ 140.264185] Chain exists of:
{3}[ 140.264189] &pch->upl --> &(&ppp->wlock)->rlock --> &(&mx_tty[i].tty_spinlock)->rlock
{3}[ 140.275385]
{3}[ 140.277221] Possible interrupt unsafe locking scenario:
{3}[ 140.277226]
{3}[ 140.284516] CPU0 CPU1
{3}[ 140.289362] ---- ----
{3}[ 140.294061] lock(&(&mx_tty[i].tty_spinlock)->rlock);
{3}[ 140.299443] local_irq_disable();
{3}[ 140.305606] lock(&pch->upl);
{3}[ 140.311422] lock(&(&ppp->wlock)->rlock);
{3}[ 140.318278] <Interrupt>
{3}[ 140.321215] lock(&pch->upl);
{3}[ 140.324616]
{3}[ 140.324619] *** DEADLOCK ***
{3}[ 140.324622]
{3}[ 140.331370] 1 lock held by pppd/2978:
{3}[ 140.335204] #0: (&(&ppp->wlock)->rlock){+.....}, at: [<c025f078>] ppp_xmit_process+0x1c/0xac
{3}[ 140.344130]
{3}[ 140.344133] the dependencies between SOFTIRQ-READ-irq-safe lock and the holding lock:
{3}[ 140.353942] -> (&pch->upl){++.-..} ops: 7 {
{3}[ 140.358380] HARDIRQ-ON-W at:
{3}[ 140.361853] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.370359] [<c00a9e90>] mark_irqflags+0xec/0x168
{3}[ 140.379197] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.388133] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.396660] [<c04f44ac>] _raw_write_lock_bh+0x54/0x64
{3}[ 140.405774] [<c025eaa4>] ppp_connect_channel+0xd8/0x1b8
{3}[ 140.415061] [<c025f490>] ppp_ioctl+0x10c/0x698
{3}[ 140.423637] [<c010646c>] vfs_ioctl+0x28/0x44
{3}[ 140.431899] [<c0106ce0>] do_vfs_ioctl+0x1ac/0x1c8
{3}[ 140.440666] [<c0106d3c>] sys_ioctl+0x40/0x64
{3}[ 140.449001] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.457927] HARDIRQ-ON-R at:
{3}[ 140.461326] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.469831] [<c00a9e64>] mark_irqflags+0xc0/0x168
{3}[ 140.478670] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.487539] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.496132] [<c04f4840>] _raw_read_lock_bh+0x50/0x60
{3}[ 140.505159] [<c025fac0>] ppp_channel_push+0xa4/0xc0
{3}[ 140.514172] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 140.522679] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 140.531026] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 140.539356] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.548211] IN-SOFTIRQ-R at:
{3}[ 140.551684] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.560191] [<c00a9e38>] mark_irqflags+0x94/0x168
{3}[ 140.569030] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.577896] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.586491] [<c04f4840>] _raw_read_lock_bh+0x50/0x60
{3}[ 140.595516] [<c0260f30>] ppp_input+0x34/0x154
{3}[ 140.603938] [<c02622f8>] ppp_async_process+0x40/0x78
{3}[ 140.613034] [<c007fdac>] tasklet_action+0xb0/0x148
{3}[ 140.621818] [<c00802d8>] __do_softirq+0xa8/0x164
{3}[ 140.630499] [<c008045c>] run_ksoftirqd+0xc8/0x1d4
{3}[ 140.639263] [<c0095fd8>] kthread+0x98/0xa4
{3}[ 140.647496] [<c007de2c>] do_exit+0x0/0x2d0
{3}[ 140.655583] INITIAL USE at:
{3}[ 140.658968] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.667389] [<c00acd0c>] __lock_acquire+0x624/0x824
{3}[ 140.676242] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.684746] [<c04f44ac>] _raw_write_lock_bh+0x54/0x64
{3}[ 140.693847] [<c025eaa4>] ppp_connect_channel+0xd8/0x1b8
{3}[ 140.703047] [<c025f490>] ppp_ioctl+0x10c/0x698
{3}[ 140.711396] [<c010646c>] vfs_ioctl+0x28/0x44
{3}[ 140.719643] [<c0106ce0>] do_vfs_ioctl+0x1ac/0x1c8
{3}[ 140.728322] [<c0106d3c>] sys_ioctl+0x40/0x64
{3}[ 140.736642] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.745334] }
{3}[ 140.747403] ... key at: [<c0ca8f3c>] __key.41643+0x0/0x8
{3}[ 140.753495] ... acquired at:
{3}[ 140.756793] [<c00abd0c>] check_prev_add+0x308/0x63c
{3}[ 140.762172] [<c00ac0d4>] check_prevs_add+0x94/0x12c
{3}[ 140.767554] [<c00ac5dc>] validate_chain+0x470/0x57c
{3}[ 140.772937] [<c00ace20>] __lock_acquire+0x738/0x824
{3}[ 140.778319] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.783424] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 140.788821] [<c025eac4>] ppp_connect_channel+0xf8/0x1b8
{3}[ 140.794623] [<c025f490>] ppp_ioctl+0x10c/0x698
{3}[ 140.799499] [<c010646c>] vfs_ioctl+0x28/0x44
{3}[ 140.804344] [<c0106ce0>] do_vfs_ioctl+0x1ac/0x1c8
{3}[ 140.809482] [<c0106d3c>] sys_ioctl+0x40/0x64
{3}[ 140.814254] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.819549]
{3}[ 140.821286] -> (&(&ppp->wlock)->rlock){+.....} ops: 6 {
{3}[ 140.826754] HARDIRQ-ON-W at:
{3}[ 140.830140] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.838542] [<c00a9e90>] mark_irqflags+0xec/0x168
{3}[ 140.847065] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 140.855832] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.864250] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 140.873177] [<c025eac4>] ppp_connect_channel+0xf8/0x1b8
{3}[ 140.882289] [<c025f490>] ppp_ioctl+0x10c/0x698
{3}[ 140.890552] [<c010646c>] vfs_ioctl+0x28/0x44
{3}[ 140.898711] [<c0106ce0>] do_vfs_ioctl+0x1ac/0x1c8
{3}[ 140.907375] [<c0106d3c>] sys_ioctl+0x40/0x64
{3}[ 140.915462] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 140.924143] INITIAL USE at:
{3}[ 140.927439] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 140.935685] [<c00acd0c>] __lock_acquire+0x624/0x824
{3}[ 140.944365] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 140.952700] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 140.961541] [<c025eac4>] ppp_connect_channel+0xf8/0x1b8
{3}[ 140.970494] [<c025f490>] ppp_ioctl+0x10c/0x698
{3}[ 140.978739] [<c010646c>] vfs_ioctl+0x28/0x44
{3}[ 140.986811] [<c0106ce0>] do_vfs_ioctl+0x1ac/0x1c8
{3}[ 140.995390] [<c0106d3c>] sys_ioctl+0x40/0x64
{3}[ 141.003389] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.011984] }
{3}[ 141.013893] ... key at: [<c0ca8f08>] __key.41996+0x0/0x8
{3}[ 141.019970] ... acquired at:
{3}[ 141.023180] [<c00aaf0c>] print_bad_irq_dependency+0x37c/0x43c
{3}[ 141.029501] [<c00ab15c>] check_usage+0x190/0x1b0
{3}[ 141.034552] [<c00ab220>] check_irq_usage+0xa4/0xb8
{3}[ 141.039917] [<c00ab270>] check_prev_add_irq+0x3c/0x6c
{3}[ 141.045401] [<c00abb58>] check_prev_add+0x154/0x63c
{3}[ 141.050785] [<c00ac0d4>] check_prevs_add+0x94/0x12c
{3}[ 141.056164] [<c00ac5dc>] validate_chain+0x470/0x57c
{3}[ 141.061547] [<c00ace20>] __lock_acquire+0x738/0x824
{3}[ 141.066926] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.071962] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 141.077430] [<c025e2c4>] ppp_push+0x44/0xac
{3}[ 141.082118] [<c025e978>] ppp_send_frame+0x40c/0x460
{3}[ 141.087572] [<c025f09c>] ppp_xmit_process+0x40/0xac
{3}[ 141.092881] [<c025fbd0>] ppp_write+0xf4/0x108
{3}[ 141.097811] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 141.102604] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 141.107448] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.112671]
{3}[ 141.114408]
{3}[ 141.114411] the dependencies between the lock to be acquired and SOFTIRQ-READ-irq-unsafe lock:
{3}[ 141.125001] -> (&(&mx_tty[i].tty_spinlock)->rlock){+.+...} ops: 516 {
{3}[ 141.131854] HARDIRQ-ON-W at:
{3}[ 141.135412] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.144165] [<c00a9e90>] mark_irqflags+0xec/0x168
{3}[ 141.153106] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 141.162148] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.170913] [<c04f4124>] _raw_spin_lock+0x4c/0x5c
{3}[ 141.179854] [<c037b0c8>] mx_tty_open+0xa0/0x158
{3}[ 141.188692] [<c01fa8ec>] tty_open+0x238/0x384
{3}[ 141.197214] [<c00faa40>] chrdev_open+0x108/0x12c
{3}[ 141.206068] [<c00f5b14>] __dentry_open+0x120/0x218
{3}[ 141.215096] [<c00f5ce0>] nameidata_to_filp+0x5c/0x6c
{3}[ 141.224296] [<c0103e08>] do_last+0x464/0x4f0
{3}[ 141.232874] [<c0104d8c>] path_openat+0xc0/0x378
{3}[ 141.241569] [<c0105134>] do_filp_open+0x38/0x84
{3}[ 141.250334] [<c00f5900>] do_sys_open+0xe0/0x178
{3}[ 141.259102] [<c00f59d4>] sys_open+0x28/0x2c
{3}[ 141.267522] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.276623] SOFTIRQ-ON-W at:
{3}[ 141.280109] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.288862] [<c00a9eb4>] mark_irqflags+0x110/0x168
{3}[ 141.297816] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 141.306930] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.315695] [<c04f4124>] _raw_spin_lock+0x4c/0x5c
{3}[ 141.324636] [<c037b0c8>] mx_tty_open+0xa0/0x158
{3}[ 141.333474] [<c01fa8ec>] tty_open+0x238/0x384
{3}[ 141.341996] [<c00faa40>] chrdev_open+0x108/0x12c
{3}[ 141.350849] [<c00f5b14>] __dentry_open+0x120/0x218
{3}[ 141.359879] [<c00f5ce0>] nameidata_to_filp+0x5c/0x6c
{3}[ 141.369149] [<c0103e08>] do_last+0x464/0x4f0
{3}[ 141.377658] [<c0104d8c>] path_openat+0xc0/0x378
{3}[ 141.386352] [<c0105134>] do_filp_open+0x38/0x84
{3}[ 141.395118] [<c00f5900>] do_sys_open+0xe0/0x178
{3}[ 141.403885] [<c00f59d4>] sys_open+0x28/0x2c
{3}[ 141.412376] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.421335] INITIAL USE at:
{3}[ 141.424805] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.433471] [<c00acd0c>] __lock_acquire+0x624/0x824
{3}[ 141.442422] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.451104] [<c04f4124>] _raw_spin_lock+0x4c/0x5c
{3}[ 141.459958] [<c037b0c8>] mx_tty_open+0xa0/0x158
{3}[ 141.468708] [<c01fa8ec>] tty_open+0x238/0x384
{3}[ 141.477145] [<c00faa40>] chrdev_open+0x108/0x12c
{3}[ 141.485913] [<c00f5b14>] __dentry_open+0x120/0x218
{3}[ 141.494851] [<c00f5ce0>] nameidata_to_filp+0x5c/0x6c
{3}[ 141.503967] [<c0103e08>] do_last+0x464/0x4f0
{3}[ 141.512455] [<c0104d8c>] path_openat+0xc0/0x378
{3}[ 141.521064] [<c0105134>] do_filp_open+0x38/0x84
{3}[ 141.529747] [<c00f5900>] do_sys_open+0xe0/0x178
{3}[ 141.538426] [<c00f59d4>] sys_open+0x28/0x2c
{3}[ 141.546830] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.555699] }
{3}[ 141.557854] ... key at: [<c0cb3df8>] __key.18793+0x0/0x8
{3}[ 141.564032] ... acquired at:
{3}[ 141.567417] [<c00abd0c>] check_prev_add+0x308/0x63c
{3}[ 141.572798] [<c00ac0d4>] check_prevs_add+0x94/0x12c
{3}[ 141.578180] [<c00ac5dc>] validate_chain+0x470/0x57c
{3}[ 141.583562] [<c00ace20>] __lock_acquire+0x738/0x824
{3}[ 141.588943] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.593978] [<c04f4124>] _raw_spin_lock+0x4c/0x5c
{3}[ 141.599186] [<c037af10>] mx_tty_write+0x48/0xac
{3}[ 141.604291] [<c0261fdc>] ppp_async_push+0xa0/0x194
{3}[ 141.609515] [<c0262114>] ppp_async_send+0x44/0x4c
{3}[ 141.614794] [<c025fa6c>] ppp_channel_push+0x50/0xc0
{3}[ 141.620103] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 141.625124] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 141.629912] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 141.634689] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.639982]
{3}[ 141.641718] -> (&(&ap->xmit_lock)->rlock){+.....} ops: 6 {
{3}[ 141.647533] HARDIRQ-ON-W at:
{3}[ 141.651005] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.659583] [<c00a9e90>] mark_irqflags+0xec/0x168
{3}[ 141.668278] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 141.677218] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.685810] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 141.694910] [<c0261f80>] ppp_async_push+0x44/0x194
{3}[ 141.703762] [<c02620ec>] ppp_async_send+0x1c/0x4c
{3}[ 141.712460] [<c025fa6c>] ppp_channel_push+0x50/0xc0
{3}[ 141.721402] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 141.729906] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 141.738398] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 141.746658] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.755514] INITIAL USE at:
{3}[ 141.758898] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.767317] [<c00acd0c>] __lock_acquire+0x624/0x824
{3}[ 141.776170] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.784777] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 141.793692] [<c0261f80>] ppp_async_push+0x44/0x194
{3}[ 141.802385] [<c02620ec>] ppp_async_send+0x1c/0x4c
{3}[ 141.811066] [<c025fa6c>] ppp_channel_push+0x50/0xc0
{3}[ 141.819918] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 141.828408] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 141.836672] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 141.844917] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.853680] }
{3}[ 141.855677] ... key at: [<c0ca8f44>] __key.30888+0x0/0x8
{3}[ 141.861915] ... acquired at:
{3}[ 141.865139] [<c00abd0c>] check_prev_add+0x308/0x63c
{3}[ 141.870522] [<c00ac0d4>] check_prevs_add+0x94/0x12c
{3}[ 141.875904] [<c00ac5dc>] validate_chain+0x470/0x57c
{3}[ 141.881285] [<c00ace20>] __lock_acquire+0x738/0x824
{3}[ 141.886666] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.891700] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 141.897241] [<c0261f80>] ppp_async_push+0x44/0x194
{3}[ 141.902465] [<c02620ec>] ppp_async_send+0x1c/0x4c
{3}[ 141.907746] [<c025fa6c>] ppp_channel_push+0x50/0xc0
{3}[ 141.913053] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 141.918074] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 141.922864] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 141.927638] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 141.932932]
{3}[ 141.934665] -> (&(&pch->downl)->rlock){+.....} ops: 4 {
{3}[ 141.940137] HARDIRQ-ON-W at:
{3}[ 141.943523] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 141.951926] [<c00a9e90>] mark_irqflags+0xec/0x168
{3}[ 141.960449] [<c00accf4>] __lock_acquire+0x60c/0x824
{3}[ 141.969213] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 141.977633] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 141.986558] [<c025fa3c>] ppp_channel_push+0x20/0xc0
{3}[ 141.995253] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 142.003585] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 142.011832] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 142.020063] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 142.028672] INITIAL USE at:
{3}[ 142.031971] [<c00a9be0>] mark_lock+0x2a4/0x468
{3}[ 142.040216] [<c00acd0c>] __lock_acquire+0x624/0x824
{3}[ 142.048895] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 142.057230] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 142.066070] [<c025fa3c>] ppp_channel_push+0x20/0xc0
{3}[ 142.074748] [<c025fbdc>] ppp_write+0x100/0x108
{3}[ 142.082920] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 142.091082] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 142.099224] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 142.107746] }
{3}[ 142.109728] ... key at: [<c0ca8f34>] __key.41642+0x0/0x8
{3}[ 142.115732] ... acquired at:
{3}[ 142.118943] [<c00aaf40>] print_bad_irq_dependency+0x3b0/0x43c
{3}[ 142.125193] [<c00ab15c>] check_usage+0x190/0x1b0
{3}[ 142.130315] [<c00ab220>] check_irq_usage+0xa4/0xb8
{3}[ 142.135608] [<c00ab270>] check_prev_add_irq+0x3c/0x6c
{3}[ 142.141164] [<c00abb58>] check_prev_add+0x154/0x63c
{3}[ 142.146545] [<c00ac0d4>] check_prevs_add+0x94/0x12c
{3}[ 142.151927] [<c00ac5dc>] validate_chain+0x470/0x57c
{3}[ 142.157311] [<c00ace20>] __lock_acquire+0x738/0x824
{3}[ 142.162689] [<c00ad430>] lock_acquire+0x90/0xa4
{3}[ 142.167798] [<c04f4448>] _raw_spin_lock_bh+0x54/0x64
{3}[ 142.173192] [<c025e2c4>] ppp_push+0x44/0xac
{3}[ 142.177950] [<c025e978>] ppp_send_frame+0x40c/0x460
{3}[ 142.183263] [<c025f09c>] ppp_xmit_process+0x40/0xac
{3}[ 142.188714] [<c025fbd0>] ppp_write+0xf4/0x108
{3}[ 142.193505] [<c00f78f8>] vfs_write+0xbc/0x138
{3}[ 142.198365] [<c00f7a3c>] sys_write+0x44/0x70
{3}[ 142.203139] [<c0043040>] ret_fast_syscall+0x0/0x3c
{3}[ 142.208434]
{3}[ 142.210242]
{3}[ 142.210245] stack backtrace:
{3}[ 142.215030] Backtrace:
{3}[ 142.217733] [<c0047bc4>] (dump_backtrace+0x0/0xf8) from [<c04f0d80>] (dump_stack+0x18/0x1c)
{3}[ 142.226388] r6:c0a54f54 r5:cdc12100 r4:c06b1775 r3:271aed13
{3}[ 142.232228] [<c04f0d68>] (dump_stack+0x0/0x1c) from [<c00aaf60>] (print_bad_irq_dependency+0x3d0/0x43c)
{3}[ 142.241935] [<c00aab90>] (print_bad_irq_dependency+0x0/0x43c) from [<c00ab15c>] (check_usage+0x190/0x1b0)
{3}[ 142.251744] [<c00aafcc>] (check_usage+0x0/0x1b0) from [<c00ab220>] (check_irq_usage+0xa4/0xb8)
{3}[ 142.260598] [<c00ab17c>] (check_irq_usage+0x0/0xb8) from [<c00ab270>] (check_prev_add_irq+0x3c/0x6c)
{3}[ 142.269960] r7:00000001 r6:cdc12100 r5:cdc12428 r4:cdc12440
{3}[ 142.275799] [<c00ab234>] (check_prev_add_irq+0x0/0x6c) from [<c00abb58>] (check_prev_add+0x154/0x63c)
{3}[ 142.285324] r6:cdc12100 r5:cdc12440 r4:cdc12428 r3:c0ad44e8
{3}[ 142.291164] [<c00aba04>] (check_prev_add+0x0/0x63c) from [<c00ac0d4>] (check_prevs_add+0x94/0x12c)
{3}[ 142.300440] [<c00ac040>] (check_prevs_add+0x0/0x12c) from [<c00ac5dc>] (validate_chain+0x470/0x57c)
{3}[ 142.309642] r7:00000000 r6:007d03ed r5:cdc12100 r4:cdc12440
{3}[ 142.315553] [<c00ac16c>] (validate_chain+0x0/0x57c) from [<c00ace20>] (__lock_acquire+0x738/0x824)
{3}[ 142.324826] [<c00ac6e8>] (__lock_acquire+0x0/0x824) from [<c00ad430>] (lock_acquire+0x90/0xa4)
{3}[ 142.333609] [<c00ad3a0>] (lock_acquire+0x0/0xa4) from [<c04f4448>] (_raw_spin_lock_bh+0x54/0x64)
{3}[ 142.342634] [<c04f43f4>] (_raw_spin_lock_bh+0x0/0x64) from [<c025e2c4>] (ppp_push+0x44/0xac)
{3}[ 142.351380] r5:d73b19c0 r4:d95715a0
{3}[ 142.355132] [<c025e280>] (ppp_push+0x0/0xac) from [<c025e978>] (ppp_send_frame+0x40c/0x460)
{3}[ 142.363791] r8:00000000 r7:000080fd r6:d73b19c0 r5:d73b19c0 r4:d95715a0
{3}[ 142.370490] r3:00000040
{3}[ 142.373362] [<c025e56c>] (ppp_send_frame+0x0/0x460) from [<c025f09c>] (ppp_xmit_process+0x40/0xac)
{3}[ 142.382629] r8:00000000 r7:d73b19c0 r6:d95715a4 r5:d9571674 r4:d95715a0
{3}[ 142.389507] [<c025f05c>] (ppp_xmit_process+0x0/0xac) from [<c025fbd0>] (ppp_write+0xf4/0x108)
{3}[ 142.398339] r6:0006c222 r5:d95715a0 r4:00000011 r3:00000001
{3}[ 142.404175] [<c025fadc>] (ppp_write+0x0/0x108) from [<c00f78f8>] (vfs_write+0xbc/0x138)
{3}[ 142.412486] r7:cde69f70 r6:0006c222 r5:d30f6c40 r4:00000011
{3}[ 142.418323] [<c00f783c>] (vfs_write+0x0/0x138) from [<c00f7a3c>] (sys_write+0x44/0x70)
{3}[ 142.426550] r8:00000000 r7:00000004 r6:00000011 r5:0006c222 r4:d30f6c40
{3}[ 142.433427] [<c00f79f8>] (sys_write+0x0/0x70) from [<c0043040>] (ret_fast_syscall+0x0/0x3c)
{3}[ 142.442085] r9:cde68000 r8:c0043208 r6:0000000f r5:0006c222 r4:00000011

struct task_struct { #ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ struct thread_info thread_info; #endif /* -1 unrunnable, 0 runnable, >0 stopped: */ volatile long state; /* * This begins the randomizable portion of task_struct. Only * scheduling-critical items should be added above here. */ randomized_struct_fields_start void *stack; atomic_t usage; /* Per task flags (PF_*), defined further below: */ unsigned int flags; unsigned int ptrace; #ifdef CONFIG_SMP struct llist_node wake_entry; int on_cpu; #ifdef CONFIG_THREAD_INFO_IN_TASK /* Current CPU: */ unsigned int cpu; #endif unsigned int wakee_flips; unsigned long wakee_flip_decay_ts; struct task_struct *last_wakee; int wake_cpu; #endif int on_rq; int prio; int static_prio; int normal_prio; unsigned int rt_priority; const struct sched_class *sched_class; struct sched_entity se; struct sched_rt_entity rt; #ifdef CONFIG_CGROUP_SCHED struct task_group *sched_task_group; #endif struct sched_dl_entity dl; #ifdef CONFIG_PREEMPT_NOTIFIERS /* List of struct preempt_notifier: */ struct hlist_head preempt_notifiers; #endif #ifdef CONFIG_BLK_DEV_IO_TRACE unsigned int btrace_seq; #endif unsigned int policy; int nr_cpus_allowed; cpumask_t cpus_allowed; #ifdef CONFIG_PREEMPT_RCU int rcu_read_lock_nesting; union rcu_special rcu_read_unlock_special; struct list_head rcu_node_entry; struct rcu_node *rcu_blocked_node; #endif /* #ifdef CONFIG_PREEMPT_RCU */ #ifdef CONFIG_TASKS_RCU unsigned long rcu_tasks_nvcsw; u8 rcu_tasks_holdout; u8 rcu_tasks_idx; int rcu_tasks_idle_cpu; struct list_head rcu_tasks_holdout_list; #endif /* #ifdef CONFIG_TASKS_RCU */ struct sched_info sched_info; struct list_head tasks; #ifdef CONFIG_SMP struct plist_node pushable_tasks; struct rb_node pushable_dl_tasks; #endif struct mm_struct *mm; struct mm_struct *active_mm; /* Per-thread vma caching: */ struct vmacache vmacache; #ifdef SPLIT_RSS_COUNTING struct task_rss_stat rss_stat; #endif int exit_state; int exit_code; int exit_signal; /* The signal sent when the parent dies: */ int pdeath_signal; /* JOBCTL_*, siglock protected: */ unsigned long jobctl; /* Used for emulating ABI behavior of previous Linux versions: */ unsigned int personality; /* Scheduler bits, serialized by scheduler locks: */ unsigned sched_reset_on_fork:1; unsigned sched_contributes_to_load:1; unsigned sched_migrated:1; unsigned sched_remote_wakeup:1; /* Force alignment to the next boundary: */ unsigned :0; /* Unserialized, strictly 'current' */ /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; unsigned in_iowait:1; #ifndef TIF_RESTORE_SIGMASK unsigned restore_sigmask:1; #endif #ifdef CONFIG_MEMCG unsigned memcg_may_oom:1; #ifndef CONFIG_SLOB unsigned memcg_kmem_skip_account:1; #endif #endif #ifdef CONFIG_COMPAT_BRK unsigned brk_randomized:1; #endif #ifdef CONFIG_CGROUPS /* disallow userland-initiated cgroup migration */ unsigned no_cgroup_migration:1; #endif unsigned long atomic_flags; /* Flags requiring atomic access. */ struct restart_block restart_block; pid_t pid; pid_t tgid; #ifdef CONFIG_CC_STACKPROTECTOR /* Canary value for the -fstack-protector GCC feature: */ unsigned long stack_canary; #endif /* * Pointers to the (original) parent process, youngest child, younger sibling, * older sibling, respectively. (p->father can be replaced with * p->real_parent->pid) */ /* Real parent process: */ struct task_struct __rcu *real_parent; /* Recipient of SIGCHLD, wait4() reports: */ struct task_struct __rcu *parent; /* * Children/sibling form the list of natural children: */ struct list_head children; struct list_head sibling; struct task_struct *group_leader; /* * 'ptraced' is the list of tasks this task is using ptrace() on. * * This includes both natural children and PTRACE_ATTACH targets. * 'ptrace_entry' is this task's link on the p->parent->ptraced list. */ struct list_head ptraced; struct list_head ptrace_entry; /* PID/PID hash table linkage. */ struct pid_link pids[PIDTYPE_MAX]; struct list_head thread_group; struct list_head thread_node; struct completion *vfork_done; /* CLONE_CHILD_SETTID: */ int __user *set_child_tid; /* CLONE_CHILD_CLEARTID: */ int __user *clear_child_tid; u64 utime; u64 stime; #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME u64 utimescaled; u64 stimescaled; #endif u64 gtime; struct prev_cputime prev_cputime; #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN struct vtime vtime; #endif #ifdef CONFIG_NO_HZ_FULL atomic_t tick_dep_mask; #endif /* Context switch counts: */ unsigned long nvcsw; unsigned long nivcsw; /* Monotonic time in nsecs: */ u64 start_time; /* Boot based time in nsecs: */ u64 real_start_time; /* MM fault and swap info: this can arguably be seen as either mm-specific or thread-specific: */ unsigned long min_flt; unsigned long maj_flt; #ifdef CONFIG_POSIX_TIMERS struct task_cputime cputime_expires; struct list_head cpu_timers[3]; #endif /* Process credentials: */ /* Tracer's credentials at attach: */ const struct cred __rcu *ptracer_cred; /* Objective and real subjective task credentials (COW): */ const struct cred __rcu *real_cred; /* Effective (overridable) subjective task credentials (COW): */ const struct cred __rcu *cred; /* * executable name, excluding path. * * - normally initialized setup_new_exec() * - access it with [gs]et_task_comm() * - lock it with task_lock() */ char comm[TASK_COMM_LEN]; struct nameidata *nameidata; #ifdef CONFIG_SYSVIPC struct sysv_sem sysvsem; struct sysv_shm sysvshm; #endif #ifdef CONFIG_DETECT_HUNG_TASK unsigned long last_switch_count; #endif /* Filesystem information: */ struct fs_struct *fs; /* Open file information: */ struct files_struct *files; /* Namespaces: */ struct nsproxy *nsproxy; /* Signal handlers: */ struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked; sigset_t real_blocked; /* Restored if set_restore_sigmask() was used: */ sigset_t saved_sigmask; struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; unsigned int sas_ss_flags; struct callback_head *task_works; struct audit_context *audit_context; #ifdef CONFIG_AUDITSYSCALL kuid_t loginuid; unsigned int sessionid; #endif struct seccomp seccomp; /* Thread group tracking: */ u32 parent_exec_id; u32 self_exec_id; /* Protection against (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, mempolicy: */ spinlock_t alloc_lock; /* Protection of the PI data structures: */ raw_spinlock_t pi_lock; struct wake_q_node wake_q; #ifdef CONFIG_RT_MUTEXES /* PI waiters blocked on a rt_mutex held by this task: */ struct rb_root_cached pi_waiters; /* Updated under owner's pi_lock and rq lock */ struct task_struct *pi_top_task; /* Deadlock detection and priority inheritance handling: */ struct rt_mutex_waiter *pi_blocked_on; #endif #ifdef CONFIG_DEBUG_MUTEXES /* Mutex deadlock detection: */ struct mutex_waiter *blocked_on; #endif #ifdef CONFIG_TRACE_IRQFLAGS unsigned int irq_events; unsigned long hardirq_enable_ip; unsigned long hardirq_disable_ip; unsigned int hardirq_enable_event; unsigned int hardirq_disable_event; int hardirqs_enabled; int hardirq_context; unsigned long softirq_disable_ip; unsigned long softirq_enable_ip; unsigned int softirq_disable_event; unsigned int softirq_enable_event; int softirqs_enabled; int softirq_context; #endif #ifdef CONFIG_LOCKDEP # define MAX_LOCK_DEPTH 48UL u64 curr_chain_key; int lockdep_depth; unsigned int lockdep_recursion; struct held_lock held_locks[MAX_LOCK_DEPTH]; #endif #ifdef CONFIG_LOCKDEP_CROSSRELEASE #define MAX_XHLOCKS_NR 64UL struct hist_lock *xhlocks; /* Crossrelease history locks */ unsigned int xhlock_idx; /* For restoring at history boundaries */ unsigned int xhlock_idx_hist[XHLOCK_CTX_NR]; unsigned int hist_id; /* For overwrite check at each context exit */ unsigned int hist_id_save[XHLOCK_CTX_NR]; #endif #ifdef CONFIG_UBSAN unsigned int in_ubsan; #endif /* Journalling filesystem info: */ void *journal_info; /* Stacked block device info: */ struct bio_list *bio_list; #ifdef CONFIG_BLOCK /* Stack plugging: */ struct blk_plug *plug; #endif /* VM state: */ struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; /* Ptrace state: */ unsigned long ptrace_message; siginfo_t *last_siginfo; struct task_io_accounting ioac; #ifdef CONFIG_TASK_XACCT /* Accumulated RSS usage: */ u64 acct_rss_mem1; /* Accumulated virtual memory usage: */ u64 acct_vm_mem1; /* stime + utime since last update: */ u64 acct_timexpd; #endif #ifdef CONFIG_CPUSETS /* Protected by ->alloc_lock: */ nodemask_t mems_allowed; /* Seqence number to catch updates: */ seqcount_t mems_allowed_seq; int cpuset_mem_spread_rotor; int cpuset_slab_spread_rotor; #endif #ifdef CONFIG_CGROUPS /* Control Group info protected by css_set_lock: */ struct css_set __rcu *cgroups; /* cg_list protected by css_set_lock and tsk->alloc_lock: */ struct list_head cg_list; #endif #ifdef CONFIG_INTEL_RDT u32 closid; u32 rmid; #endif #ifdef CONFIG_FUTEX struct robust_list_head __user *robust_list; #ifdef CONFIG_COMPAT struct compat_robust_list_head __user *compat_robust_list; #endif struct list_head pi_state_list; struct futex_pi_state *pi_state_cache; #endif #ifdef CONFIG_PERF_EVENTS struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts]; struct mutex perf_event_mutex; struct list_head perf_event_list; #endif #ifdef CONFIG_DEBUG_PREEMPT unsigned long preempt_disable_ip; #endif #ifdef CONFIG_NUMA /* Protected by alloc_lock: */ struct mempolicy *mempolicy; short il_prev; short pref_node_fork; #endif #ifdef CONFIG_NUMA_BALANCING int numa_scan_seq; unsigned int numa_scan_period; unsigned int numa_scan_period_max; int numa_preferred_nid; unsigned long numa_migrate_retry; /* Migration stamp: */ u64 node_stamp; u64 last_task_numa_placement; u64 last_sum_exec_runtime; struct callback_head numa_work; struct list_head numa_entry; struct numa_group *numa_group; /* * numa_faults is an array split into four regions: * faults_memory, faults_cpu, faults_memory_buffer, faults_cpu_buffer * in this precise order. * * faults_memory: Exponential decaying average of faults on a per-node * basis. Scheduling placement decisions are made based on these * counts. The values remain static for the duration of a PTE scan. * faults_cpu: Track the nodes the process was running on when a NUMA * hinting fault was incurred. * faults_memory_buffer and faults_cpu_buffer: Record faults per node * during the current scan window. When the scan completes, the counts * in faults_memory and faults_cpu decay and these values are copied. */ unsigned long *numa_faults; unsigned long total_numa_faults; /* * numa_faults_locality tracks if faults recorded during the last * scan window were remote/local or failed to migrate. The task scan * period is adapted based on the locality of the faults with different * weights depending on whether they were shared or private faults */ unsigned long numa_faults_locality[3]; unsigned long numa_pages_migrated; #endif /* CONFIG_NUMA_BALANCING */ struct tlbflush_unmap_batch tlb_ubc; struct rcu_head rcu; /* Cache last used pipe for splice(): */ struct pipe_inode_info *splice_pipe; struct page_frag task_frag; #ifdef CONFIG_TASK_DELAY_ACCT struct task_delay_info *delays; #endif #ifdef CONFIG_FAULT_INJECTION int make_it_fail; unsigned int fail_nth; #endif /* * When (nr_dirtied >= nr_dirtied_pause), it's time to call * balance_dirty_pages() for a dirty throttling pause: */ int nr_dirtied; int nr_dirtied_pause; /* Start of a write-and-pause period: */ unsigned long dirty_paused_when; #ifdef CONFIG_LATENCYTOP int latency_record_count; struct latency_record latency_record[LT_SAVECOUNT]; #endif /* * Time slack values; these are used to round up poll() and * select() etc timeout values. These are in nanoseconds. */ u64 timer_slack_ns; u64 default_timer_slack_ns; #ifdef CONFIG_KASAN unsigned int kasan_depth; #endif #ifdef CONFIG_FUNCTION_GRAPH_TRACER /* Index of current stored address in ret_stack: */ int curr_ret_stack; /* Stack of return addresses for return function tracing: */ struct ftrace_ret_stack *ret_stack; /* Timestamp for last schedule: */ unsigned long long ftrace_timestamp; /* * Number of functions that haven't been traced * because of depth overrun: */ atomic_t trace_overrun; /* Pause tracing: */ atomic_t tracing_graph_pause; #endif #ifdef CONFIG_TRACING /* State flags for use by tracers: */ unsigned long trace; /* Bitmask and counter of trace recursion: */ unsigned long trace_recursion; #endif /* CONFIG_TRACING */ #ifdef CONFIG_KCOV /* Coverage collection mode enabled for this task (0 if disabled): */ enum kcov_mode kcov_mode; /* Size of the kcov_area: */ unsigned int kcov_size; /* Buffer for coverage collection: */ void *kcov_area; /* KCOV descriptor wired with this task or NULL: */ struct kcov *kcov; #endif #ifdef CONFIG_MEMCG struct mem_cgroup *memcg_in_oom; gfp_t memcg_oom_gfp_mask; int memcg_oom_order; /* Number of pages to reclaim on returning to userland: */ unsigned int memcg_nr_pages_over_high; #endif #ifdef CONFIG_UPROBES struct uprobe_task *utask; #endif #if defined(CONFIG_BCACHE) || defined(CONFIG_BCACHE_MODULE) unsigned int sequential_io; unsigned int sequential_io_avg; #endif #ifdef CONFIG_DEBUG_ATOMIC_SLEEP unsigned long task_state_change; #endif int pagefault_disabled; #ifdef CONFIG_MMU struct task_struct *oom_reaper_list; #endif #ifdef CONFIG_VMAP_STACK struct vm_struct *stack_vm_area; #endif #ifdef CONFIG_THREAD_INFO_IN_TASK /* A live task holds one reference: */ atomic_t stack_refcount; #endif #ifdef CONFIG_LIVEPATCH int patch_state; #endif #ifdef CONFIG_SECURITY /* Used by LSM modules for access restriction: */ void *security; #endif /* * New fields for task_struct should be added above here, so that * they are included in the randomized portion of task_struct. */ randomized_struct_fields_end /* CPU-specific state of this task: */ struct thread_struct thread; /* * WARNING: on x86, 'thread_struct' contains a variable-sized * structure. It *MUST* be at the end of 'task_struct'. * * Do not put anything below here! */ };
10-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值