Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 May 2009 01:54:26 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r192869 - head/sys/dev/xen/netfront
Message-ID:  <200905270154.n4R1sQEb080315@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Wed May 27 01:54:26 2009
New Revision: 192869
URL: http://svn.freebsd.org/changeset/base/192869

Log:
  Flesh out some inline documentation which hopefully reflect the intended
  reality of these functions.

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 01:45:23 2009	(r192868)
+++ head/sys/dev/xen/netfront/netfront.c	Wed May 27 01:54:26 2009	(r192869)
@@ -685,6 +685,23 @@ xn_free_tx_ring(struct netfront_info *sc
 #endif
 }
 
+/*
+ * Do some brief math on the number of descriptors available to
+ * determine how many slots are available.
+ *
+ * Firstly - wouldn't something with RING_FREE_REQUESTS() be more applicable?
+ * Secondly - MAX_SKB_FRAGS is a Linux construct which may not apply here.
+ * Thirdly - it isn't used here anyway; the magic constant '24' is possibly
+ *   wrong?
+ * The "2" is presumably to ensure there are also enough slots available for
+ * the ring entries used for "options" (eg, the TSO entry before a packet
+ * is queued); I'm not sure why its 2 and not 1. Perhaps to make sure there's
+ * a "free" node in the tx mbuf list (node 0) to represent the freelist?
+ *
+ * This only figures out whether any xenbus ring descriptors are available;
+ * it doesn't at all reflect how many tx mbuf ring descriptors are also
+ * available.
+ */
 static inline int
 netfront_tx_slot_available(struct netfront_info *np)
 {
@@ -1389,6 +1406,12 @@ xn_start_locked(struct ifnet *ifp) 
 		if (m_head == NULL) 
 			break;
 		
+		/*
+		 * netfront_tx_slot_available() tries to do some math to
+		 * ensure that there'll be enough xenbus ring slots available
+		 * for the maximum number of packet fragments (and a couple more
+		 * for what I guess are TSO and other ring entry items.)
+		 */
 		if (!netfront_tx_slot_available(sc)) {
 			IF_PREPEND(&ifp->if_snd, m_head);
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905270154.n4R1sQEb080315>