On Apr 24, 2014, at 5:15 PM, Ethan Jackson <[email protected]> wrote:
> In the commit message s/suppoort/support/
>
> Out of curiosity why replace the miniflow_get inline functions with macros?
I got tired of writing (or rather copy&pasting) the “offset of(struct flow,
<FIELD>)”. The macro can take the field name as an argument instead.
>
>> + /* Separate loops for better optimization. */
>
> Why do we need separate loops? You think it somehow improves the
> branch predictor or something? Does this actually help? It smells
> like premature optimization.
>
There is the qualitative difference that forcing the map to be a variable and
sharing the loop results in much more code for examining the bits one at a
time. Keeping it separate makes the map a compile-time constant in each loop,
so that most of the bit arithmetic can be done at the compile time instead.
>> + hash = mhash_add(hash, saddr[0]);
>> + hash = mhash_add(hash, saddr[1]);
>> + hash = mhash_add(hash, saddr[2]);
>> + hash = mhash_add(hash, saddr[3]);
>> + hash = mhash_add(hash, daddr[0]);
>> + hash = mhash_add(hash, daddr[1]);
>> + hash = mhash_add(hash, daddr[2]);
>> + hash = mhash_add(hash, daddr[3]);
>
> Maybe use a loop?
>
OK, done, like this:
+ int ofs = offsetof(struct flow, ipv6_src) / 4;
+ int end = ofs + 2 * sizeof flow->ipv6_src / 4;
+
+ while (ofs < end) {
+ hash = mhash_add(hash, flow_u32[ofs++]);
+ }
with a preceding
+BUILD_ASSERT_DECL(offsetof(struct flow, ipv6_src) + 16
+ == offsetof(struct flow, ipv6_dst));
> Acked-by: Ethan Jackson <[email protected]>
Thanks for the review, will push in a minute.
Jarno
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev