Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -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++;