Skip to content

Commit

Permalink
[PKT_SCHED] CLS_U32: Use ffs() instead of C code on hash mask to get …
Browse files Browse the repository at this point in the history
…first set bit.

Computing the rank of the first set bit in the hash mask (for using later
in u32_hash_fold()) was done with plain C code. Using ffs() instead makes
the code more readable and improves performance (since ffs() is better
optimized in assembler).

Using the conditional operator on hash mask before applying ntohl() also
saves one ntohl() call if mask is 0.

Signed-off-by: Radu Rendec <radu.rendec@ines.ro>
Signed-off-by: Jarek Poplawski <jarkao2@o2.pl>
Acked-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Radu Rendec authored and David S. Miller committed Nov 11, 2007
1 parent 78608ba commit b226801
Showing 1 changed file with 1 addition and 11 deletions.
12 changes: 1 addition & 11 deletions net/sched/cls_u32.c
Original file line number Diff line number Diff line change
Expand Up @@ -613,17 +613,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle,
memcpy(&n->sel, s, sizeof(*s) + s->nkeys*sizeof(struct tc_u32_key));
n->ht_up = ht;
n->handle = handle;
{
u8 i = 0;
u32 mask = ntohl(s->hmask);
if (mask) {
while (!(mask & 1)) {
i++;
mask>>=1;
}
}
n->fshift = i;
}
n->fshift = s->hmask ? ffs(ntohl(s->hmask)) - 1 : 0;

#ifdef CONFIG_CLS_U32_MARK
if (tb[TCA_U32_MARK-1]) {
Expand Down

0 comments on commit b226801

Please sign in to comment.