svn commit: r192876 - head/sys/dev/xen/netfront

Adrian Chadd adrian at FreeBSD.org
Wed May 27 06:04:39 UTC 2009


Author: adrian
Date: Wed May 27 06:04:38 2009
New Revision: 192876
URL: http://svn.freebsd.org/changeset/base/192876

Log:
  Enforce that there are actually enough xenbus TX ring descriptors available
  before attempting to queue the packet.

Modified:
  head/sys/dev/xen/netfront/netfront.c

Modified: head/sys/dev/xen/netfront/netfront.c
==============================================================================
--- head/sys/dev/xen/netfront/netfront.c	Wed May 27 05:37:04 2009	(r192875)
+++ head/sys/dev/xen/netfront/netfront.c	Wed May 27 06:04:38 2009	(r192876)
@@ -1478,10 +1478,20 @@ xn_start_locked(struct ifnet *ifp) 
 		}
 
 		/*
-		 * XXX TODO - make sure there's actually space available
-		 *  in the Xen TX ring for this rather than the hacky way
-		 * its currently done.
+		 * Make sure there's actually space available in the
+		 * Xen TX ring for this. Overcompensate for the possibility
+		 * of having a TCP offload fragment just in case for now
+		 * (the +1) rather than adding logic to accurately calculate
+		 * the required size.
 		 */
+		if (RING_FREE_REQUESTS(&sc->tx) < (nfrags + 1)) {
+			printf("xn_start_locked: free ring slots (%d) < (nfrags + 1) (%d); must be full!\n",
+			    (int) RING_FREE_REQUESTS(&sc->tx),
+			    (int) (nfrags + 1));
+			IF_PREPEND(&ifp->if_snd, m_head);
+			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+			break;
+		}
 
 		/*
 		 * Start packing the mbufs in this chain into


More information about the svn-src-all mailing list