Commit 3e192bea authored by Thomas Graf's avatar Thomas Graf Committed by David S. Miller

[IPV4]: Avoid common branch mispredictions in ip_rcv_finish()

Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d245407e
...@@ -333,16 +333,16 @@ drop: ...@@ -333,16 +333,16 @@ drop:
static inline int ip_rcv_finish(struct sk_buff *skb) static inline int ip_rcv_finish(struct sk_buff *skb)
{ {
struct net_device *dev = skb->dev;
struct iphdr *iph = skb->nh.iph; struct iphdr *iph = skb->nh.iph;
int err;
/* /*
* Initialise the virtual path cache for the packet. It describes * Initialise the virtual path cache for the packet. It describes
* how the packet travels inside Linux networking. * how the packet travels inside Linux networking.
*/ */
if (skb->dst == NULL) { if (likely(skb->dst == NULL)) {
if ((err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) { int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos,
skb->dev);
if (unlikely(err)) {
if (err == -EHOSTUNREACH) if (err == -EHOSTUNREACH)
IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS);
goto drop; goto drop;
...@@ -350,7 +350,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb) ...@@ -350,7 +350,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
} }
#ifdef CONFIG_NET_CLS_ROUTE #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(); struct ip_rt_acct *st = ip_rt_acct + 256*smp_processor_id();
u32 idx = skb->dst->tclassid; u32 idx = skb->dst->tclassid;
st[idx&0xFF].o_packets++; st[idx&0xFF].o_packets++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment