]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Thu, 7 Oct 2010 02:39:31 +0000 (19:39 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Oct 2010 02:39:31 +0000 (19:39 -0700)
Conflicts:
drivers/net/pcmcia/pcnet_cs.c
net/caif/caif_socket.c

1  2 
MAINTAINERS
drivers/net/bonding/bond_main.c
drivers/net/ll_temac_main.c
drivers/net/pcmcia/pcnet_cs.c
drivers/net/skge.c
include/linux/pci_ids.h
net/9p/client.c
net/caif/caif_socket.c
net/sunrpc/auth_gss/auth_gss.c

diff --combined MAINTAINERS
index 9ddb5ac923cd07db93d0a5f0af49d2035d45f33c,ae95fd4efbd4701c4e1b49ef4bd173fdb3470b3f..e967aadddfc6eb851e79d8fe0e2d78aade12c6d8
@@@ -962,6 -962,13 +962,13 @@@ W:       http://www.fluff.org/ben/linux
  S:    Maintained
  F:    arch/arm/mach-s3c6410/
  
+ ARM/S5P ARM ARCHITECTURES
+ M:    Kukjin Kim <kgene.kim@samsung.com>
+ L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
+ S:    Maintained
+ F:    arch/arm/mach-s5p*/
  ARM/SHMOBILE ARM ARCHITECTURE
  M:    Paul Mundt <lethal@linux-sh.org>
  M:    Magnus Damm <magnus.damm@gmail.com>
@@@ -1120,13 -1127,6 +1127,13 @@@ W:    http://wireless.kernel.org/en/users/
  S:    Maintained
  F:    drivers/net/wireless/ath/ar9170/
  
 +CARL9170 LINUX COMMUNITY WIRELESS DRIVER
 +M:    Christian Lamparter <chunkeey@googlemail.com>
 +L:    linux-wireless@vger.kernel.org
 +W:    http://wireless.kernel.org/en/users/Drivers/carl9170
 +S:    Maintained
 +F:    drivers/net/wireless/ath/carl9170/
 +
  ATK0110 HWMON DRIVER
  M:    Luca Tettamanti <kronos.it@gmail.com>
  L:    lm-sensors@lm-sensors.org
@@@ -1227,7 -1227,7 +1234,7 @@@ F:      drivers/auxdisplay
  F:    include/linux/cfag12864b.h
  
  AVR32 ARCHITECTURE
- M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
+ M:    Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
  W:    http://www.atmel.com/products/AVR32/
  W:    http://avr32linux.org/
  W:    http://avrfreaks.net/
@@@ -1235,7 -1235,7 +1242,7 @@@ S:      Supporte
  F:    arch/avr32/
  
  AVR32/AT32AP MACHINE SUPPORT
- M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
+ M:    Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
  S:    Supported
  F:    arch/avr32/mach-at32ap/
  
@@@ -1405,13 -1405,6 +1412,13 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bfa/
  
 +BROCADE BNA 10 GIGABIT ETHERNET DRIVER
 +M:    Rasesh Mody <rmody@brocade.com>
 +M:    Debashis Dutt <ddutt@brocade.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/bna/
 +
  BSG (block layer generic sg v4 driver)
  M:    FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
  L:    linux-scsi@vger.kernel.org
@@@ -1567,9 -1560,9 +1574,9 @@@ S:      Supporte
  F:    scripts/checkpatch.pl
  
  CISCO VIC ETHERNET NIC DRIVER
 -M:    Scott Feldman <scofeldm@cisco.com>
  M:    Vasanthy Kolluri <vkolluri@cisco.com>
  M:    Roopa Prabhu <roprabhu@cisco.com>
 +M:    David Wang <dwang2@cisco.com>
  S:    Supported
  F:    drivers/net/enic/
  
@@@ -2213,6 -2206,12 +2220,12 @@@ W:    http://acpi4asus.sf.ne
  S:    Maintained
  F:    drivers/platform/x86/eeepc-laptop.c
  
+ EFIFB FRAMEBUFFER DRIVER
+ L:    linux-fbdev@vger.kernel.org
+ M:    Peter Jones <pjones@redhat.com>
+ S:    Maintained
+ F:    drivers/video/efifb.c
  EFS FILESYSTEM
  W:    http://aeschi.ch.eu.org/efs/
  S:    Orphan
@@@ -2671,9 -2670,14 +2684,14 @@@ S:    Maintaine
  F:    drivers/media/video/gspca/
  
  HARDWARE MONITORING
+ M:    Jean Delvare <khali@linux-fr.org>
+ M:    Guenter Roeck <guenter.roeck@ericsson.com>
  L:    lm-sensors@lm-sensors.org
  W:    http://www.lm-sensors.org/
- S:    Orphan
+ T:    quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/
+ T:    quilt kernel.org/pub/linux/kernel/people/groeck/linux-staging/
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
+ S:    Maintained
  F:    Documentation/hwmon/
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
@@@ -2811,11 -2815,6 +2829,6 @@@ S:     Maintaine
  F:    arch/x86/kernel/hpet.c
  F:    arch/x86/include/asm/hpet.h
  
- HPET: ACPI
- M:    Bob Picco <bob.picco@hp.com>
- S:    Maintained
- F:    drivers/char/hpet.c
  HPFS FILESYSTEM
  M:    Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
  W:    http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
@@@ -2895,12 -2894,6 +2908,12 @@@ M:    Brian King <brking@us.ibm.com
  S:    Supported
  F:    drivers/scsi/ipr.*
  
 +IBM Power Virtual Ethernet Device Driver
 +M:    Santiago Leon <santil@linux.vnet.ibm.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ibmveth.*
 +
  IBM ServeRAID RAID DRIVER
  P:    Jack Hammer
  M:    Dave Jeffery <ipslinux@adaptec.com>
@@@ -3070,16 -3063,27 +3083,27 @@@ L:   netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ixp2000/
  
- INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe)
+ INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  M:    Jesse Brandeburg <jesse.brandeburg@intel.com>
  M:    Bruce Allan <bruce.w.allan@intel.com>
- M:    Alex Duyck <alexander.h.duyck@intel.com>
+ M:    Carolyn Wyborny <carolyn.wyborny@intel.com>
+ M:    Don Skidmore <donald.c.skidmore@intel.com>
+ M:    Greg Rose <gregory.v.rose@intel.com>
  M:    PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>
+ M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
  S:    Supported
+ F:    Documentation/networking/e100.txt
+ F:    Documentation/networking/e1000.txt
+ F:    Documentation/networking/e1000e.txt
+ F:    Documentation/networking/igb.txt
+ F:    Documentation/networking/igbvf.txt
+ F:    Documentation/networking/ixgb.txt
+ F:    Documentation/networking/ixgbe.txt
+ F:    Documentation/networking/ixgbevf.txt
  F:    drivers/net/e100.c
  F:    drivers/net/e1000/
  F:    drivers/net/e1000e/
@@@ -3087,6 -3091,7 +3111,7 @@@ F:      drivers/net/igb
  F:    drivers/net/igbvf/
  F:    drivers/net/ixgb/
  F:    drivers/net/ixgbe/
+ F:    drivers/net/ixgbevf/
  
  INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
  L:    linux-wireless@vger.kernel.org
@@@ -3434,7 -3439,7 +3459,7 @@@ F:      drivers/s390/kvm
  
  KEXEC
  M:    Eric Biederman <ebiederm@xmission.com>
- W:    http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
+ W:    http://kernel.org/pub/linux/utils/kernel/kexec/
  L:    kexec@lists.infradead.org
  S:    Maintained
  F:    include/linux/kexec.h
@@@ -3795,9 -3800,8 +3820,8 @@@ W:      http://www.syskonnect.co
  S:    Supported
  
  MATROX FRAMEBUFFER DRIVER
- M:    Petr Vandrovec <vandrove@vc.cvut.cz>
  L:    linux-fbdev@vger.kernel.org
- S:    Maintained
+ S:    Orphan
  F:    drivers/video/matrox/matroxfb_*
  F:    include/linux/matroxfb.h
  
@@@ -3921,10 -3925,8 +3945,8 @@@ F:     Documentation/serial/moxa-smarti
  F:    drivers/char/mxser.*
  
  MSI LAPTOP SUPPORT
- M:    Lennart Poettering <mzxreary@0pointer.de>
+ M:    Lee, Chun-Yi <jlee@novell.com>
  L:    platform-driver-x86@vger.kernel.org
- W:    https://tango.0pointer.de/mailman/listinfo/s270-linux
- W:    http://0pointer.de/lennart/tchibo.html
  S:    Maintained
  F:    drivers/platform/x86/msi-laptop.c
  
@@@ -3941,8 -3943,10 +3963,10 @@@ S:    Supporte
  F:    drivers/mfd/
  
  MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
- S:    Orphan
+ M:    Chris Ball <cjb@laptop.org>
  L:    linux-mmc@vger.kernel.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
+ S:    Maintained
  F:    drivers/mmc/
  F:    include/linux/mmc/
  
@@@ -3964,7 -3968,7 +3988,7 @@@ F:      drivers/char/isicom.
  F:    include/linux/isicom.h
  
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
- M:    Felipe Balbi <felipe.balbi@nokia.com>
+ M:    Felipe Balbi <balbi@ti.com>
  L:    linux-usb@vger.kernel.org
  T:    git git://gitorious.org/usb/usb.git
  S:    Maintained
@@@ -3984,8 -3988,8 +4008,8 @@@ S:      Maintaine
  F:    drivers/net/natsemi.c
  
  NCP FILESYSTEM
- M:    Petr Vandrovec <vandrove@vc.cvut.cz>
- S:    Maintained
+ M:    Petr Vandrovec <petr@vandrovec.name>
+ S:    Odd Fixes
  F:    fs/ncpfs/
  
  NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
@@@ -4262,7 -4266,7 +4286,7 @@@ S:      Maintaine
  F:    drivers/char/hw_random/omap-rng.c
  
  OMAP USB SUPPORT
- M:    Felipe Balbi <felipe.balbi@nokia.com>
+ M:    Felipe Balbi <balbi@ti.com>
  M:    David Brownell <dbrownell@users.sourceforge.net>
  L:    linux-usb@vger.kernel.org
  L:    linux-omap@vger.kernel.org
@@@ -4348,12 -4352,13 +4372,12 @@@ F:   Documentation/filesystems/dlmfs.tx
  F:    fs/ocfs2/
  
  ORINOCO DRIVER
 -M:    Pavel Roskin <proski@gnu.org>
 -M:    David Gibson <hermes@gibson.dropbear.id.au>
  L:    linux-wireless@vger.kernel.org
  L:    orinoco-users@lists.sourceforge.net
  L:    orinoco-devel@lists.sourceforge.net
 +W:    http://linuxwireless.org/en/users/Drivers/orinoco
  W:    http://www.nongnu.org/orinoco/
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/orinoco/
  
  OSD LIBRARY and FILESYSTEM
@@@ -4839,6 -4844,7 +4863,7 @@@ RCUTORTURE MODUL
  M:    Josh Triplett <josh@freedesktop.org>
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
  S:    Supported
+ T:    git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
  F:    Documentation/RCU/torture.txt
  F:    kernel/rcutorture.c
  
@@@ -4863,6 -4869,7 +4888,7 @@@ M:      Dipankar Sarma <dipankar@in.ibm.com
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
  W:    http://www.rdrop.com/users/paulmck/rclock/
  S:    Supported
+ T:    git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
  F:    Documentation/RCU/
  F:    include/linux/rcu*
  F:    include/linux/srcu*
@@@ -4870,12 -4877,10 +4896,10 @@@ F:   kernel/rcu
  F:    kernel/srcu*
  X:    kernel/rcutorture.c
  
- REAL TIME CLOCK DRIVER
+ REAL TIME CLOCK DRIVER (LEGACY)
  M:    Paul Gortmaker <p_gortmaker@yahoo.com>
  S:    Maintained
- F:    Documentation/rtc.txt
- F:    drivers/rtc/
- F:    include/linux/rtc.h
+ F:    drivers/char/rtc.c
  
  REAL TIME CLOCK (RTC) SUBSYSTEM
  M:    Alessandro Zummo <a.zummo@towertech.it>
@@@ -5112,8 -5117,10 +5136,10 @@@ S:    Maintaine
  F:    drivers/mmc/host/sdricoh_cs.c
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER
- S:    Orphan
+ M:    Chris Ball <cjb@laptop.org>
  L:    linux-mmc@vger.kernel.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
+ S:    Maintained
  F:    drivers/mmc/host/sdhci.*
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
@@@ -6419,7 -6426,7 +6445,7 @@@ S:      Maintaine
  F:    drivers/input/misc/wistron_btns.c
  
  WL1251 WIRELESS DRIVER
 -M:    Kalle Valo <kalle.valo@iki.fi>
 +M:    Kalle Valo <kvalo@adurom.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
@@@ -6434,7 -6441,6 +6460,7 @@@ W:      http://wireless.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/wl12xx/wl1271*
 +F:    include/linux/wl12xx.h
  
  WL3501 WIRELESS PCMCIA CARD DRIVER
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
@@@ -6579,20 -6585,6 +6605,20 @@@ M:    "Maciej W. Rozycki" <macro@linux-mip
  S:    Maintained
  F:    drivers/serial/zs.*
  
 +GRE DEMULTIPLEXER DRIVER
 +M:    Dmitry Kozlov <xeb@mail.ru>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    net/ipv4/gre.c
 +F:    include/net/gre.h
 +
 +PPTP DRIVER
 +M:    Dmitry Kozlov <xeb@mail.ru>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/pptp.c
 +W:    http://sourceforge.net/projects/accel-pptp
 +
  THE REST
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
index a0bf35d0d4f5168036a5e28cd5f1328df4481070,e953c6ad6e6d1ea3fd7e22fddc8f5f27ba1f8b38..7703d35de65d6979fba486d6f238f8322bc65d06
@@@ -109,7 -109,6 +109,7 @@@ static char *arp_validate
  static char *fail_over_mac;
  static int all_slaves_active = 0;
  static struct bond_params bonding_defaults;
 +static int resend_igmp = BOND_DEFAULT_RESEND_IGMP;
  
  module_param(max_bonds, int, 0);
  MODULE_PARM_DESC(max_bonds, "Max number of bonded devices");
@@@ -164,8 -163,6 +164,8 @@@ module_param(all_slaves_active, int, 0)
  MODULE_PARM_DESC(all_slaves_active, "Keep all frames received on an interface"
                                     "by setting active flag for all slaves.  "
                                     "0 for never (default), 1 for always.");
 +module_param(resend_igmp, int, 0);
 +MODULE_PARM_DESC(resend_igmp, "Number of IGMP membership reports to send on link failure");
  
  /*----------------------------- Global variables ----------------------------*/
  
@@@ -868,13 -865,18 +868,13 @@@ static void bond_mc_del(struct bonding 
  }
  
  
 -/*
 - * Retrieve the list of registered multicast addresses for the bonding
 - * device and retransmit an IGMP JOIN request to the current active
 - * slave.
 - */
 -static void bond_resend_igmp_join_requests(struct bonding *bond)
 +static void __bond_resend_igmp_join_requests(struct net_device *dev)
  {
        struct in_device *in_dev;
        struct ip_mc_list *im;
  
        rcu_read_lock();
 -      in_dev = __in_dev_get_rcu(bond->dev);
 +      in_dev = __in_dev_get_rcu(dev);
        if (in_dev) {
                for (im = in_dev->mc_list; im; im = im->next)
                        ip_mc_rejoin_group(im);
        rcu_read_unlock();
  }
  
 +/*
 + * Retrieve the list of registered multicast addresses for the bonding
 + * device and retransmit an IGMP JOIN request to the current active
 + * slave.
 + */
 +static void bond_resend_igmp_join_requests(struct bonding *bond)
 +{
 +      struct net_device *vlan_dev;
 +      struct vlan_entry *vlan;
 +
 +      read_lock(&bond->lock);
 +
 +      /* rejoin all groups on bond device */
 +      __bond_resend_igmp_join_requests(bond->dev);
 +
 +      /* rejoin all groups on vlan devices */
 +      if (bond->vlgrp) {
 +              list_for_each_entry(vlan, &bond->vlan_list, vlan_list) {
 +                      vlan_dev = vlan_group_get_device(bond->vlgrp,
 +                                                       vlan->vlan_id);
 +                      if (vlan_dev)
 +                              __bond_resend_igmp_join_requests(vlan_dev);
 +              }
 +      }
 +
 +      if (--bond->igmp_retrans > 0)
 +              queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5);
 +
 +      read_unlock(&bond->lock);
 +}
 +
 +void bond_resend_igmp_join_requests_delayed(struct work_struct *work)
 +{
 +      struct bonding *bond = container_of(work, struct bonding,
 +                                                      mcast_work.work);
 +      bond_resend_igmp_join_requests(bond);
 +}
 +
  /*
   * flush all members of flush->mc_list from device dev->mc_list
   */
@@@ -980,6 -944,7 +980,6 @@@ static void bond_mc_swap(struct bondin
  
                netdev_for_each_mc_addr(ha, bond->dev)
                        dev_mc_add(new_active->dev, ha->addr);
 -              bond_resend_igmp_join_requests(bond);
        }
  }
  
@@@ -1215,12 -1180,9 +1215,12 @@@ void bond_change_active_slave(struct bo
                }
        }
  
 -      /* resend IGMP joins since all were sent on curr_active_slave */
 -      if (bond->params.mode == BOND_MODE_ROUNDROBIN) {
 -              bond_resend_igmp_join_requests(bond);
 +      /* resend IGMP joins since active slave has changed or
 +       * all were sent on curr_active_slave */
 +      if ((USES_PRIMARY(bond->params.mode) && new_active) ||
 +          bond->params.mode == BOND_MODE_ROUNDROBIN) {
 +              bond->igmp_retrans = bond->params.resend_igmp;
 +              queue_delayed_work(bond->wq, &bond->mcast_work, 0);
        }
  }
  
@@@ -2406,11 -2368,8 +2406,11 @@@ static void bond_miimon_commit(struct b
                                slave->state = BOND_STATE_BACKUP;
                        }
  
 -                      pr_info("%s: link status definitely up for interface %s.\n",
 -                              bond->dev->name, slave->dev->name);
 +                      bond_update_speed_duplex(slave);
 +
 +                      pr_info("%s: link status definitely up for interface %s, %d Mbps %s duplex.\n",
 +                              bond->dev->name, slave->dev->name,
 +                              slave->speed, slave->duplex ? "full" : "half");
  
                        /* notify ad that the link status has changed */
                        if (bond->params.mode == BOND_MODE_8023AD)
@@@ -3353,8 -3312,6 +3353,8 @@@ static void bond_info_show_slave(struc
        seq_printf(seq, "\nSlave Interface: %s\n", slave->dev->name);
        seq_printf(seq, "MII Status: %s\n",
                   (slave->link == BOND_LINK_UP) ?  "up" : "down");
 +      seq_printf(seq, "Speed: %d Mbps\n", slave->speed);
 +      seq_printf(seq, "Duplex: %s\n", slave->duplex ? "full" : "half");
        seq_printf(seq, "Link Failure Count: %u\n",
                   slave->link_failure_count);
  
@@@ -3787,8 -3744,6 +3787,8 @@@ static int bond_open(struct net_device 
  
        bond->kill_timers = 0;
  
 +      INIT_DELAYED_WORK(&bond->mcast_work, bond_resend_igmp_join_requests_delayed);
 +
        if (bond_is_lb(bond)) {
                /* bond_alb_initialize must be called before the timer
                 * is started.
@@@ -3873,8 -3828,6 +3873,8 @@@ static int bond_close(struct net_devic
                break;
        }
  
 +      if (delayed_work_pending(&bond->mcast_work))
 +              cancel_delayed_work(&bond->mcast_work);
  
        if (bond_is_lb(bond)) {
                /* Must be called only after all
@@@ -4725,10 -4678,6 +4725,10 @@@ static void bond_setup(struct net_devic
                               NETIF_F_HW_VLAN_RX |
                               NETIF_F_HW_VLAN_FILTER);
  
 +      /* By default, we enable GRO on bonding devices.
 +       * Actual support requires lowlevel drivers are GRO ready.
 +       */
 +      bond_dev->features |= NETIF_F_GRO;
  }
  
  static void bond_work_cancel_all(struct bonding *bond)
        if (bond->params.mode == BOND_MODE_8023AD &&
            delayed_work_pending(&bond->ad_work))
                cancel_delayed_work(&bond->ad_work);
 +
 +      if (delayed_work_pending(&bond->mcast_work))
 +              cancel_delayed_work(&bond->mcast_work);
  }
  
  /*
@@@ -4945,13 -4891,6 +4945,13 @@@ static int bond_check_params(struct bon
                all_slaves_active = 0;
        }
  
 +      if (resend_igmp < 0 || resend_igmp > 255) {
 +              pr_warning("Warning: resend_igmp (%d) should be between "
 +                         "0 and 255, resetting to %d\n",
 +                         resend_igmp, BOND_DEFAULT_RESEND_IGMP);
 +              resend_igmp = BOND_DEFAULT_RESEND_IGMP;
 +      }
 +
        /* reset values for TLB/ALB */
        if ((bond_mode == BOND_MODE_TLB) ||
            (bond_mode == BOND_MODE_ALB)) {
        params->fail_over_mac = fail_over_mac_value;
        params->tx_queues = tx_queues;
        params->all_slaves_active = all_slaves_active;
 +      params->resend_igmp = resend_igmp;
  
        if (primary) {
                strncpy(params->primary, primary, IFNAMSIZ);
@@@ -5226,6 -5164,15 +5226,15 @@@ int bond_create(struct net *net, const 
                res = dev_alloc_name(bond_dev, "bond%d");
                if (res < 0)
                        goto out;
+       } else {
+               /*
+                * If we're given a name to register
+                * we need to ensure that its not already
+                * registered
+                */
+               res = -EEXIST;
+               if (__dev_get_by_name(net, name) != NULL)
+                       goto out;
        }
  
        res = register_netdevice(bond_dev);
index 8762dcb84e8b3ad10d8dd3c49cd571fa4dbaa837,87f0a93b165c33478e1d59aa5e23942afaccc80f..9f8e7027b0b32de8030d6e100a8b0e9467e35685
@@@ -38,6 -38,7 +38,7 @@@
  #include <linux/of_device.h>
  #include <linux/of_mdio.h>
  #include <linux/of_platform.h>
+ #include <linux/of_address.h>
  #include <linux/skbuff.h>
  #include <linux/spinlock.h>
  #include <linux/tcp.h>      /* needed for sizeof(tcphdr) */
@@@ -494,7 -495,7 +495,7 @@@ static u32 temac_setoptions(struct net_
        lp->options |= options;
        mutex_unlock(&lp->indirect_mutex);
  
 -      return (0);
 +      return 0;
  }
  
  /* Initialize temac */
@@@ -760,7 -761,7 +761,7 @@@ static void ll_temac_recv(struct net_de
                skb_put(skb, length);
                skb->dev = ndev;
                skb->protocol = eth_type_trans(skb, ndev);
 -              skb->ip_summed = CHECKSUM_NONE;
 +              skb_checksum_none_assert(skb);
  
                /* if we're doing rx csum offload, set it up */
                if (((lp->temac_features & TEMAC_FEATURE_RX_CSUM) != 0) &&
index e180832c278ffa9f64d637588b6f611321d801d7,f9b509a6b09a702d214ed2821d3bf6a79a671b49..c94311aed1ab6e999025165b4fee8514ff720e4c
@@@ -28,8 -28,6 +28,8 @@@
  
  ======================================================================*/
  
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 +
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/init.h>
@@@ -37,6 -35,7 +37,6 @@@
  #include <linux/string.h>
  #include <linux/timer.h>
  #include <linux/delay.h>
 -#include <linux/ethtool.h>
  #include <linux/netdevice.h>
  #include <linux/log2.h>
  #include <linux/etherdevice.h>
@@@ -101,6 -100,7 +101,6 @@@ static void pcnet_release(struct pcmcia
  static int pcnet_open(struct net_device *dev);
  static int pcnet_close(struct net_device *dev);
  static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 -static const struct ethtool_ops netdev_ethtool_ops;
  static irqreturn_t ei_irq_wrapper(int irq, void *dev_id);
  static void ei_watchdog(u_long arg);
  static void pcnet_reset_8390(struct net_device *dev);
@@@ -434,6 -434,8 +434,6 @@@ static hw_info_t *get_ax88190(struct pc
        dev->dev_addr[i] = j & 0xff;
        dev->dev_addr[i+1] = j >> 8;
      }
 -    printk(KERN_NOTICE "pcnet_cs: this is an AX88190 card!\n");
 -    printk(KERN_NOTICE "pcnet_cs: use axnet_cs instead.\n");
      return NULL;
  }
  
@@@ -506,7 -508,8 +506,8 @@@ static int pcnet_confcheck(struct pcmci
                           unsigned int vcc,
                           void *priv_data)
  {
-       int *has_shmem = priv_data;
+       int *priv = priv_data;
+       int try = (*priv & 0x1);
        int i;
        cistpl_io_t *io = &cfg->io;
  
                i = p_dev->resource[1]->end = 0;
        }
  
-       *has_shmem = ((cfg->mem.nwin == 1) &&
-                     (cfg->mem.win[0].len >= 0x4000));
+       *priv &= ((cfg->mem.nwin == 1) &&
+                 (cfg->mem.win[0].len >= 0x4000)) ? 0x10 : ~0x10;
        p_dev->resource[0]->start = io->win[i].base;
        p_dev->resource[0]->end = io->win[i].len;
-       p_dev->io_lines = io->flags & CISTPL_IO_LINES_MASK;
+       if (!try)
+               p_dev->io_lines = io->flags & CISTPL_IO_LINES_MASK;
+       else
+               p_dev->io_lines = 16;
        if (p_dev->resource[0]->end + p_dev->resource[1]->end >= 32)
                return try_io_port(p_dev);
  
-       return 0;
+       return -EINVAL;
+ }
+ static hw_info_t *pcnet_try_config(struct pcmcia_device *link,
+                                  int *has_shmem, int try)
+ {
+       struct net_device *dev = link->priv;
+       hw_info_t *local_hw_info;
+       pcnet_dev_t *info = PRIV(dev);
+       int priv = try;
+       int ret;
+       ret = pcmcia_loop_config(link, pcnet_confcheck, &priv);
+       if (ret) {
+               dev_warn(&link->dev, "no useable port range found\n");
+               return NULL;
+       }
+       *has_shmem = (priv & 0x10);
+       if (!link->irq)
+               return NULL;
+       if (resource_size(link->resource[1]) == 8) {
+               link->conf.Attributes |= CONF_ENABLE_SPKR;
+               link->conf.Status = CCSR_AUDIO_ENA;
+       }
+       if ((link->manf_id == MANFID_IBM) &&
+           (link->card_id == PRODID_IBM_HOME_AND_AWAY))
+               link->conf.ConfigIndex |= 0x10;
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               return NULL;
+       dev->irq = link->irq;
+       dev->base_addr = link->resource[0]->start;
+       if (info->flags & HAS_MISC_REG) {
+               if ((if_port == 1) || (if_port == 2))
+                       dev->if_port = if_port;
+               else
+                       dev_notice(&link->dev, "invalid if_port requested\n");
+       } else
+               dev->if_port = 0;
+       if ((link->conf.ConfigBase == 0x03c0) &&
+           (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
+               dev_info(&link->dev,
+                       "this is an AX88190 card - use axnet_cs instead.\n");
+               return NULL;
+       }
+       local_hw_info = get_hwinfo(link);
+       if (!local_hw_info)
+               local_hw_info = get_prom(link);
+       if (!local_hw_info)
+               local_hw_info = get_dl10019(link);
+       if (!local_hw_info)
+               local_hw_info = get_ax88190(link);
+       if (!local_hw_info)
+               local_hw_info = get_hwired(link);
+       return local_hw_info;
  }
  
  static int pcnet_config(struct pcmcia_device *link)
  {
      struct net_device *dev = link->priv;
      pcnet_dev_t *info = PRIV(dev);
-     int ret, start_pg, stop_pg, cm_offset;
+     int start_pg, stop_pg, cm_offset;
      int has_shmem = 0;
      hw_info_t *local_hw_info;
  
      dev_dbg(&link->dev, "pcnet_config\n");
  
-     ret = pcmcia_loop_config(link, pcnet_confcheck, &has_shmem);
-     if (ret)
-       goto failed;
-     if (!link->irq)
-           goto failed;
-     if (resource_size(link->resource[1]) == 8) {
-       link->conf.Attributes |= CONF_ENABLE_SPKR;
-       link->conf.Status = CCSR_AUDIO_ENA;
-     }
-     if ((link->manf_id == MANFID_IBM) &&
-       (link->card_id == PRODID_IBM_HOME_AND_AWAY))
-       link->conf.ConfigIndex |= 0x10;
-     ret = pcmcia_request_configuration(link, &link->conf);
-     if (ret)
-           goto failed;
-     dev->irq = link->irq;
-     dev->base_addr = link->resource[0]->start;
-     if (info->flags & HAS_MISC_REG) {
-       if ((if_port == 1) || (if_port == 2))
-           dev->if_port = if_port;
-       else
-           pr_notice("invalid if_port requested\n");
-     } else {
-       dev->if_port = 0;
-     }
-     if ((link->conf.ConfigBase == 0x03c0) &&
-       (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
-       pr_notice("this is an AX88190 card!\n");
-       pr_notice("use axnet_cs instead.\n");
-       goto failed;
-     }
-     local_hw_info = get_hwinfo(link);
-     if (local_hw_info == NULL)
-       local_hw_info = get_prom(link);
-     if (local_hw_info == NULL)
-       local_hw_info = get_dl10019(link);
-     if (local_hw_info == NULL)
-       local_hw_info = get_ax88190(link);
-     if (local_hw_info == NULL)
-       local_hw_info = get_hwired(link);
-     if (local_hw_info == NULL) {
-       pr_notice("unable to read hardware net address for io base %#3lx\n",
-                 dev->base_addr);
-       goto failed;
+     local_hw_info = pcnet_try_config(link, &has_shmem, 0);
+     if (!local_hw_info) {
+           /* check whether forcing io_lines to 16 helps... */
+           pcmcia_disable_device(link);
+           local_hw_info = pcnet_try_config(link, &has_shmem, 1);
+           if (local_hw_info == NULL) {
+                   dev_notice(&link->dev, "unable to read hardware net"
+                           " address for io base %#3lx\n", dev->base_addr);
+                   goto failed;
+           }
      }
  
      info->flags = local_hw_info->flags;
  
      ei_status.name = "NE2000";
      ei_status.word16 = 1;
 -    ei_status.reset_8390 = &pcnet_reset_8390;
 -
 -    SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
 +    ei_status.reset_8390 = pcnet_reset_8390;
  
      if (info->flags & (IS_DL10019|IS_DL10022))
        mii_phy_probe(dev);
      SET_NETDEV_DEV(dev, &link->dev);
  
      if (register_netdev(dev) != 0) {
 -      printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
 +      pr_notice("register_netdev() failed\n");
        goto failed;
      }
  
      if (info->flags & (IS_DL10019|IS_DL10022)) {
        u_char id = inb(dev->base_addr + 0x1a);
 -      printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ",
 -             dev->name, ((info->flags & IS_DL10022) ? 22 : 19), id);
 +      netdev_info(dev, "NE2000 (DL100%d rev %02x): ",
 +             (info->flags & IS_DL10022) ? 22 : 19, id);
        if (info->pna_phy)
 -          printk("PNA, ");
 +          pr_cont("PNA, ");
      } else {
 -      printk(KERN_INFO "%s: NE2000 Compatible: ", dev->name);
 +      netdev_info(dev, "NE2000 Compatible: ");
      }
 -    printk("io %#3lx, irq %d,", dev->base_addr, dev->irq);
 +    pr_cont("io %#3lx, irq %d,", dev->base_addr, dev->irq);
      if (info->flags & USE_SHMEM)
 -      printk (" mem %#5lx,", dev->mem_start);
 +      pr_cont(" mem %#5lx,", dev->mem_start);
      if (info->flags & HAS_MISC_REG)
 -      printk(" %s xcvr,", if_names[dev->if_port]);
 -    printk(" hw_addr %pM\n", dev->dev_addr);
 +      pr_cont(" %s xcvr,", if_names[dev->if_port]);
 +    pr_cont(" hw_addr %pM\n", dev->dev_addr);
      return 0;
  
  failed:
@@@ -924,7 -955,7 +951,7 @@@ static void mii_phy_probe(struct net_de
        phyid = tmp << 16;
        phyid |= mdio_read(mii_addr, i, MII_PHYID_REG2);
        phyid &= MII_PHYID_REV_MASK;
 -      pr_debug("%s: MII at %d is 0x%08x\n", dev->name, i, phyid);
 +      netdev_dbg(dev, "MII at %d is 0x%08x\n", i, phyid);
        if (phyid == AM79C9XX_HOME_PHY) {
            info->pna_phy = i;
        } else if (phyid != AM79C9XX_ETH_PHY) {
@@@ -957,7 -988,7 +984,7 @@@ static int pcnet_open(struct net_devic
      info->phy_id = info->eth_phy;
      info->link_status = 0x00;
      init_timer(&info->watchdog);
 -    info->watchdog.function = &ei_watchdog;
 +    info->watchdog.function = ei_watchdog;
      info->watchdog.data = (u_long)dev;
      info->watchdog.expires = jiffies + HZ;
      add_timer(&info->watchdog);
@@@ -1010,8 -1041,8 +1037,8 @@@ static void pcnet_reset_8390(struct net
      outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
  
      if (i == 100)
 -      printk(KERN_ERR "%s: pcnet_reset_8390() did not complete.\n",
 -             dev->name);
 +      netdev_err(dev, "pcnet_reset_8390() did not complete.\n");
 +
      set_misc_reg(dev);
  
  } /* pcnet_reset_8390 */
@@@ -1027,7 -1058,8 +1054,7 @@@ static int set_config(struct net_devic
        else if ((map->port < 1) || (map->port > 2))
            return -EINVAL;
        dev->if_port = map->port;
 -      printk(KERN_INFO "%s: switched to %s port\n",
 -             dev->name, if_names[dev->if_port]);
 +      netdev_info(dev, "switched to %s port\n", if_names[dev->if_port]);
        NS8390_init(dev, 1);
      }
      return 0;
@@@ -1062,7 -1094,7 +1089,7 @@@ static void ei_watchdog(u_long arg
         this, we can limp along even if the interrupt is blocked */
      if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
        if (!info->fast_poll)
 -          printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
 +          netdev_info(dev, "interrupt(s) dropped!\n");
        ei_irq_wrapper(dev->irq, dev);
        info->fast_poll = HZ;
      }
        if (info->eth_phy) {
            info->phy_id = info->eth_phy = 0;
        } else {
 -          printk(KERN_INFO "%s: MII is missing!\n", dev->name);
 +          netdev_info(dev, "MII is missing!\n");
            info->flags &= ~HAS_MII;
        }
        goto reschedule;
      link &= 0x0004;
      if (link != info->link_status) {
        u_short p = mdio_read(mii_addr, info->phy_id, 5);
 -      printk(KERN_INFO "%s: %s link beat\n", dev->name,
 -             (link) ? "found" : "lost");
 +      netdev_info(dev, "%s link beat\n", link ? "found" : "lost");
        if (link && (info->flags & IS_DL10022)) {
            /* Disable collision detection on full duplex links */
            outb((p & 0x0140) ? 4 : 0, nic_base + DLINK_DIAG);
        if (link) {
            if (info->phy_id == info->eth_phy) {
                if (p)
 -                  printk(KERN_INFO "%s: autonegotiation complete: "
 -                         "%sbaseT-%cD selected\n", dev->name,
 +                  netdev_info(dev, "autonegotiation complete: "
 +                         "%sbaseT-%cD selected\n",
                           ((p & 0x0180) ? "100" : "10"),
                           ((p & 0x0140) ? 'F' : 'H'));
                else
 -                  printk(KERN_INFO "%s: link partner did not "
 -                         "autonegotiate\n", dev->name);
 +                  netdev_info(dev, "link partner did not autonegotiate\n");
            }
            NS8390_init(dev, 1);
        }
            /* isolate this MII and try flipping to the other one */
            mdio_write(mii_addr, info->phy_id, 0, 0x0400);
            info->phy_id ^= info->pna_phy ^ info->eth_phy;
 -          printk(KERN_INFO "%s: switched to %s transceiver\n", dev->name,
 +          netdev_info(dev, "switched to %s transceiver\n",
                   (info->phy_id == info->eth_phy) ? "ethernet" : "PNA");
            mdio_write(mii_addr, info->phy_id, 0,
                       (info->phy_id == info->eth_phy) ? 0x1000 : 0);
@@@ -1136,6 -1170,18 +1163,6 @@@ reschedule
  
  /*====================================================================*/
  
 -static void netdev_get_drvinfo(struct net_device *dev,
 -                             struct ethtool_drvinfo *info)
 -{
 -      strcpy(info->driver, "pcnet_cs");
 -}
 -
 -static const struct ethtool_ops netdev_ethtool_ops = {
 -      .get_drvinfo            = netdev_get_drvinfo,
 -};
 -
 -/*====================================================================*/
 -
  
  static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  {
@@@ -1168,9 -1214,9 +1195,9 @@@ static void dma_get_8390_hdr(struct net
      unsigned int nic_base = dev->base_addr;
  
      if (ei_status.dmaing) {
 -      printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input."
 +      netdev_notice(dev, "DMAing conflict in dma_block_input."
               "[DMAstat:%1x][irqlock:%1x]\n",
 -             dev->name, ei_status.dmaing, ei_status.irqlock);
 +             ei_status.dmaing, ei_status.irqlock);
        return;
      }
  
@@@ -1201,11 -1247,11 +1228,11 @@@ static void dma_block_input(struct net_
      char *buf = skb->data;
  
      if ((ei_debug > 4) && (count != 4))
 -      pr_debug("%s: [bi=%d]\n", dev->name, count+4);
 +      netdev_dbg(dev, "[bi=%d]\n", count+4);
      if (ei_status.dmaing) {
 -      printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input."
 +      netdev_notice(dev, "DMAing conflict in dma_block_input."
               "[DMAstat:%1x][irqlock:%1x]\n",
 -             dev->name, ei_status.dmaing, ei_status.irqlock);
 +             ei_status.dmaing, ei_status.irqlock);
        return;
      }
      ei_status.dmaing |= 0x01;
                break;
        } while (--tries > 0);
        if (tries <= 0)
 -          printk(KERN_NOTICE "%s: RX transfer address mismatch,"
 +          netdev_notice(dev, "RX transfer address mismatch,"
                   "%#4.4x (expected) vs. %#4.4x (actual).\n",
 -                 dev->name, ring_offset + xfer_count, addr);
 +                 ring_offset + xfer_count, addr);
      }
  #endif
      outb_p(ENISR_RDC, nic_base + EN0_ISR);    /* Ack intr. */
@@@ -1258,7 -1304,7 +1285,7 @@@ static void dma_block_output(struct net
  
  #ifdef PCMCIA_DEBUG
      if (ei_debug > 4)
 -      printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
 +      netdev_dbg(dev, "[bo=%d]\n", count);
  #endif
  
      /* Round the count up for word writes.  Do we need to do this?
      if (count & 0x01)
        count++;
      if (ei_status.dmaing) {
 -      printk(KERN_NOTICE "%s: DMAing conflict in dma_block_output."
 +      netdev_notice(dev, "DMAing conflict in dma_block_output."
               "[DMAstat:%1x][irqlock:%1x]\n",
 -             dev->name, ei_status.dmaing, ei_status.irqlock);
 +             ei_status.dmaing, ei_status.irqlock);
        return;
      }
      ei_status.dmaing |= 0x01;
                break;
        } while (--tries > 0);
        if (tries <= 0) {
 -          printk(KERN_NOTICE "%s: Tx packet transfer address mismatch,"
 +          netdev_notice(dev, "Tx packet transfer address mismatch,"
                   "%#4.4x (expected) vs. %#4.4x (actual).\n",
 -                 dev->name, (start_page << 8) + count, addr);
 +                 (start_page << 8) + count, addr);
            if (retries++ == 0)
                goto retry;
        }
  
      while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
        if (time_after(jiffies, dma_start + PCNET_RDC_TIMEOUT)) {
 -          printk(KERN_NOTICE "%s: timeout waiting for Tx RDC.\n",
 -                 dev->name);
 +          netdev_notice(dev, "timeout waiting for Tx RDC.\n");
            pcnet_reset_8390(dev);
            NS8390_init(dev, 1);
            break;
@@@ -1341,9 -1388,9 +1368,9 @@@ static int setup_dma_config(struct pcmc
      ei_status.stop_page = stop_pg;
  
      /* set up block i/o functions */
 -    ei_status.get_8390_hdr = &dma_get_8390_hdr;
 -    ei_status.block_input = &dma_block_input;
 -    ei_status.block_output = &dma_block_output;
 +    ei_status.get_8390_hdr = dma_get_8390_hdr;
 +    ei_status.block_input = dma_block_input;
 +    ei_status.block_output = dma_block_output;
  
      return 0;
  }
@@@ -1489,9 -1536,9 +1516,9 @@@ static int setup_shmem_window(struct pc
      ei_status.stop_page = start_pg + ((req.Size - offset) >> 8);
  
      /* set up block i/o functions */
 -    ei_status.get_8390_hdr = &shmem_get_8390_hdr;
 -    ei_status.block_input = &shmem_block_input;
 -    ei_status.block_output = &shmem_block_output;
 +    ei_status.get_8390_hdr = shmem_get_8390_hdr;
 +    ei_status.block_input = shmem_block_input;
 +    ei_status.block_output = shmem_block_output;
  
      info->flags |= USE_SHMEM;
      return 0;
diff --combined drivers/net/skge.c
index a8a63581d63dfc913c567aa6aa2150fe23c641d0,465ae7e84507385b079c7922cb7360cec428a30f..bfec2e0f52757bdb1097d158b813aaecd7164d66
@@@ -43,6 -43,7 +43,7 @@@
  #include <linux/seq_file.h>
  #include <linux/mii.h>
  #include <linux/slab.h>
+ #include <linux/dmi.h>
  #include <asm/irq.h>
  
  #include "skge.h"
@@@ -3178,7 -3179,8 +3179,7 @@@ static int skge_poll(struct napi_struc
  
                skb = skge_rx_get(dev, e, control, rd->status, rd->csum2);
                if (likely(skb)) {
 -                      netif_receive_skb(skb);
 -
 +                      napi_gro_receive(napi, skb);
                        ++work_done;
                }
        }
        if (work_done < to_do) {
                unsigned long flags;
  
 +              napi_gro_flush(napi);
                spin_lock_irqsave(&hw->hw_lock, flags);
                __napi_complete(napi);
                hw->intr_mask |= napimask[skge->port];
@@@ -3849,7 -3850,6 +3850,7 @@@ static struct net_device *skge_devinit(
                dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
                skge->rx_csum = 1;
        }
 +      dev->features |= NETIF_F_GRO;
  
        /* read the mac address */
        memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
@@@ -3869,6 -3869,8 +3870,8 @@@ static void __devinit skge_show_addr(st
        netif_info(skge, probe, skge->netdev, "addr %pM\n", dev->dev_addr);
  }
  
+ static int only_32bit_dma;
  static int __devinit skge_probe(struct pci_dev *pdev,
                                const struct pci_device_id *ent)
  {
  
        pci_set_master(pdev);
  
-       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+       if (!only_32bit_dma && !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
                using_dac = 1;
                err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
        } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
@@@ -4148,8 -4150,21 +4151,21 @@@ static struct pci_driver skge_driver = 
        .shutdown =     skge_shutdown,
  };
  
+ static struct dmi_system_id skge_32bit_dma_boards[] = {
+       {
+               .ident = "Gigabyte nForce boards",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co"),
+                       DMI_MATCH(DMI_BOARD_NAME, "nForce"),
+               },
+       },
+       {}
+ };
  static int __init skge_init_module(void)
  {
+       if (dmi_check_system(skge_32bit_dma_boards))
+               only_32bit_dma = 1;
        skge_debug_init();
        return pci_register_driver(&skge_driver);
  }
diff --combined include/linux/pci_ids.h
index 9438660b46eab77c727bf022d0b1fcd8577a49c7,570fddeb0388f62b7b8dd0a32ec5136123856033..daac10b2cc80c1455599a92131e9f50f7a3d5965
  #define PCI_DEVICE_ID_VLSI_82C147     0x0105
  #define PCI_DEVICE_ID_VLSI_VAS96011   0x0702
  
+ /* AMD RD890 Chipset */
+ #define PCI_DEVICE_ID_RD890_IOMMU     0x5a23
  #define PCI_VENDOR_ID_ADL             0x1005
  #define PCI_DEVICE_ID_ADL_2301                0x2301
  
  #define PCI_VENDOR_ID_ARIMA           0x161f
  
  #define PCI_VENDOR_ID_BROCADE         0x1657
 +#define PCI_DEVICE_ID_BROCADE_CT      0x0014
 +#define PCI_DEVICE_ID_BROCADE_FC_8G1P 0x0017
 +#define PCI_DEVICE_ID_BROCADE_CT_FC   0x0021
  
  #define PCI_VENDOR_ID_SIBYTE          0x166d
  #define PCI_DEVICE_ID_BCM1250_PCI     0x0001
diff --combined net/9p/client.c
index f34b9f5108189feec49f80b2f5b024bc43a4bae4,9eb72505308fc697d2857737f8dd3f4ec04d5bd3..b5e1aa8d718e1a3f8e72e33f2e4099b96c30c46d
@@@ -61,13 -61,13 +61,13 @@@ static const match_table_t tokens = 
  
  inline int p9_is_proto_dotl(struct p9_client *clnt)
  {
 -      return (clnt->proto_version == p9_proto_2000L);
 +      return clnt->proto_version == p9_proto_2000L;
  }
  EXPORT_SYMBOL(p9_is_proto_dotl);
  
  inline int p9_is_proto_dotu(struct p9_client *clnt)
  {
 -      return (clnt->proto_version == p9_proto_2000u);
 +      return clnt->proto_version == p9_proto_2000u;
  }
  EXPORT_SYMBOL(p9_is_proto_dotu);
  
@@@ -331,8 -331,10 +331,10 @@@ static void p9_tag_cleanup(struct p9_cl
                }
        }
  
-       if (c->tagpool)
+       if (c->tagpool) {
+               p9_idpool_put(0, c->tagpool); /* free reserved tag 0 */
                p9_idpool_destroy(c->tagpool);
+       }
  
        /* free requests associated with tags */
        for (row = 0; row < (c->max_tag/P9_ROW_MAXTAG); row++) {
@@@ -944,6 -946,7 +946,7 @@@ struct p9_fid *p9_client_walk(struct p9
        int16_t nwqids, count;
  
        err = 0;
+       wqids = NULL;
        clnt = oldfid->clnt;
        if (clone) {
                fid = p9_fid_create(clnt);
        else
                fid->qid = oldfid->qid;
  
+       kfree(wqids);
        return fid;
  
  clunk_fid:
+       kfree(wqids);
        p9_client_clunk(fid);
        fid = NULL;
  
diff --combined net/caif/caif_socket.c
index abcba5358b63a033de40f511f844f8993c93e724,4bf28f25f368b399a6ef220e06c08c0f5d2621f5..2eca2dd0000fd7dce7fc614ed5e476f0ca886874
@@@ -4,8 -4,6 +4,8 @@@
   * License terms: GNU General Public License (GPL) version 2
   */
  
 +#define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__
 +
  #include <linux/fs.h>
  #include <linux/init.h>
  #include <linux/module.h>
@@@ -17,6 -15,7 +17,6 @@@
  #include <linux/poll.h>
  #include <linux/tcp.h>
  #include <linux/uaccess.h>
 -#include <linux/mutex.h>
  #include <linux/debugfs.h>
  #include <linux/caif/caif_socket.h>
  #include <asm/atomic.h>
@@@ -29,6 -28,9 +29,6 @@@
  MODULE_LICENSE("GPL");
  MODULE_ALIAS_NETPROTO(AF_CAIF);
  
 -#define CAIF_DEF_SNDBUF (4096*10)
 -#define CAIF_DEF_RCVBUF (4096*100)
 -
  /*
   * CAIF state is re-using the TCP socket states.
   * caif_states stored in sk_state reflect the state as reported by
@@@ -155,7 -157,9 +155,7 @@@ static int caif_queue_rcv_skb(struct so
  
        if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
                (unsigned)sk->sk_rcvbuf && rx_flow_is_on(cf_sk)) {
 -              trace_printk("CAIF: %s():"
 -                      " sending flow OFF (queue len = %d %d)\n",
 -                      __func__,
 +              pr_debug("sending flow OFF (queue len = %d %d)\n",
                        atomic_read(&cf_sk->sk.sk_rmem_alloc),
                        sk_rcvbuf_lowwater(cf_sk));
                set_rx_flow_off(cf_sk);
                return err;
        if (!sk_rmem_schedule(sk, skb->truesize) && rx_flow_is_on(cf_sk)) {
                set_rx_flow_off(cf_sk);
 -              trace_printk("CAIF: %s():"
 -                      " sending flow OFF due to rmem_schedule\n",
 -                      __func__);
 +              pr_debug("sending flow OFF due to rmem_schedule\n");
                dbfs_atomic_inc(&cnt.num_rx_flow_off);
                caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_OFF_REQ);
        }
@@@ -269,7 -275,8 +269,7 @@@ static void caif_ctrl_cb(struct cflaye
                break;
  
        default:
 -              pr_debug("CAIF: %s(): Unexpected flow command %d\n",
 -                              __func__, flow);
 +              pr_debug("Unexpected flow command %d\n", flow);
        }
  }
  
@@@ -529,7 -536,8 +529,7 @@@ static int transmit_skb(struct sk_buff 
  
                /* Slight paranoia, probably not needed. */
                if (unlikely(loopcnt++ > 1000)) {
 -                      pr_warning("CAIF: %s(): transmit retries failed,"
 -                              " error = %d\n", __func__, ret);
 +                      pr_warn("transmit retries failed, error = %d\n", ret);
                        break;
                }
  
@@@ -819,6 -827,7 +819,7 @@@ static int caif_connect(struct socket *
        long timeo;
        int err;
        int ifindex, headroom, tailroom;
+       unsigned int mtu;
        struct net_device *dev;
  
        lock_sock(sk);
                cf_sk->sk.sk_state = CAIF_DISCONNECTED;
                goto out;
        }
-       dev = dev_get_by_index(sock_net(sk), ifindex);
+       err = -ENODEV;
+       rcu_read_lock();
+       dev = dev_get_by_index_rcu(sock_net(sk), ifindex);
+       if (!dev) {
+               rcu_read_unlock();
+               goto out;
+       }
        cf_sk->headroom = LL_RESERVED_SPACE_EXTRA(dev, headroom);
+       mtu = dev->mtu;
+       rcu_read_unlock();
        cf_sk->tailroom = tailroom;
-       cf_sk->maxframe = dev->mtu - (headroom + tailroom);
-       dev_put(dev);
+       cf_sk->maxframe = mtu - (headroom + tailroom);
        if (cf_sk->maxframe < 1) {
 -              pr_warning("CAIF: %s(): CAIF Interface MTU too small (%u)\n",
 -                         __func__, mtu);
 +              pr_warn("CAIF Interface MTU too small (%d)\n", dev->mtu);
-               err = -ENODEV;
                goto out;
        }
  
@@@ -1114,6 -1132,10 +1123,6 @@@ static int caif_create(struct net *net
        /* Store the protocol */
        sk->sk_protocol = (unsigned char) protocol;
  
 -      /* Sendbuf dictates the amount of outbound packets not yet sent */
 -      sk->sk_sndbuf = CAIF_DEF_SNDBUF;
 -      sk->sk_rcvbuf = CAIF_DEF_RCVBUF;
 -
        /*
         * Lock in order to try to stop someone from opening the socket
         * too early.
index 597c493392ad550d3a29d58f7d24a8c44fd931ba,12c4859828146cbdff7a0e9c38a039eaa3395426..3835ce35e224fc5915372cdc2d4422c7f842c3c5
@@@ -745,17 -745,18 +745,18 @@@ gss_pipe_release(struct inode *inode
        struct rpc_inode *rpci = RPC_I(inode);
        struct gss_upcall_msg *gss_msg;
  
+ restart:
        spin_lock(&inode->i_lock);
-       while (!list_empty(&rpci->in_downcall)) {
+       list_for_each_entry(gss_msg, &rpci->in_downcall, list) {
  
-               gss_msg = list_entry(rpci->in_downcall.next,
-                               struct gss_upcall_msg, list);
+               if (!list_empty(&gss_msg->msg.list))
+                       continue;
                gss_msg->msg.errno = -EPIPE;
                atomic_inc(&gss_msg->count);
                __gss_unhash_msg(gss_msg);
                spin_unlock(&inode->i_lock);
                gss_release_msg(gss_msg);
-               spin_lock(&inode->i_lock);
+               goto restart;
        }
        spin_unlock(&inode->i_lock);
  
@@@ -1049,7 -1050,7 +1050,7 @@@ gss_match(struct auth_cred *acred, stru
  out:
        if (acred->machine_cred != gss_cred->gc_machine_cred)
                return 0;
 -      return (rc->cr_uid == acred->uid);
 +      return rc->cr_uid == acred->uid;
  }
  
  /*