From a91c93ed22880dba94c4dc93052fbd1e26da7a34 Mon Sep 17 00:00:00 2001 From: Alfred Perlstein Date: Fri, 8 Nov 2013 18:28:48 +0000 Subject: Do not use a sleep lock when protecting the driver flags. This was causing a locking issue with lagg Submitted by: odeds --- sys/ofed/drivers/net/mlx4/en_netdev.c | 6 ++++-- sys/ofed/drivers/net/mlx4/mlx4_en.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/ofed/drivers/net/mlx4/en_netdev.c b/sys/ofed/drivers/net/mlx4/en_netdev.c index c3ba87ffcf36..7df26837746a 100644 --- a/sys/ofed/drivers/net/mlx4/en_netdev.c +++ b/sys/ofed/drivers/net/mlx4/en_netdev.c @@ -919,6 +919,7 @@ void mlx4_en_destroy_netdev(struct net_device *dev) mtx_destroy(&priv->stats_lock.m); mtx_destroy(&priv->vlan_lock.m); + mtx_destroy(&priv->ioctl_lock.m); kfree(priv); if_free(dev); } @@ -1087,9 +1088,9 @@ static int mlx4_en_ioctl(struct ifnet *dev, u_long command, caddr_t data) break; case SIOCADDMULTI: case SIOCDELMULTI: - mutex_lock(&mdev->state_lock); + spin_lock(&priv->ioctl_lock); mlx4_en_set_multicast(dev); - mutex_unlock(&mdev->state_lock); + spin_unlock(&priv->ioctl_lock); break; case SIOCSIFMEDIA: case SIOCGIFMEDIA: @@ -1510,6 +1511,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, priv->msg_enable = MLX4_EN_MSG_LEVEL; priv->ip_reasm = priv->mdev->profile.ip_reasm; mtx_init(&priv->stats_lock.m, "mlx4 stats", NULL, MTX_DEF); + mtx_init(&priv->ioctl_lock.m, "mlx4 ioctl", NULL, MTX_DEF); mtx_init(&priv->vlan_lock.m, "mlx4 vlan", NULL, MTX_DEF); INIT_WORK(&priv->mcast_task, mlx4_en_do_set_multicast); INIT_WORK(&priv->watchdog_task, mlx4_en_restart); diff --git a/sys/ofed/drivers/net/mlx4/mlx4_en.h b/sys/ofed/drivers/net/mlx4/mlx4_en.h index 82617484b0ae..7f3c352b7bbb 100644 --- a/sys/ofed/drivers/net/mlx4/mlx4_en.h +++ b/sys/ofed/drivers/net/mlx4/mlx4_en.h @@ -493,6 +493,7 @@ struct mlx4_en_priv { spinlock_t vlan_lock; struct mlx4_en_port_state port_state; spinlock_t stats_lock; + spinlock_t ioctl_lock; unsigned long last_moder_packets[MAX_RX_RINGS]; unsigned long last_moder_tx_packets; -- cgit v1.3