svn commit: r237787 - head/sys/net

John Baldwin jhb at FreeBSD.org
Fri Jun 29 15:21:35 UTC 2012


Author: jhb
Date: Fri Jun 29 15:21:34 2012
New Revision: 237787
URL: http://svn.freebsd.org/changeset/base/237787

Log:
  Hold GIF_LOCK() for almost all of gif_start().  It is required to be held
  across in_gif_output() and in6_gif_output() anyway, and once it is held
  across those it might as well be held for the entire loop.  This simplifies
  the code and removes the need for the custom IFF_GIF_WANTED flag (which
  belonged in the softc and not as an IFF_* flag anyway).
  
  Tested by:	Vincent Hoffman  vince  unsane co uk

Modified:
  head/sys/net/if.h
  head/sys/net/if_gif.c

Modified: head/sys/net/if.h
==============================================================================
--- head/sys/net/if.h	Fri Jun 29 15:10:54 2012	(r237786)
+++ head/sys/net/if.h	Fri Jun 29 15:21:34 2012	(r237787)
@@ -153,7 +153,6 @@ struct if_data {
 #define	IFF_STATICARP	0x80000		/* (n) static ARP */
 #define	IFF_DYING	0x200000	/* (n) interface is winding down */
 #define	IFF_RENAMING	0x400000	/* (n) interface is being renamed */
-#define IFF_GIF_WANTED	0x1000000	/* (n) The gif tunnel is wanted */
 /*
  * Old names for driver flags so that user space tools can continue to use
  * the old (portable) names.

Modified: head/sys/net/if_gif.c
==============================================================================
--- head/sys/net/if_gif.c	Fri Jun 29 15:10:54 2012	(r237786)
+++ head/sys/net/if_gif.c	Fri Jun 29 15:21:34 2012	(r237787)
@@ -359,15 +359,7 @@ gif_start(struct ifnet *ifp)
 
 	sc = ifp->if_softc;
 	GIF_LOCK(sc);
-	if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
-		/* Already active */
-		ifp->if_drv_flags |= IFF_GIF_WANTED;
-		GIF_UNLOCK(sc);
-		return;
-	}
 	ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-	GIF_UNLOCK(sc);
-keep_going:
 	while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
 
 		IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
@@ -424,16 +416,6 @@ keep_going:
 			ifp->if_oerrors++;
 
 	}
-	GIF_LOCK(sc);
-	if (ifp->if_drv_flags & IFF_GIF_WANTED) {
-		/* Someone did a start while
-		 * we were unlocked and processing
-		 * lets clear the flag and try again.
-		 */
-		ifp->if_drv_flags &= ~IFF_GIF_WANTED;
-		GIF_UNLOCK(sc);
-		goto keep_going;
-	}
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 	GIF_UNLOCK(sc);
 	return;


More information about the svn-src-all mailing list