netdev
[Top] [All Lists]

Re: [RFC] dynamic hash table size & xor hash function for cls_fw

To: Thomas Graf <tgraf@xxxxxxx>
Subject: Re: [RFC] dynamic hash table size & xor hash function for cls_fw
From: jamal <hadi@xxxxxxxxxx>
Date: 07 Apr 2005 06:38:27 -0400
Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>, lark@xxxxxxxxxxxx, netdev <netdev@xxxxxxxxxxx>
In-reply-to: <20050407005519.GS26731@xxxxxxxxxxxxxx>
Organization: jamalopolous
References: <20050405213023.0256.LARK@xxxxxxxxxxxx> <1112717495.1076.22.camel@xxxxxxxxxxxxxxxx> <20050406143842.026B.LARK@xxxxxxxxxxxx> <20050406123036.GO26731@xxxxxxxxxxxxxx> <1112794459.1096.61.camel@xxxxxxxxxxxxxxxx> <20050406134502.GP26731@xxxxxxxxxxxxxx> <20050406141020.GQ26731@xxxxxxxxxxxxxx> <20050406111509.0462abcf.davem@xxxxxxxxxxxxx> <20050406183134.GR26731@xxxxxxxxxxxxxx> <20050407005519.GS26731@xxxxxxxxxxxxxx>
Reply-to: hadi@xxxxxxxxxx
Sender: netdev-bounce@xxxxxxxxxxx
On Wed, 2005-04-06 at 20:55, Thomas Graf wrote:

>  
>  static __inline__ int fw_hash(u32 handle)
>  {
> -     return handle&0xFF;
> +     if (HTSIZE == 4096)
> +             return ((handle >> 24) & 0xFFF) ^
> +                    ((handle >> 12) & 0xFFF) ^
> +                    (handle & 0xFFF);
> +     else if (HTSIZE == 2048)
> +             return ((handle >> 22) & 0x7FF) ^
> +                    ((handle >> 11) & 0x7FF) ^
> +                    (handle & 0x7FF);
> +     else if (HTSIZE == 1024)
> +             return ((handle >> 20) & 0x3FF) ^
> +                    ((handle >> 10) & 0x3FF) ^
> +                    (handle & 0x3FF);
> +     else if (HTSIZE == 512)
> +             return (handle >> 27) ^
> +                    ((handle >> 18) & 0x1FF) ^
> +                    ((handle >> 9) & 0x1FF) ^
> +                    (handle & 0x1FF);
> +     else if (HTSIZE == 256) {
> +             u8 *t = (u8 *) &handle;
> +             return t[0] ^ t[1] ^ t[2] ^ t[3];
> +     } else 
> +             return handle & (HTSIZE - 1);
>  }

Does HTSIZE change at runtime? How does migrating from one to other take
place? 
Also why not have a function pointer with a series of these being
separate instead of doing the if checks? BTW it does seem any one of
those hashes maybe sufficient, no? 

cheers,
jamal


<Prev in Thread] Current Thread [Next in Thread>