Commit 6f0d349d authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Pull networking fixes from David Miller:

 1) Fix netpoll OOPS in r8169, from Ville Syrjälä.

 2) Fix bpf instruction alignment on powerpc et al., from Eric Dumazet.

 3) Don't ignore IFLA_MTU attribute when creating new ipvlan links. From
    Xin Long.

 4) Fix use after free in AF_PACKET, from Eric Dumazet.

 5) Mis-matched RTNL unlock in xen-netfront, from Ross Lagerwall.

 6) Fix VSOCK loopback on big-endian, from Claudio Imbrenda.

 7) Missing RX buffer offset correction when computing DMA addresses in
    mvneta driver, from Antoine Tenart.

 8) Fix crashes in DCCP's ccid3_hc_rx_send_feedback, from Eric Dumazet.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (34 commits)
  sfc: make function efx_rps_hash_bucket static
  strparser: Corrected typo in documentation.
  qmi_wwan: add support for the Dell Wireless 5821e module
  cxgb4: when disabling dcb set txq dcb priority to 0
  net_sched: remove a bogus warning in hfsc
  net: dccp: switch rx_tstamp_last_feedback to monotonic clock
  net: dccp: avoid crash in ccid3_hc_rx_send_feedback()
  net: Remove depends on HAS_DMA in case of platform dependency
  MAINTAINERS: Add file patterns for dsa device tree bindings
  net: mscc: make sparse happy
  net: mvneta: fix the Rx desc DMA address in the Rx path
  Documentation: e1000: Fix docs build error
  Documentation: e100: Fix docs build error
  Documentation: e1000: Use correct heading adornment
  Documentation: e100: Use correct heading adornment
  ipv6: mcast: fix unsolicited report interval after receiving querys
  vhost_net: validate sock before trying to put its fd
  VSOCK: fix loopback on big-endian systems
  net: ethernet: ti: davinci_cpdma: make function cpdma_desc_pool_create static
  xen-netfront: Update features after registering netdev
  ...
parents 7daf201d 829eb053
==============================================================
Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters
============================================================== ==============================================================
...@@ -86,83 +87,84 @@ Event Log Message Level: The driver uses the message level flag to log events ...@@ -86,83 +87,84 @@ Event Log Message Level: The driver uses the message level flag to log events
Additional Configurations Additional Configurations
========================= =========================
Configuring the Driver on Different Distributions Configuring the Driver on Different Distributions
------------------------------------------------- -------------------------------------------------
Configuring a network driver to load properly when the system is started is Configuring a network driver to load properly when the system is started
distribution dependent. Typically, the configuration process involves adding is distribution dependent. Typically, the configuration process involves
an alias line to /etc/modprobe.d/*.conf as well as editing other system adding an alias line to /etc/modprobe.d/*.conf as well as editing other
startup scripts and/or configuration files. Many popular Linux system startup scripts and/or configuration files. Many popular Linux
distributions ship with tools to make these changes for you. To learn the distributions ship with tools to make these changes for you. To learn
proper way to configure a network device for your system, refer to your the proper way to configure a network device for your system, refer to
distribution documentation. If during this process you are asked for the your distribution documentation. If during this process you are asked
driver or module name, the name for the Linux Base Driver for the Intel for the driver or module name, the name for the Linux Base Driver for
PRO/100 Family of Adapters is e100. the Intel PRO/100 Family of Adapters is e100.
As an example, if you install the e100 driver for two PRO/100 adapters As an example, if you install the e100 driver for two PRO/100 adapters
(eth0 and eth1), add the following to a configuration file in /etc/modprobe.d/ (eth0 and eth1), add the following to a configuration file in
/etc/modprobe.d/::
alias eth0 e100 alias eth0 e100
alias eth1 e100 alias eth1 e100
Viewing Link Messages Viewing Link Messages
--------------------- ---------------------
In order to see link messages and other Intel driver information on your
console, you must set the dmesg level up to six. This can be done by
entering the following on the command line before loading the e100 driver::
dmesg -n 6
If you wish to see all messages issued by the driver, including debug In order to see link messages and other Intel driver information on your
messages, set the dmesg level to eight. console, you must set the dmesg level up to six. This can be done by
entering the following on the command line before loading the e100
driver::
NOTE: This setting is not saved across reboots. dmesg -n 6
If you wish to see all messages issued by the driver, including debug
messages, set the dmesg level to eight.
ethtool NOTE: This setting is not saved across reboots.
-------
The driver utilizes the ethtool interface for driver configuration and ethtool
diagnostics, as well as displaying statistical information. The ethtool -------
version 1.6 or later is required for this functionality.
The latest release of ethtool can be found from The driver utilizes the ethtool interface for driver configuration and
https://www.kernel.org/pub/software/network/ethtool/ diagnostics, as well as displaying statistical information. The ethtool
version 1.6 or later is required for this functionality.
Enabling Wake on LAN* (WoL) The latest release of ethtool can be found from
--------------------------- https://www.kernel.org/pub/software/network/ethtool/
WoL is provided through the ethtool* utility. For instructions on enabling
WoL with ethtool, refer to the ethtool man page.
WoL will be enabled on the system during the next shut down or reboot. For Enabling Wake on LAN* (WoL)
this driver version, in order to enable WoL, the e100 driver must be ---------------------------
loaded when shutting down or rebooting the system. WoL is provided through the ethtool* utility. For instructions on
enabling WoL with ethtool, refer to the ethtool man page. WoL will be
enabled on the system during the next shut down or reboot. For this
driver version, in order to enable WoL, the e100 driver must be loaded
when shutting down or rebooting the system.
NAPI NAPI
---- ----
NAPI (Rx polling mode) is supported in the e100 driver. NAPI (Rx polling mode) is supported in the e100 driver.
See https://wiki.linuxfoundation.org/networking/napi for more information See https://wiki.linuxfoundation.org/networking/napi for more
on NAPI. information on NAPI.
Multiple Interfaces on Same Ethernet Broadcast Network Multiple Interfaces on Same Ethernet Broadcast Network
------------------------------------------------------ ------------------------------------------------------
Due to the default ARP behavior on Linux, it is not possible to have Due to the default ARP behavior on Linux, it is not possible to have one
one system on two IP networks in the same Ethernet broadcast domain system on two IP networks in the same Ethernet broadcast domain
(non-partitioned switch) behave as expected. All Ethernet interfaces (non-partitioned switch) behave as expected. All Ethernet interfaces
will respond to IP traffic for any IP address assigned to the system. will respond to IP traffic for any IP address assigned to the system.
This results in unbalanced receive traffic. This results in unbalanced receive traffic.
If you have multiple interfaces in a server, either turn on ARP If you have multiple interfaces in a server, either turn on ARP
filtering by filtering by
(1) entering:: echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter (1) entering:: echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
(this only works if your kernel's version is higher than 2.4.5), or (this only works if your kernel's version is higher than 2.4.5), or
(2) installing the interfaces in separate broadcast domains (either (2) installing the interfaces in separate broadcast domains (either
in different switches or in a switch partitioned to VLANs). in different switches or in a switch partitioned to VLANs).
Support Support
......
===========================================================
Linux* Base Driver for Intel(R) Ethernet Network Connection Linux* Base Driver for Intel(R) Ethernet Network Connection
=========================================================== ===========================================================
...@@ -354,57 +355,58 @@ previously mentioned to force the adapter to the same speed and duplex. ...@@ -354,57 +355,58 @@ previously mentioned to force the adapter to the same speed and duplex.
Additional Configurations Additional Configurations
========================= =========================
Jumbo Frames Jumbo Frames
------------ ------------
Jumbo Frames support is enabled by changing the MTU to a value larger than Jumbo Frames support is enabled by changing the MTU to a value larger
the default of 1500. Use the ifconfig command to increase the MTU size. than the default of 1500. Use the ifconfig command to increase the MTU
For example:: size. For example::
ifconfig eth<x> mtu 9000 up ifconfig eth<x> mtu 9000 up
This setting is not saved across reboots. It can be made permanent if This setting is not saved across reboots. It can be made permanent if
you add:: you add::
MTU=9000 MTU=9000
to the file /etc/sysconfig/network-scripts/ifcfg-eth<x>. This example to the file /etc/sysconfig/network-scripts/ifcfg-eth<x>. This example
applies to the Red Hat distributions; other distributions may store this applies to the Red Hat distributions; other distributions may store this
setting in a different location. setting in a different location.
Notes: Degradation in throughput performance may be observed in some
Jumbo frames environments. If this is observed, increasing the
application's socket buffer size and/or increasing the
/proc/sys/net/ipv4/tcp_*mem entry values may help. See the specific
application manual and /usr/src/linux*/Documentation/
networking/ip-sysctl.txt for more details.
Notes: - The maximum MTU setting for Jumbo Frames is 16110. This value
Degradation in throughput performance may be observed in some Jumbo frames coincides with the maximum Jumbo Frames size of 16128.
environments. If this is observed, increasing the application's socket buffer
size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help.
See the specific application manual and /usr/src/linux*/Documentation/
networking/ip-sysctl.txt for more details.
- The maximum MTU setting for Jumbo Frames is 16110. This value coincides - Using Jumbo frames at 10 or 100 Mbps is not supported and may result
with the maximum Jumbo Frames size of 16128. in poor performance or loss of link.
- Using Jumbo frames at 10 or 100 Mbps is not supported and may result in - Adapters based on the Intel(R) 82542 and 82573V/E controller do not
poor performance or loss of link. support Jumbo Frames. These correspond to the following product names:
Intel(R) PRO/1000 Gigabit Server Adapter Intel(R) PRO/1000 PM Network
Connection
- Adapters based on the Intel(R) 82542 and 82573V/E controller do not ethtool
support Jumbo Frames. These correspond to the following product names: -------
Intel(R) PRO/1000 Gigabit Server Adapter The driver utilizes the ethtool interface for driver configuration and
Intel(R) PRO/1000 PM Network Connection diagnostics, as well as displaying statistical information. The ethtool
version 1.6 or later is required for this functionality.
ethtool The latest release of ethtool can be found from
------- https://www.kernel.org/pub/software/network/ethtool/
The driver utilizes the ethtool interface for driver configuration and
diagnostics, as well as displaying statistical information. The ethtool
version 1.6 or later is required for this functionality.
The latest release of ethtool can be found from Enabling Wake on LAN* (WoL)
https://www.kernel.org/pub/software/network/ethtool/ ---------------------------
WoL is configured through the ethtool* utility.
Enabling Wake on LAN* (WoL) WoL will be enabled on the system during the next shut down or reboot.
--------------------------- For this driver version, in order to enable WoL, the e1000 driver must be
WoL is configured through the ethtool* utility. loaded when shutting down or rebooting the system.
WoL will be enabled on the system during the next shut down or reboot.
For this driver version, in order to enable WoL, the e1000 driver must be
loaded when shutting down or rebooting the system.
Support Support
======= =======
......
...@@ -48,7 +48,7 @@ void strp_pause(struct strparser *strp) ...@@ -48,7 +48,7 @@ void strp_pause(struct strparser *strp)
Temporarily pause a stream parser. Message parsing is suspended Temporarily pause a stream parser. Message parsing is suspended
and no new messages are delivered to the upper layer. and no new messages are delivered to the upper layer.
void strp_pause(struct strparser *strp) void strp_unpause(struct strparser *strp)
Unpause a paused stream parser. Unpause a paused stream parser.
......
...@@ -9882,6 +9882,7 @@ M: Andrew Lunn <andrew@lunn.ch> ...@@ -9882,6 +9882,7 @@ M: Andrew Lunn <andrew@lunn.ch>
M: Vivien Didelot <vivien.didelot@savoirfairelinux.com> M: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
M: Florian Fainelli <f.fainelli@gmail.com> M: Florian Fainelli <f.fainelli@gmail.com>
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/net/dsa/
F: net/dsa/ F: net/dsa/
F: include/net/dsa.h F: include/net/dsa.h
F: include/linux/dsa/ F: include/linux/dsa/
......
...@@ -173,7 +173,7 @@ config SUNLANCE ...@@ -173,7 +173,7 @@ config SUNLANCE
config AMD_XGBE config AMD_XGBE
tristate "AMD 10GbE Ethernet driver" tristate "AMD 10GbE Ethernet driver"
depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM && HAS_DMA depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM
depends on X86 || ARM64 || COMPILE_TEST depends on X86 || ARM64 || COMPILE_TEST
select BITREVERSE select BITREVERSE
select CRC32 select CRC32
......
config NET_XGENE_V2 config NET_XGENE_V2
tristate "APM X-Gene SoC Ethernet-v2 Driver" tristate "APM X-Gene SoC Ethernet-v2 Driver"
depends on HAS_DMA
depends on ARCH_XGENE || COMPILE_TEST depends on ARCH_XGENE || COMPILE_TEST
help help
This is the Ethernet driver for the on-chip ethernet interface This is the Ethernet driver for the on-chip ethernet interface
......
config NET_XGENE config NET_XGENE
tristate "APM X-Gene SoC Ethernet Driver" tristate "APM X-Gene SoC Ethernet Driver"
depends on HAS_DMA
depends on ARCH_XGENE || COMPILE_TEST depends on ARCH_XGENE || COMPILE_TEST
select PHYLIB select PHYLIB
select MDIO_XGENE select MDIO_XGENE
......
...@@ -24,7 +24,8 @@ config ARC_EMAC_CORE ...@@ -24,7 +24,8 @@ config ARC_EMAC_CORE
config ARC_EMAC config ARC_EMAC
tristate "ARC EMAC support" tristate "ARC EMAC support"
select ARC_EMAC_CORE select ARC_EMAC_CORE
depends on OF_IRQ && OF_NET && HAS_DMA && (ARC || COMPILE_TEST) depends on OF_IRQ && OF_NET
depends on ARC || COMPILE_TEST
---help--- ---help---
On some legacy ARC (Synopsys) FPGA boards such as ARCAngel4/ML50x On some legacy ARC (Synopsys) FPGA boards such as ARCAngel4/ML50x
non-standard on-chip ethernet device ARC EMAC 10/100 is used. non-standard on-chip ethernet device ARC EMAC 10/100 is used.
...@@ -33,7 +34,8 @@ config ARC_EMAC ...@@ -33,7 +34,8 @@ config ARC_EMAC
config EMAC_ROCKCHIP config EMAC_ROCKCHIP
tristate "Rockchip EMAC support" tristate "Rockchip EMAC support"
select ARC_EMAC_CORE select ARC_EMAC_CORE
depends on OF_IRQ && OF_NET && REGULATOR && HAS_DMA && (ARCH_ROCKCHIP || COMPILE_TEST) depends on OF_IRQ && OF_NET && REGULATOR
depends on ARCH_ROCKCHIP || COMPILE_TEST
---help--- ---help---
Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers. Support for Rockchip RK3036/RK3066/RK3188 EMAC ethernet controllers.
This selects Rockchip SoC glue layer support for the This selects Rockchip SoC glue layer support for the
......
...@@ -157,7 +157,6 @@ config BGMAC ...@@ -157,7 +157,6 @@ config BGMAC
config BGMAC_BCMA config BGMAC_BCMA
tristate "Broadcom iProc GBit BCMA support" tristate "Broadcom iProc GBit BCMA support"
depends on BCMA && BCMA_HOST_SOC depends on BCMA && BCMA_HOST_SOC
depends on HAS_DMA
depends on BCM47XX || ARCH_BCM_5301X || COMPILE_TEST depends on BCM47XX || ARCH_BCM_5301X || COMPILE_TEST
select BGMAC select BGMAC
select PHYLIB select PHYLIB
...@@ -170,7 +169,6 @@ config BGMAC_BCMA ...@@ -170,7 +169,6 @@ config BGMAC_BCMA
config BGMAC_PLATFORM config BGMAC_PLATFORM
tristate "Broadcom iProc GBit platform support" tristate "Broadcom iProc GBit platform support"
depends on HAS_DMA
depends on ARCH_BCM_IPROC || COMPILE_TEST depends on ARCH_BCM_IPROC || COMPILE_TEST
depends on OF depends on OF
select BGMAC select BGMAC
......
...@@ -170,10 +170,7 @@ static int gem_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) ...@@ -170,10 +170,7 @@ static int gem_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
if (delta > TSU_NSEC_MAX_VAL) { if (delta > TSU_NSEC_MAX_VAL) {
gem_tsu_get_time(&bp->ptp_clock_info, &now); gem_tsu_get_time(&bp->ptp_clock_info, &now);
if (sign) now = timespec64_add(now, then);
now = timespec64_sub(now, then);
else
now = timespec64_add(now, then);
gem_tsu_set_time(&bp->ptp_clock_info, gem_tsu_set_time(&bp->ptp_clock_info,
(const struct timespec64 *)&now); (const struct timespec64 *)&now);
......
config NET_CALXEDA_XGMAC config NET_CALXEDA_XGMAC
tristate "Calxeda 1G/10G XGMAC Ethernet driver" tristate "Calxeda 1G/10G XGMAC Ethernet driver"
depends on HAS_IOMEM && HAS_DMA depends on HAS_IOMEM
depends on ARCH_HIGHBANK || COMPILE_TEST depends on ARCH_HIGHBANK || COMPILE_TEST
select CRC32 select CRC32
help help
......
...@@ -263,7 +263,7 @@ static void dcb_tx_queue_prio_enable(struct net_device *dev, int enable) ...@@ -263,7 +263,7 @@ static void dcb_tx_queue_prio_enable(struct net_device *dev, int enable)
"Can't %s DCB Priority on port %d, TX Queue %d: err=%d\n", "Can't %s DCB Priority on port %d, TX Queue %d: err=%d\n",
enable ? "set" : "unset", pi->port_id, i, -err); enable ? "set" : "unset", pi->port_id, i, -err);
else else
txq->dcb_prio = value; txq->dcb_prio = enable ? value : 0;
} }
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
config NET_VENDOR_HISILICON config NET_VENDOR_HISILICON
bool "Hisilicon devices" bool "Hisilicon devices"
default y default y
depends on (OF || ACPI) && HAS_DMA depends on OF || ACPI
depends on ARM || ARM64 || COMPILE_TEST depends on ARM || ARM64 || COMPILE_TEST
---help--- ---help---
If you have a network (Ethernet) card belonging to this class, say Y. If you have a network (Ethernet) card belonging to this class, say Y.
......
...@@ -18,8 +18,8 @@ if NET_VENDOR_MARVELL ...@@ -18,8 +18,8 @@ if NET_VENDOR_MARVELL
config MV643XX_ETH config MV643XX_ETH
tristate "Marvell Discovery (643XX) and Orion ethernet support" tristate "Marvell Discovery (643XX) and Orion ethernet support"
depends on (MV64X60 || PPC32 || PLAT_ORION || COMPILE_TEST) && INET depends on MV64X60 || PPC32 || PLAT_ORION || COMPILE_TEST
depends on HAS_DMA depends on INET
select PHYLIB select PHYLIB
select MVMDIO select MVMDIO
---help--- ---help---
...@@ -58,7 +58,6 @@ config MVNETA_BM_ENABLE ...@@ -58,7 +58,6 @@ config MVNETA_BM_ENABLE
config MVNETA config MVNETA
tristate "Marvell Armada 370/38x/XP/37xx network interface support" tristate "Marvell Armada 370/38x/XP/37xx network interface support"
depends on ARCH_MVEBU || COMPILE_TEST depends on ARCH_MVEBU || COMPILE_TEST
depends on HAS_DMA
select MVMDIO select MVMDIO
select PHYLINK select PHYLINK
---help--- ---help---
...@@ -84,7 +83,6 @@ config MVNETA_BM ...@@ -84,7 +83,6 @@ config MVNETA_BM
config MVPP2 config MVPP2
tristate "Marvell Armada 375/7K/8K network interface support" tristate "Marvell Armada 375/7K/8K network interface support"
depends on ARCH_MVEBU || COMPILE_TEST depends on ARCH_MVEBU || COMPILE_TEST
depends on HAS_DMA
select MVMDIO select MVMDIO
select PHYLINK select PHYLINK
---help--- ---help---
...@@ -93,7 +91,7 @@ config MVPP2 ...@@ -93,7 +91,7 @@ config MVPP2
config PXA168_ETH config PXA168_ETH
tristate "Marvell pxa168 ethernet support" tristate "Marvell pxa168 ethernet support"
depends on HAS_IOMEM && HAS_DMA depends on HAS_IOMEM
depends on CPU_PXA168 || ARCH_BERLIN || COMPILE_TEST depends on CPU_PXA168 || ARCH_BERLIN || COMPILE_TEST
select PHYLIB select PHYLIB
---help--- ---help---
......
...@@ -1932,7 +1932,7 @@ static int mvneta_rx_swbm(struct mvneta_port *pp, int rx_todo, ...@@ -1932,7 +1932,7 @@ static int mvneta_rx_swbm(struct mvneta_port *pp, int rx_todo,
rx_bytes = rx_desc->data_size - (ETH_FCS_LEN + MVNETA_MH_SIZE); rx_bytes = rx_desc->data_size - (ETH_FCS_LEN + MVNETA_MH_SIZE);
index = rx_desc - rxq->descs; index = rx_desc - rxq->descs;
data = rxq->buf_virt_addr[index]; data = rxq->buf_virt_addr[index];
phys_addr = rx_desc->buf_phys_addr; phys_addr = rx_desc->buf_phys_addr - pp->rx_offset_correction;
if (!mvneta_rxq_desc_is_first_last(rx_status) || if (!mvneta_rxq_desc_is_first_last(rx_status) ||
(rx_status & MVNETA_RXD_ERR_SUMMARY)) { (rx_status & MVNETA_RXD_ERR_SUMMARY)) {
......
...@@ -30,7 +30,7 @@ config MLXSW_CORE_THERMAL ...@@ -30,7 +30,7 @@ config MLXSW_CORE_THERMAL
config MLXSW_PCI config MLXSW_PCI
tristate "PCI bus implementation for Mellanox Technologies Switch ASICs" tristate "PCI bus implementation for Mellanox Technologies Switch ASICs"
depends on PCI && HAS_DMA && HAS_IOMEM && MLXSW_CORE depends on PCI && HAS_IOMEM && MLXSW_CORE
default m default m
---help--- ---help---
This is PCI bus implementation for Mellanox Technologies Switch ASICs. This is PCI bus implementation for Mellanox Technologies Switch ASICs.
......
...@@ -344,10 +344,9 @@ static int ocelot_port_stop(struct net_device *dev) ...@@ -344,10 +344,9 @@ static int ocelot_port_stop(struct net_device *dev)
static int ocelot_gen_ifh(u32 *ifh, struct frame_info *info) static int ocelot_gen_ifh(u32 *ifh, struct frame_info *info)
{ {
ifh[0] = IFH_INJ_BYPASS; ifh[0] = IFH_INJ_BYPASS;
ifh[1] = (0xff00 & info->port) >> 8; ifh[1] = (0xf00 & info->port) >> 8;
ifh[2] = (0xff & info->port) << 24; ifh[2] = (0xff & info->port) << 24;
ifh[3] = IFH_INJ_POP_CNT_DISABLE | (info->cpuq << 20) | ifh[3] = (info->tag_type << 16) | info->vid;
(info->tag_type << 16) | info->vid;
return 0; return 0;
} }
...@@ -370,11 +369,13 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -370,11 +369,13 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)
QS_INJ_CTRL_SOF, QS_INJ_CTRL, grp); QS_INJ_CTRL_SOF, QS_INJ_CTRL, grp);
info.port = BIT(port->chip_port); info.port = BIT(port->chip_port);
info.cpuq = 0xff; info.tag_type = IFH_TAG_TYPE_C;
info.vid = skb_vlan_tag_get(skb);
ocelot_gen_ifh(ifh, &info); ocelot_gen_ifh(ifh, &info);
for (i = 0; i < IFH_LEN; i++) for (i = 0; i < IFH_LEN; i++)
ocelot_write_rix(ocelot, ifh[i], QS_INJ_WR, grp); ocelot_write_rix(ocelot, (__force u32)cpu_to_be32(ifh[i]),
QS_INJ_WR, grp);
count = (skb->len + 3) / 4; count = (skb->len + 3) / 4;
last = skb->len % 4; last = skb->len % 4;
......
...@@ -7148,7 +7148,7 @@ static void rtl8169_netpoll(struct net_device *dev) ...@@ -7148,7 +7148,7 @@ static void rtl8169_netpoll(struct net_device *dev)
{ {
struct rtl8169_private *tp = netdev_priv(dev); struct rtl8169_private *tp = netdev_priv(dev);
rtl8169_interrupt(pci_irq_vector(tp->pci_dev, 0), dev); rtl8169_interrupt(pci_irq_vector(tp->pci_dev, 0), tp);
} }
#endif #endif
......
...@@ -17,7 +17,6 @@ if NET_VENDOR_RENESAS ...@@ -17,7 +17,6 @@ if NET_VENDOR_RENESAS
config SH_ETH config SH_ETH
tristate "Renesas SuperH Ethernet support" tristate "Renesas SuperH Ethernet support"
depends on HAS_DMA
depends on ARCH_RENESAS || SUPERH || COMPILE_TEST depends on ARCH_RENESAS || SUPERH || COMPILE_TEST
select CRC32 select CRC32
select MII select MII
...@@ -31,7 +30,6 @@ config SH_ETH ...@@ -31,7 +30,6 @@ config SH_ETH
config RAVB config RAVB
tristate "Renesas Ethernet AVB support" tristate "Renesas Ethernet AVB support"
depends on HAS_DMA
depends on ARCH_RENESAS || COMPILE_TEST depends on ARCH_RENESAS || COMPILE_TEST
select CRC32 select CRC32
select MII select MII
......
...@@ -3180,6 +3180,7 @@ bool efx_rps_check_rule(struct efx_arfs_rule *rule, unsigned int filter_idx, ...@@ -3180,6 +3180,7 @@ bool efx_rps_check_rule(struct efx_arfs_rule *rule, unsigned int filter_idx,
return true; return true;
} }
static
struct hlist_head *efx_rps_hash_bucket(struct efx_nic *efx, struct hlist_head *efx_rps_hash_bucket(struct efx_nic *efx,
const struct efx_filter_spec *spec) const struct efx_filter_spec *spec)
{ {
......
...@@ -205,7 +205,7 @@ static void cpdma_desc_pool_destroy(struct cpdma_ctlr *ctlr) ...@@ -205,7 +205,7 @@ static void cpdma_desc_pool_destroy(struct cpdma_ctlr *ctlr)
* devices (e.g. cpsw switches) use plain old memory. Descriptor pools * devices (e.g. cpsw switches) use plain old memory. Descriptor pools
* abstract out these details * abstract out these details
*/ */
int cpdma_desc_pool_create(struct cpdma_ctlr *ctlr) static int cpdma_desc_pool_create(struct cpdma_ctlr *ctlr)
{ {
struct cpdma_params *cpdma_params = &ctlr->params; struct cpdma_params *cpdma_params = &ctlr->params;
struct cpdma_desc_pool *pool; struct cpdma_desc_pool *pool;
......
...@@ -1387,6 +1387,10 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd) ...@@ -1387,6 +1387,10 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
static int match_first_device(struct device *dev, void *data) static int match_first_device(struct device *dev, void *data)
{ {
if (dev->parent && dev->parent->of_node)
return of_device_is_compatible(dev->parent->of_node,
"ti,davinci_mdio");
return !strncmp(dev_name(dev), "davinci_mdio", 12); return !strncmp(dev_name(dev), "davinci_mdio", 12);
} }
......
...@@ -594,7 +594,8 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev, ...@@ -594,7 +594,8 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev,
ipvlan->phy_dev = phy_dev; ipvlan->phy_dev = phy_dev;
ipvlan->dev = dev; ipvlan->dev = dev;
ipvlan->sfeatures = IPVLAN_FEATURES; ipvlan->sfeatures = IPVLAN_FEATURES;
ipvlan_adjust_mtu(ipvlan, phy_dev); if (!tb[IFLA_MTU])
ipvlan_adjust_mtu(ipvlan, phy_dev);
INIT_LIST_HEAD(&ipvlan->addrs); INIT_LIST_HEAD(&ipvlan->addrs);
spin_lock_init(&ipvlan->addrs_lock); spin_lock_init(&ipvlan->addrs_lock);
......
...@@ -1246,6 +1246,7 @@ static const struct usb_device_id products[] = { ...@@ -1246,6 +1246,7 @@ static const struct usb_device_id products[] = {
{QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
{QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */ {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
{QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */ {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
{QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e */
{QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */ {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
{QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
{QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
......
...@@ -60,7 +60,6 @@ config BRCMFMAC_PCIE ...@@ -60,7 +60,6 @@ config BRCMFMAC_PCIE
bool "PCIE bus interface support for FullMAC driver" bool "PCIE bus interface support for FullMAC driver"
depends on BRCMFMAC depends on BRCMFMAC
depends on PCI depends on PCI
depends on HAS_DMA
select BRCMFMAC_PROTO_MSGBUF select BRCMFMAC_PROTO_MSGBUF
select FW_LOADER select FW_LOADER
---help--- ---help---
......
...@@ -7,7 +7,7 @@ config QTNFMAC ...@@ -7,7 +7,7 @@ config QTNFMAC
config QTNFMAC_PEARL_PCIE config QTNFMAC_PEARL_PCIE
tristate "Quantenna QSR10g PCIe support" tristate "Quantenna QSR10g PCIe support"
default n default n
depends on HAS_DMA && PCI && CFG80211 depends on PCI && CFG80211
select QTNFMAC select QTNFMAC
select FW_LOADER select FW_LOADER
select CRC32 select CRC32
......
...@@ -1810,7 +1810,7 @@ static int talk_to_netback(struct xenbus_device *dev, ...@@ -1810,7 +1810,7 @@ static int talk_to_netback(struct xenbus_device *dev,
err = xen_net_read_mac(dev, info->netdev->dev_addr); err = xen_net_read_mac(dev, info->netdev->dev_addr);
if (err) { if (err) {
xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
goto out; goto out_unlocked;
} }
rtnl_lock(); rtnl_lock();
...@@ -1925,6 +1925,7 @@ static int talk_to_netback(struct xenbus_device *dev, ...@@ -1925,6 +1925,7 @@ static int talk_to_netback(struct xenbus_device *dev,
xennet_destroy_queues(info); xennet_destroy_queues(info);
out: out:
rtnl_unlock(); rtnl_unlock();
out_unlocked:
device_unregister(&dev->dev); device_unregister(&dev->dev);
return err; return err;
} }
...@@ -1950,10 +1951,6 @@ static int xennet_connect(struct net_device *dev) ...@@ -1950,10 +1951,6 @@ static int xennet_connect(struct net_device *dev)
/* talk_to_netback() sets the correct number of queues */ /* talk_to_netback() sets the correct number of queues */
num_queues = dev->real_num_tx_queues; num_queues = dev->real_num_tx_queues;
rtnl_lock();
netdev_update_features(dev);
rtnl_unlock();
if (dev->reg_state == NETREG_UNINITIALIZED) { if (dev->reg_state == NETREG_UNINITIALIZED) {
err = register_netdev(dev); err = register_netdev(dev);
if (err) { if (err) {
...@@ -1963,6 +1960,10 @@ static int xennet_connect(struct net_device *dev) ...@@ -1963,6 +1960,10 @@ static int xennet_connect(struct net_device *dev)
} }
} }
rtnl_lock();
netdev_update_features(dev);
rtnl_unlock();
/* /*
* All public and private state should now be sane. Get * All public and private state should now be sane. Get
* ready to start sending and receiving packets and give the driver * ready to start sending and receiving packets and give the driver
......
...@@ -1226,7 +1226,8 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) ...@@ -1226,7 +1226,8 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
if (ubufs) if (ubufs)
vhost_net_ubuf_put_wait_and_free(ubufs); vhost_net_ubuf_put_wait_and_free(ubufs);
err_ubufs: err_ubufs:
sockfd_put(sock); if (sock)
sockfd_put(sock);
err_vq: err_vq:
mutex_unlock(&vq->mutex); mutex_unlock(&vq->mutex);
err: err:
......
...@@ -472,7 +472,9 @@ struct sock_fprog_kern { ...@@ -472,7 +472,9 @@ struct sock_fprog_kern {
struct bpf_binary_header { struct bpf_binary_header {
u16 pages; u16 pages;
u16 locked:1; u16 locked:1;
u8 image[];
/* Some arches need word alignment for their instructions */
u8 image[] __aligned(4);
}; };
struct bpf_prog { struct bpf_prog {
......
...@@ -22,7 +22,7 @@ endif ...@@ -22,7 +22,7 @@ endif
quiet_cmd_copy_umh = GEN $@ quiet_cmd_copy_umh = GEN $@
cmd_copy_umh = echo ':' > $(obj)/.bpfilter_umh.o.cmd; \ cmd_copy_umh = echo ':' > $(obj)/.bpfilter_umh.o.cmd; \
$(OBJCOPY) -I binary \ $(OBJCOPY) -I binary \
`LC_ALL=C objdump -f net/bpfilter/bpfilter_umh \ `LC_ALL=C $(OBJDUMP) -f net/bpfilter/bpfilter_umh \
|awk -F' |,' '/file format/{print "-O",$$NF} \ |awk -F' |,' '/file format/{print "-O",$$NF} \
/^architecture:/{print "-B",$$2}'` \ /^architecture:/{print "-B",$$2}'` \
--rename-section .data=.init.rodata $< $@ --rename-section .data=.init.rodata $< $@
......
...@@ -600,7 +600,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk, ...@@ -600,7 +600,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk,
{ {
struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk); struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk);
struct dccp_sock *dp = dccp_sk(sk); struct dccp_sock *dp = dccp_sk(sk);
ktime_t now = ktime_get_real(); ktime_t now = ktime_get();
s64 delta = 0; s64 delta = 0;
switch (fbtype) { switch (fbtype) {
...@@ -625,15 +625,14 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk, ...@@ -625,15 +625,14 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk,
case CCID3_FBACK_PERIODIC: case CCID3_FBACK_PERIODIC:
delta = ktime_us_delta(now, hc->rx_tstamp_last_feedback); delta = ktime_us_delta(now, hc->rx_tstamp_last_feedback);
if (delta <= 0) if (delta <= 0)
DCCP_BUG("delta (%ld) <= 0", (long)delta); delta = 1;
else hc->rx_x_recv = scaled_div32(hc->rx_bytes_recv, delta);
hc->rx_x_recv = scaled_div32(hc->rx_bytes_recv, delta);
break; break;
default: default:
return; return;
} }
ccid3_pr_debug("Interval %ldusec, X_recv=%u, 1/p=%u\n", (long)delta, ccid3_pr_debug("Interval %lldusec, X_recv=%u, 1/p=%u\n", delta,
hc->rx_x_recv, hc->rx_pinv); hc->rx_x_recv, hc->rx_pinv);
hc->rx_tstamp_last_feedback = now; hc->rx_tstamp_last_feedback = now;
...@@ -680,7 +679,8 @@ static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb) ...@@ -680,7 +679,8 @@ static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb)
static u32 ccid3_first_li(struct sock *sk) static u32 ccid3_first_li(struct sock *sk)
{ {
struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk); struct ccid3_hc_rx_sock *hc = ccid3_hc_rx_sk(sk);
u32 x_recv, p, delta; u32 x_recv, p;
s64 delta;
u64 fval; u64 fval;
if (hc->rx_rtt == 0) { if (hc->rx_rtt == 0) {
...@@ -688,7 +688,9 @@ static u32 ccid3_first_li(struct sock *sk) ...@@ -688,7 +688,9 @@ static u32 ccid3_first_li(struct sock *sk)
hc->rx_rtt = DCCP_FALLBACK_RTT; hc->rx_rtt = DCCP_FALLBACK_RTT;
} }
delta = ktime_to_us(net_timedelta(hc->rx_tstamp_last_feedback)); delta = ktime_us_delta(ktime_get(), hc->rx_tstamp_last_feedback);
if (delta <= 0)
delta = 1;
x_recv = scaled_div32(hc->rx_bytes_recv, delta); x_recv = scaled_div32(hc->rx_bytes_recv, delta);
if (x_recv == 0) { /* would also trigger divide-by-zero */ if (x_recv == 0) { /* would also trigger divide-by-zero */
DCCP_WARN("X_recv==0\n"); DCCP_WARN("X_recv==0\n");
......
...@@ -2082,7 +2082,8 @@ void ipv6_mc_dad_complete(struct inet6_dev *idev) ...@@ -2082,7 +2082,8 @@ void ipv6_mc_dad_complete(struct inet6_dev *idev)
mld_send_initial_cr(idev); mld_send_initial_cr(idev);
idev->mc_dad_count--; idev->mc_dad_count--;
if (idev->mc_dad_count) if (idev->mc_dad_count)
mld_dad_start_timer(idev, idev->mc_maxdelay); mld_dad_start_timer(idev,
unsolicited_report_interval(idev));
} }
} }
...@@ -2094,7 +2095,8 @@ static void mld_dad_timer_expire(struct timer_list *t) ...@@ -2094,7 +2095,8 @@ static void mld_dad_timer_expire(struct timer_list *t)
if (idev->mc_dad_count) { if (idev->mc_dad_count) {
idev->mc_dad_count--; idev->mc_dad_count--;
if (idev->mc_dad_count) if (idev->mc_dad_count)
mld_dad_start_timer(idev, idev->mc_maxdelay); mld_dad_start_timer(idev,
unsolicited_report_interval(idev));
} }
in6_dev_put(idev); in6_dev_put(idev);
} }
...@@ -2452,7 +2454,8 @@ static void mld_ifc_timer_expire(struct timer_list *t) ...@@ -2452,7 +2454,8 @@ static void mld_ifc_timer_expire(struct timer_list *t)
if (idev->mc_ifc_count) { if (idev->mc_ifc_count) {
idev->mc_ifc_count--; idev->mc_ifc_count--;
if (idev->mc_ifc_count) if (idev->mc_ifc_count)
mld_ifc_start_timer(idev, idev->mc_maxdelay); mld_ifc_start_timer(idev,
unsolicited_report_interval(idev));
} }
in6_dev_put(idev); in6_dev_put(idev);
} }
......
...@@ -2262,6 +2262,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -2262,6 +2262,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
if (po->stats.stats1.tp_drops) if (po->stats.stats1.tp_drops)
status |= TP_STATUS_LOSING; status |= TP_STATUS_LOSING;
} }
if (do_vnet &&
virtio_net_hdr_from_skb(skb, h.raw + macoff -
sizeof(struct virtio_net_hdr),
vio_le(), true, 0))
goto drop_n_account;
po->stats.stats1.tp_packets++; po->stats.stats1.tp_packets++;
if (copy_skb) { if (copy_skb) {
status |= TP_STATUS_COPY; status |= TP_STATUS_COPY;
...@@ -2269,15 +2276,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -2269,15 +2276,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
} }
spin_unlock(&sk->sk_receive_queue.lock); spin_unlock(&sk->sk_receive_queue.lock);
if (do_vnet) {
if (virtio_net_hdr_from_skb(skb, h.raw + macoff -
sizeof(struct virtio_net_hdr),
vio_le(), true, 0)) {
spin_lock(&sk->sk_receive_queue.lock);
goto drop_n_account;
}
}
skb_copy_bits(skb, 0, h.raw + macoff, snaplen); skb_copy_bits(skb, 0, h.raw + macoff, snaplen);
if (!(ts_status = tpacket_get_timestamp(skb, &ts, po->tp_tstamp))) if (!(ts_status = tpacket_get_timestamp(skb, &ts, po->tp_tstamp)))
......
...@@ -66,7 +66,7 @@ struct fl_flow_mask { ...@@ -66,7 +66,7 @@ struct fl_flow_mask {
struct rhashtable_params filter_ht_params; struct rhashtable_params filter_ht_params;
struct flow_dissector dissector; struct flow_dissector dissector;
struct list_head filters; struct list_head filters;
struct rcu_head rcu; struct rcu_work rwork;
struct list_head list; struct list_head list;
}; };
...@@ -203,6 +203,20 @@ static int fl_init(struct tcf_proto *tp) ...@@ -203,6 +203,20 @@ static int fl_init(struct tcf_proto *tp)
return rhashtable_init(&head->ht, &mask_ht_params); return rhashtable_init(&head->ht, &mask_ht_params);
} }
static void fl_mask_free(struct fl_flow_mask *mask)
{
rhashtable_destroy(&mask->ht);
kfree(mask);
}
static void fl_mask_free_work(struct work_struct *work)
{
struct fl_flow_mask *mask = container_of(to_rcu_work(work),
struct fl_flow_mask, rwork);
fl_mask_free(mask);
}
static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask, static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask,
bool async) bool async)
{ {
...@@ -210,12 +224,11 @@ static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask, ...@@ -210,12 +224,11 @@ static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask,
return false; return false;
rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params); rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params);
rhashtable_destroy(&mask->ht);
list_del_rcu(&mask->list); list_del_rcu(&mask->list);
if (async) if (async)
kfree_rcu(mask, rcu); tcf_queue_work(&mask->rwork, fl_mask_free_work);
else else
kfree(mask); fl_mask_free(mask);
return true; return true;
} }
......
...@@ -1385,8 +1385,8 @@ hfsc_schedule_watchdog(struct Qdisc *sch) ...@@ -1385,8 +1385,8 @@ hfsc_schedule_watchdog(struct Qdisc *sch)
if (next_time == 0 || next_time > q->root.cl_cfmin) if (next_time == 0 || next_time > q->root.cl_cfmin)
next_time = q->root.cl_cfmin; next_time = q->root.cl_cfmin;
} }
WARN_ON(next_time == 0); if (next_time)
qdisc_watchdog_schedule(&q->watchdog, next_time); qdisc_watchdog_schedule(&q->watchdog, next_time);
} }
static int static int
......
...@@ -237,7 +237,9 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, ...@@ -237,7 +237,9 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
/* Account for a different sized first fragment */ /* Account for a different sized first fragment */
if (msg_len >= first_len) { if (msg_len >= first_len) {
msg->can_delay = 0; msg->can_delay = 0;
SCTP_INC_STATS(sock_net(asoc->base.sk), SCTP_MIB_FRAGUSRMSGS); if (msg_len > first_len)
SCTP_INC_STATS(sock_net(asoc->base.sk),
SCTP_MIB_FRAGUSRMSGS);
} else { } else {
/* Which may be the only one... */ /* Which may be the only one... */
first_len = msg_len; first_len = msg_len;
......
...@@ -392,7 +392,7 @@ static int strp_read_sock(struct strparser *strp) ...@@ -392,7 +392,7 @@ static int strp_read_sock(struct strparser *strp)
/* Lower sock lock held */ /* Lower sock lock held */
void strp_data_ready(struct strparser *strp) void strp_data_ready(struct strparser *strp)
{ {
if (unlikely(strp->stopped)) if (unlikely(strp->stopped) || strp->paused)
return; return;
/* This check is needed to synchronize with do_strp_work. /* This check is needed to synchronize with do_strp_work.
...@@ -407,9 +407,6 @@ void strp_data_ready(struct strparser *strp) ...@@ -407,9 +407,6 @@ void strp_data_ready(struct strparser *strp)
return; return;
} }
if (strp->paused)
return;
if (strp->need_bytes) { if (strp->need_bytes) {
if (strp_peek_len(strp) < strp->need_bytes) if (strp_peek_len(strp) < strp->need_bytes)
return; return;
......
...@@ -201,7 +201,7 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt) ...@@ -201,7 +201,7 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt)
return -ENODEV; return -ENODEV;
} }
if (le32_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid)
return virtio_transport_send_pkt_loopback(vsock, pkt); return virtio_transport_send_pkt_loopback(vsock, pkt);
if (pkt->reply) if (pkt->reply)
......
...@@ -12,3 +12,4 @@ tcp_mmap ...@@ -12,3 +12,4 @@ tcp_mmap
udpgso udpgso
udpgso_bench_rx udpgso_bench_rx
udpgso_bench_tx udpgso_bench_tx
tcp_inq
...@@ -12,3 +12,5 @@ CONFIG_NET_IPVTI=y ...@@ -12,3 +12,5 @@ CONFIG_NET_IPVTI=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y CONFIG_INET6_XFRM_MODE_TUNNEL=y
CONFIG_IPV6_VTI=y CONFIG_IPV6_VTI=y
CONFIG_DUMMY=y CONFIG_DUMMY=y
CONFIG_BRIDGE=y
CONFIG_VLAN_8021Q=y
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment