]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.4
authorSasha Levin <sashal@kernel.org>
Sun, 26 Sep 2021 22:59:09 +0000 (18:59 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 26 Sep 2021 22:59:09 +0000 (18:59 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.4/net-mlx4_en-don-t-allow-arfs-for-encapsulated-packet.patch [new file with mode: 0644]
queue-4.4/net-mlx4_en-resolve-bad-operstate-value.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/net-mlx4_en-don-t-allow-arfs-for-encapsulated-packet.patch b/queue-4.4/net-mlx4_en-don-t-allow-arfs-for-encapsulated-packet.patch
new file mode 100644 (file)
index 0000000..2bea5d7
--- /dev/null
@@ -0,0 +1,38 @@
+From e6edfa2fbdbd1daf8747b6b5b8d0253144e484bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Sep 2021 09:51:45 +0300
+Subject: net/mlx4_en: Don't allow aRFS for encapsulated packets
+
+From: Aya Levin <ayal@nvidia.com>
+
+[ Upstream commit fdbccea419dc782079ce5881d2705cc9e3881480 ]
+
+Driver doesn't support aRFS for encapsulated packets, return early error
+in such a case.
+
+Fixes: 1eb8c695bda9 ("net/mlx4_en: Add accelerated RFS support")
+Signed-off-by: Aya Levin <ayal@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+index 9dd081715c1e..c9be239c6ec0 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
++++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+@@ -311,6 +311,9 @@ mlx4_en_filter_rfs(struct net_device *net_dev, const struct sk_buff *skb,
+       int nhoff = skb_network_offset(skb);
+       int ret = 0;
++      if (skb->encapsulation)
++              return -EPROTONOSUPPORT;
++
+       if (skb->protocol != htons(ETH_P_IP))
+               return -EPROTONOSUPPORT;
+-- 
+2.33.0
+
diff --git a/queue-4.4/net-mlx4_en-resolve-bad-operstate-value.patch b/queue-4.4/net-mlx4_en-resolve-bad-operstate-value.patch
new file mode 100644 (file)
index 0000000..373b495
--- /dev/null
@@ -0,0 +1,127 @@
+From 5dd50b63228e97e604fc82ef115dad91c31c0e95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 19 Sep 2021 14:55:45 +0300
+Subject: net/mlx4_en: Resolve bad operstate value
+
+From: Lama Kayal <lkayal@nvidia.com>
+
+[ Upstream commit 72a3c58d18fd780eecd80178bb2132ce741a0a74 ]
+
+Any link state change that's done prior to net device registration
+isn't reflected on the state, thus the operational state is left
+obsolete, with 'UNKNOWN' status.
+
+To resolve the issue, query link state from FW upon open operations
+to ensure operational state is updated.
+
+Fixes: c27a02cd94d6 ("mlx4_en: Add driver for Mellanox ConnectX 10GbE NIC")
+Signed-off-by: Lama Kayal <lkayal@nvidia.com>
+Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../net/ethernet/mellanox/mlx4/en_netdev.c    | 47 ++++++++++++-------
+ drivers/net/ethernet/mellanox/mlx4/mlx4_en.h  |  1 -
+ 2 files changed, 29 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+index 112ce16717cd..9dd081715c1e 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
++++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+@@ -1186,7 +1186,6 @@ static void mlx4_en_do_set_rx_mode(struct work_struct *work)
+       if (!netif_carrier_ok(dev)) {
+               if (!mlx4_en_QUERY_PORT(mdev, priv->port)) {
+                       if (priv->port_state.link_state) {
+-                              priv->last_link_state = MLX4_DEV_EVENT_PORT_UP;
+                               netif_carrier_on(dev);
+                               en_dbg(LINK, priv, "Link Up\n");
+                       }
+@@ -1488,26 +1487,36 @@ static void mlx4_en_service_task(struct work_struct *work)
+       mutex_unlock(&mdev->state_lock);
+ }
+-static void mlx4_en_linkstate(struct work_struct *work)
++static void mlx4_en_linkstate(struct mlx4_en_priv *priv)
++{
++      struct mlx4_en_port_state *port_state = &priv->port_state;
++      struct mlx4_en_dev *mdev = priv->mdev;
++      struct net_device *dev = priv->dev;
++      bool up;
++
++      if (mlx4_en_QUERY_PORT(mdev, priv->port))
++              port_state->link_state = MLX4_PORT_STATE_DEV_EVENT_PORT_DOWN;
++
++      up = port_state->link_state == MLX4_PORT_STATE_DEV_EVENT_PORT_UP;
++      if (up == netif_carrier_ok(dev))
++              netif_carrier_event(dev);
++      if (!up) {
++              en_info(priv, "Link Down\n");
++              netif_carrier_off(dev);
++      } else {
++              en_info(priv, "Link Up\n");
++              netif_carrier_on(dev);
++      }
++}
++
++static void mlx4_en_linkstate_work(struct work_struct *work)
+ {
+       struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
+                                                linkstate_task);
+       struct mlx4_en_dev *mdev = priv->mdev;
+-      int linkstate = priv->link_state;
+       mutex_lock(&mdev->state_lock);
+-      /* If observable port state changed set carrier state and
+-       * report to system log */
+-      if (priv->last_link_state != linkstate) {
+-              if (linkstate == MLX4_DEV_EVENT_PORT_DOWN) {
+-                      en_info(priv, "Link Down\n");
+-                      netif_carrier_off(priv->dev);
+-              } else {
+-                      en_info(priv, "Link Up\n");
+-                      netif_carrier_on(priv->dev);
+-              }
+-      }
+-      priv->last_link_state = linkstate;
++      mlx4_en_linkstate(priv);
+       mutex_unlock(&mdev->state_lock);
+ }
+@@ -1962,9 +1971,11 @@ static int mlx4_en_open(struct net_device *dev)
+       mlx4_en_clear_stats(dev);
+       err = mlx4_en_start_port(dev);
+-      if (err)
++      if (err) {
+               en_err(priv, "Failed starting port:%d\n", priv->port);
+-
++              goto out;
++      }
++      mlx4_en_linkstate(priv);
+ out:
+       mutex_unlock(&mdev->state_lock);
+       return err;
+@@ -2856,7 +2867,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
+       spin_lock_init(&priv->stats_lock);
+       INIT_WORK(&priv->rx_mode_task, mlx4_en_do_set_rx_mode);
+       INIT_WORK(&priv->restart_task, mlx4_en_restart);
+-      INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate);
++      INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate_work);
+       INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats);
+       INIT_DELAYED_WORK(&priv->service_task, mlx4_en_service_task);
+ #ifdef CONFIG_MLX4_EN_VXLAN
+diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+index b6cd733791a8..8336f3ed81d8 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
++++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+@@ -533,7 +533,6 @@ struct mlx4_en_priv {
+       struct mlx4_hwq_resources res;
+       int link_state;
+-      int last_link_state;
+       bool port_up;
+       int port;
+       int registered;
+-- 
+2.33.0
+
index f3006873de4079586065ccc2352e223cdb37d3fa..2c34943263e99f4b366c428e8c89c9e3a7931f6d 100644 (file)
@@ -8,3 +8,5 @@ usb-serial-option-add-telit-ln920-compositions.patch
 usb-serial-option-remove-duplicate-usb-device-id.patch
 usb-serial-option-add-device-id-for-foxconn-t99w265.patch
 net-hso-fix-muxed-tty-registration.patch
+net-mlx4_en-resolve-bad-operstate-value.patch
+net-mlx4_en-don-t-allow-arfs-for-encapsulated-packet.patch