Author: truckman
Date: Wed Jun  1 20:04:24 2016
New Revision: 301162
URL: https://svnweb.freebsd.org/changeset/base/301162

Log:
  Replace constant expressions that contain multiplications by
  fractional floating point values with integer divides.  This will
  eliminate any chance that the compiler will generate code to evaluate
  the expression using floating point at runtime.
  
  Suggested by: bde
  Submitted by: Rasool Al-Saadi <ralsa...@swin.edu.au>
  MFC after:    8 days (with r300779 and r300949)

Modified:
  head/sys/netpfil/ipfw/dn_aqm_pie.c
  head/sys/netpfil/ipfw/dn_aqm_pie.h
  head/sys/netpfil/ipfw/dn_sched_fq_pie.c

Modified: head/sys/netpfil/ipfw/dn_aqm_pie.c
==============================================================================
--- head/sys/netpfil/ipfw/dn_aqm_pie.c  Wed Jun  1 19:54:17 2016        
(r301161)
+++ head/sys/netpfil/ipfw/dn_aqm_pie.c  Wed Jun  1 20:04:24 2016        
(r301162)
@@ -244,20 +244,20 @@ calculate_drop_prob(void *x)
        p *= (PIE_MAX_PROB << 12) / AQM_TIME_1S;
 
        /* auto-tune drop probability */
-       if (prob < (int64_t)(PIE_MAX_PROB * 0.000001))
-               p >>= 11 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.00001))
-               p >>= 9 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.0001))
-               p >>= 7 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.001))
-               p >>= 5 + PIE_FIX_POINT_BITS+12;
-       else    if (prob < (int64_t)(PIE_MAX_PROB * 0.01))
-               p >>= 3 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.1))
-               p >>= 1 + PIE_FIX_POINT_BITS+12;
+       if (prob < (PIE_MAX_PROB / 1000000)) /* 0.000001 */
+               p >>= 11 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 100000)) /* 0.00001 */
+               p >>= 9 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 10000)) /* 0.0001 */
+               p >>= 7 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 1000)) /* 0.001 */
+               p >>= 5 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 100)) /* 0.01 */
+               p >>= 3 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 10)) /* 0.1 */
+               p >>= 1 + PIE_FIX_POINT_BITS + 12;
        else
-               p >>= PIE_FIX_POINT_BITS+12;
+               p >>= PIE_FIX_POINT_BITS + 12;
 
        oldprob = prob;
 

Modified: head/sys/netpfil/ipfw/dn_aqm_pie.h
==============================================================================
--- head/sys/netpfil/ipfw/dn_aqm_pie.h  Wed Jun  1 19:54:17 2016        
(r301161)
+++ head/sys/netpfil/ipfw/dn_aqm_pie.h  Wed Jun  1 20:04:24 2016        
(r301162)
@@ -132,11 +132,13 @@ drop_early(struct pie_status *pst, uint3
         * if accu_prob < 0.85 -> enqueue
         * if accu_prob>8.5 ->drop
         * between 0.85 and 8.5 || !De-randomize --> drop on prob
+        * 
+        * (0.85 = 17/20 ,8.5 = 17/2)
         */
        if (pprms->flags & PIE_DERAND_ENABLED) {
-               if(pst->accu_prob < (uint64_t) (PIE_MAX_PROB * 0.85))
+               if(pst->accu_prob < (uint64_t) (PIE_MAX_PROB * 17 / 20))
                        return ENQUE;
-                if( pst->accu_prob >= (uint64_t) (PIE_MAX_PROB * 8.5))
+                if( pst->accu_prob >= (uint64_t) (PIE_MAX_PROB * 17 / 2))
                        return DROP;
        }
 

Modified: head/sys/netpfil/ipfw/dn_sched_fq_pie.c
==============================================================================
--- head/sys/netpfil/ipfw/dn_sched_fq_pie.c     Wed Jun  1 19:54:17 2016        
(r301161)
+++ head/sys/netpfil/ipfw/dn_sched_fq_pie.c     Wed Jun  1 20:04:24 2016        
(r301162)
@@ -407,20 +407,20 @@ fq_calculate_drop_prob(void *x)
        p *= (PIE_MAX_PROB << 12) / AQM_TIME_1S;
 
        /* auto-tune drop probability */
-       if (prob < (int64_t)(PIE_MAX_PROB * 0.000001))
-               p >>= 11 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.00001))
-               p >>= 9 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.0001))
-               p >>= 7 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.001))
-               p >>= 5 + PIE_FIX_POINT_BITS+12;
-       else    if (prob < (int64_t)(PIE_MAX_PROB * 0.01))
-               p >>= 3 + PIE_FIX_POINT_BITS+12;
-       else if (prob < (int64_t)(PIE_MAX_PROB * 0.1))
-               p >>= 1 + PIE_FIX_POINT_BITS+12;
+       if (prob < (PIE_MAX_PROB / 1000000)) /* 0.000001 */
+               p >>= 11 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 100000)) /* 0.00001 */
+               p >>= 9 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 10000)) /* 0.0001 */
+               p >>= 7 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 1000)) /* 0.001 */
+               p >>= 5 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 100)) /* 0.01 */
+               p >>= 3 + PIE_FIX_POINT_BITS + 12;
+       else if (prob < (PIE_MAX_PROB / 10)) /* 0.1 */
+               p >>= 1 + PIE_FIX_POINT_BITS + 12;
        else
-               p >>= PIE_FIX_POINT_BITS+12;
+               p >>= PIE_FIX_POINT_BITS + 12;
 
        oldprob = prob;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to