From c30945a0deee9f5c8768f283b4364f8bb0c9328e Mon Sep 17 00:00:00 2001 From: Ajaykumar Hotchandani Date: Tue, 15 Jan 2013 21:57:45 -0800 Subject: [PATCH] mlx4_en: handle HCA events correctly Mellanox issue: 128542 Signed-off-by: Chien Yen Signed-off-by: Saeed Mahameed --- drivers/net/mlx4/en_main.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx4/en_main.c b/drivers/net/mlx4/en_main.c index ece207d517ca..51a497d57b6a 100644 --- a/drivers/net/mlx4/en_main.c +++ b/drivers/net/mlx4/en_main.c @@ -124,20 +124,24 @@ static void mlx4_en_event(struct mlx4_dev *dev, void *endev_ptr, struct mlx4_en_priv *priv; int i; - if (!mdev->pndev[port]) - return; - - priv = netdev_priv(mdev->pndev[port]); switch (event) { case MLX4_DEV_EVENT_PORT_UP: case MLX4_DEV_EVENT_PORT_DOWN: /* To prevent races, we poll the link state in a separate task rather than changing it here */ + if (!mdev->pndev[port]) + return; + priv = netdev_priv(mdev->pndev[port]); + priv->link_state = event; queue_work(mdev->workqueue, &priv->linkstate_task); break; case MLX4_EVENT_TYPE_MAC_UPDATE: + if (!mdev->pndev[port]) + return; + priv = netdev_priv(mdev->pndev[port]); + priv->mac = dev->caps.def_mac[port]; for (i = 0; i < ETH_ALEN; i++) { priv->dev->dev_addr[ETH_ALEN - 1 - i] = (u8) (priv->mac >> (8 * i)); @@ -150,6 +154,9 @@ static void mlx4_en_event(struct mlx4_dev *dev, void *endev_ptr, mlx4_err(mdev, "Internal error detected, restarting device\n"); break; + case MLX4_DEV_EVENT_PORT_MGMT_CHANGE: /* ignore event */ + break; + default: mlx4_warn(mdev, "Unhandled event: %d\n", event); } -- 2.50.1