diff options
author | Thomas Graf <tgraf@suug.ch> | 2005-08-21 04:26:30 +0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-30 03:03:03 +0400 |
commit | 3e192beaf5ef260a31e84a12c0a04eff2eec02ab (patch) | |
tree | f3a0e434a460a8abf50329ed4b99eea037fe65e0 /net/ipv4/ip_input.c | |
parent | d245407e758b14c464c609b632873f85709360c7 (diff) | |
download | linux-3e192beaf5ef260a31e84a12c0a04eff2eec02ab.tar.xz |
[IPV4]: Avoid common branch mispredictions in ip_rcv_finish()
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_input.c')
-rw-r--r-- | net/ipv4/ip_input.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 48e4ddc1e337..7e78095baef1 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -333,16 +333,16 @@ drop: static inline int ip_rcv_finish(struct sk_buff *skb) { - struct net_device *dev = skb->dev; struct iphdr *iph = skb->nh.iph; - int err; /* * Initialise the virtual path cache for the packet. It describes * how the packet travels inside Linux networking. */ - if (skb->dst == NULL) { - if ((err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) { + if (likely(skb->dst == NULL)) { + int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, + skb->dev); + if (unlikely(err)) { if (err == -EHOSTUNREACH) IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); goto drop; @@ -350,7 +350,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb) } #ifdef CONFIG_NET_CLS_ROUTE - if (skb->dst->tclassid) { + if (unlikely(skb->dst->tclassid)) { struct ip_rt_acct *st = ip_rt_acct + 256*smp_processor_id(); u32 idx = skb->dst->tclassid; st[idx&0xFF].o_packets++; |