Author: hselasky
Date: Sun Mar 15 09:06:59 2015
New Revision: 280019
URL: https://svnweb.freebsd.org/changeset/base/280019

Log:
  MFC r279865:
  Ensure setting promiscious mode when a network interface is up, is
  always non-blocking by not locking a SX type of mutex.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/9/sys/ofed/drivers/net/mlx4/en_netdev.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/ofed/drivers/net/mlx4/en_netdev.c
==============================================================================
--- stable/9/sys/ofed/drivers/net/mlx4/en_netdev.c      Sun Mar 15 09:05:26 
2015        (r280018)
+++ stable/9/sys/ofed/drivers/net/mlx4/en_netdev.c      Sun Mar 15 09:06:59 
2015        (r280019)
@@ -1916,19 +1916,22 @@ static int mlx4_en_ioctl(struct ifnet *d
                error = -mlx4_en_change_mtu(dev, ifr->ifr_mtu);
                break;
        case SIOCSIFFLAGS:
-               mutex_lock(&mdev->state_lock);
                if (dev->if_flags & IFF_UP) {
-                       if ((dev->if_drv_flags & IFF_DRV_RUNNING) == 0)
+                       if ((dev->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+                               mutex_lock(&mdev->state_lock);
                                mlx4_en_start_port(dev);
-                       else
+                               mutex_unlock(&mdev->state_lock);
+                       } else {
                                mlx4_en_set_rx_mode(dev);
+                       }
                } else {
+                       mutex_lock(&mdev->state_lock);
                        if (dev->if_drv_flags & IFF_DRV_RUNNING) {
                                mlx4_en_stop_port(dev);
-                                if_link_state_change(dev, LINK_STATE_DOWN);
+                               if_link_state_change(dev, LINK_STATE_DOWN);
                        }
+                       mutex_unlock(&mdev->state_lock);
                }
-               mutex_unlock(&mdev->state_lock);
                break;
        case SIOCADDMULTI:
        case SIOCDELMULTI:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to