summaryrefslogtreecommitdiffstats
path: root/net/sched/sch_dsmark.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-01-21 02:21:45 -0800
committerDavid S. Miller <davem@davemloft.net>2008-01-28 15:08:39 -0800
commit5b0ac72bc5fdda9634fb07db4cb0237fa9b6df68 (patch)
tree26db7718b56ea492e25a5c9321f5669020bc7ea6 /net/sched/sch_dsmark.c
parent81da99ed71254a08d9a0bce46c258c1e15ac3948 (diff)
downloadlinux-5b0ac72bc5fdda9634fb07db4cb0237fa9b6df68.tar.gz
linux-5b0ac72bc5fdda9634fb07db4cb0237fa9b6df68.tar.bz2
linux-5b0ac72bc5fdda9634fb07db4cb0237fa9b6df68.zip
[PKT_SCHED] dsmark: Use hweight32() instead of convoluted loop.
Based upon a patch by Stephen Hemminger and suggestions from Patrick McHardy. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_dsmark.c')
-rw-r--r--net/sched/sch_dsmark.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
index a9732aef2ca1..d96eaf0aa6b8 100644
--- a/net/sched/sch_dsmark.c
+++ b/net/sched/sch_dsmark.c
@@ -10,6 +10,7 @@
#include <linux/errno.h>
#include <linux/skbuff.h>
#include <linux/rtnetlink.h>
+#include <linux/bitops.h>
#include <net/pkt_sched.h>
#include <net/dsfield.h>
#include <net/inet_ecn.h>
@@ -43,17 +44,6 @@ struct dsmark_qdisc_data {
int set_tc_index;
};
-static inline int dsmark_valid_indices(u16 indices)
-{
- while (indices != 1) {
- if (indices & 1)
- return 0;
- indices >>= 1;
- }
-
- return 1;
-}
-
static inline int dsmark_valid_index(struct dsmark_qdisc_data *p, u16 index)
{
return (index <= p->indices && index > 0);
@@ -348,7 +338,8 @@ static int dsmark_init(struct Qdisc *sch, struct rtattr *opt)
goto errout;
indices = RTA_GET_U16(tb[TCA_DSMARK_INDICES-1]);
- if (!indices || !dsmark_valid_indices(indices))
+
+ if (hweight32(indices) != 1)
goto errout;
if (tb[TCA_DSMARK_DEFAULT_INDEX-1])