]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 23 Jan 2019 07:41:12 +0000 (08:41 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 23 Jan 2019 07:41:12 +0000 (08:41 +0100)
added patches:
ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch
ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch
mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch
mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch
net-dsa-mv88x6xxx-mv88e6390-errata.patch
net-skbuff-do-not-prefer-skb-allocation-fails-early.patch
qmi_wwan-add-mtu-default-to-qmap-network-interface.patch
r8169-add-support-for-new-realtek-ethernet.patch

queue-4.14/ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch [new file with mode: 0644]
queue-4.14/ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch [new file with mode: 0644]
queue-4.14/mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch [new file with mode: 0644]
queue-4.14/mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch [new file with mode: 0644]
queue-4.14/net-dsa-mv88x6xxx-mv88e6390-errata.patch [new file with mode: 0644]
queue-4.14/net-skbuff-do-not-prefer-skb-allocation-fails-early.patch [new file with mode: 0644]
queue-4.14/qmi_wwan-add-mtu-default-to-qmap-network-interface.patch [new file with mode: 0644]
queue-4.14/r8169-add-support-for-new-realtek-ethernet.patch [new file with mode: 0644]

diff --git a/queue-4.14/ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch b/queue-4.14/ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch
new file mode 100644 (file)
index 0000000..5995155
--- /dev/null
@@ -0,0 +1,51 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: David Ahern <dsahern@gmail.com>
+Date: Fri, 4 Jan 2019 16:58:15 -0800
+Subject: ipv6: Consider sk_bound_dev_if when binding a socket to a v4 mapped address
+
+From: David Ahern <dsahern@gmail.com>
+
+[ Upstream commit ec90ad334986fa5856d11dd272f7f22fa86c55c4 ]
+
+Similar to c5ee066333eb ("ipv6: Consider sk_bound_dev_if when binding a
+socket to an address"), binding a socket to v4 mapped addresses needs to
+consider if the socket is bound to a device.
+
+This problem also exists from the beginning of git history.
+
+Signed-off-by: David Ahern <dsahern@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/ipv6/af_inet6.c |   11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+--- a/net/ipv6/af_inet6.c
++++ b/net/ipv6/af_inet6.c
+@@ -317,6 +317,7 @@ int inet6_bind(struct socket *sock, stru
+       /* Check if the address belongs to the host. */
+       if (addr_type == IPV6_ADDR_MAPPED) {
++              struct net_device *dev = NULL;
+               int chk_addr_ret;
+               /* Binding to v4-mapped address on a v6-only socket
+@@ -327,9 +328,17 @@ int inet6_bind(struct socket *sock, stru
+                       goto out;
+               }
++              if (sk->sk_bound_dev_if) {
++                      dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
++                      if (!dev) {
++                              err = -ENODEV;
++                              goto out;
++                      }
++              }
++
+               /* Reproduce AF_INET checks to make the bindings consistent */
+               v4addr = addr->sin6_addr.s6_addr32[3];
+-              chk_addr_ret = inet_addr_type(net, v4addr);
++              chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr);
+               if (!net->ipv4.sysctl_ip_nonlocal_bind &&
+                   !(inet->freebind || inet->transparent) &&
+                   v4addr != htonl(INADDR_ANY) &&
diff --git a/queue-4.14/ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch b/queue-4.14/ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch
new file mode 100644 (file)
index 0000000..dd6839f
--- /dev/null
@@ -0,0 +1,44 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: David Ahern <dsahern@gmail.com>
+Date: Sat, 5 Jan 2019 07:35:04 -0800
+Subject: ipv6: Take rcu_read_lock in __inet6_bind for mapped addresses
+
+From: David Ahern <dsahern@gmail.com>
+
+[ Upstream commit d4a7e9bb74b5aaf07b89f6531c080b1130bdf019 ]
+
+I realized the last patch calls dev_get_by_index_rcu in a branch not
+holding the rcu lock. Add the calls to rcu_read_lock and rcu_read_unlock.
+
+Fixes: ec90ad334986 ("ipv6: Consider sk_bound_dev_if when binding a socket to a v4 mapped address")
+Signed-off-by: David Ahern <dsahern@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/ipv6/af_inet6.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/net/ipv6/af_inet6.c
++++ b/net/ipv6/af_inet6.c
+@@ -328,17 +328,20 @@ int inet6_bind(struct socket *sock, stru
+                       goto out;
+               }
++              rcu_read_lock();
+               if (sk->sk_bound_dev_if) {
+                       dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
+                       if (!dev) {
+                               err = -ENODEV;
+-                              goto out;
++                              goto out_unlock;
+                       }
+               }
+               /* Reproduce AF_INET checks to make the bindings consistent */
+               v4addr = addr->sin6_addr.s6_addr32[3];
+               chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr);
++              rcu_read_unlock();
++
+               if (!net->ipv4.sysctl_ip_nonlocal_bind &&
+                   !(inet->freebind || inet->transparent) &&
+                   v4addr != htonl(INADDR_ANY) &&
diff --git a/queue-4.14/mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch b/queue-4.14/mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch
new file mode 100644 (file)
index 0000000..015f7d9
--- /dev/null
@@ -0,0 +1,41 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: Jiri Pirko <jiri@mellanox.com>
+Date: Tue, 8 Jan 2019 16:48:05 +0000
+Subject: mlxsw: spectrum: Disable lag port TX before removing it
+
+From: Jiri Pirko <jiri@mellanox.com>
+
+[ Upstream commit 8adbe212a159d9c78a90fca1d854f6e63452426b ]
+
+Make sure that lag port TX is disabled before mlxsw_sp_port_lag_leave()
+is called and prevent from possible EMAD error.
+
+Fixes: 0d65fc13042f ("mlxsw: spectrum: Implement LAG port join/leave")
+Signed-off-by: Jiri Pirko <jiri@mellanox.com>
+Signed-off-by: Ido Schimmel <idosch@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/mellanox/mlxsw/spectrum.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+@@ -4276,12 +4276,15 @@ static int mlxsw_sp_netdevice_port_upper
+                                                          lower_dev,
+                                                          upper_dev);
+               } else if (netif_is_lag_master(upper_dev)) {
+-                      if (info->linking)
++                      if (info->linking) {
+                               err = mlxsw_sp_port_lag_join(mlxsw_sp_port,
+                                                            upper_dev);
+-                      else
++                      } else {
++                              mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port,
++                                                          false);
+                               mlxsw_sp_port_lag_leave(mlxsw_sp_port,
+                                                       upper_dev);
++                      }
+               } else if (netif_is_ovs_master(upper_dev)) {
+                       if (info->linking)
+                               err = mlxsw_sp_port_ovs_join(mlxsw_sp_port);
diff --git a/queue-4.14/mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch b/queue-4.14/mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch
new file mode 100644 (file)
index 0000000..615ba74
--- /dev/null
@@ -0,0 +1,32 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: Ido Schimmel <idosch@mellanox.com>
+Date: Tue, 8 Jan 2019 16:48:13 +0000
+Subject: mlxsw: spectrum_switchdev: Set PVID correctly during VLAN deletion
+
+From: Ido Schimmel <idosch@mellanox.com>
+
+[ Upstream commit 674bed5df4cab8f96d04f7b99608883a48f9226b ]
+
+When a VLAN is deleted from a bridge port we should not change the PVID
+unless the deleted VLAN is the PVID.
+
+Fixes: fe9ccc785de5 ("mlxsw: spectrum_switchdev: Don't batch VLAN operations")
+Signed-off-by: Ido Schimmel <idosch@mellanox.com>
+Acked-by: Jiri Pirko <jiri@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+@@ -1424,7 +1424,7 @@ static void
+ mlxsw_sp_bridge_port_vlan_del(struct mlxsw_sp_port *mlxsw_sp_port,
+                             struct mlxsw_sp_bridge_port *bridge_port, u16 vid)
+ {
+-      u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : vid;
++      u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : mlxsw_sp_port->pvid;
+       struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
+       mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
diff --git a/queue-4.14/net-dsa-mv88x6xxx-mv88e6390-errata.patch b/queue-4.14/net-dsa-mv88x6xxx-mv88e6390-errata.patch
new file mode 100644 (file)
index 0000000..fe52d57
--- /dev/null
@@ -0,0 +1,226 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: Andrew Lunn <andrew@lunn.ch>
+Date: Wed, 9 Jan 2019 00:24:03 +0100
+Subject: net: dsa: mv88x6xxx: mv88e6390 errata
+
+From: Andrew Lunn <andrew@lunn.ch>
+
+[ Upstream commit ea89098ef9a574bceca00d3b5df14aaf0b3f9ccf ]
+
+The 6390 copper ports have an errata which require poking magic values
+into undocumented magic registers and then performing a software
+reset.
+
+Signed-off-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/dsa/mv88e6xxx/chip.c |  113 +++++++++++++++++++++++++++++++++++++++
+ drivers/net/dsa/mv88e6xxx/chip.h |    5 +
+ drivers/net/dsa/mv88e6xxx/port.h |   10 +++
+ 3 files changed, 128 insertions(+)
+
+--- a/drivers/net/dsa/mv88e6xxx/chip.c
++++ b/drivers/net/dsa/mv88e6xxx/chip.c
+@@ -1979,6 +1979,107 @@ static int mv88e6xxx_g1_setup(struct mv8
+       return 0;
+ }
++/* The mv88e6390 has some hidden registers used for debug and
++ * development. The errata also makes use of them.
++ */
++static int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
++                                int reg, u16 val)
++{
++      u16 ctrl;
++      int err;
++
++      err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_DATA_PORT,
++                                 PORT_RESERVED_1A, val);
++      if (err)
++              return err;
++
++      ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_WRITE |
++             PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
++             reg;
++
++      return mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
++                                  PORT_RESERVED_1A, ctrl);
++}
++
++static int mv88e6390_hidden_wait(struct mv88e6xxx_chip *chip)
++{
++      return mv88e6xxx_wait(chip, PORT_RESERVED_1A_CTRL_PORT,
++                            PORT_RESERVED_1A, PORT_RESERVED_1A_BUSY);
++}
++
++
++static int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
++                                int reg, u16 *val)
++{
++      u16 ctrl;
++      int err;
++
++      ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_READ |
++             PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
++             reg;
++
++      err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
++                                 PORT_RESERVED_1A, ctrl);
++      if (err)
++              return err;
++
++      err = mv88e6390_hidden_wait(chip);
++      if (err)
++              return err;
++
++      return  mv88e6xxx_port_read(chip, PORT_RESERVED_1A_DATA_PORT,
++                                  PORT_RESERVED_1A, val);
++}
++
++/* Check if the errata has already been applied. */
++static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
++{
++      int port;
++      int err;
++      u16 val;
++
++      for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
++              err = mv88e6390_hidden_read(chip, port, 0, &val);
++              if (err) {
++                      dev_err(chip->dev,
++                              "Error reading hidden register: %d\n", err);
++                      return false;
++              }
++              if (val != 0x01c0)
++                      return false;
++      }
++
++      return true;
++}
++
++/* The 6390 copper ports have an errata which require poking magic
++ * values into undocumented hidden registers and then performing a
++ * software reset.
++ */
++static int mv88e6390_setup_errata(struct mv88e6xxx_chip *chip)
++{
++      int port;
++      int err;
++
++      if (mv88e6390_setup_errata_applied(chip))
++              return 0;
++
++      /* Set the ports into blocking mode */
++      for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
++              err = mv88e6xxx_port_set_state(chip, port, BR_STATE_DISABLED);
++              if (err)
++                      return err;
++      }
++
++      for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
++              err = mv88e6390_hidden_write(chip, port, 0, 0x01c0);
++              if (err)
++                      return err;
++      }
++
++      return mv88e6xxx_software_reset(chip);
++}
++
+ static int mv88e6xxx_setup(struct dsa_switch *ds)
+ {
+       struct mv88e6xxx_chip *chip = ds->priv;
+@@ -1990,6 +2091,12 @@ static int mv88e6xxx_setup(struct dsa_sw
+       mutex_lock(&chip->reg_lock);
++      if (chip->info->ops->setup_errata) {
++              err = chip->info->ops->setup_errata(chip);
++              if (err)
++                      goto unlock;
++      }
++
+       /* Setup Switch Port Registers */
+       for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
+               err = mv88e6xxx_setup_port(chip, i);
+@@ -2652,6 +2759,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6190_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+@@ -2687,6 +2795,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6190x_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+@@ -2722,6 +2831,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6191_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+@@ -2793,6 +2903,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6290_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+@@ -3030,6 +3141,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6390_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+@@ -3068,6 +3180,7 @@ static const struct mv88e6xxx_ops mv88e6
+ static const struct mv88e6xxx_ops mv88e6390x_ops = {
+       /* MV88E6XXX_FAMILY_6390 */
++      .setup_errata = mv88e6390_setup_errata,
+       .irl_init_all = mv88e6390_g2_irl_init_all,
+       .get_eeprom = mv88e6xxx_g2_get_eeprom8,
+       .set_eeprom = mv88e6xxx_g2_set_eeprom8,
+--- a/drivers/net/dsa/mv88e6xxx/chip.h
++++ b/drivers/net/dsa/mv88e6xxx/chip.h
+@@ -222,6 +222,11 @@ struct mv88e6xxx_mdio_bus {
+ };
+ struct mv88e6xxx_ops {
++      /* Switch Setup Errata, called early in the switch setup to
++       * allow any errata actions to be performed
++       */
++      int (*setup_errata)(struct mv88e6xxx_chip *chip);
++
+       /* Ingress Rate Limit unit (IRL) operations */
+       int (*irl_init_all)(struct mv88e6xxx_chip *chip, int port);
+--- a/drivers/net/dsa/mv88e6xxx/port.h
++++ b/drivers/net/dsa/mv88e6xxx/port.h
+@@ -236,6 +236,16 @@
+ /* Offset 0x19: Port IEEE Priority Remapping Registers (4-7) */
+ #define MV88E6095_PORT_IEEE_PRIO_REMAP_4567   0x19
++/* Offset 0x1a: Magic undocumented errata register */
++#define PORT_RESERVED_1A                      0x1a
++#define PORT_RESERVED_1A_BUSY                 BIT(15)
++#define PORT_RESERVED_1A_WRITE                        BIT(14)
++#define PORT_RESERVED_1A_READ                 0
++#define PORT_RESERVED_1A_PORT_SHIFT           5
++#define PORT_RESERVED_1A_BLOCK                        (0xf << 10)
++#define PORT_RESERVED_1A_CTRL_PORT            4
++#define PORT_RESERVED_1A_DATA_PORT            5
++
+ int mv88e6xxx_port_read(struct mv88e6xxx_chip *chip, int port, int reg,
+                       u16 *val);
+ int mv88e6xxx_port_write(struct mv88e6xxx_chip *chip, int port, int reg,
diff --git a/queue-4.14/net-skbuff-do-not-prefer-skb-allocation-fails-early.patch b/queue-4.14/net-skbuff-do-not-prefer-skb-allocation-fails-early.patch
new file mode 100644 (file)
index 0000000..a14e957
--- /dev/null
@@ -0,0 +1,69 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: David Rientjes <rientjes@google.com>
+Date: Wed, 2 Jan 2019 13:01:43 -0800
+Subject: net, skbuff: do not prefer skb allocation fails early
+
+From: David Rientjes <rientjes@google.com>
+
+[ Upstream commit f8c468e8537925e0c4607263f498a1b7c0c8982e ]
+
+Commit dcda9b04713c ("mm, tree wide: replace __GFP_REPEAT by
+__GFP_RETRY_MAYFAIL with more useful semantic") replaced __GFP_REPEAT in
+alloc_skb_with_frags() with __GFP_RETRY_MAYFAIL when the allocation may
+directly reclaim.
+
+The previous behavior would require reclaim up to 1 << order pages for
+skb aligned header_len of order > PAGE_ALLOC_COSTLY_ORDER before failing,
+otherwise the allocations in alloc_skb() would loop in the page allocator
+looking for memory.  __GFP_RETRY_MAYFAIL makes both allocations failable
+under memory pressure, including for the HEAD allocation.
+
+This can cause, among many other things, write() to fail with ENOTCONN
+during RPC when under memory pressure.
+
+These allocations should succeed as they did previous to dcda9b04713c
+even if it requires calling the oom killer and additional looping in the
+page allocator to find memory.  There is no way to specify the previous
+behavior of __GFP_REPEAT, but it's unlikely to be necessary since the
+previous behavior only guaranteed that 1 << order pages would be reclaimed
+before failing for order > PAGE_ALLOC_COSTLY_ORDER.  That reclaim is not
+guaranteed to be contiguous memory, so repeating for such large orders is
+usually not beneficial.
+
+Removing the setting of __GFP_RETRY_MAYFAIL to restore the previous
+behavior, specifically not allowing alloc_skb() to fail for small orders
+and oom kill if necessary rather than allowing RPCs to fail.
+
+Fixes: dcda9b04713c ("mm, tree wide: replace __GFP_REPEAT by __GFP_RETRY_MAYFAIL with more useful semantic")
+Signed-off-by: David Rientjes <rientjes@google.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/core/skbuff.c |    7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -5154,7 +5154,6 @@ struct sk_buff *alloc_skb_with_frags(uns
+       unsigned long chunk;
+       struct sk_buff *skb;
+       struct page *page;
+-      gfp_t gfp_head;
+       int i;
+       *errcode = -EMSGSIZE;
+@@ -5164,12 +5163,8 @@ struct sk_buff *alloc_skb_with_frags(uns
+       if (npages > MAX_SKB_FRAGS)
+               return NULL;
+-      gfp_head = gfp_mask;
+-      if (gfp_head & __GFP_DIRECT_RECLAIM)
+-              gfp_head |= __GFP_RETRY_MAYFAIL;
+-
+       *errcode = -ENOBUFS;
+-      skb = alloc_skb(header_len, gfp_head);
++      skb = alloc_skb(header_len, gfp_mask);
+       if (!skb)
+               return NULL;
diff --git a/queue-4.14/qmi_wwan-add-mtu-default-to-qmap-network-interface.patch b/queue-4.14/qmi_wwan-add-mtu-default-to-qmap-network-interface.patch
new file mode 100644 (file)
index 0000000..a1431d2
--- /dev/null
@@ -0,0 +1,31 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Fri, 4 Jan 2019 13:26:10 +0100
+Subject: qmi_wwan: add MTU default to qmap network interface
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+[ Upstream commit f87118d5760f00af7228033fbe783c7f380d2866 ]
+
+This patch adds MTU default value to qmap network interface in
+order to avoid "RTNETLINK answers: No buffer space available"
+error when setting an ipv6 address.
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Acked-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/usb/qmi_wwan.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -123,6 +123,7 @@ static void qmimux_setup(struct net_devi
+       dev->addr_len        = 0;
+       dev->flags           = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
+       dev->netdev_ops      = &qmimux_netdev_ops;
++      dev->mtu             = 1500;
+       dev->needs_free_netdev = true;
+ }
diff --git a/queue-4.14/r8169-add-support-for-new-realtek-ethernet.patch b/queue-4.14/r8169-add-support-for-new-realtek-ethernet.patch
new file mode 100644 (file)
index 0000000..6bb7b2f
--- /dev/null
@@ -0,0 +1,31 @@
+From foo@baz Wed Jan 23 08:17:01 CET 2019
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Date: Wed, 2 Jan 2019 14:45:07 +0800
+Subject: r8169: Add support for new Realtek Ethernet
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit 36352991835ce99e46b4441dd0eb6980f9a83e8f ]
+
+There are two new Realtek Ethernet devices which are re-branded r8168h.
+Add the IDs to to support them.
+
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/realtek/r8169.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -324,6 +324,8 @@ enum cfg_version {
+ };
+ static const struct pci_device_id rtl8169_pci_tbl[] = {
++      { PCI_VDEVICE(REALTEK,  0x2502), RTL_CFG_1 },
++      { PCI_VDEVICE(REALTEK,  0x2600), RTL_CFG_1 },
+       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8129), 0, 0, RTL_CFG_0 },
+       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8136), 0, 0, RTL_CFG_2 },
+       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8161), 0, 0, RTL_CFG_1 },