From: Sasha Levin Date: Sun, 4 Oct 2020 22:23:51 +0000 (-0400) Subject: Fixes for 4.9 X-Git-Tag: v4.19.150~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4043ed526caf44ead61b46e6878810531d651b5e;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.9 Signed-off-by: Sasha Levin --- diff --git a/queue-4.9/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch b/queue-4.9/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch new file mode 100644 index 00000000000..e4a91e26e4b --- /dev/null +++ b/queue-4.9/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch @@ -0,0 +1,106 @@ +From d47e1a3d6a9f555fb019e05993970b31105078b5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 16 Sep 2020 14:25:07 -0700 +Subject: drivers/net/wan/hdlc: Set skb->protocol before transmitting + +From: Xie He + +[ Upstream commit 9fb030a70431a2a2a1b292dbf0b2f399cc072c16 ] + +This patch sets skb->protocol before transmitting frames on the HDLC +device, so that a user listening on the HDLC device with an AF_PACKET +socket will see outgoing frames' sll_protocol field correctly set and +consistent with that of incoming frames. + +1. Control frames in hdlc_cisco and hdlc_ppp + +When these drivers send control frames, skb->protocol is not set. + +This value should be set to htons(ETH_P_HDLC), because when receiving +control frames, their skb->protocol is set to htons(ETH_P_HDLC). + +When receiving, hdlc_type_trans in hdlc.h is called, which then calls +cisco_type_trans or ppp_type_trans. The skb->protocol of control frames +is set to htons(ETH_P_HDLC) so that the control frames can be received +by hdlc_rcv in hdlc.c, which calls cisco_rx or ppp_rx to process the +control frames. + +2. hdlc_fr + +When this driver sends control frames, skb->protocol is set to internal +values used in this driver. + +When this driver sends data frames (from upper stacked PVC devices), +skb->protocol is the same as that of the user data packet being sent on +the upper PVC device (for normal PVC devices), or is htons(ETH_P_802_3) +(for Ethernet-emulating PVC devices). + +However, skb->protocol for both control frames and data frames should be +set to htons(ETH_P_HDLC), because when receiving, all frames received on +the HDLC device will have their skb->protocol set to htons(ETH_P_HDLC). + +When receiving, hdlc_type_trans in hdlc.h is called, and because this +driver doesn't provide a type_trans function in struct hdlc_proto, +all frames will have their skb->protocol set to htons(ETH_P_HDLC). +The frames are then received by hdlc_rcv in hdlc.c, which calls fr_rx +to process the frames (control frames are consumed and data frames +are re-received on upper PVC devices). + +Cc: Krzysztof Halasa +Signed-off-by: Xie He +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/wan/hdlc_cisco.c | 1 + + drivers/net/wan/hdlc_fr.c | 3 +++ + drivers/net/wan/hdlc_ppp.c | 1 + + 3 files changed, 5 insertions(+) + +diff --git a/drivers/net/wan/hdlc_cisco.c b/drivers/net/wan/hdlc_cisco.c +index 7f99fb666f196..1587789ba9343 100644 +--- a/drivers/net/wan/hdlc_cisco.c ++++ b/drivers/net/wan/hdlc_cisco.c +@@ -120,6 +120,7 @@ static void cisco_keepalive_send(struct net_device *dev, u32 type, + skb_put(skb, sizeof(struct cisco_packet)); + skb->priority = TC_PRIO_CONTROL; + skb->dev = dev; ++ skb->protocol = htons(ETH_P_HDLC); + skb_reset_network_header(skb); + + dev_queue_xmit(skb); +diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c +index b6e0cfb095d35..bba19d068207a 100644 +--- a/drivers/net/wan/hdlc_fr.c ++++ b/drivers/net/wan/hdlc_fr.c +@@ -435,6 +435,8 @@ static netdev_tx_t pvc_xmit(struct sk_buff *skb, struct net_device *dev) + if (pvc->state.fecn) /* TX Congestion counter */ + dev->stats.tx_compressed++; + skb->dev = pvc->frad; ++ skb->protocol = htons(ETH_P_HDLC); ++ skb_reset_network_header(skb); + dev_queue_xmit(skb); + return NETDEV_TX_OK; + } +@@ -557,6 +559,7 @@ static void fr_lmi_send(struct net_device *dev, int fullrep) + skb_put(skb, i); + skb->priority = TC_PRIO_CONTROL; + skb->dev = dev; ++ skb->protocol = htons(ETH_P_HDLC); + skb_reset_network_header(skb); + + dev_queue_xmit(skb); +diff --git a/drivers/net/wan/hdlc_ppp.c b/drivers/net/wan/hdlc_ppp.c +index 63546d1317982..35589ee0cde11 100644 +--- a/drivers/net/wan/hdlc_ppp.c ++++ b/drivers/net/wan/hdlc_ppp.c +@@ -254,6 +254,7 @@ static void ppp_tx_cp(struct net_device *dev, u16 pid, u8 code, + + skb->priority = TC_PRIO_CONTROL; + skb->dev = dev; ++ skb->protocol = htons(ETH_P_HDLC); + skb_reset_network_header(skb); + skb_queue_tail(&tx_queue, skb); + } +-- +2.25.1 + diff --git a/queue-4.9/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch b/queue-4.9/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch new file mode 100644 index 00000000000..322159d6f5c --- /dev/null +++ b/queue-4.9/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch @@ -0,0 +1,58 @@ +From b3e4aefb7fa2109f6a4e6b07ea5a9376ba85348c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 16 Sep 2020 09:49:18 -0700 +Subject: drivers/net/wan/lapbether: Make skb->protocol consistent with the + header + +From: Xie He + +[ Upstream commit 83f9a9c8c1edc222846dc1bde6e3479703e8e5a3 ] + +This driver is a virtual driver stacked on top of Ethernet interfaces. + +When this driver transmits data on the Ethernet device, the skb->protocol +setting is inconsistent with the Ethernet header prepended to the skb. + +This causes a user listening on the Ethernet interface with an AF_PACKET +socket, to see different sll_protocol values for incoming and outgoing +frames, because incoming frames would have this value set by parsing the +Ethernet header. + +This patch changes the skb->protocol value for outgoing Ethernet frames, +making it consistent with the Ethernet header prepended. This makes a +user listening on the Ethernet device with an AF_PACKET socket, to see +the same sll_protocol value for incoming and outgoing frames. + +Cc: Martin Schiller +Signed-off-by: Xie He +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/wan/lapbether.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c +index c6db9a4e7c457..ef746ba74ab4c 100644 +--- a/drivers/net/wan/lapbether.c ++++ b/drivers/net/wan/lapbether.c +@@ -201,8 +201,6 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) + struct net_device *dev; + int size = skb->len; + +- skb->protocol = htons(ETH_P_X25); +- + ptr = skb_push(skb, 2); + + *ptr++ = size % 256; +@@ -213,6 +211,8 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) + + skb->dev = dev = lapbeth->ethdev; + ++ skb->protocol = htons(ETH_P_DEC); ++ + skb_reset_network_header(skb); + + dev_hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0); +-- +2.25.1 + diff --git a/queue-4.9/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch b/queue-4.9/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch new file mode 100644 index 00000000000..c3607e861ad --- /dev/null +++ b/queue-4.9/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch @@ -0,0 +1,48 @@ +From 70b3c79221bee8b4db274c5f45a618a662492041 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 17 Sep 2020 14:50:31 +0200 +Subject: mac80211: do not allow bigger VHT MPDUs than the hardware supports + +From: Felix Fietkau + +[ Upstream commit 3bd5c7a28a7c3aba07a2d300d43f8e988809e147 ] + +Limit maximum VHT MPDU size by local capability. + +Signed-off-by: Felix Fietkau +Link: https://lore.kernel.org/r/20200917125031.45009-1-nbd@nbd.name +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + net/mac80211/vht.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c +index 43e45bb660bcd..b1d3fa708e16b 100644 +--- a/net/mac80211/vht.c ++++ b/net/mac80211/vht.c +@@ -170,10 +170,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, + /* take some capabilities as-is */ + cap_info = le32_to_cpu(vht_cap_ie->vht_cap_info); + vht_cap->cap = cap_info; +- vht_cap->cap &= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 | +- IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 | +- IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 | +- IEEE80211_VHT_CAP_RXLDPC | ++ vht_cap->cap &= IEEE80211_VHT_CAP_RXLDPC | + IEEE80211_VHT_CAP_VHT_TXOP_PS | + IEEE80211_VHT_CAP_HTC_VHT | + IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK | +@@ -182,6 +179,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, + IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN | + IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN; + ++ vht_cap->cap |= min_t(u32, cap_info & IEEE80211_VHT_CAP_MAX_MPDU_MASK, ++ own_cap.cap & IEEE80211_VHT_CAP_MAX_MPDU_MASK); ++ + /* and some based on our own capabilities */ + switch (own_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) { + case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ: +-- +2.25.1 + diff --git a/queue-4.9/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch b/queue-4.9/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch new file mode 100644 index 00000000000..dced72e71ee --- /dev/null +++ b/queue-4.9/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch @@ -0,0 +1,43 @@ +From 11e201522db9d6fde6ff5f1b851748d95b473224 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Sep 2020 12:05:09 -0700 +Subject: net: dec: de2104x: Increase receive ring size for Tulip + +From: Lucy Yan + +[ Upstream commit ee460417d254d941dfea5fb7cff841f589643992 ] + +Increase Rx ring size to address issue where hardware is reaching +the receive work limit. + +Before: + +[ 102.223342] de2104x 0000:17:00.0 eth0: rx work limit reached +[ 102.245695] de2104x 0000:17:00.0 eth0: rx work limit reached +[ 102.251387] de2104x 0000:17:00.0 eth0: rx work limit reached +[ 102.267444] de2104x 0000:17:00.0 eth0: rx work limit reached + +Signed-off-by: Lucy Yan +Reviewed-by: Moritz Fischer +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/dec/tulip/de2104x.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/dec/tulip/de2104x.c b/drivers/net/ethernet/dec/tulip/de2104x.c +index cadcee645f74e..11ce50a057998 100644 +--- a/drivers/net/ethernet/dec/tulip/de2104x.c ++++ b/drivers/net/ethernet/dec/tulip/de2104x.c +@@ -91,7 +91,7 @@ MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copi + #define DSL CONFIG_DE2104X_DSL + #endif + +-#define DE_RX_RING_SIZE 64 ++#define DE_RX_RING_SIZE 128 + #define DE_TX_RING_SIZE 64 + #define DE_RING_BYTES \ + ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \ +-- +2.25.1 + diff --git a/queue-4.9/rndis_host-increase-sleep-time-in-the-query-response.patch b/queue-4.9/rndis_host-increase-sleep-time-in-the-query-response.patch new file mode 100644 index 00000000000..bf79092d4fe --- /dev/null +++ b/queue-4.9/rndis_host-increase-sleep-time-in-the-query-response.patch @@ -0,0 +1,49 @@ +From 23d141c8bd74f0c85363c75ffb88eb4011c2d892 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 11 Sep 2020 14:17:24 +0000 +Subject: rndis_host: increase sleep time in the query-response loop + +From: Olympia Giannou + +[ Upstream commit 4202c9fdf03d79dedaa94b2c4cf574f25793d669 ] + +Some WinCE devices face connectivity issues via the NDIS interface. They +fail to register, resulting in -110 timeout errors and failures during the +probe procedure. + +In this kind of WinCE devices, the Windows-side ndis driver needs quite +more time to be loaded and configured, so that the linux rndis host queries +to them fail to be responded correctly on time. + +More specifically, when INIT is called on the WinCE side - no other +requests can be served by the Client and this results in a failed QUERY +afterwards. + +The increase of the waiting time on the side of the linux rndis host in +the command-response loop leaves the INIT process to complete and respond +to a QUERY, which comes afterwards. The WinCE devices with this special +"feature" in their ndis driver are satisfied by this fix. + +Signed-off-by: Olympia Giannou +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/usb/rndis_host.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c +index 4f4f71b2966ba..9ccbdf1431063 100644 +--- a/drivers/net/usb/rndis_host.c ++++ b/drivers/net/usb/rndis_host.c +@@ -213,7 +213,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen) + dev_dbg(&info->control->dev, + "rndis response error, code %d\n", retval); + } +- msleep(20); ++ msleep(40); + } + dev_dbg(&info->control->dev, "rndis response timeout\n"); + return -ETIMEDOUT; +-- +2.25.1 + diff --git a/queue-4.9/series b/queue-4.9/series index f24ab3a9a41..cfa574c2228 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -4,3 +4,8 @@ usb-gadget-f_ncm-fix-ndp16-datagram-validation.patch gpio-tc35894-fix-up-tc35894-interrupt-configuration.patch input-i8042-add-nopnp-quirk-for-acer-aspire-5-a515.patch drm-amdgpu-restore-proper-ref-count-in-amdgpu_display_crtc_set_config.patch +net-dec-de2104x-increase-receive-ring-size-for-tulip.patch +rndis_host-increase-sleep-time-in-the-query-response.patch +drivers-net-wan-lapbether-make-skb-protocol-consiste.patch +drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch +mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch