Jarek Poplawski wrote, On 12/14/2007 09:59 PM: > Eric Dumazet wrote, On 12/14/2007 12:09 PM: > ... > >> + /* >> + * Instead of returning hash % ht->cfg.size (implying a divide) >> + * we return the high 32 bits of the (hash * ht->cfg.size) that will >> + * give results between [0 and cfg.size-1] and same hash distribution, >> + * but using a multiply, less expensive than a divide >> + */ >> + return ((u64)hash * ht->cfg.size) >> 32; > > Are we sure of the same hash distribution? Probably I miss something, > but: if this 'hash' is well distributed on 32 bits, and ht->cfg.size > is smaller than 32 bits, e.g. 256 (8 bits), then this multiplication > moves to the higher 32 of u64 only max. 8 bits of the most significant > byte, and the other three bytes are never used, while division is > always affected by all four bytes... OOPS! So, I've missed this division here is also affected by only one byte, but from the other side - so, almost the same... It seems this could have been replaced with masking from the beginning... Sorry, Jarek P. - To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html