From 02da24cca301fc9cc6c91dc95fb6f1548b22eeb6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 23 Jan 2019 08:41:12 +0100 Subject: [PATCH] 4.14-stable patches 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 --- ...ding-a-socket-to-a-v4-mapped-address.patch | 51 ++++ ...in-__inet6_bind-for-mapped-addresses.patch | 44 ++++ ...sable-lag-port-tx-before-removing-it.patch | 41 ++++ ...-pvid-correctly-during-vlan-deletion.patch | 32 +++ .../net-dsa-mv88x6xxx-mv88e6390-errata.patch | 226 ++++++++++++++++++ ...ot-prefer-skb-allocation-fails-early.patch | 69 ++++++ ...tu-default-to-qmap-network-interface.patch | 31 +++ ...add-support-for-new-realtek-ethernet.patch | 31 +++ 8 files changed, 525 insertions(+) create mode 100644 queue-4.14/ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch create mode 100644 queue-4.14/ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch create mode 100644 queue-4.14/mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch create mode 100644 queue-4.14/mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch create mode 100644 queue-4.14/net-dsa-mv88x6xxx-mv88e6390-errata.patch create mode 100644 queue-4.14/net-skbuff-do-not-prefer-skb-allocation-fails-early.patch create mode 100644 queue-4.14/qmi_wwan-add-mtu-default-to-qmap-network-interface.patch create mode 100644 queue-4.14/r8169-add-support-for-new-realtek-ethernet.patch 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 index 00000000000..5995155cf01 --- /dev/null +++ b/queue-4.14/ipv6-consider-sk_bound_dev_if-when-binding-a-socket-to-a-v4-mapped-address.patch @@ -0,0 +1,51 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: David Ahern +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 + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..dd6839f4619 --- /dev/null +++ b/queue-4.14/ipv6-take-rcu_read_lock-in-__inet6_bind-for-mapped-addresses.patch @@ -0,0 +1,44 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: David Ahern +Date: Sat, 5 Jan 2019 07:35:04 -0800 +Subject: ipv6: Take rcu_read_lock in __inet6_bind for mapped addresses + +From: David Ahern + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..015f7d9e629 --- /dev/null +++ b/queue-4.14/mlxsw-spectrum-disable-lag-port-tx-before-removing-it.patch @@ -0,0 +1,41 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: Jiri Pirko +Date: Tue, 8 Jan 2019 16:48:05 +0000 +Subject: mlxsw: spectrum: Disable lag port TX before removing it + +From: Jiri Pirko + +[ 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 +Signed-off-by: Ido Schimmel +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..615ba74e270 --- /dev/null +++ b/queue-4.14/mlxsw-spectrum_switchdev-set-pvid-correctly-during-vlan-deletion.patch @@ -0,0 +1,32 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: Ido Schimmel +Date: Tue, 8 Jan 2019 16:48:13 +0000 +Subject: mlxsw: spectrum_switchdev: Set PVID correctly during VLAN deletion + +From: Ido Schimmel + +[ 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 +Acked-by: Jiri Pirko +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..fe52d572a5d --- /dev/null +++ b/queue-4.14/net-dsa-mv88x6xxx-mv88e6390-errata.patch @@ -0,0 +1,226 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: Andrew Lunn +Date: Wed, 9 Jan 2019 00:24:03 +0100 +Subject: net: dsa: mv88x6xxx: mv88e6390 errata + +From: Andrew Lunn + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..a14e957f0f2 --- /dev/null +++ b/queue-4.14/net-skbuff-do-not-prefer-skb-allocation-fails-early.patch @@ -0,0 +1,69 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: David Rientjes +Date: Wed, 2 Jan 2019 13:01:43 -0800 +Subject: net, skbuff: do not prefer skb allocation fails early + +From: David Rientjes + +[ 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 +Reviewed-by: Eric Dumazet +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..a1431d26bfc --- /dev/null +++ b/queue-4.14/qmi_wwan-add-mtu-default-to-qmap-network-interface.patch @@ -0,0 +1,31 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: Daniele Palmas +Date: Fri, 4 Jan 2019 13:26:10 +0100 +Subject: qmi_wwan: add MTU default to qmap network interface + +From: Daniele Palmas + +[ 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 +Acked-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..6bb7b2fe0d2 --- /dev/null +++ b/queue-4.14/r8169-add-support-for-new-realtek-ethernet.patch @@ -0,0 +1,31 @@ +From foo@baz Wed Jan 23 08:17:01 CET 2019 +From: Kai-Heng Feng +Date: Wed, 2 Jan 2019 14:45:07 +0800 +Subject: r8169: Add support for new Realtek Ethernet + +From: Kai-Heng Feng + +[ 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 +Reviewed-by: Heiner Kallweit +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 }, -- 2.47.2