Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 30 Oct 2016 03:33:20 +0000 (20:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 30 Oct 2016 03:33:20 +0000 (20:33 -0700)
Pull networking fixes from David Miller:
 "Lots of fixes, mostly drivers as is usually the case.

   1) Don't treat zero DMA address as invalid in vmxnet3, from Alexey
      Khoroshilov.

   2) Fix element timeouts in netfilter's nft_dynset, from Anders K.
      Pedersen.

   3) Don't put aead_req crypto struct on the stack in mac80211, from
      Ard Biesheuvel.

   4) Several uninitialized variable warning fixes from Arnd Bergmann.

   5) Fix memory leak in cxgb4, from Colin Ian King.

   6) Fix bpf handling of VLAN header push/pop, from Daniel Borkmann.

   7) Several VRF semantic fixes from David Ahern.

   8) Set skb->protocol properly in ip6_tnl_xmit(), from Eli Cooper.

   9) Socket needs to be locked in udp_disconnect(), from Eric Dumazet.

  10) Div-by-zero on 32-bit fix in mlx4 driver, from Eugenia Emantayev.

  11) Fix stale link state during failover in NCSCI driver, from Gavin
      Shan.

  12) Fix netdev lower adjacency list traversal, from Ido Schimmel.

  13) Propvide proper handle when emitting notifications of filter
      deletes, from Jamal Hadi Salim.

  14) Memory leaks and big-endian issues in rtl8xxxu, from Jes Sorensen.

  15) Fix DESYNC_FACTOR handling in ipv6, from Jiri Bohac.

  16) Several routing offload fixes in mlxsw driver, from Jiri Pirko.

  17) Fix broadcast sync problem in TIPC, from Jon Paul Maloy.

  18) Validate chunk len before using it in SCTP, from Marcelo Ricardo
      Leitner.

  19) Revert a netns locking change that causes regressions, from Paul
      Moore.

  20) Add recursion limit to GRO handling, from Sabrina Dubroca.

  21) GFP_KERNEL in irq context fix in ibmvnic, from Thomas Falcon.

  22) Avoid accessing stale vxlan/geneve socket in data path, from
      Pravin Shelar"

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (189 commits)
  geneve: avoid using stale geneve socket.
  vxlan: avoid using stale vxlan socket.
  qede: Fix out-of-bound fastpath memory access
  net: phy: dp83848: add dp83822 PHY support
  enic: fix rq disable
  tipc: fix broadcast link synchronization problem
  ibmvnic: Fix missing brackets in init_sub_crq_irqs
  ibmvnic: Fix releasing of sub-CRQ IRQs in interrupt context
  Revert "ibmvnic: Fix releasing of sub-CRQ IRQs in interrupt context"
  arch/powerpc: Update parameters for csum_tcpudp_magic & csum_tcpudp_nofold
  net/mlx4_en: Save slave ethtool stats command
  net/mlx4_en: Fix potential deadlock in port statistics flow
  net/mlx4: Fix firmware command timeout during interrupt test
  net/mlx4_core: Do not access comm channel if it has not yet been initialized
  net/mlx4_en: Fix panic during reboot
  net/mlx4_en: Process all completions in RX rings after port goes up
  net/mlx4_en: Resolve dividing by zero in 32-bit system
  net/mlx4_core: Change the default value of enable_qos
  net/mlx4_core: Avoid setting ports to auto when only one port type is supported
  net/mlx4_core: Fix the resource-type enum in res tracker to conform to FW spec
  ...

1  2 
MAINTAINERS
drivers/infiniband/hw/qedr/Kconfig
drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
drivers/net/ethernet/qlogic/Kconfig
include/net/cfg80211.h
net/core/dev.c

diff --combined MAINTAINERS
@@@ -316,14 -316,6 +316,14 @@@ W:       https://01.org/linux-acp
  S:    Supported
  F:    drivers/acpi/fan.c
  
 +ACPI FOR ARM64 (ACPI/arm64)
 +M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 +M:    Hanjun Guo <hanjun.guo@linaro.org>
 +M:    Sudeep Holla <sudeep.holla@arm.com>
 +L:    linux-acpi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/acpi/arm64
 +
  ACPI THERMAL DRIVER
  M:    Zhang Rui <rui.zhang@intel.com>
  L:    linux-acpi@vger.kernel.org
@@@ -1442,7 -1434,6 +1442,7 @@@ F:      drivers/cpufreq/mvebu-cpufreq.
  F:    arch/arm/configs/mvebu_*_defconfig
  
  ARM/Marvell Berlin SoC support
 +M:    Jisheng Zhang <jszhang@marvell.com>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2552,15 -2543,18 +2552,18 @@@ S:   Supporte
  F:    drivers/net/ethernet/broadcom/genet/
  
  BROADCOM BNX2 GIGABIT ETHERNET DRIVER
- M:    Sony Chacko <sony.chacko@qlogic.com>
- M:    Dept-HSGLinuxNICDev@qlogic.com
+ M:    Rasesh Mody <rasesh.mody@cavium.com>
+ M:    Harish Patil <harish.patil@cavium.com>
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/broadcom/bnx2.*
  F:    drivers/net/ethernet/broadcom/bnx2_*
  
  BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
- M:    Ariel Elior <ariel.elior@qlogic.com>
+ M:    Yuval Mintz <Yuval.Mintz@cavium.com>
+ M:    Ariel Elior <ariel.elior@cavium.com>
+ M:    everest-linux-l2@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/broadcom/bnx2x/
@@@ -2767,7 -2761,9 +2770,9 @@@ S:      Supporte
  F:    drivers/scsi/bfa/
  
  BROCADE BNA 10 GIGABIT ETHERNET DRIVER
- M:    Rasesh Mody <rasesh.mody@qlogic.com>
+ M:    Rasesh Mody <rasesh.mody@cavium.com>
+ M:    Sudarsana Kalluru <sudarsana.kalluru@cavium.com>
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/brocade/bna/
@@@ -4621,9 -4617,8 +4626,9 @@@ F:      sound/usb/misc/ua101.
  
  EXTENSIBLE FIRMWARE INTERFACE (EFI)
  M:    Matt Fleming <matt@codeblueprint.co.uk>
 +M:    Ard Biesheuvel <ard.biesheuvel@linaro.org>
  L:    linux-efi@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git
  S:    Maintained
  F:    Documentation/efi-stub.txt
  F:    arch/ia64/kernel/efi.c
@@@ -5288,12 -5283,6 +5293,12 @@@ M:    Joe Perches <joe@perches.com
  S:    Maintained
  F:    scripts/get_maintainer.pl
  
 +GENWQE (IBM Generic Workqueue Card)
 +M:    Frank Haverkamp <haver@linux.vnet.ibm.com>
 +M:    Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
 +S:    Supported
 +F:    drivers/misc/genwqe/
 +
  GFS2 FILE SYSTEM
  M:    Steven Whitehouse <swhiteho@redhat.com>
  M:    Bob Peterson <rpeterso@redhat.com>
@@@ -6139,12 -6128,6 +6144,12 @@@ M:    Stanislaw Gruszka <stf_xl@wp.pl
  S:    Maintained
  F:    drivers/usb/atm/ueagle-atm.c
  
 +IMGTEC ASCII LCD DRIVER
 +M:    Paul Burton <paul.burton@imgtec.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt
 +F:    drivers/auxdisplay/img-ascii-lcd.c
 +
  INA209 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -6456,7 -6439,6 +6461,7 @@@ F:      include/linux/mei_cl_bus.
  F:    drivers/misc/mei/*
  F:    drivers/watchdog/mei_wdt.c
  F:    Documentation/misc-devices/mei/*
 +F:    samples/mei/*
  
  INTEL MIC DRIVERS (mic)
  M:    Sudeep Dutt <sudeep.dutt@intel.com>
@@@ -6643,10 -6625,10 +6648,10 @@@ S:   Maintaine
  F:    drivers/firmware/iscsi_ibft*
  
  ISCSI
 -M:    Mike Christie <michaelc@cs.wisc.edu>
 +M:    Lee Duncan <lduncan@suse.com>
 +M:    Chris Leech <cleech@redhat.com>
  L:    open-iscsi@googlegroups.com
 -W:    www.open-iscsi.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mnc/linux-2.6-iscsi.git
 +W:    www.open-iscsi.com
  S:    Maintained
  F:    drivers/scsi/*iscsi*
  F:    include/scsi/*iscsi*
@@@ -7224,11 -7206,17 +7229,11 @@@ F:   drivers/lightnvm
  F:    include/linux/lightnvm.h
  F:    include/uapi/linux/lightnvm.h
  
 -LINUX FOR IBM pSERIES (RS/6000)
 -M:    Paul Mackerras <paulus@au.ibm.com>
 -W:    http://www.ibm.com/linux/ltc/projects/ppc
 -S:    Supported
 -F:    arch/powerpc/boot/rs6000.h
 -
  LINUX FOR POWERPC (32-BIT AND 64-BIT)
  M:    Benjamin Herrenschmidt <benh@kernel.crashing.org>
  M:    Paul Mackerras <paulus@samba.org>
  M:    Michael Ellerman <mpe@ellerman.id.au>
 -W:    http://www.penguinppc.org/
 +W:    https://github.com/linuxppc/linux/wiki
  L:    linuxppc-dev@lists.ozlabs.org
  Q:    http://patchwork.ozlabs.org/project/linuxppc-dev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
@@@ -7243,7 -7231,6 +7248,7 @@@ F:      drivers/net/ethernet/ibm/ibmvnic.
  F:    drivers/pci/hotplug/pnv_php.c
  F:    drivers/pci/hotplug/rpa*
  F:    drivers/scsi/ibmvscsi/
 +F:    tools/testing/selftests/powerpc
  N:    opal
  N:    /pmac
  N:    powermac
@@@ -7300,8 -7287,9 +7305,8 @@@ F:      arch/powerpc/platforms/83xx
  F:    arch/powerpc/platforms/85xx/
  
  LINUX FOR POWERPC PA SEMI PWRFICIENT
 -M:    Olof Johansson <olof@lixom.net>
  L:    linuxppc-dev@lists.ozlabs.org
 -S:    Maintained
 +S:    Orphan
  F:    arch/powerpc/platforms/pasemi/
  F:    drivers/*/*pasemi*
  F:    drivers/*/*/*pasemi*
@@@ -7844,13 -7832,6 +7849,13 @@@ F:    Documentation/scsi/megaraid.tx
  F:    drivers/scsi/megaraid.*
  F:    drivers/scsi/megaraid/
  
 +MELFAS MIP4 TOUCHSCREEN DRIVER
 +M:    Sangwon Jee <jeesw@melfas.com>
 +W:    http://www.melfas.com
 +S:    Supported
 +F:    drivers/input/touchscreen/melfas_mip4.c
 +F:    Documentation/devicetree/bindings/input/touchscreen/melfas_mip4.txt
 +
  MELLANOX ETHERNET DRIVER (mlx4_en)
  M:    Tariq Toukan <tariqt@mellanox.com>
  L:    netdev@vger.kernel.org
@@@ -8107,7 -8088,6 +8112,7 @@@ S:      Maintaine
  F:    drivers/media/dvb-frontends/mn88473*
  
  MODULE SUPPORT
 +M:    Jessica Yu <jeyu@redhat.com>
  M:    Rusty Russell <rusty@rustcorp.com.au>
  S:    Maintained
  F:    include/linux/module.h
@@@ -8221,7 -8201,7 +8226,7 @@@ F:      include/linux/mfd
  MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
  M:    Ulf Hansson <ulf.hansson@linaro.org>
  L:    linux-mmc@vger.kernel.org
 -T:    git git://git.linaro.org/people/ulf.hansson/mmc.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/mmc/
  F:    drivers/mmc/
@@@ -8517,11 -8497,10 +8522,10 @@@ F:   Documentation/devicetree/bindings/ne
  F:    drivers/net/wireless/
  
  NETXEN (1/10) GbE SUPPORT
- M:    Manish Chopra <manish.chopra@qlogic.com>
- M:    Sony Chacko <sony.chacko@qlogic.com>
- M:    Rajesh Borundia <rajesh.borundia@qlogic.com>
+ M:    Manish Chopra <manish.chopra@cavium.com>
+ M:    Rahul Verma <rahul.verma@cavium.com>
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
- W:    http://www.qlogic.com
  S:    Supported
  F:    drivers/net/ethernet/qlogic/netxen/
  
@@@ -9044,13 -9023,15 +9048,13 @@@ S:   Maintaine
  F:    drivers/net/wireless/intersil/p54/
  
  PA SEMI ETHERNET DRIVER
 -M:    Olof Johansson <olof@lixom.net>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/ethernet/pasemi/*
  
  PA SEMI SMBUS DRIVER
 -M:    Olof Johansson <olof@lixom.net>
  L:    linux-i2c@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/i2c/busses/i2c-pasemi.c
  
  PADATA PARALLEL EXECUTION MECHANISM
@@@ -9308,7 -9289,7 +9312,7 @@@ S:      Maintaine
  F:    drivers/pci/host/*designware*
  
  PCI DRIVER FOR SYNOPSYS PROTOTYPING DEVICE
 -M:    Joao Pinto <jpinto@synopsys.com>
 +M:    Jose Abreu <Jose.Abreu@synopsys.com>
  L:    linux-pci@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/pci/designware-pcie.txt
@@@ -9399,7 -9380,6 +9403,7 @@@ W:      http://lists.infradead.org/mailman/l
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia.git
  S:    Maintained
  F:    Documentation/pcmcia/
 +F:    tools/pcmcia/
  F:    drivers/pcmcia/
  F:    include/pcmcia/
  
@@@ -9897,33 -9877,32 +9901,32 @@@ F:   Documentation/scsi/LICENSE.qla4xx
  F:    drivers/scsi/qla4xxx/
  
  QLOGIC QLA3XXX NETWORK DRIVER
- M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
- M:    Ron Mercer <ron.mercer@qlogic.com>
- M:    linux-driver@qlogic.com
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/LICENSE.qla3xxx
  F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
- M:    Dept-GELinuxNICDev@qlogic.com
+ M:    Harish Patil <harish.patil@cavium.com>
+ M:    Manish Chopra <manish.chopra@cavium.com>
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qlcnic/
  
  QLOGIC QLGE 10Gb ETHERNET DRIVER
- M:    Harish Patil <harish.patil@qlogic.com>
- M:    Sudarsana Kalluru <sudarsana.kalluru@qlogic.com>
- M:    Dept-GELinuxNICDev@qlogic.com
- M:    linux-driver@qlogic.com
+ M:    Harish Patil <harish.patil@cavium.com>
+ M:    Manish Chopra <manish.chopra@cavium.com>
+ M:    Dept-GELinuxNICDev@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qlge/
  
  QLOGIC QL4xxx ETHERNET DRIVER
- M:    Yuval Mintz <Yuval.Mintz@qlogic.com>
- M:    Ariel Elior <Ariel.Elior@qlogic.com>
- M:    everest-linux-l2@qlogic.com
+ M:    Yuval Mintz <Yuval.Mintz@cavium.com>
+ M:    Ariel Elior <Ariel.Elior@cavium.com>
+ M:    everest-linux-l2@cavium.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qed/
index 7c06d85,0000000..6c9f392
mode 100644,000000..100644
--- /dev/null
@@@ -1,7 -1,0 +1,8 @@@
 +config INFINIBAND_QEDR
 +      tristate "QLogic RoCE driver"
 +      depends on 64BIT && QEDE
 +      select QED_LL2
++      select QED_RDMA
 +      ---help---
 +        This driver provides low-level InfiniBand over Ethernet
 +        support for QLogic QED host channel adapters (HCAs).
@@@ -760,6 -760,16 +760,6 @@@ void hns_dsaf_set_promisc_mode(struct d
                                 DSAF_CFG_MIX_MODE_S, !!en);
  }
  
 -void hns_dsaf_set_inner_lb(struct dsaf_device *dsaf_dev, u32 mac_id, u32 en)
 -{
 -      if (AE_IS_VER1(dsaf_dev->dsaf_ver) ||
 -          dsaf_dev->mac_cb[mac_id]->mac_type == HNAE_PORT_DEBUG)
 -              return;
 -
 -      dsaf_set_dev_bit(dsaf_dev, DSAFV2_SERDES_LBK_0_REG + 4 * mac_id,
 -                       DSAFV2_SERDES_LBK_EN_B, !!en);
 -}
 -
  /**
   * hns_dsaf_tbl_stat_en - tbl
   * @dsaf_id: dsa fabric id
@@@ -2751,6 -2761,7 +2751,7 @@@ static const struct of_device_id g_dsaf
        {.compatible = "hisilicon,hns-dsaf-v2"},
        {}
  };
+ MODULE_DEVICE_TABLE(of, g_dsaf_match);
  
  static struct platform_driver g_dsaf_driver = {
        .probe = hns_dsaf_probe,
@@@ -107,4 -107,19 +107,7 @@@ config QED
        ---help---
          This enables the support for ...
  
 -config INFINIBAND_QEDR
 -      tristate "QLogic qede RoCE sources [debug]"
 -      depends on QEDE && 64BIT
 -      select QED_LL2
 -      select QED_RDMA
 -      default n
 -      ---help---
 -        This provides a temporary node that allows the compilation
 -        and logical testing of the InfiniBand over Ethernet support
 -        for QLogic QED. This would be replaced by the 'real' option
 -        once the QEDR driver is added [+relocated].
 -
+ config QED_RDMA
+       bool
  endif # NET_VENDOR_QLOGIC
diff --combined include/net/cfg80211.h
@@@ -796,9 -796,9 +796,9 @@@ enum station_parameters_apply_mask 
   *    (or NULL for no change)
   * @supported_rates_len: number of supported rates
   * @sta_flags_mask: station flags that changed
 - *    (bitmask of BIT(NL80211_STA_FLAG_...))
 + *    (bitmask of BIT(%NL80211_STA_FLAG_...))
   * @sta_flags_set: station flags values
 - *    (bitmask of BIT(NL80211_STA_FLAG_...))
 + *    (bitmask of BIT(%NL80211_STA_FLAG_...))
   * @listen_interval: listen interval or -1 for no change
   * @aid: AID or zero for no change
   * @peer_aid: mesh peer AID or zero for no change
@@@ -3088,54 -3088,47 +3088,54 @@@ struct ieee80211_iface_limit 
   *
   * 1. Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:
   *
 - *  struct ieee80211_iface_limit limits1[] = {
 - *    { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
 - *    { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, },
 - *  };
 - *  struct ieee80211_iface_combination combination1 = {
 - *    .limits = limits1,
 - *    .n_limits = ARRAY_SIZE(limits1),
 - *    .max_interfaces = 2,
 - *    .beacon_int_infra_match = true,
 - *  };
 + *    .. code-block:: c
 + *
 + *    struct ieee80211_iface_limit limits1[] = {
 + *            { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
 + *            { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, },
 + *    };
 + *    struct ieee80211_iface_combination combination1 = {
 + *            .limits = limits1,
 + *            .n_limits = ARRAY_SIZE(limits1),
 + *            .max_interfaces = 2,
 + *            .beacon_int_infra_match = true,
 + *    };
   *
   *
   * 2. Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:
   *
 - *  struct ieee80211_iface_limit limits2[] = {
 - *    { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |
 - *                         BIT(NL80211_IFTYPE_P2P_GO), },
 - *  };
 - *  struct ieee80211_iface_combination combination2 = {
 - *    .limits = limits2,
 - *    .n_limits = ARRAY_SIZE(limits2),
 - *    .max_interfaces = 8,
 - *    .num_different_channels = 1,
 - *  };
 + *    .. code-block:: c
 + *
 + *    struct ieee80211_iface_limit limits2[] = {
 + *            { .max = 8, .types = BIT(NL80211_IFTYPE_AP) |
 + *                                 BIT(NL80211_IFTYPE_P2P_GO), },
 + *    };
 + *    struct ieee80211_iface_combination combination2 = {
 + *            .limits = limits2,
 + *            .n_limits = ARRAY_SIZE(limits2),
 + *            .max_interfaces = 8,
 + *            .num_different_channels = 1,
 + *    };
   *
   *
   * 3. Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.
   *
 - * This allows for an infrastructure connection and three P2P connections.
 - *
 - *  struct ieee80211_iface_limit limits3[] = {
 - *    { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
 - *    { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |
 - *                         BIT(NL80211_IFTYPE_P2P_CLIENT), },
 - *  };
 - *  struct ieee80211_iface_combination combination3 = {
 - *    .limits = limits3,
 - *    .n_limits = ARRAY_SIZE(limits3),
 - *    .max_interfaces = 4,
 - *    .num_different_channels = 2,
 - *  };
 + *    This allows for an infrastructure connection and three P2P connections.
 + *
 + *    .. code-block:: c
 + *
 + *    struct ieee80211_iface_limit limits3[] = {
 + *            { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), },
 + *            { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) |
 + *                                 BIT(NL80211_IFTYPE_P2P_CLIENT), },
 + *    };
 + *    struct ieee80211_iface_combination combination3 = {
 + *            .limits = limits3,
 + *            .n_limits = ARRAY_SIZE(limits3),
 + *            .max_interfaces = 4,
 + *            .num_different_channels = 2,
 + *    };
 + *
   */
  struct ieee80211_iface_combination {
        const struct ieee80211_iface_limit *limits;
@@@ -4046,6 -4039,18 +4046,18 @@@ unsigned int ieee80211_get_mesh_hdrlen(
   * that do not do the 802.11/802.3 conversion on the device.
   */
  
+ /**
+  * ieee80211_data_to_8023_exthdr - convert an 802.11 data frame to 802.3
+  * @skb: the 802.11 data frame
+  * @ehdr: pointer to a &struct ethhdr that will get the header, instead
+  *    of it being pushed into the SKB
+  * @addr: the device MAC address
+  * @iftype: the virtual interface type
+  * Return: 0 on success. Non-zero on error.
+  */
+ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
+                                 const u8 *addr, enum nl80211_iftype iftype);
  /**
   * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
   * @skb: the 802.11 data frame
   * @iftype: the virtual interface type
   * Return: 0 on success. Non-zero on error.
   */
- int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
-                          enum nl80211_iftype iftype);
+ static inline int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
+                                        enum nl80211_iftype iftype)
+ {
+       return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype);
+ }
  
  /**
   * ieee80211_data_from_8023 - convert an 802.3 frame to 802.11
@@@ -4072,22 -4080,23 +4087,23 @@@ int ieee80211_data_from_8023(struct sk_
  /**
   * ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
   *
-  * Decode an IEEE 802.11n A-MSDU frame and convert it to a list of
-  * 802.3 frames. The @list will be empty if the decode fails. The
-  * @skb is consumed after the function returns.
+  * Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames.
+  * The @list will be empty if the decode fails. The @skb must be fully
+  * header-less before being passed in here; it is freed in this function.
   *
-  * @skb: The input IEEE 802.11n A-MSDU frame.
+  * @skb: The input A-MSDU frame without any headers.
   * @list: The output list of 802.3 frames. It must be allocated and
   *    initialized by by the caller.
   * @addr: The device MAC address.
   * @iftype: The device interface type.
   * @extra_headroom: The hardware extra headroom for SKBs in the @list.
-  * @has_80211_header: Set it true if SKB is with IEEE 802.11 header.
+  * @check_da: DA to check in the inner ethernet header, or NULL
+  * @check_sa: SA to check in the inner ethernet header, or NULL
   */
  void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
                              const u8 *addr, enum nl80211_iftype iftype,
                              const unsigned int extra_headroom,
-                             bool has_80211_header);
+                             const u8 *check_da, const u8 *check_sa);
  
  /**
   * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
diff --combined net/core/dev.c
@@@ -3035,6 -3035,7 +3035,7 @@@ struct sk_buff *validate_xmit_skb_list(
        }
        return head;
  }
+ EXPORT_SYMBOL_GPL(validate_xmit_skb_list);
  
  static void qdisc_pkt_len_init(struct sk_buff *skb)
  {
@@@ -3845,7 -3846,7 +3846,7 @@@ int netif_rx_ni(struct sk_buff *skb
  }
  EXPORT_SYMBOL(netif_rx_ni);
  
 -static void net_tx_action(struct softirq_action *h)
 +static __latent_entropy void net_tx_action(struct softirq_action *h)
  {
        struct softnet_data *sd = this_cpu_ptr(&softnet_data);
  
@@@ -4511,6 -4512,7 +4512,7 @@@ static enum gro_result dev_gro_receive(
                NAPI_GRO_CB(skb)->flush = 0;
                NAPI_GRO_CB(skb)->free = 0;
                NAPI_GRO_CB(skb)->encap_mark = 0;
+               NAPI_GRO_CB(skb)->recursion_counter = 0;
                NAPI_GRO_CB(skb)->is_fou = 0;
                NAPI_GRO_CB(skb)->is_atomic = 1;
                NAPI_GRO_CB(skb)->gro_remcsum_start = 0;
@@@ -5198,7 -5200,7 +5200,7 @@@ out_unlock
        return work;
  }
  
 -static void net_rx_action(struct softirq_action *h)
 +static __latent_entropy void net_rx_action(struct softirq_action *h)
  {
        struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        unsigned long time_limit = jiffies + 2;
@@@ -5511,10 -5513,14 +5513,14 @@@ struct net_device *netdev_all_lower_get
  {
        struct netdev_adjacent *lower;
  
-       lower = list_first_or_null_rcu(&dev->all_adj_list.lower,
-                                      struct netdev_adjacent, list);
+       lower = list_entry_rcu((*iter)->next, struct netdev_adjacent, list);
+       if (&lower->list == &dev->all_adj_list.lower)
+               return NULL;
  
-       return lower ? lower->dev : NULL;
+       *iter = &lower->list;
+       return lower->dev;
  }
  EXPORT_SYMBOL(netdev_all_lower_get_next_rcu);