+++ /dev/null
-From 698b354c5fb8c714cfc1665bf0f43be9a123d992 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 b27dbc34df02..f191a0d042b9 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1260,7 +1260,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");
- }
-@@ -1568,26 +1567,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);
- }
-
-@@ -2090,9 +2099,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;
-@@ -3292,7 +3303,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);
- INIT_WORK(&priv->vxlan_add_task, mlx4_en_add_vxlan_offloads);
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 7078330e25c1..e66efee88c9c 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -566,7 +566,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
-
mcb-fix-error-handling-in-mcb_alloc_bus.patch
serial-mvebu-uart-fix-driver-s-tx_empty-callback.patch
net-hso-fix-muxed-tty-registration.patch
-net-mlx4_en-resolve-bad-operstate-value.patch
bnxt_en-fix-tx-timeout-when-tx-ring-size-is-set-to-t.patch
net-mlx4_en-don-t-allow-arfs-for-encapsulated-packet.patch
+++ /dev/null
-From 5f4d3e6040e070ab765ab674f38b8f8328c21407 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 f3a0617733d8..afd2dd8ebd73 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1269,7 +1269,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");
- }
-@@ -1563,26 +1562,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);
- }
-
-@@ -2086,9 +2095,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;
-@@ -3288,7 +3299,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);
- INIT_WORK(&priv->vxlan_add_task, mlx4_en_add_vxlan_offloads);
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 3d5597d5b10d..2e759cd0f66e 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -571,7 +571,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
-
mcb-fix-error-handling-in-mcb_alloc_bus.patch
serial-mvebu-uart-fix-driver-s-tx_empty-callback.patch
net-hso-fix-muxed-tty-registration.patch
-net-mlx4_en-resolve-bad-operstate-value.patch
bnxt_en-fix-tx-timeout-when-tx-ring-size-is-set-to-t.patch
net-smc-add-missing-error-check-in-smc_clc_prfx_set.patch
gpio-uniphier-fix-void-functions-to-remove-return-va.patch
+++ /dev/null
-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
-
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
+++ /dev/null
-From e854b820a11d4ebc0d0873cededf0c1223c66c68 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 543f30dec4a0..437e30a5a314 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1184,7 +1184,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");
- }
-@@ -1487,26 +1486,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);
- }
-
-@@ -1978,9 +1987,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;
-@@ -3087,7 +3098,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);
- INIT_WORK(&priv->vxlan_add_task, mlx4_en_add_vxlan_offloads);
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 2e8c138beaf7..393b8a43bd85 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -558,7 +558,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
-
mcb-fix-error-handling-in-mcb_alloc_bus.patch
serial-mvebu-uart-fix-driver-s-tx_empty-callback.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
+++ /dev/null
-From d161613ee7b68dba877408f5edc8fe9d0fa2646a 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 d8a20e83d904..49a11406b6ab 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1269,7 +1269,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");
- }
-@@ -1557,26 +1556,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);
- }
-
-@@ -2080,9 +2089,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;
-@@ -3173,7 +3184,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_RFS_ACCEL
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 0aa4a23ad3de..c1f23dc3b0e6 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -571,7 +571,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
-
platform-x86-intel-punit_ipc-drop-wrong-use-of-acpi_.patch
enetc-fix-illegal-access-when-reading-affinity_hint.patch
enetc-fix-uninitialized-struct-dim_sample-field-usag.patch
-net-mlx4_en-resolve-bad-operstate-value.patch
bnxt_en-fix-tx-timeout-when-tx-ring-size-is-set-to-t.patch
net-hns3-fix-change-rss-hfunc-ineffective-issue.patch
net-hns3-fix-misuse-vf-id-and-vport-id-in-some-logs.patch
+++ /dev/null
-From 548f95a57741c4879bc873aee299f1dcf6c602a4 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 5d0c9c62382d..c3171b5f6431 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1269,7 +1269,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");
- }
-@@ -1557,26 +1556,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);
- }
-
-@@ -2079,9 +2088,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;
-@@ -3168,7 +3179,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_RFS_ACCEL
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index f3d1a20201ef..6bf558c5ec10 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -552,7 +552,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
-
igc-fix-build-errors-for-ptp.patch
net-dsa-tear-down-devlink-port-regions-when-tearing-.patch
net-bgmac-bcma-handle-deferred-probe-error-due-to-ma.patch
-net-mlx4_en-resolve-bad-operstate-value.patch
napi-fix-race-inside-napi_enable.patch
bnxt_en-fix-tx-timeout-when-tx-ring-size-is-set-to-t.patch
net-hns3-fix-change-rss-hfunc-ineffective-issue.patch
+++ /dev/null
-From 86479b316b5100ab5dc7c591bd4a2cf753ffd5ec 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 cd165e52ed33..d7d20b7fae39 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
-@@ -1268,7 +1268,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");
- }
-@@ -1562,26 +1561,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);
- }
-
-@@ -2085,9 +2094,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;
-@@ -3271,7 +3282,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);
- INIT_WORK(&priv->vxlan_add_task, mlx4_en_add_vxlan_offloads);
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 17a5bd4c68b2..c72a9201c7ea 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -571,7 +571,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
-
afs-fix-incorrect-triggering-of-sillyrename-on-3rd-p.patch
platform-x86-intel-punit_ipc-drop-wrong-use-of-acpi_.patch
enetc-fix-illegal-access-when-reading-affinity_hint.patch
-net-mlx4_en-resolve-bad-operstate-value.patch
bnxt_en-fix-tx-timeout-when-tx-ring-size-is-set-to-t.patch
net-smc-add-missing-error-check-in-smc_clc_prfx_set.patch
gpio-uniphier-fix-void-functions-to-remove-return-va.patch