svn commit: r300949 - head/sys/netpfil/ipfw
Don Lewis
truckman at FreeBSD.org
Mon May 30 21:41:41 UTC 2016
On 29 May, Bruce Evans wrote:
> On Sun, 29 May 2016, Don Lewis wrote:
>
>> Log:
>> Cast some expressions that multiply a long long constant by a
>> floating point constant to int64_t. This avoids the runtime
>> conversion of the the other operand in a set of comparisons from
>> int64_t to floating point and doing the comparisions in floating
>> point.
>>
>> Suggested by: lidl
>> Submitted by: Rasool Al-Saadi <ralsaadi at swin.edu.au>
>> MFC after: 2 weeks (with r300779)
>
> Compilers are still permitted to (and perhaps even required to)
> evaluate FP constant expressions at runtime (to get rounding and/or
> exception flags right). They probably don't in practice, but it is
> unclear what happens for -O0 and the rules for rounding are too hard
> to understand.
>
>> Modified: head/sys/netpfil/ipfw/dn_aqm_pie.c
>> ==============================================================================
>> --- head/sys/netpfil/ipfw/dn_aqm_pie.c Sun May 29 07:14:51 2016 (r300948)
>> +++ head/sys/netpfil/ipfw/dn_aqm_pie.c Sun May 29 07:23:56 2016 (r300949)
>> @@ -244,17 +244,17 @@ calculate_drop_prob(void *x)
>> p *= (PIE_MAX_PROB << 12) / AQM_TIME_1S;
>>
>> /* auto-tune drop probability */
>> - if (prob< PIE_MAX_PROB * 0.000001)
>> + 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;
>
> Why not just divide by integer powers of 10?
>
> This might not give a suitably monotonic/continuous scaling at the
> endpoints, but it is unclear if the FP gives that either even if we
> are more careful with the rounding mode.
>
> A table of endpoints could be used to get precise control. Then FP
> can be used more safely, since it is clear that constants in tables
> must be evaluated at compile time.
>
>> ...
>
> Similarly for all cases.
Thanks. I've passed this upstream.
More information about the svn-src-head
mailing list