lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <a0663b13-c373-7e8e-ef30-2472874e1369@gmail.com>
Date:   Thu, 15 Dec 2016 11:59:11 -0800
From:   Florian Fainelli <f.fainelli@...il.com>
To:     Manuel Bessler <manuel.bessler@...sus.com>, netdev@...r.kernel.org
Subject: Re: [PATCH v2 net] rebased to master

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@...sus.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@...il.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ