diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 735096d42c1d..c29f3e1db3ca 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3335,7 +3335,7 @@ __be16 skb_network_protocol(struct sk_buff *skb, int *depth)  		type = eth->h_proto;  	} -	return __vlan_get_protocol(skb, type, depth); +	return vlan_get_protocol_and_depth(skb, type, depth);  }  /* openvswitch calls this on rx path, so we need a different check. @@ -4471,8 +4471,10 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,  		u32 next_cpu;  		u32 ident; -		/* First check into global flow table if there is a match */ -		ident = sock_flow_table->ents[hash & sock_flow_table->mask]; +		/* First check into global flow table if there is a match. +		 * This READ_ONCE() pairs with WRITE_ONCE() from rps_record_sock_flow(). +		 */ +		ident = READ_ONCE(sock_flow_table->ents[hash & sock_flow_table->mask]);  		if ((ident ^ hash) & ~rps_cpu_mask)  			goto try_rps; @@ -10541,7 +10543,7 @@ struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)  		return NULL;  	netdev_init_one_queue(dev, queue, NULL);  	RCU_INIT_POINTER(queue->qdisc, &noop_qdisc); -	queue->qdisc_sleeping = &noop_qdisc; +	RCU_INIT_POINTER(queue->qdisc_sleeping, &noop_qdisc);  	rcu_assign_pointer(dev->ingress_queue, queue);  #endif  	return queue;  | 
