Messages in this thread | | | Date | Thu, 23 Aug 2012 09:54:15 +1000 | From | Ryan Mallon <> | Subject | Re: [PATCH v3 01/17] hashtable: introduce a small and naive hashtable |
| |
On 23/08/12 04:01, Tejun Heo wrote: > Hello, Sasha. > > On Wed, Aug 22, 2012 at 04:26:56AM +0200, Sasha Levin wrote: >> +#define DEFINE_HASHTABLE(name, bits) \ >> + struct hlist_head name[HASH_SIZE(bits)]; > > Shouldn't this be something like the following? > > #define DEFINE_HASHTABLE(name, bits) \ > struct hlist_head name[HASH_SIZE(bits)] = \ > { [0 ... HASH_SIZE(bits) - 1] = HLIST_HEAD_INIT }; > > Also, given that the declaration isn't non-trivial, you'll probably > want a matching DECLARE_HASHTABLE() macro too. > >> +/* Use hash_32 when possible to allow for fast 32bit hashing in 64bit kernels. */ >> +#define hash_min(val, bits) ((sizeof(val)==4) ? hash_32((val), (bits)) : hash_long((val), (bits))) > > Why is the branching condition sizeof(val) == 4 instead of <= 4? > Also, no biggie but why isn't this macro in caps?
It should probably use gcc's statement expression extensions to prevent side-effect issues with the arguments:
#define hash_min ({ \ sizeof(val) <= 4 ? \ hash_32(val, bits) : \ hash_long(val, bits)); \ })
~Ryan
| |