28 Jul, 2010

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    s2io: fixing DBG_PRINT() macro
    ath9k: fix dma direction for map/unmap in ath_rx_tasklet
    net: dev_forward_skb should call nf_reset
    net sched: fix race in mirred device removal
    tun: avoid BUG, dump packet on GSO errors
    bonding: set device in RLB ARP packet handler
    wimax/i2400m: Add PID & VID for Intel WiMAX 6250
    ipv6: Don't add routes to ipv6 disabled interfaces.
    net: Fix skb_copy_expand() handling of ->csum_start
    net: Fix corruption of skb csum field in pskb_expand_head() of net/core/skbuff.c
    macvtap: Limit packet queue length
    ixgbe/igb: catch invalid VF settings
    bnx2x: Advance a module version
    bnx2x: Protect statistics ramrod and sequence number
    bnx2x: Protect a SM state change
    wireless: use netif_rx_ni in ieee80211_send_layer2_update

    Linus Torvalds
     

27 Jul, 2010

4 commits

  • Patch 9e39f7c5b311a306977c5471f9e2ce4c456aa038 changed the
    DBG_PRINT() macro and the if clause was wrongly changed. It means
    that currently all the DBG_PRINT are being printed, flooding the
    kernel log buffer with things like:

    s2io: eth6: Next block at: c0000000b9c90000
    s2io: eth6: In Neterion Tx routine

    Signed-off-by: Breno Leitao
    Acked-by: Sreenivasa Honnur
    Signed-off-by: David S. Miller

    Breno Leitao
     
  • David S. Miller
     
  • For edma, we should use DMA_BIDIRECTIONAL, or else use
    DMA_FROM_DEVICE.

    This is found to address "BUG at arch/x86/mm/physaddr.c:5"
    as described here:

    http://lkml.org/lkml/2010/7/14/21

    Signed-off-by: Ming Lei
    Signed-off-by: John W. Linville

    Ming Lei
     
  • WARNING: drivers/net/built-in.o(.data+0x24): Section mismatch in reference from
    the variable dec_lance_tc_driver to the function .init.text:dec_lance_tc_probe()
    The variable dec_lance_tc_driver references
    the function __init dec_lance_tc_probe()
    If the reference is valid then annotate the
    variable with __init* or __refdata (see linux/init.h) or name the variable:
    *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

    Fixing this one results in a new mismatch:

    WARNING: drivers/net/built-in.o(.devinit.text+0x14): Section mismatch in reference from the function dec_lance_tc_probe() to the function .init.text:dec_lance_probe()
    The function __devinit dec_lance_tc_probe() references
    a function __init dec_lance_probe().
    If dec_lance_probe is only used by dec_lance_tc_probe then
    annotate dec_lance_probe with a matching annotation.

    Signed-off-by: Ralf Baechle

    Ralf Baechle
     

25 Jul, 2010

3 commits

  • David S. Miller
     
  • There are still some LRO cards that cause GSO errors in tun,
    and BUG on this is an unfriendly way to tell the admin
    to disable LRO.

    Further, experience shows we might have more GSO bugs lurking.
    See https://bugzilla.kernel.org/show_bug.cgi?id=16413
    as a recent example.
    dumping a packet will make it easier to figure it out.

    Replace BUG with warning+dump+drop the packet to make
    GSO errors in tun less critical and easier to debug.

    Signed-off-by: Michael S. Tsirkin
    Tested-by: Alex Unigovsky
    Acked-by: Herbert Xu
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • After:

    commit 6146b1a4da98377e4abddc91ba5856bef8f23f1e
    Author: Jay Vosburgh
    Date: Tue Nov 4 17:51:15 2008 -0800

    bonding: Fix ALB mode to balance traffic on VLANs

    the dev field in the RLB ARP packet handler was set to NULL to wildcard
    and accommodate balancing VLANs on top of bonds.

    This has the side-effect of the packet handler being called against
    other, non RLB-enabled bonds, and a kernel oops results when it tries to
    dereference rx_hashtbl in rlb_update_entry_from_arp(), which won't be
    set for those bonds, e.g. active-backup.

    With the __netif_receive_skb() changes from:

    commit 1f3c8804acba841b5573b953f5560d2683d2db0d
    Author: Andy Gospodarek
    Date: Mon Dec 14 10:48:58 2009 +0000

    bonding: allow arp_ip_targets on separate vlans to use arp validation

    frames received on VLANs correctly make their way to the bond's handler,
    so we no longer need to wildcard the device.

    The oops can be reproduced by:

    modprobe bonding

    echo active-backup > /sys/class/net/bond0/bonding/mode
    echo 100 > /sys/class/net/bond0/bonding/miimon
    ifconfig bond0 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx
    echo +eth0 > /sys/class/net/bond0/bonding/slaves
    echo +eth1 > /sys/class/net/bond0/bonding/slaves

    echo +bond1 > /sys/class/net/bonding_masters
    echo balance-alb > /sys/class/net/bond1/bonding/mode
    echo 100 > /sys/class/net/bond1/bonding/miimon
    ifconfig bond1 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx
    echo +eth2 > /sys/class/net/bond1/bonding/slaves
    echo +eth3 > /sys/class/net/bond1/bonding/slaves

    Pass some traffic on bond0. Boom.

    [ Tested, behaves as advertised. I do not believe a test of the bonding
    mode is necessary, as there is no race between the packet handler and
    the bonding mode changing (the mode can only change when the device is
    closed). Also updated the log message to include the reproduction and
    full commit ids. -J ]

    Signed-off-by: Greg Edwards
    Signed-off-by: Jay Vosburgh
    Acked-by: Andy Gospodarek
    Signed-off-by: David S. Miller

    Greg Edwards
     

23 Jul, 2010

2 commits

  • This version of intel wimax device was found in my IBM ThinkPad x201

    Signed-off-by: Alexey Shvetsov

    Alexey Shvetsov
     
  • Mark Wagner reported OOM symptoms when sending UDP traffic over
    a macvtap link to a kvm receiver.

    This appears to be caused by the fact that macvtap packet queues
    are unlimited in length. This means that if the receiver can't
    keep up with the rate of flow, then we will hit OOM. Of course
    it gets worse if the OOM killer then decides to kill the receiver.

    This patch imposes a cap on the packet queue length, in the same
    way as the tuntap driver, using the device TX queue length.

    Please note that macvtap currently has no way of giving congestion
    notification, that means the software device TX queue cannot be
    used and packets will always be dropped once the macvtap driver
    queue fills up.

    This shouldn't be a great problem for the scenario where macvtap
    is used to feed a kvm receiver, as the traffic is most likely
    external in origin so congestion notification can't be applied
    anyway.

    Of course, if anybody decides to complain about guest-to-guest
    UDP packet loss down the track, then we may have to revisit this.

    Incidentally, this patch also fixes a real memory leak when
    macvtap_get_queue fails.

    Chris Wright noticed that for this patch to work, we need a
    non-zero TX queue length. This patch includes his work to change
    the default macvtap TX queue length to 500.

    Reported-by: Mark Wagner
    Signed-off-by: Herbert Xu
    Acked-by: Chris Wright
    Acked-by: Arnd Bergmann
    Signed-off-by: David S. Miller

    Herbert Xu
     

22 Jul, 2010

4 commits

  • Some ixgbe cards put an invalid VF device ID in the PCIe SR-IOV
    capability. The ixgbe driver is only valid for PFs or non SR-IOV
    hardware. It seems that the same problem could occur on igb hardware as
    well, so if we discover we are trying to initialize a VF in ixbge_probe
    or igb_probe, print an error and exit.

    Based on a patch for ixgbe from Chris Wright .

    Signed-off-by: Andy Gospodarek
    Cc: Chris Wright
    Acked-by: Chris Wright
    Acked-by: Greg Rose
    Signed-off-by: David S. Miller

    Andy Gospodarek
     
  • Advance a module version to 1.52.53-2.

    Signed-off-by: Vladislav Zolotarov
    Signed-off-by: Dmitry Kravkov
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Vladislav Zolotarov
     
  • Bug fix: Protect statistics ramrod sending code and a statistics counter update
    with a spinlock. Otherwise there was a race condition that would allow sending
    a statistics ramrods with the same sequence number or with sequence numbers not
    in a natural order, which would cause a FW assert.

    Signed-off-by: Vladislav Zolotarov
    Signed-off-by: Dmitry Kravkov
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Vladislav Zolotarov
     
  • Bug fix: Protect the statistics state machine state update with a
    spinlock. Otherwise there was a race condition that would cause the
    statistics to stay enabled despite the fact that they were disabled in
    the LINK_DOWN event handler.

    Signed-off-by: Vladislav Zolotarov
    Signed-off-by: Dmitry Kravkov
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Vladislav Zolotarov
     

21 Jul, 2010

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (24 commits)
    bridge: Partially disable netpoll support
    tcp: fix crash in tcp_xmit_retransmit_queue
    IPv6: fix CoA check in RH2 input handler (mip6_rthdr_input())
    ibmveth: lost IRQ while closing/opening device leads to service loss
    rt2x00: Fix lockdep warning in rt2x00lib_probe_dev()
    vhost: avoid pr_err on condition guest can trigger
    ipmr: Don't leak memory if fib lookup fails.
    vhost-net: avoid flush under lock
    net: fix problem in reading sock TX queue
    net/core: neighbour update Oops
    net: skb_tx_hash() fix relative to skb_orphan_try()
    rfs: call sock_rps_record_flow() in tcp_splice_read()
    xfrm: do not assume that template resolving always returns xfrms
    hostap_pci: set dev->base_addr during probe
    axnet_cs: use spin_lock_irqsave in ax_interrupt
    dsa: Fix Kconfig dependencies.
    act_nat: not all of the ICMP packets need an IP header payload
    r8169: incorrect identifier for a 8168dp
    Phonet: fix skb leak in pipe endpoint accept()
    Bluetooth: Update sec_level/auth_type for already existing connections
    ...

    Linus Torvalds
     

20 Jul, 2010

1 commit


17 Jul, 2010

2 commits

  • The order of freeing the IRQ and freeing the device in firmware
    in ibmveth_close can cause the adapter to become unusable after a
    subsequent ibmveth_open. Only a reboot of the OS will make the
    network device usable again. This is seen when cycling the adapter
    up and down while there is network activity.

    There is a window where an IRQ will be left unserviced (H_EOI will not
    be called). The solution is to make a VIO_IRQ_DISABLE h_call, free the
    device with firmware, and then call free_irq.

    Signed-off-by: Robert Jennings
    Signed-off-by: David S. Miller

    Robert Jennings
     
  • The rt2x00dev->intf_work workqueue is never initialized when a driver is
    probed for a non-existent device (in this case rt2500usb). On such a
    path we call rt2x00lib_remove_dev() to free any resources initialized
    during the probe before we use INIT_WORK to initialize the workqueue.
    This causes lockdep to get confused since the lock used in the workqueue
    hasn't been initialized yet but is now being acquired during
    cancel_work_sync() called by rt2x00lib_remove_dev().

    Fix this by initializing the workqueue first before we attempt to probe
    the device. This should make lockdep happy and avoid breaking any
    assumptions about how the library cleans up after a probe fails.

    phy0 -> rt2x00lib_probe_dev: Error - Failed to allocate device.
    INFO: trying to register non-static key.
    the code is fine but needs lockdep annotation.
    turning off the locking correctness validator.
    Pid: 2027, comm: modprobe Not tainted 2.6.35-rc5+ #60
    Call Trace:
    [] register_lock_class+0x152/0x31f
    [] ? usb_control_msg+0xd5/0x111
    [] __lock_acquire+0xce/0xcf4
    [] ? trace_hardirqs_off+0xd/0xf
    [] ? _raw_spin_unlock_irqrestore+0x33/0x41
    [] lock_acquire+0xd1/0xf7
    [] ? __cancel_work_timer+0x99/0x17e
    [] __cancel_work_timer+0xd0/0x17e
    [] ? __cancel_work_timer+0x99/0x17e
    [] cancel_work_sync+0xb/0xd
    [] rt2x00lib_remove_dev+0x25/0xb0 [rt2x00lib]
    [] rt2x00lib_probe_dev+0x380/0x3ed [rt2x00lib]
    [] ? __raw_spin_lock_init+0x31/0x52
    [] ? T.676+0xe/0x10 [rt2x00usb]
    [] rt2x00usb_probe+0x121/0x15e [rt2x00usb]
    [] usb_probe_interface+0x151/0x19e
    [] driver_probe_device+0xa7/0x136
    [] __driver_attach+0x4a/0x66
    [] ? __driver_attach+0x0/0x66
    [] bus_for_each_dev+0x54/0x89
    [] driver_attach+0x19/0x1b
    [] bus_add_driver+0xb4/0x204
    [] driver_register+0x98/0x109
    [] usb_register_driver+0xb2/0x173
    [] ? rt2500usb_init+0x0/0x20 [rt2500usb]
    [] rt2500usb_init+0x1e/0x20 [rt2500usb]
    [] do_one_initcall+0x6d/0x17a
    [] sys_init_module+0x9c/0x1e0
    [] system_call_fastpath+0x16/0x1b

    Signed-off-by: Stephen Boyd
    Signed-off-by: John W. Linville

    Stephen Boyd
     

15 Jul, 2010

1 commit

  • "hostap: Protect against initialization interrupt" (which reinstated
    "wireless: hostap, fix oops due to early probing interrupt")
    reintroduced Bug 16111. This is because hostap_pci wasn't setting
    dev->base_addr, which is now checked in prism2_interrupt. As a result,
    initialization was failing for PCI-based hostap devices. This corrects
    that oversight.

    Signed-off-by: John W. Linville

    John W. Linville
     

13 Jul, 2010

2 commits


12 Jul, 2010

1 commit


08 Jul, 2010

5 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (35 commits)
    NET: SB1250: Initialize .owner
    vxge: show startup message with KERN_INFO
    ll_temac: Fix missing iounmaps
    bridge: Clear IPCB before possible entry into IP stack
    bridge br_multicast: BUG: unable to handle kernel NULL pointer dereference
    net: Fix definition of netif_vdbg() when VERBOSE_DEBUG is defined
    net/ne: fix memory leak in ne_drv_probe()
    xfrm: fix xfrm by MARK logic
    virtio_net: fix oom handling on tx
    virtio_net: do not reschedule rx refill forever
    s2io: resolve statistics issues
    linux/net.h: fix kernel-doc warnings
    net: decreasing real_num_tx_queues needs to flush qdisc
    sched: qdisc_reset_all_tx is calling qdisc_reset without qdisc_lock
    qlge: fix a eeh handler to not add a pending timer
    qlge: Replacing add_timer() to mod_timer()
    usbnet: Set parent device early for netdev_printk()
    net: Revert "rndis_host: Poll status channel before control channel"
    netfilter: ip6t_REJECT: fix a dst leak in ipv6 REJECT
    drivers: bluetooth: bluecard_cs.c: Fixed include error, changed to linux/io.h
    ...

    Linus Torvalds
     
  • Signed-off-by: Ralf Baechle

    drivers/net/sb1250-mac.c | 1 +
    1 files changed, 1 insertions(+), 0 deletions(-)
    Signed-off-by: David S. Miller

    Ralf Baechle
     
  • The original KERN_CRIT will mess up terminals.

    CC: Sreenivasa Honnur
    Signed-off-by: Wu Fengguang
    Signed-off-by: David S. Miller

    Wu Fengguang
     
  • Fix missing iounmaps.

    Signed-off-by: Denis Kirjanov
    Signed-off-by: David S. Miller

    Denis Kirjanov
     
  • Failure cases within ath9k_hif_usb_alloc_urbs are failed
    to release allocated memory.

    Signed-off-by: Rajkumar Manoharan
    Signed-off-by: John W. Linville

    Rajkumar Manoharan
     

06 Jul, 2010

1 commit


03 Jul, 2010

9 commits

  • virtio net will never try to overflow the TX ring, so the only reason
    add_buf may fail is out of memory. Thus, we can not stop the
    device until some request completes - there's no guarantee anything
    at all is outstanding.

    Make the error message clearer as well: error here does not
    indicate queue full.

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: Rusty Russell (...and avoid TX_BUSY)
    Cc: stable@kernel.org # .34.x (s/virtqueue_/vi->svq->vq_ops->/)
    Signed-off-by: David S. Miller

    Rusty Russell
     
  • We currently fill all of RX ring, then add_buf
    returns ENOSPC, which gets mis-detected as an out of
    memory condition and causes us to reschedule the work,
    and so on forever. Fix this by oom = err == -ENOMEM;

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: Rusty Russell
    Cc: stable@kernel.org # .34.x
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • This patch resolves a number of issues in the statistics gathering of
    the s2io driver.

    On Xframe adapters, the received multicast statistics counter includes
    pause frames which are not indicated to the driver. This can cause
    issues where the multicast packet count is higher than what has actually
    been received, possibly higher than the number of packets received.

    The driver software counters are replaced with the adapter hardware
    statistics for rx_packets, rx_bytes, and tx_bytes. It also uses the
    overflow registers to determine if the statistics wrapped the 32bit
    register (removing the window of having a statistic value less than the
    previous call). rx_length_errors statistic now includes undersized
    packets in addition to oversized packets in its counting. Finally,
    rx_crc_errors are now being counted.

    Signed-off-by: Jon Mason
    Signed-off-by: David S. Miller

    Jon Mason
     
  • Reducing real_num_queues needs to flush the qdisc otherwise
    skbs with queue_mappings greater then real_num_tx_queues can
    be sent to the underlying driver.

    The flow for this is,

    dev_queue_xmit()
    dev_pick_tx()
    skb_tx_hash() => hash using real_num_tx_queues
    skb_set_queue_mapping()
    ...
    qdisc_enqueue_root() => enqueue skb on txq from hash
    ...
    dev->real_num_tx_queues -= n
    ...
    sch_direct_xmit()
    dev_hard_start_xmit()
    ndo_start_xmit(skb,dev) => skb queue set with old hash

    skbs are enqueued on the qdisc with skb->queue_mapping set
    0 < queue_mappings < real_num_tx_queues. When the driver
    decreases real_num_tx_queues skb's may be dequeued from the
    qdisc with a queue_mapping greater then real_num_tx_queues.

    This fixes a case in ixgbe where this was occurring with DCB
    and FCoE. Because the driver is using queue_mapping to map
    skbs to tx descriptor rings we can potentially map skbs to
    rings that no longer exist.

    Signed-off-by: John Fastabend
    Tested-by: Ross Brattain
    Signed-off-by: Jeff Kirsher
    Signed-off-by: David S. Miller

    John Fastabend
     
  • On some ocasions the function qlge_io_resume() tries to add a
    pending timer, which causes the system to hit the BUG() on
    add_timer() function.

    This patch removes the timer during the EEH recovery.

    Signed-off-by: Breno Leitao
    Signed-off-by: Ron Mercer
    Signed-off-by: David S. Miller

    Breno Leitao
     
  • Currently qlge driver calls add_timer() instead of mod_timer().
    This patch changes add_timer() to mod_timer(), which seems a better
    solution.

    Signed-off-by: Breno Leitao
    Signed-off-by: Ron Mercer
    Signed-off-by: David S. Miller

    Breno Leitao
     
  • netdev_printk() follows the net_device's parent device pointer, so
    we must set that earlier than we previously did.

    Reported-by: Luís Picciochi Oliveira
    Signed-off-by: Ben Hutchings
    Signed-off-by: David S. Miller

    Ben Hutchings
     
  • This reverts commit c17b274dc2aa538b68c1f02b01a3c4e124b435ba.

    That change was reported to break rndis_wlan support for the WUSB54GS.

    Reported-by: Luís Picciochi Oliveira
    Signed-off-by: Ben Hutchings
    Signed-off-by: David S. Miller

    Ben Hutchings
     
  • When there is a firmware error or the firmware is reloaded for some other
    reason we currently clear all station information, including keys
    associated with them. A problem is that we do not clear some other
    information regarding keys that are not stored in the station structs.

    The consequence of this is that when the device is reconfigured after the
    firmware reload we can, among other things, run out of key indices.

    This fixes:
    https://bugzilla.kernel.org/show_bug.cgi?id=16232
    http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2221

    Signed-off-by: Reinette Chatre
    Reviewed-by: Johannes Berg

    Reinette Chatre
     

01 Jul, 2010

3 commits

  • When two systems using bonding devices in adaptive load
    balancing (ALB) communicates with each other, an endless
    ping-pong of ARP replies starts between these two systems.

    What happens? In the ALB mode, bonding driver keeps track
    of each client connected in a hash table, so it can do the
    receive load balancing (RLB). This hash table is updated
    when an ARP reply is received, then it scans for the client
    entry, updates its MAC address and flag it to be announced
    later. Therefore, two seconds later, the alb monitor runs
    and send for each updated client entry two ARP replies
    updating this specific client. The same process happens on
    the receiving system, causing the endless ping-pong of arp
    replies.

    See more information including the relevant functions below:

    System 1 System 2
    bond0 bond0

    ping
    ARP request --------->
    rlb_arp_recv ntt = 1; |
    | bond_info->rx_ntt = 1; |
    | |
    | |
    | |
    | bond_alb_monitor |
    | rlb_update_rx_clients |
    | rlb_update_client |
    | arp_create(ARPOP_REPLY) |
    | send ARP reply --------------> V
    | send ARP reply -------------->
    | rlb_arp_recv
    | rlb_update_entry_from_arp
    | client_info->ntt = 1;
    | bond_info->rx_ntt = 1;
    | < snipped, same as in system 1>
    +-------
    Signed-off-by: Jay Vosburgh
    Signed-off-by: David S. Miller

    Flavio Leitner
     
  • Some controllers (KW, Dove) limits the TX IP/layer4 checksum offloading to a max size.

    Signed-off-by: Saeed Bishara
    Acked-by: Lennert Buytenhek
    Signed-off-by: David S. Miller

    Saeed Bishara
     
  • David S. Miller