1. 15 4月, 2015 1 次提交
  2. 10 3月, 2015 1 次提交
  3. 09 3月, 2015 5 次提交
  4. 06 3月, 2015 9 次提交
    • S
      net: fec: fix unbalanced clk disable on driver unbind · e9647d1e
      Stefan Agner 提交于
      When the driver is removed (e.g. using unbind through sysfs), the
      clocks get disabled twice, once on fec_enet_close and once on
      fec_drv_remove. Since the clocks are enabled only once, this leads
      to a warning:
      
      WARNING: CPU: 0 PID: 402 at drivers/clk/clk.c:992 clk_core_disable+0x64/0x68()
      
      Remove the call to fec_enet_clk_enable in fec_drv_remove to balance
      the clock enable/disable calls again. This has been introduce by
      e8fcfcd5 ("net: fec: optimize the clock management to save power").
      Signed-off-by: NStefan Agner <stefan@agner.ch>
      Acked-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e9647d1e
    • P
      net: macb: Correct the MID field length value · d941bebf
      Punnaiah Choudary Kalluri 提交于
      The latest spec "I-IPA01-0266-USR Rev 10" limit the MID field length to 12 bit
      value. For previous versions it is 16 bit value.
      
      This change will not break the backward compatibility as the latest ID value is
      7 and with in the 12 bit value limit.
      Signed-off-by: NPunnaiah Choudary Kalluri <punnaia@xilinx.com>
      Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d941bebf
    • T
      net: gianfar: correctly determine the number of queue groups · f50724cd
      Tobias Waldekranz 提交于
      eTSEC of-nodes may have children which are not queue-group nodes. For
      example new-style fixed-phy declarations. These where incorrectly
      assumed to be additional queue-groups.
      
      Change the search to filter out any nodes which are not queue-groups,
      or have been disabled.
      Signed-off-by: NTobias Waldekranz <tobias@waldekranz.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f50724cd
    • F
      net: bcmgenet: properly disable password matching · 386668a6
      Florian Fainelli 提交于
      bcmgenet_set_wol() correctly sets MPD_PW_EN when a password is specified
      to match magic packets against, however, when we switch from a
      password-matching to a matching without password we would leave this bit
      turned on, and GENET would only match magic packets with passwords.
      
      This can be reproduced using the following sequence:
      
      ethtool -s eth0 wol g
      ethtool -s eth0 wol s sopass 00:11:22:33:44:55
      ethtool -s eth0 wol g
      
      The simple fix is to clear the MPD_PWD_EN bit when WAKE_MAGICSECURE is
      not set.
      
      Fixes: c51de7f3 ("net: bcmgenet: add Wake-on-LAN support code")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      386668a6
    • M
      net: eth: xgene: fix booting with devicetree · b0ab0afa
      Mark Salter 提交于
      Commit de7b5b3d ("net: eth: xgene: change APM X-Gene SoC platform
      ethernet to support ACPI") breaks booting with devicetree with UEFI
      firmware. In that case, I get:
      
      Unhandled fault: synchronous external abort (0x96000010) at 0xfffffc0000620010
       Internal error: : 96000010 [#1] SMP
       Modules linked in: vfat fat xfs libcrc32c ahci_xgene libahci_platform libahci
       CPU: 7 PID: 634 Comm: NetworkManager Not tainted 4.0.0-rc1+ #4
       Hardware name: AppliedMicro Mustang/Mustang, BIOS 1.1.0-rh-0.14 Mar  1 2015
       task: fffffe03d4c7e100 ti: fffffe03d4e24000 task.ti: fffffe03d4e24000
       PC is at xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
       LR is at xgene_gmac_tx_enable+0x2c/0x50
       pc : [<fffffe000069d6fc>] lr : [<fffffe000069dcc4>] pstate: 80000145
       sp : fffffe03d4e27590
       x29: fffffe03d4e27590 x28: 0000000000000000
       x27: fffffe03d4e277c0 x26: fffffe03da8fda10
       x25: fffffe03d4e2760c x24: fffffe03d49e28c0
       x23: fffffc0000620004 x22: 0000000000000000
       x21: fffffc0000620000 x20: fffffc0000620010
       x19: 000000000000000b x18: 000003ffd4a96020
       x17: 000003ff7fc1f7a0 x16: fffffe000079b9cc
       x15: 0000000000000000 x14: 0000000000000000
       x13: 0000000000000000 x12: fffffe03d4e24000
       x11: fffffe03d4e27da0 x10: 0000000000000001
       x9 : 0000000000000000 x8 : fffffe03d4e27a20
       x7 : 0000000000000000 x6 : 00000000ffffffef
       x5 : fffffe000105f7d0 x4 : fffffe00007ca8c8
       x3 : fffffe03d4e2760c x2 : 0000000000000000
       x1 : fffffc0000620000 x0 : 0000000040000000
      
       Process NetworkManager (pid: 634, stack limit = 0xfffffe03d4e24028)
       Stack: (0xfffffe03d4e27590 to 0xfffffe03d4e28000)
       ...
       Call trace:
       [<fffffe000069d6fc>] xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
       [<fffffe000069dcc0>] xgene_gmac_tx_enable+0x28/0x50
       [<fffffe00006a112c>] xgene_enet_open+0x2c/0x130
       [<fffffe00007b9254>] __dev_open+0xc8/0x148
       [<fffffe00007b956c>] __dev_change_flags+0x90/0x158
       [<fffffe00007b9664>] dev_change_flags+0x30/0x70
       [<fffffe00007c8ab8>] do_setlink+0x278/0x870
       [<fffffe00007c95bc>] rtnl_newlink+0x404/0x6a8
       [<fffffe00007c8040>] rtnetlink_rcv_msg+0x98/0x218
       [<fffffe00007e78e4>] netlink_rcv_skb+0xe0/0xf8
       [<fffffe00007c7f94>] rtnetlink_rcv+0x30/0x44
       [<fffffe00007e6f2c>] netlink_unicast+0xfc/0x210
       [<fffffe00007e75b8>] netlink_sendmsg+0x498/0x5ac
       [<fffffe00007990b8>] do_sock_sendmsg+0xa4/0xcc
       [<fffffe000079a958>] ___sys_sendmsg+0x1fc/0x208
       [<fffffe000079b984>] __sys_sendmsg+0x4c/0x94
       [<fffffe000079b9f8>] SyS_sendmsg+0x2c/0x3c
      
      The problem here is that the enet hw clocks are not getting
      initialized because of a test to avoid the initialization if
      UEFI is used to boot. This is an incorrect test. When booting
      with UEFI and devicetree, the kernel must still initialize
      the enet hw clocks. If booting with ACPI, the clock hw is
      not exposed to the kernel and it is that case where we want
      to avoid initializing clocks.
      Signed-off-by: NMark Salter <msalter@redhat.com>
      Acked-by: NFeng Kan <fkan@apm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0ab0afa
    • B
      bnx2x: Force fundamental reset for EEH recovery · da293700
      Brian King 提交于
      EEH recovery for bnx2x based adapters is not reliable on all Power
      systems using the default hot reset, which can result in an
      unrecoverable EEH error. Forcing the use of fundamental reset
      during EEH recovery fixes this.
      
      Cc: stable<stable@vger.kernel.org>
      Signed-off-by: NBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      da293700
    • D
      xen-netback: refactor xenvif_handle_frag_list() · b0c21bad
      David Vrabel 提交于
      When handling a from-guest frag list, xenvif_handle_frag_list()
      replaces the frags before calling the destructor to clean up the
      original (foreign) frags.  Whilst this is safe (the destructor doesn't
      actually use the frags), it looks odd.
      
      Reorder the function to be less confusing.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0c21bad
    • D
      xen-netback: unref frags when handling a from-guest skb with a frag list · 49d9991a
      David Vrabel 提交于
      Every time a VIF is destroyed up to 256 pages may be leaked if packets
      with more than MAX_SKB_FRAGS frags were transmitted from the guest.
      Even worse, if another user of ballooned pages allocated one of these
      ballooned pages it would not handle the unexpectedly >1 page count
      (e.g., gntdev would deadlock when unmapping a grant because the page
      count would never reach 1).
      
      When handling a from-guest skb with a frag list, unref the frags
      before releasing them so they are freed correctly when the VIF is
      destroyed.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      49d9991a
    • D
      xen-netback: return correct ethtool stats · d63951d7
      David Vrabel 提交于
      Use correct pointer arithmetic to get the pointer to each stat.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d63951d7
  5. 05 3月, 2015 6 次提交
    • A
      ARM: fix typos in smc91x platform data · 04b91701
      Arnd Bergmann 提交于
      I recently did a rework of the smc91x driver and did some build-testing
      by compiling hundreds of randconfig kernels. Unfortunately, my script
      was wrong and did not actually test the configurations that mattered,
      so I introduced stupid typos in almost every file I touched.
      
      I fixed my script now, built all configurations that actually matter
      and fixed all the typos, this is the result.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Fixes: b70661c7 ("net: smc91x: use run-time configuration on all ARM machines")
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      04b91701
    • J
      team: don't traverse port list using rcu in team_set_mac_address · 9215f437
      Jiri Pirko 提交于
      Currently the list is traversed using rcu variant. That is not correct
      since dev_set_mac_address can be called which eventually calls
      rtmsg_ifinfo_build_skb and there, skb allocation can sleep. So fix this
      by remove the rcu usage here.
      
      Fixes: 3d249d4c "net: introduce ethernet teaming device"
      Signed-off-by: NJiri Pirko <jiri@resnulli.us>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9215f437
    • F
      net: fec: fix rcv is not last issue when do suspend/resume test · 61615cd2
      Fugang Duan 提交于
      When do suspend/resume stress test, some log shows "rcv is not +last".
      The issue is that enet suspend will disable phy clock, phy link down,
      after resume back, enet MAC redo initial and ready to tx/rx packet,
      but phy still is not ready which is doing auto-negotiation. When phy
      link is not up, don't schdule napi soft irq.
      
      [Peter]
      It has fixed kernel panic after long time suspend/resume test
      with nfs rootfs.
      
      [ 8864.429458] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.434799] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.440088] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.445424] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.450782] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.456111] Unable to handle kernel NULL pointer dereference at virtual address 00000000
      [ 8864.464225] pgd = 80004000
      [ 8864.466997] [00000000] *pgd=00000000
      [ 8864.470627] Internal error: Oops: 17 [#1] SMP ARM
      [ 8864.475353] Modules linked in: evbug
      [ 8864.479006] CPU: 0 PID: 3 Comm: ksoftirqd/0 Not tainted 4.0.0-rc1-00044-g7a2a1d2 #234
      [ 8864.486854] Hardware name: Freescale i.MX6 SoloX (Device Tree)
      [ 8864.492709] task: be069380 ti: be07a000 task.ti: be07a000
      [ 8864.498137] PC is at memcpy+0x80/0x330
      [ 8864.501919] LR is at gro_pull_from_frag0+0x34/0xa8
      [ 8864.506735] pc : [<802bb080>]    lr : [<8057c204>]    psr: 00000113
      [ 8864.506735] sp : be07bbd4  ip : 00000010  fp : be07bc0c
      [ 8864.518235] r10: 0000000e  r9 : 00000000  r8 : 809c7754
      [ 8864.523479] r7 : 809c7754  r6 : bb43c040  r5 : bd280cc0  r4 : 00000012
      [ 8864.530025] r3 : 00000804  r2 : fffffff2  r1 : 00000000  r0 : bb43b83c
      [ 8864.536575] Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      [ 8864.543904] Control: 10c5387d  Table: bd14c04a  DAC: 00000015
      [ 8864.549669] Process ksoftirqd/0 (pid: 3, stack limit = 0xbe07a210)
      [ 8864.555869] Stack: (0xbe07bbd4 to 0xbe07c000)
      [ 8864.560250] bbc0:                                              bd280cc0 bb43c040 809c7754
      [ 8864.568455] bbe0: 809c7754 bb43b83c 00000012 8057c204 00000000 bd280cc0 bd8a0718 00000003
      [ 8864.576658] bc00: be07bc5c be07bc10 8057ebf0 8057c1dc 00000000 00000000 8057ecc4 bef59760
      [ 8864.584863] bc20: 00000002 bd8a0000 be07bc64 809c7754 00000000 bd8a0718 bd280cc0 bd8a0000
      [ 8864.593066] bc40: 00000000 0000001c 00000000 bd8a0000 be07bc74 be07bc60 8057f148 8057eb90
      [ 8864.601268] bc60: bf0810a0 00000000 be07bcf4 be07bc78 8044e7b4 8057f12c 00000000 8007df6c
      [ 8864.609470] bc80: bd8a0718 00000040 00000000 bd280a80 00000002 00000019 bd8a0600 bd8a1214
      [ 8864.617672] bca0: bd8a0690 bf0810a0 00000000 00000000 bd8a1000 00000000 00000027 bd280cc0
      [ 8864.625874] bcc0: 80062708 800625cc 000943db bd8a0718 00000001 000d1166 00000040 be7c1ec0
      [ 8864.634077] bce0: 0000012c be07bd00 be07bd3c be07bcf8 8057fc98 8044e3ac 809c2ec0 3ddff000
      [ 8864.642280] bd00: be07bd00 be07bd00 be07bd08 be07bd08 00000000 00000020 809c608c 00000003
      [ 8864.650481] bd20: 809c6080 40000001 809c6088 00200100 be07bd84 be07bd40 8002e690 8057fac8
      [ 8864.658684] bd40: be07bd64 be07bd50 00000001 04208040 000d1165 0000000a be07bd84 809c0d7c
      [ 8864.666885] bd60: 00000000 809c6af8 00000000 00000001 be008000 00000000 be07bd9c be07bd88
      [ 8864.675087] bd80: 8002eb64 8002e564 00000125 809c0d7c be07bdc4 be07bda0 8006f100 8002eaac
      [ 8864.683291] bda0: c080e10c be07bde8 809c6c6c c080e100 00000002 00000000 be07bde4 be07bdc8
      [ 8864.691492] bdc0: 800087a0 8006f098 806f2934 20000013 ffffffff be07be1c be07be44 be07bde8
      [ 8864.699695] bde0: 800133a4 80008784 00000001 00000001 00000000 00000000 be7c1680 00000000
      [ 8864.707896] be00: be0cfe00 bd93eb40 00000002 00000000 00000000 be07be44 be07be00 be07be30
      [ 8864.716098] be20: 8006278c 806f2934 20000013 ffffffff be069380 be7c1680 be07be7c be07be48
      [ 8864.724300] be40: 80049cfc 806f2910 00000001 00000000 80049cb4 00000000 be07be7c be7c1680
      [ 8864.732502] be60: be3289c0 be069380 bd23b600 be0cfe00 be07bebc be07be80 806ed614 80049c68
      [ 8864.740706] be80: be07a000 0000020a 809c608c 00000003 00000001 8002e858 be07a000 be035740
      [ 8864.748907] bea0: 00000000 00000001 809d4598 00000000 be07bed4 be07bec0 806edd0c 806ed440
      [ 8864.757110] bec0: be07a000 be07a000 be07bee4 be07bed8 806edd68 806edcf0 be07bef4 be07bee8
      [ 8864.765311] bee0: 8002e860 806edd34 be07bf24 be07bef8 800494b0 8002e828 be069380 00000000
      [ 8864.773512] bf00: be035780 be035740 8004938c 00000000 00000000 00000000 be07bfac be07bf28
      [ 8864.781715] bf20: 80045928 80049398 be07bf44 00000001 00000000 be035740 00000000 00030003
      [ 8864.789917] bf40: dead4ead ffffffff ffffffff 80a2716c 80b59b00 00000000 8088c954 be07bf5c
      [ 8864.798120] bf60: be07bf5c 00000000 00000000 dead4ead ffffffff ffffffff 80a2716c 00000000
      [ 8864.806320] bf80: 00000000 8088c954 be07bf88 be07bf88 be035780 8004584c 00000000 00000000
      [ 8864.814523] bfa0: 00000000 be07bfb0 8000ed10 80045858 00000000 00000000 00000000 00000000
      [ 8864.822723] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [ 8864.830925] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 5ffbb5f7 f9fcf5e7
      [ 8864.839115] Backtrace:
      [ 8864.841631] [<8057c1d0>] (gro_pull_from_frag0) from [<8057ebf0>] (dev_gro_receive+0x6c/0x3f8)
      [ 8864.850173]  r6:00000003 r5:bd8a0718 r4:bd280cc0 r3:00000000
      [ 8864.855958] [<8057eb84>] (dev_gro_receive) from [<8057f148>] (napi_gro_receive+0x28/0xac)
      [ 8864.864152]  r10:bd8a0000 r9:00000000 r8:0000001c r7:00000000 r6:bd8a0000 r5:bd280cc0
      [ 8864.872115]  r4:bd8a0718
      [ 8864.874713] [<8057f120>] (napi_gro_receive) from [<8044e7b4>] (fec_enet_rx_napi+0x414/0xc74)
      [ 8864.883167]  r5:00000000 r4:bf0810a0
      [ 8864.886823] [<8044e3a0>] (fec_enet_rx_napi) from [<8057fc98>] (net_rx_action+0x1dc/0x2ec)
      [ 8864.895016]  r10:be07bd00 r9:0000012c r8:be7c1ec0 r7:00000040 r6:000d1166 r5:00000001
      [ 8864.902982]  r4:bd8a0718
      [ 8864.905570] [<8057fabc>] (net_rx_action) from [<8002e690>] (__do_softirq+0x138/0x2c4)
      [ 8864.913417]  r10:00200100 r9:809c6088 r8:40000001 r7:809c6080 r6:00000003 r5:809c608c
      [ 8864.921382]  r4:00000020
      [ 8864.923966] [<8002e558>] (__do_softirq) from [<8002eb64>] (irq_exit+0xc4/0x138)
      [ 8864.931289]  r10:00000000 r9:be008000 r8:00000001 r7:00000000 r6:809c6af8 r5:00000000
      [ 8864.939252]  r4:809c0d7c
      [ 8864.941841] [<8002eaa0>] (irq_exit) from [<8006f100>] (__handle_domain_irq+0x74/0xe8)
      [ 8864.949688]  r4:809c0d7c r3:00000125
      [ 8864.953342] [<8006f08c>] (__handle_domain_irq) from [<800087a0>] (gic_handle_irq+0x28/0x68)
      [ 8864.961707]  r9:00000000 r8:00000002 r7:c080e100 r6:809c6c6c r5:be07bde8 r4:c080e10c
      [ 8864.969597] [<80008778>] (gic_handle_irq) from [<800133a4>] (__irq_svc+0x44/0x5c)
      [ 8864.977097] Exception stack(0xbe07bde8 to 0xbe07be30)
      [ 8864.982173] bde0:                   00000001 00000001 00000000 00000000 be7c1680 00000000
      [ 8864.990377] be00: be0cfe00 bd93eb40 00000002 00000000 00000000 be07be44 be07be00 be07be30
      [ 8864.998573] be20: 8006278c 806f2934 20000013 ffffffff
      [ 8865.003638]  r7:be07be1c r6:ffffffff r5:20000013 r4:806f2934
      [ 8865.009447] [<806f2904>] (_raw_spin_unlock_irq) from [<80049cfc>] (finish_task_switch+0xa0/0x160)
      [ 8865.018334]  r4:be7c1680 r3:be069380
      [ 8865.021993] [<80049c5c>] (finish_task_switch) from [<806ed614>] (__schedule+0x1e0/0x5dc)
      [ 8865.030098]  r8:be0cfe00 r7:bd23b600 r6:be069380 r5:be3289c0 r4:be7c1680
      [ 8865.036942] [<806ed434>] (__schedule) from [<806edd0c>] (preempt_schedule_common+0x28/0x44)
      [ 8865.045307]  r9:00000000 r8:809d4598 r7:00000001 r6:00000000 r5:be035740 r4:be07a000
      [ 8865.053197] [<806edce4>] (preempt_schedule_common) from [<806edd68>] (_cond_resched+0x40/0x48)
      [ 8865.061822]  r4:be07a000 r3:be07a000
      [ 8865.065472] [<806edd28>] (_cond_resched) from [<8002e860>] (run_ksoftirqd+0x44/0x64)
      [ 8865.073252] [<8002e81c>] (run_ksoftirqd) from [<800494b0>] (smpboot_thread_fn+0x124/0x190)
      [ 8865.081550] [<8004938c>] (smpboot_thread_fn) from [<80045928>] (kthread+0xdc/0xf8)
      [ 8865.089133]  r10:00000000 r9:00000000 r8:00000000 r7:8004938c r6:be035740 r5:be035780
      [ 8865.097097]  r4:00000000 r3:be069380
      [ 8865.100752] [<8004584c>] (kthread) from [<8000ed10>] (ret_from_fork+0x14/0x24)
      [ 8865.107990]  r7:00000000 r6:00000000 r5:8004584c r4:be035780
      [ 8865.113767] Code: e320f000 e4913004 e4914004 e4915004 (e4916004)
      [ 8865.120006] ---[ end trace b0a4c6bd499288ca ]---
      [ 8865.124697] Kernel panic - not syncing: Fatal exception in interrupt
      [ 8865.131084] ---[ end Kernel panic - not syncing: Fatal exception in interrupt
      
      Cc: [v3.19+] stable@vger.kernel.org
      Tested-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      61615cd2
    • I
      drivers: net: xgene: fix new firmware backward compatibility with older driver · ecadf4e7
      Iyappan Subramanian 提交于
      This patch fixes the backward compatibile of the older driver with the
      newer firmware by making the binding unique so that the older driver won't
      recognize the non-supported interfaces.
      Signed-off-by: NIyappan Subramanian <isubramanian@apm.com>
      Signed-off-by: NKeyur Chudgar <kchudgar@apm.com>
      Tested-by: NMark Langsdorf <mlangsdo@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ecadf4e7
    • N
      bcm63xx_enet: fix poll callback. · cd33ccf5
      Nicolas Schichan 提交于
      In case there was some tx buffer reclaimed and not enough rx packets
      to consume the whole budget, napi_complete would not be called and
      interrupts would be kept disabled, effectively resulting in the
      network core never to call the poll callback again and no rx/tx
      interrupts to be fired either.
      
      Fix that by only accounting the rx work done in the poll callback.
      Signed-off-by: NNicolas Schichan <nschichan@freebox.fr>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cd33ccf5
    • A
      stmmac: check IRQ availability early on probe · 8f02d8da
      Alexey Brodkin 提交于
      Currently we're getting IRQs after lots of resources are already
      allocated:
       * netdev
       * clocks
       * MDIO bus
      Also HW gets initialized by the time when checking IRQs as well.
      
      Now there's a possibility for master interrupt controller to be not
      probed yet. This will lead to exit from GMAC probe routine with "-
      EPROBE_DEFER" and so deferred probe will hapen later on.
      
      But since we exited the first GMAC probe without release of all
      allocated resources there could be conflicts on subsequent probes.
      
      For example this is what happens for me:
       --->8---
       stmmaceth e0018000.ethernet: no reset control found
       stmmac - user ID: 0x10, Synopsys ID: 0x37
        Ring mode enabled
        DMA HW capability register supported
        Normal descriptors
        RX Checksum Offload Engine supported (type 2)
        TX Checksum insertion supported
        Enable RX Mitigation via HW Watchdog Timer
       libphy: stmmac: probed
       eth0: PHY ID 20005c7a at 1 IRQ POLL (stmmac-0:01) active
       platform e0018000.ethernet: Driver stmmaceth requests probe deferral
       ...
       ...
       ...
       stmmaceth e0018000.ethernet: no reset control found
       stmmac - user ID: 0x10, Synopsys ID: 0x37
        Ring mode enabled
        DMA HW capability register supported
        Normal descriptors
        RX Checksum Offload Engine supported (type 2)
        TX Checksum insertion supported
        Enable RX Mitigation via HW Watchdog Timer
       ------------[ cut here ]------------
       WARNING: CPU: 0 PID: 6 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x4e/0x68()
       sysfs: cannot create duplicate filename
      '/devices/platform/axs10x_mb/e0018000.ethernet/mdio_bus/stmmac-0'
       CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 4.0.0-rc1-next-20150303+#8
       Workqueue: deferwq deferred_probe_work_func
      
       Stack Trace:
        arc_unwind_core+0xb8/0x114
        warn_slowpath_common+0x5a/0x8c
        warn_slowpath_fmt+0x2e/0x38
        sysfs_warn_dup+0x4e/0x68
        sysfs_create_dir_ns+0x98/0xa0
        kobject_add_internal+0x8c/0x2e8
        kobject_add+0x4a/0x8c
        device_add+0xc6/0x448
        mdiobus_register+0x6c/0x164
        stmmac_mdio_register+0x112/0x264
        stmmac_dvr_probe+0x6c0/0x85c
        stmmac_pltfr_probe+0x2e4/0x50c
        platform_drv_probe+0x26/0x5c
        really_probe+0x76/0x1dc
        bus_for_each_drv+0x42/0x7c
        device_attach+0x64/0x6c
        bus_probe_device+0x74/0xa4
        deferred_probe_work_func+0x50/0x84
        process_one_work+0xf8/0x2cc
        worker_thread+0x110/0x478
        kthread+0x8a/0x9c
        ret_from_fork+0x14/0x18
       ---[ end trace a2dfaa7d630c8be1 ]---
       ------------[ cut here ]------------
       WARNING: CPU: 0 PID: 6 at lib/kobject.c:240
      kobject_add_internal+0x218/0x2e8()
       kobject_add_internal failed for stmmac-0 with -EEXIST, don't try to
      register things with the same name in the same di.
       CPU: 0 PID: 6 Comm: kworker/u2:0 Tainted: G        W
      4.0.0-rc1-next-20150303+ #8
       Workqueue: deferwq deferred_probe_work_func
      
       Stack Trace:
        arc_unwind_core+0xb8/0x114
        warn_slowpath_common+0x5a/0x8c
        warn_slowpath_fmt+0x2e/0x38
        kobject_add_internal+0x218/0x2e8
        kobject_add+0x4a/0x8c
        device_add+0xc6/0x448
        mdiobus_register+0x6c/0x164
        stmmac_mdio_register+0x112/0x264
        stmmac_dvr_probe+0x6c0/0x85c
        stmmac_pltfr_probe+0x2e4/0x50c
        platform_drv_probe+0x26/0x5c
        really_probe+0x76/0x1dc
        bus_for_each_drv+0x42/0x7c
        device_attach+0x64/0x6c
        bus_probe_device+0x74/0xa4
        deferred_probe_work_func+0x50/0x84
        process_one_work+0xf8/0x2cc
        worker_thread+0x110/0x478
        kthread+0x8a/0x9c
        ret_from_fork+0x14/0x18
       ---[ end trace a2dfaa7d630c8be2 ]---
       libphy: mii_bus stmmac-0 failed to register
       : Cannot register as MDIO bus
       stmmac_pltfr_probe: main driver probe failed
       stmmaceth: probe of e0018000.ethernet failed with error -22
       --->8---
      
      Essential fix is to check for IRQs availability as early as possible and
      then safely go to deferred probe if IRQs are not there yet.
      Signed-off-by: NAlexey Brodkin <abrodkin@synopsys.com>
      Cc: Vineet Gupta <vgupta@synopsys.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
      Cc: Sonic Zhang <sonic.zhang@analog.com>
      Cc: David S. Miller <davem@davemloft.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8f02d8da
  6. 04 3月, 2015 2 次提交
  7. 03 3月, 2015 6 次提交
  8. 02 3月, 2015 10 次提交