From 8b4c3653527e383318fed2154b7beda83bcd3f94 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Mon, 25 Feb 2019 13:27:20 +0100 Subject: [PATCH] ebpf: use atomic for counter in hw offload case --- ebpf/xdp_filter.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ebpf/xdp_filter.c b/ebpf/xdp_filter.c index ff919dd59d..a5646e5713 100644 --- a/ebpf/xdp_filter.c +++ b/ebpf/xdp_filter.c @@ -44,7 +44,6 @@ #define USE_PERCPU_HASH 1 #define GOT_TX_PEER 1 -#define WRITE_MAP 1 struct vlan_hdr { __u16 h_vlan_TCI; @@ -261,9 +260,12 @@ static int __always_inline filter_ipv4(void *data, __u64 nh_off, void *data_end, char fmt[] = "Data: t:%lu p:%lu n:%lu\n"; bpf_trace_printk(fmt, sizeof(fmt), value->time, value->packets, value->bytes); #endif -#if WRITE_MAP +#if USE_PERCPU_HASH value->packets++; value->bytes += data_end - data; +#else + __sync_fetch_and_add(&value->packets, 1); + __sync_fetch_and_add(&value->bytes, data_end - data); #endif #if GOT_TX_PEER @@ -347,9 +349,12 @@ static int __always_inline filter_ipv6(void *data, __u64 nh_off, void *data_end, char fmt6[] = "Found IPv6 flow: %d -> %d\n"; bpf_trace_printk(fmt6, sizeof(fmt6), sport, dport); #endif -#if WRITE_MAP +#if USE_PERCPU_HASH value->packets++; value->bytes += data_end - data; +#else + __sync_fetch_and_add(&value->packets, 1); + __sync_fetch_and_add(&value->bytes, data_end - data); #endif #if GOT_TX_PEER -- 2.47.2