Signed-off-by: He Zhe <zhe...@windriver.com>
---
arch/arm/net/bpf_jit_32.c | 4 ++--
arch/powerpc/net/bpf_jit_comp.c | 4 ++--
arch/s390/net/bpf_jit_comp.c | 8 ++++----
arch/sparc/net/bpf_jit_comp.c | 2 +-
include/linux/skbuff.h | 28 ++++++++++++++--------------
include/net/sock.h | 4 ++--
include/trace/events/net.h | 12 ++++++------
net/core/dev.c | 13 ++++++-------
net/core/filter.c | 4 ++--
net/core/flow_dissector.c | 10 +++++-----
net/packet/af_packet.c | 3 ++-
11 files changed, 46 insertions(+), 46 deletions(-)
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
index 6f879c3..e72ff51 100644
--- a/arch/arm/net/bpf_jit_32.c
+++ b/arch/arm/net/bpf_jit_32.c
@@ -825,8 +825,8 @@ b_epilogue:
break;
case BPF_S_ANC_RXHASH:
ctx->seen |= SEEN_SKB;
- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4);
- off = offsetof(struct sk_buff, hash);
+ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, rxhash) != 4);
+ off = offsetof(struct sk_buff, rxhash);
emit(ARM_LDR_I(r_A, r_skb, off), ctx);
break;
case BPF_S_ANC_VLAN_TAG:
diff --git a/arch/powerpc/net/bpf_jit_comp.c
b/arch/powerpc/net/bpf_jit_comp.c
index 808ce1c..c0c5fcb 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -390,9 +390,9 @@ static int bpf_jit_build_body(struct sk_filter
*fp, u32 *image,
mark));
break;
case BPF_S_ANC_RXHASH:
- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4);
+ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, rxhash) != 4);
PPC_LWZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,
- hash));
+ rxhash));
break;
case BPF_S_ANC_VLAN_TAG:
case BPF_S_ANC_VLAN_TAG_PRESENT:
diff --git a/arch/s390/net/bpf_jit_comp.c
b/arch/s390/net/bpf_jit_comp.c
index e9f8fa9..44f224b 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -736,10 +736,10 @@ call_fn: /* lg %r1,<d(function)>(%r13) */
/* icm %r5,3,<d(type)>(%r1) */
EMIT4_DISP(0xbf531000, offsetof(struct net_device, type));
break;
- case BPF_S_ANC_RXHASH: /* A = skb->hash */
- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4);
- /* l %r5,<d(hash)>(%r2) */
- EMIT4_DISP(0x58502000, offsetof(struct sk_buff, hash));
+ case BPF_S_ANC_RXHASH: /* A = skb->rxhash */
+ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, rxhash) != 4);
+ /* l %r5,<d(rxhash)>(%r2) */
+ EMIT4_DISP(0x58502000, offsetof(struct sk_buff, rxhash));
break;
case BPF_S_ANC_VLAN_TAG:
case BPF_S_ANC_VLAN_TAG_PRESENT:
diff --git a/arch/sparc/net/bpf_jit_comp.c
b/arch/sparc/net/bpf_jit_comp.c
index 49cee4a..b85e223 100644
--- a/arch/sparc/net/bpf_jit_comp.c
+++ b/arch/sparc/net/bpf_jit_comp.c
@@ -618,7 +618,7 @@ void bpf_jit_compile(struct sk_filter *fp)
emit_load16(r_A, struct net_device, type, r_A);
break;
case BPF_S_ANC_RXHASH:
- emit_skb_load32(hash, r_A);
+ emit_skb_load32(rxhash, r_A);
break;
case BPF_S_ANC_VLAN_TAG:
case BPF_S_ANC_VLAN_TAG_PRESENT:
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 69d3749..15ede6a 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -392,11 +392,11 @@ typedef unsigned char *sk_buff_data_t;
* @skb_iif: ifindex of device we arrived on
* @tc_index: Traffic control index
* @tc_verd: traffic control verdict
- * @hash: the packet hash
+ * @rxhash: the packet hash computed on receive
* @queue_mapping: Queue mapping for multiqueue devices
* @ndisc_nodetype: router type (from link layer)
* @ooo_okay: allow the mapping of a socket to a queue to be
changed
- * @l4_hash: indicate hash is a canonical 4-tuple hash over
transport
+ * @l4_rxhash: indicate rxhash is a canonical 4-tuple hash over
transport
* ports.
* @wifi_acked_valid: wifi_acked was set
* @wifi_acked: whether frame was acked on wifi or not
@@ -482,7 +482,7 @@ struct sk_buff {
int skb_iif;
- __u32 hash;
+ __u32 rxhash;
__be16 vlan_proto;
__u16 vlan_tci;
@@ -501,7 +501,7 @@ struct sk_buff {
#endif
__u8 pfmemalloc:1;
__u8 ooo_okay:1;
- __u8 l4_hash:1;
+ __u8 l4_rxhash:1;
__u8 wifi_acked_valid:1;
__u8 wifi_acked:1;
__u8 no_fcs:1;
@@ -758,40 +758,40 @@ enum pkt_hash_types {
static inline void
skb_set_hash(struct sk_buff *skb, __u32 hash, enum pkt_hash_types
type)
{
- skb->l4_hash = (type == PKT_HASH_TYPE_L4);
- skb->hash = hash;
+ skb->l4_rxhash = (type == PKT_HASH_TYPE_L4);
+ skb->rxhash = hash;
}
void __skb_get_hash(struct sk_buff *skb);
static inline __u32 skb_get_hash(struct sk_buff *skb)
{
- if (!skb->l4_hash)
+ if (!skb->l4_rxhash)
__skb_get_hash(skb);
- return skb->hash;
+ return skb->rxhash;
}
static inline __u32 skb_get_hash_raw(const struct sk_buff *skb)
{
- return skb->hash;
+ return skb->rxhash;
}
static inline void skb_clear_hash(struct sk_buff *skb)
{
- skb->hash = 0;
- skb->l4_hash = 0;
+ skb->rxhash = 0;
+ skb->l4_rxhash = 0;
}
static inline void skb_clear_hash_if_not_l4(struct sk_buff *skb)
{
- if (!skb->l4_hash)
+ if (!skb->l4_rxhash)
skb_clear_hash(skb);
}
static inline void skb_copy_hash(struct sk_buff *to, const struct
sk_buff *from)
{
- to->hash = from->hash;
- to->l4_hash = from->l4_hash;
+ to->rxhash = from->rxhash;
+ to->l4_rxhash = from->l4_rxhash;
};
#ifdef NET_SKBUFF_DATA_USES_OFFSET
diff --git a/include/net/sock.h b/include/net/sock.h
index 547e4e5..e2a51ab 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -862,9 +862,9 @@ static inline void sock_rps_save_rxhash(struct
sock *sk,
const struct sk_buff *skb)
{
#ifdef CONFIG_RPS
- if (unlikely(sk->sk_rxhash != skb->hash)) {
+ if (unlikely(sk->sk_rxhash != skb->rxhash)) {
sock_rps_reset_flow(sk);
- sk->sk_rxhash = skb->hash;
+ sk->sk_rxhash = skb->rxhash;
}
#endif
}
diff --git a/include/trace/events/net.h b/include/trace/events/net.h
index 1de256b..a34f27b 100644
--- a/include/trace/events/net.h
+++ b/include/trace/events/net.h
@@ -153,8 +153,8 @@ DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
__field( u16, vlan_tci )
__field( u16, protocol )
__field( u8, ip_summed )
- __field( u32, hash )
- __field( bool, l4_hash )
+ __field( u32, rxhash )
+ __field( bool, l4_rxhash )
__field( unsigned int, len )
__field( unsigned int, data_len )
__field( unsigned int, truesize )
@@ -179,8 +179,8 @@ DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
__entry->vlan_tci = vlan_tx_tag_get(skb);
__entry->protocol = ntohs(skb->protocol);
__entry->ip_summed = skb->ip_summed;
- __entry->hash = skb->hash;
- __entry->l4_hash = skb->l4_hash;
+ __entry->rxhash = skb->rxhash;
+ __entry->l4_rxhash = skb->l4_rxhash;
__entry->len = skb->len;
__entry->data_len = skb->data_len;
__entry->truesize = skb->truesize;
@@ -191,11 +191,11 @@
DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
__entry->gso_type = skb_shinfo(skb)->gso_type;
),
- TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p
vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x
ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u
mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d
gso_type=%#x",
+ TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p
vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x
ip_summed=%d rxhash=0x%08x l4_rxhash=%d len=%u data_len=%u
truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d
gso_type=%#x",
__get_str(name), __entry->napi_id,
__entry->queue_mapping,
__entry->skbaddr, __entry->vlan_tagged,
__entry->vlan_proto,
__entry->vlan_tci, __entry->protocol, __entry->ip_summed,
- __entry->hash, __entry->l4_hash, __entry->len,
+ __entry->rxhash, __entry->l4_rxhash, __entry->len,
__entry->data_len, __entry->truesize,
__entry->mac_header_valid, __entry->mac_header,
__entry->nr_frags, __entry->gso_size, __entry->gso_type)
diff --git a/net/core/dev.c b/net/core/dev.c
index 20247e5..37bddf7 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2964,7 +2964,7 @@ set_rps_cpu(struct net_device *dev, struct
sk_buff *skb,
flow_table = rcu_dereference(rxqueue->rps_flow_table);
if (!flow_table)
goto out;
- flow_id = skb_get_hash(skb) & flow_table->mask;
+ flow_id = skb->rxhash & flow_table->mask;
rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb,
rxq_index, flow_id);
if (rc < 0)
@@ -2998,7 +2998,6 @@ static int get_rps_cpu(struct net_device *dev,
struct sk_buff *skb,
struct rps_sock_flow_table *sock_flow_table;
int cpu = -1;
u16 tcpu;
- u32 hash;
if (skb_rx_queue_recorded(skb)) {
u16 index = skb_get_rx_queue(skb);
@@ -3027,8 +3026,7 @@ static int get_rps_cpu(struct net_device *dev,
struct sk_buff *skb,
}
skb_reset_network_header(skb);
- hash = skb_get_hash(skb);
- if (!hash)
+ if (!skb_get_hash(skb))
goto done;
flow_table = rcu_dereference(rxqueue->rps_flow_table);
@@ -3037,10 +3035,11 @@ static int get_rps_cpu(struct net_device
*dev, struct sk_buff *skb,
u16 next_cpu;
struct rps_dev_flow *rflow;
- rflow = &flow_table->flows[hash & flow_table->mask];
+ rflow = &flow_table->flows[skb->rxhash & flow_table->mask];
tcpu = rflow->cpu;
- next_cpu = sock_flow_table->ents[hash &
sock_flow_table->mask];
+ next_cpu = sock_flow_table->ents[skb->rxhash &
+ sock_flow_table->mask];
/*
* If the desired CPU (where last recvmsg was done) is
@@ -3069,7 +3068,7 @@ static int get_rps_cpu(struct net_device *dev,
struct sk_buff *skb,
}
if (map) {
- tcpu = map->cpus[((u64) hash * map->len) >> 32];
+ tcpu = map->cpus[((u64) skb->rxhash * map->len) >> 32];
if (cpu_online(tcpu)) {
cpu = tcpu;
diff --git a/net/core/filter.c b/net/core/filter.c
index 32c5b44..ac88686 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -729,10 +729,10 @@ static bool convert_bpf_extensions(struct
sock_filter *fp,
break;
case SKF_AD_OFF + SKF_AD_RXHASH:
- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4);
+ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, rxhash) != 4);
*insn = BPF_LDX_MEM(BPF_W, BPF_REG_A, BPF_REG_CTX,
- offsetof(struct sk_buff, hash));
+ offsetof(struct sk_buff, rxhash));
break;
case SKF_AD_OFF + SKF_AD_QUEUE:
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index 8808dcd..e29e810 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -203,8 +203,8 @@ static __always_inline u32
__flow_hash_1word(u32 a)
/*
* __skb_get_hash: calculate a flow hash based on src/dst addresses
- * and src/dst port numbers. Sets hash in skb to non-zero hash
value
- * on success, zero indicates no valid hash. Also, sets l4_hash
in skb
+ * and src/dst port numbers. Sets rxhash in skb to non-zero hash
value
+ * on success, zero indicates no valid hash. Also, sets l4_rxhash
in skb
* if hash is a canonical 4-tuple hash over transport ports.
*/
void __skb_get_hash(struct sk_buff *skb)
@@ -216,7 +216,7 @@ void __skb_get_hash(struct sk_buff *skb)
return;
if (keys.ports)
- skb->l4_hash = 1;
+ skb->l4_rxhash = 1;
/* get a consistent hash (same value on both flow directions)
*/
if (((__force u32)keys.dst < (__force u32)keys.src) ||
@@ -232,7 +232,7 @@ void __skb_get_hash(struct sk_buff *skb)
if (!hash)
hash = 1;
- skb->hash = hash;
+ skb->rxhash = hash;
}
EXPORT_SYMBOL(__skb_get_hash);
@@ -344,7 +344,7 @@ static inline int get_xps_queue(struct net_device
*dev, struct sk_buff *skb)
hash = skb->sk->sk_hash;
else
hash = (__force u16) skb->protocol ^
- skb->hash;
+ skb->rxhash;
hash = __flow_hash_1word(hash);
queue_index = map->queues[
((u64)hash * map->len) >> 32];
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 3a1521f..48a6a93 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1277,7 +1277,7 @@ static unsigned int fanout_demux_hash(struct
packet_fanout *f,
struct sk_buff *skb,
unsigned int num)
{
- return reciprocal_scale(skb_get_hash(skb), num);
+ return reciprocal_scale(skb->rxhash, num);
}
static unsigned int fanout_demux_lb(struct packet_fanout *f,
@@ -1362,6 +1362,7 @@ static int packet_rcv_fanout(struct sk_buff
*skb, struct net_device *dev,
if (!skb)
return 0;
}
+ skb_get_hash(skb);
idx = fanout_demux_hash(f, skb, num);
break;
case PACKET_FANOUT_LB: