• Manuel Bessler's avatar
    r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected · c762eaa7
    Manuel Bessler authored
    'ifconfig eth0 down' makes r6040_close() trigger:
     INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected
    
    Fixed by moving calls to phy_stop(), napi_disable(), netif_stop_queue()
    to outside of the module's private spin_lock_irq block.
    
    Found on a Versalogic Tomcat SBC with a Vortex86 SoC
    
    s1660e_5150:~# sudo ifconfig eth0 down
    [   61.306415] ======================================================
    [   61.306415] [ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
    [   61.306415] 4.9.0-gb898d2d-manuel #1 Not tainted
    [   61.306415] ------------------------------------------------------
    [   61.306415] ifconfig/449 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
    [   61.306415]  (&dev->lock){+.+...}, at: [<c1336276>] phy_stop+0x16/0x80
    
    [   61.306415] and this task is already holding:
    [   61.306415]  (&(&lp->lock)->rlock){+.-...}, at: [<d0934c84>] r6040_close+0x24/0x230 [r6040]
    which would create a new lock dependency:
    [   61.306415]  (&(&lp->lock)->rlock){+.-...} -> (&dev->lock){+.+...}
    
    [   61.306415] but this new dependency connects a SOFTIRQ-irq-safe lock:
    [   61.306415]  (&(&lp->lock)->rlock){+.-...}
    [   61.306415] ... which became SOFTIRQ-irq-safe at:
    [   61.306415]   [   61.306415] [<c1075bc5>] __lock_acquire+0x555/0x1770
    [   61.306415]   [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]   [   61.306415] [<c14bb334>] _raw_spin_lock_irqsave+0x24/0x40
    [   61.306415]   [   61.306415] [<d0934ac0>] r6040_start_xmit+0x30/0x1d0 [r6040]
    [   61.306415]   [   61.306415] [<c13a7d4d>] dev_hard_start_xmit+0x9d/0x2d0
    [   61.306415]   [   61.306415] [<c13c8a38>] sch_direct_xmit+0xa8/0x140
    [   61.306415]   [   61.306415] [<c13a8436>] __dev_queue_xmit+0x416/0x780
    [   61.306415]   [   61.306415] [<c13a87aa>] dev_queue_xmit+0xa/0x10
    [   61.306415]   [   61.306415] [<c13b4837>] neigh_resolve_output+0x147/0x220
    [   61.306415]   [   61.306415] [<c144541b>] ip6_finish_output2+0x2fb/0x910
    [   61.306415]   [   61.306415] [<c14494e6>] ip6_finish_output+0xa6/0x1a0
    [   61.306415]   [   61.306415] [<c1449635>] ip6_output+0x55/0x320
    [   61.306415]   [   61.306415] [<c146f4d2>] mld_sendpack+0x352/0x560
    [   61.306415]   [   61.306415] [<c146fe55>] mld_ifc_timer_expire+0x155/0x280
    [   61.306415]   [   61.306415] [<c108b081>] call_timer_fn+0x81/0x270
    [   61.306415]   [   61.306415] [<c108b331>] expire_timers+0xc1/0x180
    [   61.306415]   [   61.306415] [<c108b4f7>] run_timer_softirq+0x77/0x150
    [   61.306415]   [   61.306415] [<c1043d04>] __do_softirq+0xb4/0x3d0
    [   61.306415]   [   61.306415] [<c101a15c>] do_softirq_own_stack+0x1c/0x30
    [   61.306415]   [   61.306415] [<c104416e>] irq_exit+0x8e/0xa0
    [   61.306415]   [   61.306415] [<c1019d31>] do_IRQ+0x51/0x100
    [   61.306415]   [   61.306415] [<c14bc176>] common_interrupt+0x36/0x40
    [   61.306415]   [   61.306415] [<c1134928>] set_root+0x68/0xf0
    [   61.306415]   [   61.306415] [<c1136120>] path_init+0x400/0x640
    [   61.306415]   [   61.306415] [<c11386bf>] path_lookupat+0xf/0xe0
    [   61.306415]   [   61.306415] [<c1139ebc>] filename_lookup+0x6c/0x100
    [   61.306415]   [   61.306415] [<c1139fd5>] user_path_at_empty+0x25/0x30
    [   61.306415]   [   61.306415] [<c11298c6>] SyS_faccessat+0x86/0x1e0
    [   61.306415]   [   61.306415] [<c1129a30>] SyS_access+0x10/0x20
    [   61.306415]   [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]   [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]
    [   61.306415] to a SOFTIRQ-irq-unsafe lock:
    [   61.306415]  (&dev->lock){+.+...}
    [   61.306415] ... which became SOFTIRQ-irq-unsafe at:
    [   61.306415] ...[   61.306415]
    [   61.306415] [<c1075c0c>] __lock_acquire+0x59c/0x1770
    [   61.306415]   [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]   [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]   [   61.306415] [<c133747d>] phy_probe+0x4d/0xc0
    [   61.306415]   [   61.306415] [<c1338afe>] phy_attach_direct+0xbe/0x190
    [   61.306415]   [   61.306415] [<c1338ca7>] phy_connect_direct+0x17/0x60
    [   61.306415]   [   61.306415] [<c1338d23>] phy_connect+0x33/0x70
    [   61.306415]   [   61.306415] [<d09357a0>] r6040_init_one+0x3a0/0x500 [r6040]
    [   61.306415]   [   61.306415] [<c12a78c7>] pci_device_probe+0x77/0xd0
    [   61.306415]   [   61.306415] [<c12f5e15>] driver_probe_device+0x145/0x280
    [   61.306415]   [   61.306415] [<c12f5fd9>] __driver_attach+0x89/0x90
    [   61.306415]   [   61.306415] [<c12f43ef>] bus_for_each_dev+0x4f/0x80
    [   61.306415]   [   61.306415] [<c12f5954>] driver_attach+0x14/0x20
    [   61.306415]   [   61.306415] [<c12f55b7>] bus_add_driver+0x197/0x210
    [   61.306415]   [   61.306415] [<c12f6a21>] driver_register+0x51/0xd0
    [   61.306415]   [   61.306415] [<c12a6955>] __pci_register_driver+0x45/0x50
    [   61.306415]   [   61.306415] [<d0938017>] 0xd0938017
    [   61.306415]   [   61.306415] [<c100043f>] do_one_initcall+0x2f/0x140
    [   61.306415]   [   61.306415] [<c10e48c0>] do_init_module+0x4a/0x19b
    [   61.306415]   [   61.306415] [<c10a680e>] load_module+0x1b2e/0x2070
    [   61.306415]   [   61.306415] [<c10a6eb9>] SyS_finit_module+0x69/0x80
    [   61.306415]   [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]   [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]
    [   61.306415] other info that might help us debug this:
    [   61.306415]
    [   61.306415]  Possible interrupt unsafe locking scenario:
    [   61.306415]
    [   61.306415]        CPU0                    CPU1
    [   61.306415]        ----                    ----
    [   61.306415]   lock(&dev->lock);
    [   61.306415]                                local_irq_disable();
    [   61.306415]                                lock(&(&lp->lock)->rlock);
    [   61.306415]                                lock(&dev->lock);
    [   61.306415]   <Interrupt>
    [   61.306415]     lock(&(&lp->lock)->rlock);
    [   61.306415]
    [   61.306415]  *** DEADLOCK ***
    [   61.306415]
    [   61.306415] 2 locks held by ifconfig/449:
    [   61.306415]  #0:  (rtnl_mutex){+.+.+.}, at: [<c13b68ef>] rtnl_lock+0xf/0x20
    [   61.306415]  #1:  (&(&lp->lock)->rlock){+.-...}, at: [<d0934c84>] r6040_close+0x24/0x230 [r6040]
    [   61.306415]
    [   61.306415] the dependencies between SOFTIRQ-irq-safe lock and the holding lock:
    [   61.306415] -> (&(&lp->lock)->rlock){+.-...} ops: 3049 {
    [   61.306415]    HARDIRQ-ON-W at:
    [   61.306415]                     [   61.306415] [<c1075be7>] __lock_acquire+0x577/0x1770
    [   61.306415]                     [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                     [   61.306415] [<c14bb21b>] _raw_spin_lock+0x1b/0x30
    [   61.306415]                     [   61.306415] [<d09343cc>] r6040_poll+0x2c/0x330 [r6040]
    [   61.306415]                     [   61.306415] [<c13a5577>] net_rx_action+0x197/0x340
    [   61.306415]                     [   61.306415] [<c1043d04>] __do_softirq+0xb4/0x3d0
    [   61.306415]                     [   61.306415] [<c1044037>] run_ksoftirqd+0x17/0x40
    [   61.306415]                     [   61.306415] [<c105fe91>] smpboot_thread_fn+0x141/0x180
    [   61.306415]                     [   61.306415] [<c105c84e>] kthread+0xde/0x110
    [   61.306415]                     [   61.306415] [<c14bb949>] ret_from_fork+0x19/0x30
    [   61.306415]    IN-SOFTIRQ-W at:
    [   61.306415]                     [   61.306415] [<c1075bc5>] __lock_acquire+0x555/0x1770
    [   61.306415]                     [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                     [   61.306415] [<c14bb334>] _raw_spin_lock_irqsave+0x24/0x40
    [   61.306415]                     [   61.306415] [<d0934ac0>] r6040_start_xmit+0x30/0x1d0 [r6040]
    [   61.306415]                     [   61.306415] [<c13a7d4d>] dev_hard_start_xmit+0x9d/0x2d0
    [   61.306415]                     [   61.306415] [<c13c8a38>] sch_direct_xmit+0xa8/0x140
    [   61.306415]                     [   61.306415] [<c13a8436>] __dev_queue_xmit+0x416/0x780
    [   61.306415]                     [   61.306415] [<c13a87aa>] dev_queue_xmit+0xa/0x10
    [   61.306415]                     [   61.306415] [<c13b4837>] neigh_resolve_output+0x147/0x220
    [   61.306415]                     [   61.306415] [<c144541b>] ip6_finish_output2+0x2fb/0x910
    [   61.306415]                     [   61.306415] [<c14494e6>] ip6_finish_output+0xa6/0x1a0
    [   61.306415]                     [   61.306415] [<c1449635>] ip6_output+0x55/0x320
    [   61.306415]                     [   61.306415] [<c146f4d2>] mld_sendpack+0x352/0x560
    [   61.306415]                     [   61.306415] [<c146fe55>] mld_ifc_timer_expire+0x155/0x280
    [   61.306415]                     [   61.306415] [<c108b081>] call_timer_fn+0x81/0x270
    [   61.306415]                     [   61.306415] [<c108b331>] expire_timers+0xc1/0x180
    [   61.306415]                     [   61.306415] [<c108b4f7>] run_timer_softirq+0x77/0x150
    [   61.306415]                     [   61.306415] [<c1043d04>] __do_softirq+0xb4/0x3d0
    [   61.306415]                     [   61.306415] [<c101a15c>] do_softirq_own_stack+0x1c/0x30
    [   61.306415]                     [   61.306415] [<c104416e>] irq_exit+0x8e/0xa0
    [   61.306415]                     [   61.306415] [<c1019d31>] do_IRQ+0x51/0x100
    [   61.306415]                     [   61.306415] [<c14bc176>] common_interrupt+0x36/0x40
    [   61.306415]                     [   61.306415] [<c1134928>] set_root+0x68/0xf0
    [   61.306415]                     [   61.306415] [<c1136120>] path_init+0x400/0x640
    [   61.306415]                     [   61.306415] [<c11386bf>] path_lookupat+0xf/0xe0
    [   61.306415]                     [   61.306415] [<c1139ebc>] filename_lookup+0x6c/0x100
    [   61.306415]                     [   61.306415] [<c1139fd5>] user_path_at_empty+0x25/0x30
    [   61.306415]                     [   61.306415] [<c11298c6>] SyS_faccessat+0x86/0x1e0
    [   61.306415]                     [   61.306415] [<c1129a30>] SyS_access+0x10/0x20
    [   61.306415]                     [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]                     [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]    INITIAL USE at:
    [   61.306415]                    [   61.306415] [<c107586e>] __lock_acquire+0x1fe/0x1770
    [   61.306415]                    [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                    [   61.306415] [<c14bb334>] _raw_spin_lock_irqsave+0x24/0x40
    [   61.306415]                    [   61.306415] [<d093474e>] r6040_get_stats+0x1e/0x60 [r6040]
    [   61.306415]                    [   61.306415] [<c139fb16>] dev_get_stats+0x96/0xc0
    [   61.306415]                    [   61.306415] [<c14b416e>] rtnl_fill_stats+0x36/0xfd
    [   61.306415]                    [   61.306415] [<c13b7b3c>] rtnl_fill_ifinfo+0x47c/0xce0
    [   61.306415]                    [   61.306415] [<c13bc08e>] rtmsg_ifinfo_build_skb+0x4e/0xd0
    [   61.306415]                    [   61.306415] [<c13bc120>] rtmsg_ifinfo.part.20+0x10/0x40
    [   61.306415]                    [   61.306415] [<c13bc16b>] rtmsg_ifinfo+0x1b/0x20
    [   61.306415]                    [   61.306415] [<c13a9d19>] register_netdevice+0x409/0x550
    [   61.306415]                    [   61.306415] [<c13a9e72>] register_netdev+0x12/0x20
    [   61.306415]                    [   61.306415] [<d09357e8>] r6040_init_one+0x3e8/0x500 [r6040]
    [   61.306415]                    [   61.306415] [<c12a78c7>] pci_device_probe+0x77/0xd0
    [   61.306415]                    [   61.306415] [<c12f5e15>] driver_probe_device+0x145/0x280
    [   61.306415]                    [   61.306415] [<c12f5fd9>] __driver_attach+0x89/0x90
    [   61.306415]                    [   61.306415] [<c12f43ef>] bus_for_each_dev+0x4f/0x80
    [   61.306415]                    [   61.306415] [<c12f5954>] driver_attach+0x14/0x20
    [   61.306415]                    [   61.306415] [<c12f55b7>] bus_add_driver+0x197/0x210
    [   61.306415]                    [   61.306415] [<c12f6a21>] driver_register+0x51/0xd0
    [   61.306415]                    [   61.306415] [<c12a6955>] __pci_register_driver+0x45/0x50
    [   61.306415]                    [   61.306415] [<d0938017>] 0xd0938017
    [   61.306415]                    [   61.306415] [<c100043f>] do_one_initcall+0x2f/0x140
    [   61.306415]                    [   61.306415] [<c10e48c0>] do_init_module+0x4a/0x19b
    [   61.306415]                    [   61.306415] [<c10a680e>] load_module+0x1b2e/0x2070
    [   61.306415]                    [   61.306415] [<c10a6eb9>] SyS_finit_module+0x69/0x80
    [   61.306415]                    [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]                    [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]  }
    [   61.306415]  ... key      at: [<d0936280>] __key.45893+0x0/0xfffff739 [r6040]
    [   61.306415]  ... acquired at:
    [   61.306415]    [   61.306415] [<c1074a32>] check_irq_usage+0x42/0xb0
    [   61.306415]    [   61.306415] [<c107677c>] __lock_acquire+0x110c/0x1770
    [   61.306415]    [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]    [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]    [   61.306415] [<c1336276>] phy_stop+0x16/0x80
    [   61.306415]    [   61.306415] [<d0934ce9>] r6040_close+0x89/0x230 [r6040]
    [   61.306415]    [   61.306415] [<c13a0a91>] __dev_close_many+0x61/0xa0
    [   61.306415]    [   61.306415] [<c13a0bbf>] __dev_close+0x1f/0x30
    [   61.306415]    [   61.306415] [<c13a9127>] __dev_change_flags+0x87/0x150
    [   61.306415]    [   61.306415] [<c13a9213>] dev_change_flags+0x23/0x60
    [   61.306415]    [   61.306415] [<c1416238>] devinet_ioctl+0x5f8/0x6f0
    [   61.306415]    [   61.306415] [<c1417f75>] inet_ioctl+0x65/0x90
    [   61.306415]    [   61.306415] [<c1389b54>] sock_ioctl+0x124/0x2b0
    [   61.306415]    [   61.306415] [<c113cf7c>] do_vfs_ioctl+0x7c/0x790
    [   61.306415]    [   61.306415] [<c113d6b8>] SyS_ioctl+0x28/0x50
    [   61.306415]    [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]    [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]
    [   61.306415]
    the dependencies between the lock to be acquired[   61.306415]  and SOFTIRQ-irq-unsafe lock:
    [   61.306415] -> (&dev->lock){+.+...} ops: 56 {
    [   61.306415]    HARDIRQ-ON-W at:
    [   61.306415]                     [   61.306415] [<c1075be7>] __lock_acquire+0x577/0x1770
    [   61.306415]                     [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                     [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]                     [   61.306415] [<c133747d>] phy_probe+0x4d/0xc0
    [   61.306415]                     [   61.306415] [<c1338afe>] phy_attach_direct+0xbe/0x190
    [   61.306415]                     [   61.306415] [<c1338ca7>] phy_connect_direct+0x17/0x60
    [   61.306415]                     [   61.306415] [<c1338d23>] phy_connect+0x33/0x70
    [   61.306415]                     [   61.306415] [<d09357a0>] r6040_init_one+0x3a0/0x500 [r6040]
    [   61.306415]                     [   61.306415] [<c12a78c7>] pci_device_probe+0x77/0xd0
    [   61.306415]                     [   61.306415] [<c12f5e15>] driver_probe_device+0x145/0x280
    [   61.306415]                     [   61.306415] [<c12f5fd9>] __driver_attach+0x89/0x90
    [   61.306415]                     [   61.306415] [<c12f43ef>] bus_for_each_dev+0x4f/0x80
    [   61.306415]                     [   61.306415] [<c12f5954>] driver_attach+0x14/0x20
    [   61.306415]                     [   61.306415] [<c12f55b7>] bus_add_driver+0x197/0x210
    [   61.306415]                     [   61.306415] [<c12f6a21>] driver_register+0x51/0xd0
    [   61.306415]                     [   61.306415] [<c12a6955>] __pci_register_driver+0x45/0x50
    [   61.306415]                     [   61.306415] [<d0938017>] 0xd0938017
    [   61.306415]                     [   61.306415] [<c100043f>] do_one_initcall+0x2f/0x140
    [   61.306415]                     [   61.306415] [<c10e48c0>] do_init_module+0x4a/0x19b
    [   61.306415]                     [   61.306415] [<c10a680e>] load_module+0x1b2e/0x2070
    [   61.306415]                     [   61.306415] [<c10a6eb9>] SyS_finit_module+0x69/0x80
    [   61.306415]                     [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]                     [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]    SOFTIRQ-ON-W at:
    [   61.306415]                     [   61.306415] [<c1075c0c>] __lock_acquire+0x59c/0x1770
    [   61.306415]                     [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                     [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]                     [   61.306415] [<c133747d>] phy_probe+0x4d/0xc0
    [   61.306415]                     [   61.306415] [<c1338afe>] phy_attach_direct+0xbe/0x190
    [   61.306415]                     [   61.306415] [<c1338ca7>] phy_connect_direct+0x17/0x60
    [   61.306415]                     [   61.306415] [<c1338d23>] phy_connect+0x33/0x70
    [   61.306415]                     [   61.306415] [<d09357a0>] r6040_init_one+0x3a0/0x500 [r6040]
    [   61.306415]                     [   61.306415] [<c12a78c7>] pci_device_probe+0x77/0xd0
    [   61.306415]                     [   61.306415] [<c12f5e15>] driver_probe_device+0x145/0x280
    [   61.306415]                     [   61.306415] [<c12f5fd9>] __driver_attach+0x89/0x90
    [   61.306415]                     [   61.306415] [<c12f43ef>] bus_for_each_dev+0x4f/0x80
    [   61.306415]                     [   61.306415] [<c12f5954>] driver_attach+0x14/0x20
    [   61.306415]                     [   61.306415] [<c12f55b7>] bus_add_driver+0x197/0x210
    [   61.306415]                     [   61.306415] [<c12f6a21>] driver_register+0x51/0xd0
    [   61.306415]                     [   61.306415] [<c12a6955>] __pci_register_driver+0x45/0x50
    [   61.306415]                     [   61.306415] [<d0938017>] 0xd0938017
    [   61.306415]                     [   61.306415] [<c100043f>] do_one_initcall+0x2f/0x140
    [   61.306415]                     [   61.306415] [<c10e48c0>] do_init_module+0x4a/0x19b
    [   61.306415]                     [   61.306415] [<c10a680e>] load_module+0x1b2e/0x2070
    [   61.306415]                     [   61.306415] [<c10a6eb9>] SyS_finit_module+0x69/0x80
    [   61.306415]                     [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]                     [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]    INITIAL USE at:
    [   61.306415]                    [   61.306415] [<c107586e>] __lock_acquire+0x1fe/0x1770
    [   61.306415]                    [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]                    [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]                    [   61.306415] [<c133747d>] phy_probe+0x4d/0xc0
    [   61.306415]                    [   61.306415] [<c1338afe>] phy_attach_direct+0xbe/0x190
    [   61.306415]                    [   61.306415] [<c1338ca7>] phy_connect_direct+0x17/0x60
    [   61.306415]                    [   61.306415] [<c1338d23>] phy_connect+0x33/0x70
    [   61.306415]                    [   61.306415] [<d09357a0>] r6040_init_one+0x3a0/0x500 [r6040]
    [   61.306415]                    [   61.306415] [<c12a78c7>] pci_device_probe+0x77/0xd0
    [   61.306415]                    [   61.306415] [<c12f5e15>] driver_probe_device+0x145/0x280
    [   61.306415]                    [   61.306415] [<c12f5fd9>] __driver_attach+0x89/0x90
    [   61.306415]                    [   61.306415] [<c12f43ef>] bus_for_each_dev+0x4f/0x80
    [   61.306415]                    [   61.306415] [<c12f5954>] driver_attach+0x14/0x20
    [   61.306415]                    [   61.306415] [<c12f55b7>] bus_add_driver+0x197/0x210
    [   61.306415]                    [   61.306415] [<c12f6a21>] driver_register+0x51/0xd0
    [   61.306415]                    [   61.306415] [<c12a6955>] __pci_register_driver+0x45/0x50
    [   61.306415]                    [   61.306415] [<d0938017>] 0xd0938017
    [   61.306415]                    [   61.306415] [<c100043f>] do_one_initcall+0x2f/0x140
    [   61.306415]                    [   61.306415] [<c10e48c0>] do_init_module+0x4a/0x19b
    [   61.306415]                    [   61.306415] [<c10a680e>] load_module+0x1b2e/0x2070
    [   61.306415]                    [   61.306415] [<c10a6eb9>] SyS_finit_module+0x69/0x80
    [   61.306415]                    [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]                    [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]  }
    [   61.306415]  ... key      at: [<c1f28f39>] __key.43998+0x0/0x8
    [   61.306415]  ... acquired at:
    [   61.306415]    [   61.306415] [<c1074a32>] check_irq_usage+0x42/0xb0
    [   61.306415]    [   61.306415] [<c107677c>] __lock_acquire+0x110c/0x1770
    [   61.306415]    [   61.306415] [<c107717c>] lock_acquire+0x7c/0x150
    [   61.306415]    [   61.306415] [<c14b7add>] mutex_lock_nested+0x2d/0x4a0
    [   61.306415]    [   61.306415] [<c1336276>] phy_stop+0x16/0x80
    [   61.306415]    [   61.306415] [<d0934ce9>] r6040_close+0x89/0x230 [r6040]
    [   61.306415]    [   61.306415] [<c13a0a91>] __dev_close_many+0x61/0xa0
    [   61.306415]    [   61.306415] [<c13a0bbf>] __dev_close+0x1f/0x30
    [   61.306415]    [   61.306415] [<c13a9127>] __dev_change_flags+0x87/0x150
    [   61.306415]    [   61.306415] [<c13a9213>] dev_change_flags+0x23/0x60
    [   61.306415]    [   61.306415] [<c1416238>] devinet_ioctl+0x5f8/0x6f0
    [   61.306415]    [   61.306415] [<c1417f75>] inet_ioctl+0x65/0x90
    [   61.306415]    [   61.306415] [<c1389b54>] sock_ioctl+0x124/0x2b0
    [   61.306415]    [   61.306415] [<c113cf7c>] do_vfs_ioctl+0x7c/0x790
    [   61.306415]    [   61.306415] [<c113d6b8>] SyS_ioctl+0x28/0x50
    [   61.306415]    [   61.306415] [<c100179f>] do_int80_syscall_32+0x3f/0x110
    [   61.306415]    [   61.306415] [<c14bba3f>] restore_all+0x0/0x61
    [   61.306415]
    [   61.306415]
    [   61.306415] stack backtrace:
    [   61.306415] CPU: 0 PID: 449 Comm: ifconfig Not tainted 4.9.0-gb898d2d-manuel #1
    [   61.306415] Call Trace:
    [   61.306415]  dump_stack+0x16/0x19
    [   61.306415]  check_usage+0x3f6/0x550
    [   61.306415]  ? check_usage+0x4d/0x550
    [   61.306415]  check_irq_usage+0x42/0xb0
    [   61.306415]  __lock_acquire+0x110c/0x1770
    [   61.306415]  lock_acquire+0x7c/0x150
    [   61.306415]  ? phy_stop+0x16/0x80
    [   61.306415]  mutex_lock_nested+0x2d/0x4a0
    [   61.306415]  ? phy_stop+0x16/0x80
    [   61.306415]  ? r6040_close+0x24/0x230 [r6040]
    [   61.306415]  ? __delay+0x9/0x10
    [   61.306415]  phy_stop+0x16/0x80
    [   61.306415]  r6040_close+0x89/0x230 [r6040]
    [   61.306415]  __dev_close_many+0x61/0xa0
    [   61.306415]  __dev_close+0x1f/0x30
    [   61.306415]  __dev_change_flags+0x87/0x150
    [   61.306415]  dev_change_flags+0x23/0x60
    [   61.306415]  devinet_ioctl+0x5f8/0x6f0
    [   61.306415]  inet_ioctl+0x65/0x90
    [   61.306415]  sock_ioctl+0x124/0x2b0
    [   61.306415]  ? dlci_ioctl_set+0x30/0x30
    [   61.306415]  do_vfs_ioctl+0x7c/0x790
    [   61.306415]  ? trace_hardirqs_on+0xb/0x10
    [   61.306415]  ? call_rcu_sched+0xd/0x10
    [   61.306415]  ? __put_cred+0x32/0x50
    [   61.306415]  ? SyS_faccessat+0x178/0x1e0
    [   61.306415]  SyS_ioctl+0x28/0x50
    [   61.306415]  do_int80_syscall_32+0x3f/0x110
    [   61.306415]  entry_INT80_32+0x2f/0x2f
    [   61.306415] EIP: 0xb764d364
    [   61.306415] EFLAGS: 00000286 CPU: 0
    [   61.306415] EAX: ffffffda EBX: 00000004 ECX: 00008914 EDX: bfa99d7c
    [   61.306415] ESI: bfa99e4c EDI: fffffffe EBP: 00000004 ESP: bfa99d58
    [   61.306415]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b
    [   63.836607] r6040 0000:00:08.0 eth0: Link is Down
    Signed-off-by: default avatarManuel Bessler <manuel.bessler@sensus.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c762eaa7
r6040.c 32 KB