svn commit: r204542 - head/sys/dev/bwn

Weongyo Jeong weongyo at FreeBSD.org
Mon Mar 1 23:51:14 UTC 2010


Author: weongyo
Date: Mon Mar  1 23:51:13 2010
New Revision: 204542
URL: http://svn.freebsd.org/changeset/base/204542

Log:
  calculates the integer square root if a positive integer X is larger
  than 256 instead of using sqrt_table.
  
  Reported by:	Joe Marcus Clarke <marcus at freebsd dot org>

Modified:
  head/sys/dev/bwn/if_bwn.c

Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c	Mon Mar  1 23:39:43 2010	(r204541)
+++ head/sys/dev/bwn/if_bwn.c	Mon Mar  1 23:51:13 2010	(r204542)
@@ -12846,7 +12846,6 @@ bwn_phy_lp_clear_deaf(struct bwn_mac *ma
 static unsigned int
 bwn_sqrt(struct bwn_mac *mac, unsigned int x)
 {
-	struct bwn_softc *sc = mac->mac_sc;
 	/* Table holding (10 * sqrt(x)) for x between 1 and 256. */
 	static uint8_t sqrt_table[256] = {
 		10, 14, 17, 20, 22, 24, 26, 28,
@@ -12886,9 +12885,11 @@ bwn_sqrt(struct bwn_mac *mac, unsigned i
 	if (x == 0)
 		return (0);
 	if (x >= 256) {
-		device_printf(sc->sc_dev,
-		    "out of bounds of the square-root table (%d)\n", x);
-		return (16);
+		unsigned int tmp;
+
+		for (tmp = 0; x >= (2 * tmp) + 1; x -= (2 * tmp++) + 1)
+			/* do nothing */ ;
+		return (tmp);
 	}
 	return (sqrt_table[x - 1] / 10);
 }


More information about the svn-src-head mailing list