1. 23 Mar, 2009 3 commits
    • Anton Vorontsov's avatar
      ucc_geth: Fix oops when using fixed-link support · 61fa9dcf
      Anton Vorontsov authored
      commit b1c4a9dd ("ucc_geth: Change
      uec phy id to the same format as gianfar's") introduced a regression
      in the ucc_geth driver that causes this oops when fixed-link is used:
      
      Unable to handle kernel paging request for data at address 0x00000000
      Faulting instruction address: 0xc0151270
      Oops: Kernel access of bad area, sig: 11 [#1]
      TMCUTU
      NIP: c0151270 LR: c0151270 CTR: c0017760
      REGS: cf81fa60 TRAP: 0300   Not tainted  (2.6.29-rc8)
      MSR: 00009032 <EE,ME,IR,DR>  CR: 24024042  XER: 20000000
      DAR: 00000000, DSISR: 20000000
      TASK = cf81cba0[1] 'swapper' THREAD: cf81e000
      GPR00: c0151270 cf81fb10 cf81cba0 00000000 c0272e20 c025f354 00001e80
      cf86b08c
      GPR08: d1068200 cffffb74 06000000 d106c200 42024042 10085148 0fffd000
      0ffc81a0
      GPR16: 00000001 00000001 00000000 007ffeb0 00000000 0000c000 cf83f36c
      cf83f000
      GPR24: 00000030 cf83f360 cf81fb20 00000000 d106c200 20000000 00001e80
      cf83f360
      NIP [c0151270] ucc_geth_open+0x330/0x1efc
      LR [c0151270] ucc_geth_open+0x330/0x1efc
      Call Trace:
      [cf81fb10] [c0151270] ucc_geth_open+0x330/0x1efc (unreliable)
      [cf81fba0] [c0187638] dev_open+0xbc/0x12c
      [cf81fbc0] [c0187e38] dev_change_flags+0x8c/0x1b0
      
      This patch fixes the issue by removing offending (and somewhat
      duplicate) code from init_phy() routine, and changes _probe()
      function to use uec_mdio_bus_name().
      
      Also, since we fully construct phy_bus_id in the _probe() routine,
      we no longer need ->phy_address and ->mdio_bus fields in
      ucc_geth_info structure.
      
      I wish the patch would be a bit shorter, but it seems like the only
      way to fix the issue in a sane way. Luckily, the patch has been
      tested with real PHYs and fixed-link, so no further regressions
      expected.
      Reported-by: default avatarJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
      Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
      Tested-by: default avatarJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      61fa9dcf
    • David Brownell's avatar
      dm9000: locking bugfix · e3162d38
      David Brownell authored
      This fixes a locking bug in the dm9000 driver.  It calls
      request_irq() without setting IRQF_DISABLED ... which is
      correct for handlers that support IRQ sharing, since that
      behavior is not guaranteed for shared IRQs.  However, its
      IRQ handler then wrongly assumes that IRQs are blocked.
      So the fix just uses the right spinlock primitives in the
      IRQ handler.
      
      NOTE:  this is a classic example of the type of bug which
      lockdep currently masks by forcibly setting IRQF_DISABLED
      on IRQ handlers that did not request that flag.
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e3162d38
    • Stephen Rothwell's avatar
      6580f57d
  2. 21 Mar, 2009 2 commits
  3. 20 Mar, 2009 5 commits
  4. 19 Mar, 2009 13 commits
  5. 17 Mar, 2009 3 commits
  6. 16 Mar, 2009 11 commits
  7. 15 Mar, 2009 1 commit
  8. 14 Mar, 2009 1 commit
  9. 13 Mar, 2009 1 commit
    • Lennert Buytenhek's avatar
      mv643xx_eth: fix unicast address filter corruption on mtu change · 5a893922
      Lennert Buytenhek authored
      When mv643xx_eth_open() is called to up an interface, port_start()
      will first re-program the unicast address filter, and then
      re-initialise the PORT_CONFIG register, but that will disable unicast
      promiscuous mode if it was enabled by the unicast address filter setup.
      
      This isn't a problem on ifconfig up, as ->set_rx_mode() will be called
      shortly afterwards which will program the filters again, but it does
      trigger when changing the MTU, which calls mv643xx_eth_stop() and then
      mv643xx_eth_open() by hand to repopulate the receive rings with skbuffs
      of the new size.
      
      Swap the initialisation of the PORT_START register and the call to
      the unicast filter setup function to fix this.
      Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5a893922