ipv4: Avoid use of signed integers in fib_trie code.
GCC emits all kinds of crazy zero extensions when we go from signed int, to unsigned short, etc. etc. This transformation has to be legal because: 1) In tkey_extract_bits() in mask_pfx(), the values are used to perform shifts, on which negative values are undefined by C. 2) In fib_table_lookup() we perform comparisons with unsigned values, constants, and additions. None of which should encounter negative values. Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
3c7bd1a140
commit
3b004569d8
|
@ -217,12 +217,12 @@ static inline int tnode_child_length(const struct tnode *tn)
|
||||||
return 1 << tn->bits;
|
return 1 << tn->bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline t_key mask_pfx(t_key k, unsigned short l)
|
static inline t_key mask_pfx(t_key k, unsigned int l)
|
||||||
{
|
{
|
||||||
return (l == 0) ? 0 : k >> (KEYLENGTH-l) << (KEYLENGTH-l);
|
return (l == 0) ? 0 : k >> (KEYLENGTH-l) << (KEYLENGTH-l);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline t_key tkey_extract_bits(t_key a, int offset, int bits)
|
static inline t_key tkey_extract_bits(t_key a, unsigned int offset, unsigned int bits)
|
||||||
{
|
{
|
||||||
if (offset < KEYLENGTH)
|
if (offset < KEYLENGTH)
|
||||||
return ((t_key)(a << offset)) >> (KEYLENGTH - bits);
|
return ((t_key)(a << offset)) >> (KEYLENGTH - bits);
|
||||||
|
@ -1378,11 +1378,11 @@ int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
|
||||||
int ret;
|
int ret;
|
||||||
struct rt_trie_node *n;
|
struct rt_trie_node *n;
|
||||||
struct tnode *pn;
|
struct tnode *pn;
|
||||||
int pos, bits;
|
unsigned int pos, bits;
|
||||||
t_key key = ntohl(flp->fl4_dst);
|
t_key key = ntohl(flp->fl4_dst);
|
||||||
int chopped_off;
|
unsigned int chopped_off;
|
||||||
t_key cindex = 0;
|
t_key cindex = 0;
|
||||||
int current_prefix_length = KEYLENGTH;
|
unsigned int current_prefix_length = KEYLENGTH;
|
||||||
struct tnode *cn;
|
struct tnode *cn;
|
||||||
t_key pref_mismatch;
|
t_key pref_mismatch;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue