From: Florian Fainelli <f.fainelli@gmail.com>
To: Manuel Bessler <manuel.bessler@sensus.com>, netdev@vger.kernel.org
Subject: Re: [PATCH v2 net] rebased to master
Date: Thu, 15 Dec 2016 11:59:11 -0800 [thread overview]
Message-ID: <a0663b13-c373-7e8e-ef30-2472874e1369@gmail.com> (raw)
In-Reply-To: <1481826099-12840-1-git-send-email-manuel.bessler@sensus.com>
On 12/15/2016 10:21 AM, Manuel Bessler wrote:
> '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: Manuel Bessler <manuel.bessler@sensus.com>
Would have been nice to CC the maintainer of the driver. Your patch
subject is no longer correct now, you should use the same subject you
used for the first submission.
Other than that:
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> ---
> drivers/net/ethernet/rdc/r6040.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/rdc/r6040.c b/drivers/net/ethernet/rdc/r6040.c
> index 4ff4e04..aa11b70 100644
> --- a/drivers/net/ethernet/rdc/r6040.c
> +++ b/drivers/net/ethernet/rdc/r6040.c
> @@ -472,8 +472,6 @@ static void r6040_down(struct net_device *dev)
> iowrite16(adrp[0], ioaddr + MID_0L);
> iowrite16(adrp[1], ioaddr + MID_0M);
> iowrite16(adrp[2], ioaddr + MID_0H);
> -
> - phy_stop(dev->phydev);
> }
>
> static int r6040_close(struct net_device *dev)
> @@ -481,12 +479,12 @@ static int r6040_close(struct net_device *dev)
> struct r6040_private *lp = netdev_priv(dev);
> struct pci_dev *pdev = lp->pdev;
>
> - spin_lock_irq(&lp->lock);
> + phy_stop(dev->phydev);
> napi_disable(&lp->napi);
> netif_stop_queue(dev);
> - r6040_down(dev);
>
> - free_irq(dev->irq, dev);
> + spin_lock_irq(&lp->lock);
> + r6040_down(dev);
>
> /* Free RX buffer */
> r6040_free_rxbufs(dev);
> @@ -496,6 +494,8 @@ static int r6040_close(struct net_device *dev)
>
> spin_unlock_irq(&lp->lock);
>
> + free_irq(dev->irq, dev);
> +
> /* Free Descriptor memory */
> if (lp->rx_ring) {
> pci_free_consistent(pdev,
>
--
Florian
next prev parent reply other threads:[~2016-12-15 19:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-15 17:46 [PATCH net] r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected Manuel Bessler
2016-12-15 18:21 ` [PATCH v2 net] rebased to master Manuel Bessler
2016-12-15 19:59 ` Florian Fainelli [this message]
2016-12-16 3:55 ` [PATCH v3 net] r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected Manuel Bessler
2016-12-18 2:36 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a0663b13-c373-7e8e-ef30-2472874e1369@gmail.com \
--to=f.fainelli@gmail.com \
--cc=manuel.bessler@sensus.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.