[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>
This commit is contained in:
committed by
David S. Miller
parent
d245407e75
commit
3e192beaf5
@@ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#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++;
|
||||||
|
Reference in New Issue
Block a user