]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Sun, 4 Oct 2020 22:23:50 +0000 (18:23 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 4 Oct 2020 22:23:50 +0000 (18:23 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch [new file with mode: 0644]
queue-4.19/drivers-net-wan-hdlc_fr-add-needed_headroom-for-pvc-.patch [new file with mode: 0644]
queue-4.19/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch [new file with mode: 0644]
queue-4.19/drm-sun4i-mixer-extend-regmap-max_register.patch [new file with mode: 0644]
queue-4.19/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch [new file with mode: 0644]
queue-4.19/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch [new file with mode: 0644]
queue-4.19/nvme-core-get-put-ctrl-and-transport-module-in-nvme_.patch [new file with mode: 0644]
queue-4.19/nvme-fc-fail-new-connections-to-a-deleted-host-or-re.patch [new file with mode: 0644]
queue-4.19/rndis_host-increase-sleep-time-in-the-query-response.patch [new file with mode: 0644]
queue-4.19/series
queue-4.19/spi-fsl-espi-only-process-interrupts-for-expected-ev.patch [new file with mode: 0644]

diff --git a/queue-4.19/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch b/queue-4.19/drivers-net-wan-hdlc-set-skb-protocol-before-transmi.patch
new file mode 100644 (file)
index 0000000..f575fa7
--- /dev/null
@@ -0,0 +1,106 @@
+From 9d9ed3095fcecc125ccbd7f45e08ab8e47f52c7d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 16 Sep 2020 14:25:07 -0700
+Subject: drivers/net/wan/hdlc: Set skb->protocol before transmitting
+
+From: Xie He <xie.he.0141@gmail.com>
+
+[ 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 <khc@pm.waw.pl>
+Signed-off-by: Xie He <xie.he.0141@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 c169a26e5359a..2c6e3fa6947a0 100644
+--- a/drivers/net/wan/hdlc_cisco.c
++++ b/drivers/net/wan/hdlc_cisco.c
+@@ -121,6 +121,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 67f89917277ce..03b5f5cce6f47 100644
+--- a/drivers/net/wan/hdlc_fr.c
++++ b/drivers/net/wan/hdlc_fr.c
+@@ -436,6 +436,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;
+               }
+@@ -558,6 +560,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 85844f26547dd..20d9b6585fba3 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.19/drivers-net-wan-hdlc_fr-add-needed_headroom-for-pvc-.patch b/queue-4.19/drivers-net-wan-hdlc_fr-add-needed_headroom-for-pvc-.patch
new file mode 100644 (file)
index 0000000..f47c899
--- /dev/null
@@ -0,0 +1,59 @@
+From 630dabc8b5a37f1c7003512f5b4ed1e67f8c385c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 2 Sep 2020 17:06:58 -0700
+Subject: drivers/net/wan/hdlc_fr: Add needed_headroom for PVC devices
+
+From: Xie He <xie.he.0141@gmail.com>
+
+[ Upstream commit 44a049c42681de71c783d75cd6e56b4e339488b0 ]
+
+PVC devices are virtual devices in this driver stacked on top of the
+actual HDLC device. They are the devices normal users would use.
+PVC devices have two types: normal PVC devices and Ethernet-emulating
+PVC devices.
+
+When transmitting data with PVC devices, the ndo_start_xmit function
+will prepend a header of 4 or 10 bytes. Currently this driver requests
+this headroom to be reserved for normal PVC devices by setting their
+hard_header_len to 10. However, this does not work when these devices
+are used with AF_PACKET/RAW sockets. Also, this driver does not request
+this headroom for Ethernet-emulating PVC devices (but deals with this
+problem by reallocating the skb when needed, which is not optimal).
+
+This patch replaces hard_header_len with needed_headroom, and set
+needed_headroom for Ethernet-emulating PVC devices, too. This makes
+the driver to request headroom for all PVC devices in all cases.
+
+Cc: Krzysztof Halasa <khc@pm.waw.pl>
+Cc: Martin Schiller <ms@dev.tdt.de>
+Signed-off-by: Xie He <xie.he.0141@gmail.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wan/hdlc_fr.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
+index 038236a9c60ee..67f89917277ce 100644
+--- a/drivers/net/wan/hdlc_fr.c
++++ b/drivers/net/wan/hdlc_fr.c
+@@ -1044,7 +1044,7 @@ static void pvc_setup(struct net_device *dev)
+ {
+       dev->type = ARPHRD_DLCI;
+       dev->flags = IFF_POINTOPOINT;
+-      dev->hard_header_len = 10;
++      dev->hard_header_len = 0;
+       dev->addr_len = 2;
+       netif_keep_dst(dev);
+ }
+@@ -1096,6 +1096,7 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
+       dev->mtu = HDLC_MAX_MTU;
+       dev->min_mtu = 68;
+       dev->max_mtu = HDLC_MAX_MTU;
++      dev->needed_headroom = 10;
+       dev->priv_flags |= IFF_NO_QUEUE;
+       dev->ml_priv = pvc;
+-- 
+2.25.1
+
diff --git a/queue-4.19/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch b/queue-4.19/drivers-net-wan-lapbether-make-skb-protocol-consiste.patch
new file mode 100644 (file)
index 0000000..71d0be5
--- /dev/null
@@ -0,0 +1,58 @@
+From eff33e955a56cbe8efb3cec084718c22de45c0de Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 16 Sep 2020 09:49:18 -0700
+Subject: drivers/net/wan/lapbether: Make skb->protocol consistent with the
+ header
+
+From: Xie He <xie.he.0141@gmail.com>
+
+[ 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 <ms@dev.tdt.de>
+Signed-off-by: Xie He <xie.he.0141@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 15177a54b17d7..e5fc1b95cea6a 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.19/drm-sun4i-mixer-extend-regmap-max_register.patch b/queue-4.19/drm-sun4i-mixer-extend-regmap-max_register.patch
new file mode 100644 (file)
index 0000000..3a070b9
--- /dev/null
@@ -0,0 +1,36 @@
+From 0335d455aefd23c71237248930bb02a7438786a2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 6 Sep 2020 18:21:40 +0200
+Subject: drm/sun4i: mixer: Extend regmap max_register
+
+From: Martin Cerveny <m.cerveny@computer.org>
+
+[ Upstream commit 74ea06164cda81dc80e97790164ca533fd7e3087 ]
+
+Better guess. Secondary CSC registers are from 0xF0000.
+
+Signed-off-by: Martin Cerveny <m.cerveny@computer.org>
+Reviewed-by: Jernej Skrabec <jernej.skrabec@siol.net>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200906162140.5584-3-m.cerveny@computer.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c
+index 71a798e5d5591..649b57e5e4b78 100644
+--- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
++++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
+@@ -364,7 +364,7 @@ static struct regmap_config sun8i_mixer_regmap_config = {
+       .reg_bits       = 32,
+       .val_bits       = 32,
+       .reg_stride     = 4,
+-      .max_register   = 0xbfffc, /* guessed */
++      .max_register   = 0xffffc, /* guessed */
+ };
+ static int sun8i_mixer_of_get_id(struct device_node *node)
+-- 
+2.25.1
+
diff --git a/queue-4.19/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch b/queue-4.19/mac80211-do-not-allow-bigger-vht-mpdus-than-the-hard.patch
new file mode 100644 (file)
index 0000000..bec50c5
--- /dev/null
@@ -0,0 +1,48 @@
+From f2b4581f4540d330e8b4fc9513d36ce448751f98 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 17 Sep 2020 14:50:31 +0200
+Subject: mac80211: do not allow bigger VHT MPDUs than the hardware supports
+
+From: Felix Fietkau <nbd@nbd.name>
+
+[ Upstream commit 3bd5c7a28a7c3aba07a2d300d43f8e988809e147 ]
+
+Limit maximum VHT MPDU size by local capability.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+Link: https://lore.kernel.org/r/20200917125031.45009-1-nbd@nbd.name
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 259325cbcc314..4d154efb80c88 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.19/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch b/queue-4.19/net-dec-de2104x-increase-receive-ring-size-for-tulip.patch
new file mode 100644 (file)
index 0000000..473125c
--- /dev/null
@@ -0,0 +1,43 @@
+From 47ff02a2fd03e215d9d21e07414a96b0262d5d13 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Sep 2020 12:05:09 -0700
+Subject: net: dec: de2104x: Increase receive ring size for Tulip
+
+From: Lucy Yan <lucyyan@google.com>
+
+[ 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 <lucyyan@google.com>
+Reviewed-by: Moritz Fischer <mdf@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 13430f75496cc..b312cd9bce169 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.19/nvme-core-get-put-ctrl-and-transport-module-in-nvme_.patch b/queue-4.19/nvme-core-get-put-ctrl-and-transport-module-in-nvme_.patch
new file mode 100644 (file)
index 0000000..56bb564
--- /dev/null
@@ -0,0 +1,103 @@
+From 51968a620436338dadf5a2dfe7cdbf470ee66488 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Sep 2020 20:53:25 -0700
+Subject: nvme-core: get/put ctrl and transport module in
+ nvme_dev_open/release()
+
+From: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+
+[ Upstream commit 52a3974feb1a3eec25d8836d37a508b67b0a9cd0 ]
+
+Get and put the reference to the ctrl in the nvme_dev_open() and
+nvme_dev_release() before and after module get/put for ctrl in char
+device file operations.
+
+Introduce char_dev relase function, get/put the controller and module
+which allows us to fix the potential Oops which can be easily reproduced
+with a passthru ctrl (although the problem also exists with pure user
+access):
+
+Entering kdb (current=0xffff8887f8290000, pid 3128) on processor 30 Oops: (null)
+due to oops @ 0xffffffffa01019ad
+CPU: 30 PID: 3128 Comm: bash Tainted: G        W  OE     5.8.0-rc4nvme-5.9+ #35
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.4
+RIP: 0010:nvme_free_ctrl+0x234/0x285 [nvme_core]
+Code: 57 10 a0 e8 73 bf 02 e1 ba 3d 11 00 00 48 c7 c6 98 33 10 a0 48 c7 c7 1d 57 10 a0 e8 5b bf 02 e1 8
+RSP: 0018:ffffc90001d63de0 EFLAGS: 00010246
+RAX: ffffffffa05c0440 RBX: ffff8888119e45a0 RCX: 0000000000000000
+RDX: 0000000000000000 RSI: ffff8888177e9550 RDI: ffff8888119e43b0
+RBP: ffff8887d4768000 R08: 0000000000000000 R09: 0000000000000000
+R10: 0000000000000000 R11: ffffc90001d63c90 R12: ffff8888119e43b0
+R13: ffff8888119e5108 R14: dead000000000100 R15: ffff8888119e5108
+FS:  00007f1ef27b0740(0000) GS:ffff888817600000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: ffffffffa05c0470 CR3: 00000007f6bee000 CR4: 00000000003406e0
+Call Trace:
+ device_release+0x27/0x80
+ kobject_put+0x98/0x170
+ nvmet_passthru_ctrl_disable+0x4a/0x70 [nvmet]
+ nvmet_passthru_enable_store+0x4c/0x90 [nvmet]
+ configfs_write_file+0xe6/0x150
+ vfs_write+0xba/0x1e0
+ ksys_write+0x5f/0xe0
+ do_syscall_64+0x52/0xb0
+ entry_SYSCALL_64_after_hwframe+0x44/0xa9
+RIP: 0033:0x7f1ef1eb2840
+Code: Bad RIP value.
+RSP: 002b:00007fffdbff0eb8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
+RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007f1ef1eb2840
+RDX: 0000000000000002 RSI: 00007f1ef27d2000 RDI: 0000000000000001
+RBP: 00007f1ef27d2000 R08: 000000000000000a R09: 00007f1ef27b0740
+R10: 0000000000000001 R11: 0000000000000246 R12: 00007f1ef2186400
+R13: 0000000000000002 R14: 0000000000000001 R15: 0000000000000000
+
+With this patch fix we take the module ref count in nvme_dev_open() and
+release that ref count in newly introduced nvme_dev_release().
+
+Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/core.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
+index 33dad9774da01..9ea3d8e611005 100644
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -2605,10 +2605,24 @@ static int nvme_dev_open(struct inode *inode, struct file *file)
+               return -EWOULDBLOCK;
+       }
++      nvme_get_ctrl(ctrl);
++      if (!try_module_get(ctrl->ops->module))
++              return -EINVAL;
++
+       file->private_data = ctrl;
+       return 0;
+ }
++static int nvme_dev_release(struct inode *inode, struct file *file)
++{
++      struct nvme_ctrl *ctrl =
++              container_of(inode->i_cdev, struct nvme_ctrl, cdev);
++
++      module_put(ctrl->ops->module);
++      nvme_put_ctrl(ctrl);
++      return 0;
++}
++
+ static int nvme_dev_user_cmd(struct nvme_ctrl *ctrl, void __user *argp)
+ {
+       struct nvme_ns *ns;
+@@ -2669,6 +2683,7 @@ static long nvme_dev_ioctl(struct file *file, unsigned int cmd,
+ static const struct file_operations nvme_dev_fops = {
+       .owner          = THIS_MODULE,
+       .open           = nvme_dev_open,
++      .release        = nvme_dev_release,
+       .unlocked_ioctl = nvme_dev_ioctl,
+       .compat_ioctl   = nvme_dev_ioctl,
+ };
+-- 
+2.25.1
+
diff --git a/queue-4.19/nvme-fc-fail-new-connections-to-a-deleted-host-or-re.patch b/queue-4.19/nvme-fc-fail-new-connections-to-a-deleted-host-or-re.patch
new file mode 100644 (file)
index 0000000..0262527
--- /dev/null
@@ -0,0 +1,49 @@
+From 05e72c44c74cba4f9e4578f375b8c8be15814207 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 17 Sep 2020 13:33:22 -0700
+Subject: nvme-fc: fail new connections to a deleted host or remote port
+
+From: James Smart <james.smart@broadcom.com>
+
+[ Upstream commit 9e0e8dac985d4bd07d9e62922b9d189d3ca2fccf ]
+
+The lldd may have made calls to delete a remote port or local port and
+the delete is in progress when the cli then attempts to create a new
+controller. Currently, this proceeds without error although it can't be
+very successful.
+
+Fix this by validating that both the host port and remote port are
+present when a new controller is to be created.
+
+Signed-off-by: James Smart <james.smart@broadcom.com>
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/fc.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
+index 73db32f97abf3..ed88d50217724 100644
+--- a/drivers/nvme/host/fc.c
++++ b/drivers/nvme/host/fc.c
+@@ -3294,12 +3294,14 @@ nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts)
+       spin_lock_irqsave(&nvme_fc_lock, flags);
+       list_for_each_entry(lport, &nvme_fc_lport_list, port_list) {
+               if (lport->localport.node_name != laddr.nn ||
+-                  lport->localport.port_name != laddr.pn)
++                  lport->localport.port_name != laddr.pn ||
++                  lport->localport.port_state != FC_OBJSTATE_ONLINE)
+                       continue;
+               list_for_each_entry(rport, &lport->endp_list, endp_list) {
+                       if (rport->remoteport.node_name != raddr.nn ||
+-                          rport->remoteport.port_name != raddr.pn)
++                          rport->remoteport.port_name != raddr.pn ||
++                          rport->remoteport.port_state != FC_OBJSTATE_ONLINE)
+                               continue;
+                       /* if fail to get reference fall through. Will error */
+-- 
+2.25.1
+
diff --git a/queue-4.19/rndis_host-increase-sleep-time-in-the-query-response.patch b/queue-4.19/rndis_host-increase-sleep-time-in-the-query-response.patch
new file mode 100644 (file)
index 0000000..addf5c0
--- /dev/null
@@ -0,0 +1,49 @@
+From cfc81c9aca1784f2a8fb0f45d5c241dffe520a72 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 11 Sep 2020 14:17:24 +0000
+Subject: rndis_host: increase sleep time in the query-response loop
+
+From: Olympia Giannou <ogiannou@gmail.com>
+
+[ 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 <olympia.giannou@leica-geosystems.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 b807c91abe1da..a22ae3137a3f8 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
+
index b15ff0ddffcf92d6490522250ad0acb3d59134bc..448d0573370a6cf2a280638bbf33cdd024b8f274 100644 (file)
@@ -10,3 +10,13 @@ net-virtio_vsock-enhance-connection-semantics.patch
 input-i8042-add-nopnp-quirk-for-acer-aspire-5-a515.patch
 ftrace-move-rcu-is-watching-check-after-recursion-check.patch
 drm-amdgpu-restore-proper-ref-count-in-amdgpu_display_crtc_set_config.patch
+drivers-net-wan-hdlc_fr-add-needed_headroom-for-pvc-.patch
+drm-sun4i-mixer-extend-regmap-max_register.patch
+net-dec-de2104x-increase-receive-ring-size-for-tulip.patch
+rndis_host-increase-sleep-time-in-the-query-response.patch
+nvme-core-get-put-ctrl-and-transport-module-in-nvme_.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
+spi-fsl-espi-only-process-interrupts-for-expected-ev.patch
+nvme-fc-fail-new-connections-to-a-deleted-host-or-re.patch
diff --git a/queue-4.19/spi-fsl-espi-only-process-interrupts-for-expected-ev.patch b/queue-4.19/spi-fsl-espi-only-process-interrupts-for-expected-ev.patch
new file mode 100644 (file)
index 0000000..3f545c1
--- /dev/null
@@ -0,0 +1,49 @@
+From 724a4989fbed744f921d938a9d1304d2a0dee4dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 4 Sep 2020 12:28:12 +1200
+Subject: spi: fsl-espi: Only process interrupts for expected events
+
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+[ Upstream commit b867eef4cf548cd9541225aadcdcee644669b9e1 ]
+
+The SPIE register contains counts for the TX FIFO so any time the irq
+handler was invoked we would attempt to process the RX/TX fifos. Use the
+SPIM value to mask the events so that we only process interrupts that
+were expected.
+
+This was a latent issue exposed by commit 3282a3da25bd ("powerpc/64:
+Implement soft interrupt replay in C").
+
+Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
+Link: https://lore.kernel.org/r/20200904002812.7300-1-chris.packham@alliedtelesis.co.nz
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-fsl-espi.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
+index 1e8ff6256079f..b8dd75b8518b5 100644
+--- a/drivers/spi/spi-fsl-espi.c
++++ b/drivers/spi/spi-fsl-espi.c
+@@ -559,13 +559,14 @@ static void fsl_espi_cpu_irq(struct fsl_espi *espi, u32 events)
+ static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)
+ {
+       struct fsl_espi *espi = context_data;
+-      u32 events;
++      u32 events, mask;
+       spin_lock(&espi->lock);
+       /* Get interrupt events(tx/rx) */
+       events = fsl_espi_read_reg(espi, ESPI_SPIE);
+-      if (!events) {
++      mask = fsl_espi_read_reg(espi, ESPI_SPIM);
++      if (!(events & mask)) {
+               spin_unlock(&espi->lock);
+               return IRQ_NONE;
+       }
+-- 
+2.25.1
+