diff options
author | Don Lewis <truckman@FreeBSD.org> | 2016-06-01 20:04:24 +0000 |
---|---|---|
committer | Don Lewis <truckman@FreeBSD.org> | 2016-06-01 20:04:24 +0000 |
commit | d6736547968acaec33ec1a634347581c9a1b14d8 (patch) | |
tree | a7a0ac14595fcb3872f488ce10d64b46d0506657 /sys | |
parent | dc3be4f8724798b4f935f5115aa3216d3480d54d (diff) | |
download | src-d6736547968acaec33ec1a634347581c9a1b14d8.tar.gz src-d6736547968acaec33ec1a634347581c9a1b14d8.zip |
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 <ralsaadi@swin.edu.au>
MFC after: 8 days (with r300779 and r300949)
Notes
Notes:
svn path=/head/; revision=301162
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netpfil/ipfw/dn_aqm_pie.c | 26 | ||||
-rw-r--r-- | sys/netpfil/ipfw/dn_aqm_pie.h | 6 | ||||
-rw-r--r-- | sys/netpfil/ipfw/dn_sched_fq_pie.c | 26 |
3 files changed, 30 insertions, 28 deletions
diff --git a/sys/netpfil/ipfw/dn_aqm_pie.c b/sys/netpfil/ipfw/dn_aqm_pie.c index eedbb519b339..c4b9401d0e0a 100644 --- a/sys/netpfil/ipfw/dn_aqm_pie.c +++ b/sys/netpfil/ipfw/dn_aqm_pie.c @@ -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; diff --git a/sys/netpfil/ipfw/dn_aqm_pie.h b/sys/netpfil/ipfw/dn_aqm_pie.h index b0450772c17a..aa2fcebaa525 100644 --- a/sys/netpfil/ipfw/dn_aqm_pie.h +++ b/sys/netpfil/ipfw/dn_aqm_pie.h @@ -132,11 +132,13 @@ drop_early(struct pie_status *pst, uint32_t qlen) * 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; } diff --git a/sys/netpfil/ipfw/dn_sched_fq_pie.c b/sys/netpfil/ipfw/dn_sched_fq_pie.c index 4d25db499e30..2883cf8e5b76 100644 --- a/sys/netpfil/ipfw/dn_sched_fq_pie.c +++ b/sys/netpfil/ipfw/dn_sched_fq_pie.c @@ -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; |