1. 05 6月, 2013 4 次提交
  2. 31 5月, 2013 2 次提交
  3. 26 5月, 2013 1 次提交
  4. 24 5月, 2013 2 次提交
  5. 23 5月, 2013 9 次提交
  6. 21 5月, 2013 1 次提交
  7. 20 5月, 2013 2 次提交
  8. 18 5月, 2013 2 次提交
  9. 17 5月, 2013 1 次提交
    • R
      NET: mv643xx_eth: avoid lockdep dump on interface down · 3aefe2b4
      Russell King 提交于
      When the interface is shutdown, the mv643xx_eth driver hits the following
      lockdep dump:
      
      =================================
      [ INFO: inconsistent lock state ]
      3.8.0+ #303 Not tainted
      ---------------------------------
      inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
      NetworkManager/3449 [HC0[0]:SC0[0]:HE1:SE1] takes:
       (_xmit_ETHER#2){+.?...}, at: [<c02828e4>] txq_reclaim+0x60/0x230
      {IN-SOFTIRQ-W} state was registered at:
        [<c007e93c>] mark_irqflags+0xf8/0x1c4
        [<c007ee60>] __lock_acquire+0x458/0x9a4
        [<c007f8b0>] lock_acquire+0x60/0x74
        [<c03ea914>] _raw_spin_lock+0x40/0x50
        [<c0334040>] sch_direct_xmit+0xa4/0x2e4
        [<c0320880>] dev_queue_xmit+0x174/0x508
        [<c03953b0>] ip6_finish_output2+0xd0/0x3c4
        [<c03b15bc>] mld_sendpack+0x190/0x368
        [<c03b3204>] mld_ifc_timer_expire+0xc/0x58
        [<c005133c>] call_timer_fn+0x6c/0xe0
        [<c0051588>] run_timer_softirq+0x1d8/0x210
        [<c004c004>] __do_softirq+0xe0/0x1b4
        [<c004c448>] irq_exit+0x64/0x6c
        [<c000f1e0>] handle_IRQ+0x34/0x84
        [<c000e0d0>] __irq_usr+0x30/0x80
      irq event stamp: 160603
      hardirqs last  enabled at (160603): [<c00c736c>] kfree+0xa8/0xe8
      hardirqs last disabled at (160602): [<c00c72e0>] kfree+0x1c/0xe8
      softirqs last  enabled at (160304): [<c028260c>] mib_counters_update+0x5ec/0x60c
      softirqs last disabled at (160302): [<c03eab8c>] _raw_spin_lock_bh+0x14/0x54
      
      other info that might help us debug this:
       Possible unsafe locking scenario:
      
             CPU0
             ----
        lock(_xmit_ETHER#2);
        <Interrupt>
          lock(_xmit_ETHER#2);
      
       *** DEADLOCK ***
      
      1 lock held by NetworkManager/3449:
       #0:  (rtnl_mutex){+.+.+.}, at: [<c032e664>] rtnetlink_rcv+0xc/0x24
      
      stack backtrace:
      [<c0013e34>] (unwind_backtrace+0x0/0xf8) from [<c007e12c>] (print_usage_bug+0x150/0x1d4)
      [<c007e12c>] (print_usage_bug+0x150/0x1d4) from [<c007e3f8>] (mark_lock_irq+0x248/0x290)
      [<c007e3f8>] (mark_lock_irq+0x248/0x290) from [<c007e598>] (mark_lock+0x158/0x404)
      [<c007e598>] (mark_lock+0x158/0x404) from [<c007e97c>] (mark_irqflags+0x138/0x1c4)
      [<c007e97c>] (mark_irqflags+0x138/0x1c4) from [<c007ee60>] (__lock_acquire+0x458/0x9a4)
      [<c007ee60>] (__lock_acquire+0x458/0x9a4) from [<c007f8b0>] (lock_acquire+0x60/0x74)
      [<c007f8b0>] (lock_acquire+0x60/0x74) from [<c03ea914>] (_raw_spin_lock+0x40/0x50)
      [<c03ea914>] (_raw_spin_lock+0x40/0x50) from [<c02828e4>] (txq_reclaim+0x60/0x230)
      [<c02828e4>] (txq_reclaim+0x60/0x230) from [<c0282ad8>] (txq_deinit+0x24/0xcc)
      [<c0282ad8>] (txq_deinit+0x24/0xcc) from [<c0282d28>] (mv643xx_eth_stop+0x1a8/0x1bc)
      [<c0282d28>] (mv643xx_eth_stop+0x1a8/0x1bc) from [<c031e314>] (__dev_close_many+0x88/0xcc)
      [<c031e314>] (__dev_close_many+0x88/0xcc) from [<c031e380>] (__dev_close+0x28/0x3c)
      [<c031e380>] (__dev_close+0x28/0x3c) from [<c0320fa0>] (__dev_change_flags+0x7c/0x134)
      [<c0320fa0>] (__dev_change_flags+0x7c/0x134) from [<c03210e0>] (dev_change_flags+0x10/0x48)
      [<c03210e0>] (dev_change_flags+0x10/0x48) from [<c032da1c>] (do_setlink+0x1a0/0x730)
      [<c032da1c>] (do_setlink+0x1a0/0x730) from [<c032f524>] (rtnl_newlink+0x304/0x4b0)
      [<c032f524>] (rtnl_newlink+0x304/0x4b0) from [<c032ef8c>] (rtnetlink_rcv_msg+0x25c/0x2a0)
      [<c032ef8c>] (rtnetlink_rcv_msg+0x25c/0x2a0) from [<c03383a0>] (netlink_rcv_skb+0xbc/0xd8)
      [<c03383a0>] (netlink_rcv_skb+0xbc/0xd8) from [<c032e674>] (rtnetlink_rcv+0x1c/0x24)
      [<c032e674>] (rtnetlink_rcv+0x1c/0x24) from [<c03361d8>] (netlink_unicast_kernel+0x88/0xd4)
      [<c03361d8>] (netlink_unicast_kernel+0x88/0xd4) from [<c0337dd0>] (netlink_unicast+0x138/0x180)
      [<c0337dd0>] (netlink_unicast+0x138/0x180) from [<c0338020>] (netlink_sendmsg+0x208/0x32c)
      [<c0338020>] (netlink_sendmsg+0x208/0x32c) from [<c030ab48>] (sock_sendmsg+0x84/0xa4)
      [<c030ab48>] (sock_sendmsg+0x84/0xa4) from [<c030aef4>] (__sys_sendmsg+0x2ac/0x2c4)
      [<c030aef4>] (__sys_sendmsg+0x2ac/0x2c4) from [<c030c8ec>] (sys_sendmsg+0x3c/0x68)
      [<c030c8ec>] (sys_sendmsg+0x3c/0x68) from [<c000e2e0>] (ret_fast_syscall+0x0/0x3c)
      
      It seems that txq_reclaim() takes the netif tx lock:
      
              __netif_tx_lock(nq, smp_processor_id());
      
      in a context outside of softirq context, and thus is susceptible to
      deadlock should an interrupt occur.
      
      Use __netif_tx_lock_bh()/__netif_tx_unlock_bh() instead.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3aefe2b4
  10. 16 5月, 2013 3 次提交
    • F
      fec: Invert the order of function calls in fec_restart() · 1ed0d56c
      Fabio Estevam 提交于
      commit 54309fa6 ("net: fec: fix kernel oops when plug/unplug cable many times")
      introduced the following 'if' block in the beginning of fec_start():
      
      	if (netif_running(ndev)) {
      		netif_device_detach(ndev);
      		napi_disable(&fep->napi);
      		netif_stop_queue(ndev);
      		netif_tx_lock_bh(ndev);
      	}
      
      Then later in the end of fec_restart() there is another block that calls the
      opposite of each one of these functions.
      
      The correct approach would be to also call them with in the reverse order, so
      that we have as result:
      
      	if (netif_running(ndev)) {
      		netif_tx_unlock_bh(ndev);
      		netif_wake_queue(ndev);
      		napi_enable(&fep->napi);
      		netif_device_attach(ndev);
      	}
      Suggested-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1ed0d56c
    • F
      fec: Fix inconsistent lock state · 31691344
      Fabio Estevam 提交于
      fec_restart() runs in softirq context and we should use the
      netif_tx_lock_bh/netif_tx_unlock_bh() variants to avoid the following warning
      that happens since commit 54309fa6 ("net: fec: fix kernel oops when plug/unplug
      cable many times"):
      
      [    9.753168] =================================
      [    9.757540] [ INFO: inconsistent lock state ]
      [    9.761921] 3.10.0-rc1-next-20130514 #13 Not tainted
      [    9.766897] ---------------------------------
      [    9.771264] inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
      [    9.777288] swapper/0 [HC0[0]:SC1[3]:HE1:SE0] takes:
      [    9.782261]  (_xmit_ETHER#2){+.?...}, at: [<c03c24a4>] sch_direct_xmit+0xa0/0x2d4
      [    9.789879] {SOFTIRQ-ON-W} state was registered at:
      [    9.794769]   [<c0059c60>] __lock_acquire+0x528/0x1bc0
      [    9.799953]   [<c005b838>] lock_acquire+0xa0/0x108
      [    9.804780]   [<c0441320>] _raw_spin_lock+0x28/0x38
      [    9.809702]   [<c02f9fc8>] fec_restart+0x5d0/0x664
      [    9.814542]   [<c02fa738>] fec_enet_adjust_link+0xa8/0xc0
      [    9.819978]   [<c02f7a28>] phy_state_machine+0x2fc/0x370
      [    9.825323]   [<c0035ee0>] process_one_work+0x1c0/0x4a0
      [    9.830589]   [<c0036594>] worker_thread+0x138/0x394
      [    9.835587]   [<c003c620>] kthread+0xa4/0xb0
      [    9.839890]   [<c000e820>] ret_from_fork+0x14/0x34
      [    9.844728] irq event stamp: 185984
      [    9.848226] hardirqs last  enabled at (185984): [<c00232b0>] local_bh_enable_ip+0x84/0xf0
      [    9.856450] hardirqs last disabled at (185983): [<c0023270>] local_bh_enable_ip+0x44/0xf0
      [    9.864667] softirqs last  enabled at (185966): [<c0023470>] irq_enter+0x64/0x68
      [    9.872099] softirqs last disabled at (185967): [<c0023510>] irq_exit+0x9c/0xd8
      [    9.879440]
      [    9.879440] other info that might help us debug this:
      [    9.885981]  Possible unsafe locking scenario:
      [    9.885981]
      [    9.891912]        CPU0
      [    9.894364]        ----
      [    9.896814]   lock(_xmit_ETHER#2);
      [    9.900259]   <Interrupt>
      [    9.902884]     lock(_xmit_ETHER#2);
      [    9.906500]
      [    9.906500]  *** DEADLOCK ***
      Reported-by: NShawn Guo <shawn.guo@linaro.org>
      Suggested-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      31691344
    • D
      ipg: fix an unsigned widening cast of '~' truncation issue · 0d709d91
      Dan Carpenter 提交于
      The bug here is this code from ipg_nic_hard_start_xmit():
      
      	txfd->tfc &= cpu_to_le64(~IPG_TFC_TFDDONE);
      
      IPG_TFC_TFDDONE is 0x0000000080000000 so it's an unsigned int.  The
      negated value is 0x7fffffff but 0xffffffff7fffffff was intended.
      
      The other values in this file don't need to be changed but I did it for
      consistency.
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0d709d91
  11. 15 5月, 2013 7 次提交
  12. 14 5月, 2013 2 次提交
    • W
      bna: add missing iounmap() on error in bnad_init() · ba21fc69
      Wei Yongjun 提交于
      Add the missing iounmap() before return from bnad_init()
      in the error handling case.
      Introduced by commit 01b54b14
      (bna: tx rx cleanup fix).
      Signed-off-by: NWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ba21fc69
    • T
      qlge: fix dma map leak when the last chunk is not allocated · ef380794
      Thadeu Lima de Souza Cascardo 提交于
      qlge allocates chunks from a page that it maps and unmaps that page when
      the last chunk is released. When the driver is unloaded or the card is
      removed, all chunks are released and the page is unmapped for the last
      chunk.
      
      However, when the last chunk of a page is not allocated and the device
      is removed, that page is not unmapped. In fact, its last reference is
      not put and there's also a page leak. This bug prevents a device from
      being properly hotplugged.
      
      When the DMA API debug option is enabled, the following messages show
      the pending DMA allocation after we remove the driver.
      
      This patch fixes the bug by unmapping and putting the page from the ring
      if its last chunk has not been allocated.
      
      pci 0005:98:00.0: DMA-API: device driver has pending DMA allocations while released from device [count=1]
      One of leaked entries details: [device address=0x0000000060a80000] [size=65536 bytes] [mapped with DMA_FROM_DEVICE] [mapped as page]
      ------------[ cut here ]------------
      WARNING: at lib/dma-debug.c:746
      Modules linked in: qlge(-) rpadlpar_io rpaphp pci_hotplug fuse [last unloaded: qlge]
      NIP: c0000000003fc3ec LR: c0000000003fc3e8 CTR: c00000000054de60
      REGS: c0000003ee9c74e0 TRAP: 0700   Tainted: G           O  (3.7.2)
      MSR: 8000000000029032 <SF,EE,ME,IR,DR,RI>  CR: 28002424  XER: 00000001
      SOFTE: 1
      CFAR: c0000000007a39c8
      TASK = c0000003ee8d5c90[8406] 'rmmod' THREAD: c0000003ee9c4000 CPU: 31
      GPR00: c0000000003fc3e8 c0000003ee9c7760 c000000000c789f8 00000000000000ee
      GPR04: 0000000000000000 00000000000000ef 0000000000004000 0000000000010000
      GPR08: 00000000000000be c000000000b22088 c000000000c4c218 00000000007c0000
      GPR12: 0000000028002422 c00000000ff26c80 0000000000000000 000001001b0f1b40
      GPR16: 00000000100cb9d8 0000000010093088 c000000000cdf910 0000000000000001
      GPR20: 0000000000000000 c000000000dbfc00 0000000000000000 c000000000dbfb80
      GPR24: c0000003fafc9d80 0000000000000001 000000000001ff80 c0000003f38f7888
      GPR28: c000000000ddfc00 0000000000000400 c000000000bd7790 c000000000ddfb80
      NIP [c0000000003fc3ec] .dma_debug_device_change+0x22c/0x2b0
      LR [c0000000003fc3e8] .dma_debug_device_change+0x228/0x2b0
      Call Trace:
      [c0000003ee9c7760] [c0000000003fc3e8] .dma_debug_device_change+0x228/0x2b0 (unreliable)
      [c0000003ee9c7840] [c00000000079a098] .notifier_call_chain+0x78/0xf0
      [c0000003ee9c78e0] [c0000000000acc20] .__blocking_notifier_call_chain+0x70/0xb0
      [c0000003ee9c7990] [c0000000004a9580] .__device_release_driver+0x100/0x140
      [c0000003ee9c7a20] [c0000000004a9708] .driver_detach+0x148/0x150
      [c0000003ee9c7ac0] [c0000000004a8144] .bus_remove_driver+0xc4/0x150
      [c0000003ee9c7b60] [c0000000004aa58c] .driver_unregister+0x8c/0xe0
      [c0000003ee9c7bf0] [c0000000004090b4] .pci_unregister_driver+0x34/0xf0
      [c0000003ee9c7ca0] [d000000002231194] .qlge_exit+0x1c/0x34 [qlge]
      [c0000003ee9c7d20] [c0000000000e36d8] .SyS_delete_module+0x1e8/0x290
      [c0000003ee9c7e30] [c0000000000098d4] syscall_exit+0x0/0x94
      Instruction dump:
      7f26cb78 e818003a e87e81a0 e8f80028 e9180030 796b1f24 78001f24 7d6a5a14
      7d2a002a e94b0020 483a7595 60000000 <0fe00000> 2fb80000 40de0048 80120050
      ---[ end trace 4294f9abdb01031d ]---
      Mapped at:
       [<d000000002222f54>] .ql_update_lbq+0x384/0x580 [qlge]
       [<d000000002227bd0>] .ql_clean_inbound_rx_ring+0x300/0xc60 [qlge]
       [<d0000000022288cc>] .ql_napi_poll_msix+0x39c/0x5a0 [qlge]
       [<c0000000006b3c50>] .net_rx_action+0x170/0x300
       [<c000000000081840>] .__do_softirq+0x170/0x300
      Signed-off-by: NThadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
      Acked-by: NJitendra Kalsaria <Jitendra.kalsaria@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ef380794
  13. 12 5月, 2013 4 次提交
    • P
      emac: Fix EMAC soft reset on 460EX/GT · 23fbb5a8
      Petri Gynther 提交于
      Fix EMAC soft reset on 460EX/GT to select the right PHY clock source
      before and after the soft reset.
      
      EMAC with PHY should use the clock from PHY during soft reset.
      EMAC without PHY should use the internal clock during soft reset.
      
      PPC460EX/GT Embedded Processor Advanced User's Manual
      section 28.10.1 Mode Register 0 (EMACx_MR0) states:
      Note: The PHY must provide a TX Clk in order to perform a soft reset
      of the EMAC. If none is present, select the internal clock
      (SDR0_ETH_CFG[EMACx_PHY_CLK] = 1).
      After a soft reset, select the external clock.
      
      Without the fix, 460EX/GT-based boards with RGMII PHYs attached to
      EMACs experience EMAC interrupt storm and system watchdog reset when
      issuing "ifconfig eth0 down" + "ifconfig eth0 up" a few times.
      The system enters endless loop of serving emac_irq() with EMACx_ISR
      register stuck at value 0x10000000 (Rx parity error).
      
      With the fix, the above issue is no longer observed.
      Signed-off-by: NPetri Gynther <pgynther@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      23fbb5a8
    • S
      3c59x: fix PCI resource management · 4b264a16
      Sergei Shtylyov 提交于
      The driver wrongly claimed I/O ports at an address returned by pci_iomap() --
      even if it was passed an MMIO address.  Fix this by claiming/releasing all PCI
      resources in the PCI driver's probe()/remove() methods instead and get rid of
      'must_free_region' flag weirdness (why would Cardbus claim anything for us?).
      Signed-off-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4b264a16
    • G
      net/ethernet: MACB should depend on HAS_DMA · 822bc329
      Geert Uytterhoeven 提交于
      If NO_DMA=y:
      
      drivers/built-in.o: In function `macb_free_consistent':
      drivers/net/ethernet/cadence/macb.c:878: undefined reference to `dma_free_coherent'
      drivers/net/ethernet/cadence/macb.c:883: undefined reference to `dma_free_coherent'
      drivers/net/ethernet/cadence/macb.c:888: undefined reference to `dma_free_coherent'
      drivers/built-in.o: In function `macb_alloc_consistent':
      drivers/net/ethernet/cadence/macb.c:905: undefined reference to `dma_alloc_coherent'
      drivers/built-in.o: In function `macb_tx_interrupt':
      drivers/net/ethernet/cadence/macb.c:515: undefined reference to `dma_unmap_single'
      drivers/built-in.o: In function `macb_tx_error_task':
      drivers/net/ethernet/cadence/macb.c:457: undefined reference to `dma_unmap_single'
      drivers/built-in.o: In function `macb_start_xmit':
      drivers/net/ethernet/cadence/macb.c:838: undefined reference to `dma_map_single'
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: netdev@vger.kernel.org
      Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      822bc329
    • G
      net/ethernet: ARM_AT91_ETHER should depend on HAS_DMA · d914ae80
      Geert Uytterhoeven 提交于
      If NO_DMA=y:
      
      drivers/built-in.o: In function `at91ether_start':
      drivers/net/ethernet/cadence/at91_ether.c:49: undefined reference to `dma_alloc_coherent'
      drivers/net/ethernet/cadence/at91_ether.c:60: undefined reference to `dma_free_coherent'
      drivers/built-in.o: In function `at91ether_interrupt':
      drivers/net/ethernet/cadence/at91_ether.c:250: undefined reference to `dma_unmap_single'
      drivers/built-in.o: In function `at91ether_start_xmit':
      drivers/net/ethernet/cadence/at91_ether.c:169: undefined reference to `dma_map_single'
      drivers/built-in.o: In function `at91ether_close':
      drivers/net/ethernet/cadence/at91_ether.c:145: undefined reference to `dma_free_coherent'
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: netdev@vger.kernel.org
      Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d914ae80