Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Jul 2012 08:52:33 +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: r238884 - head/sys/dev/ath
Message-ID:  <201207290852.q6T8qXNq028831@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Sun Jul 29 08:52:32 2012
New Revision: 238884
URL: http://svn.freebsd.org/changeset/base/238884

Log:
  Fix breakage introduced in r238824 - correctly calculate the descriptor
  wrapping.
  
  The previous code was only wrapping descriptor "block" boundaries rather
  than individual descriptors.  It sounds equivalent but it isn't.
  
  r238824 changed the descriptor allocation to enforce that an individual
  descriptor doesn't wrap a 4KiB boundary rather than the whole block
  of descriptors.  Eg, for TX descriptors, they're allocated in blocks
  of 10 descriptors for each ath_buf (for scatter/gather DMA.)

Modified:
  head/sys/dev/ath/if_ath.c

Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c	Sun Jul 29 06:34:45 2012	(r238883)
+++ head/sys/dev/ath/if_ath.c	Sun Jul 29 08:52:32 2012	(r238884)
@@ -2914,7 +2914,7 @@ ath_descdma_setup(struct ath_softc *sc,
 			 * in the descriptor.
 			 */
 			 if (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr,
-			     dd->dd_descsize * ndesc)) {
+			     dd->dd_descsize)) {
 				/* Start at the next page */
 				ds += 0x1000 - (bf->bf_daddr & 0xFFF);
 				bf->bf_desc = (struct ath_desc *) ds;
@@ -2932,6 +2932,12 @@ ath_descdma_setup(struct ath_softc *sc,
 		bf->bf_lastds = bf->bf_desc;	/* Just an initial value */
 		TAILQ_INSERT_TAIL(head, bf, bf_list);
 	}
+
+	/*
+	 * XXX TODO: ensure that ds doesn't overflow the descriptor
+	 * allocation otherwise weird stuff will occur and crash your
+	 * machine.
+	 */
 	return 0;
 	/* XXX this should likely just call ath_descdma_cleanup() */
 fail3:



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