Applied to branch-1.9. (I thought we'd had murmurhash around for longer, but it wasn't in branch-1.8.)
On Tue, Jan 22, 2013 at 01:47:51PM -0800, Ethan Jackson wrote: > It seems low risk to me. I'd like it to be there in case we end up > backporting something important which relies on mhash_finish(). > > Ethan > > On Tue, Jan 22, 2013 at 1:44 PM, Ben Pfaff <b...@nicira.com> wrote: > > Thanks. I pushed these to master. > > > > Do you think I should apply "hash: Correct implementation of > > mhash_finish()." to older branches? > > > > On Tue, Jan 22, 2013 at 01:37:07PM -0800, Ethan Jackson wrote: > >> Acked-by: Ethan Jackson <et...@nicira.com> > >> > >> Sorry it took a while to get around to this. Looks good, thanks. > >> > >> Ethan > >> > >> On Fri, Dec 14, 2012 at 4:33 PM, Ben Pfaff <b...@nicira.com> wrote: > >> > murmurhash includes an xor with the number of bytes hashed in its > >> > finishing > >> > step. Until now, we've only had murmurhash for full words, but an > >> > upcoming > >> > commit adds murmurhash for bytes, so the finishing function will need to > >> > take a count of bytes instead. > >> > > >> > Signed-off-by: Ben Pfaff <b...@nicira.com> > >> > --- > >> > lib/flow.c | 4 ++-- > >> > lib/hash.c | 2 +- > >> > lib/hash.h | 4 ++-- > >> > 3 files changed, 5 insertions(+), 5 deletions(-) > >> > > >> > diff --git a/lib/flow.c b/lib/flow.c > >> > index ce9e6c6..89488e5 100644 > >> > --- a/lib/flow.c > >> > +++ b/lib/flow.c > >> > @@ -1125,7 +1125,7 @@ miniflow_hash_in_minimask(const struct miniflow > >> > *flow, > >> > } > >> > } > >> > > >> > - return mhash_finish(hash, p - mask->masks.values); > >> > + return mhash_finish(hash, (p - mask->masks.values) * 4); > >> > } > >> > > >> > /* Returns a hash value for the bits of 'flow' where there are 1-bits in > >> > @@ -1154,7 +1154,7 @@ flow_hash_in_minimask(const struct flow *flow, > >> > const struct minimask *mask, > >> > } > >> > } > >> > > >> > - return mhash_finish(hash, p - mask->masks.values); > >> > + return mhash_finish(hash, (p - mask->masks.values) * 4); > >> > } > >> > > >> > /* Initializes 'dst' as a copy of 'src'. The caller must eventually > >> > free 'dst' > >> > diff --git a/lib/hash.c b/lib/hash.c > >> > index 41ad1bf..8cee5d0 100644 > >> > --- a/lib/hash.c > >> > +++ b/lib/hash.c > >> > @@ -115,5 +115,5 @@ mhash_words(const uint32_t p[], size_t n_words, > >> > uint32_t basis) > >> > for (i = 0; i < n_words; i++) { > >> > hash = mhash_add(hash, p[i]); > >> > } > >> > - return mhash_finish(hash, n_words); > >> > + return mhash_finish(hash, n_words * 4); > >> > } > >> > diff --git a/lib/hash.h b/lib/hash.h > >> > index 96866c4..d33924f 100644 > >> > --- a/lib/hash.h > >> > +++ b/lib/hash.h > >> > @@ -149,9 +149,9 @@ static inline uint32_t mhash_add(uint32_t hash, > >> > uint32_t data) > >> > return hash * 5 + 0xe6546b64; > >> > } > >> > > >> > -static inline uint32_t mhash_finish(uint32_t hash, size_t n) > >> > +static inline uint32_t mhash_finish(uint32_t hash, size_t n_bytes) > >> > { > >> > - hash ^= n * 4; > >> > + hash ^= n_bytes; > >> > hash ^= hash >> 16; > >> > hash *= 0x85ebca6b; > >> > hash ^= hash >> 13; > >> > -- > >> > 1.7.2.5 > >> > > >> > _______________________________________________ > >> > dev mailing list > >> > dev@openvswitch.org > >> > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev