net/ice: fix race condition in Rx timestamp
[dpdk.git] / drivers / net / ice / base / ice_tmatch.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2001-2021 Intel Corporation
3  */
4
5 #ifndef _ICE_TMATCH_H_
6 #define _ICE_TMATCH_H_
7
8 static inline
9 bool ice_ternary_match_byte(u8 key, u8 key_inv, u8 pat)
10 {
11         u8 k1, k2, v;
12         int i;
13
14         for (i = 0; i < 8; i++) {
15                 k1 = (u8)(key & (1 << i));
16                 k2 = (u8)(key_inv & (1 << i));
17                 v = (u8)(pat & (1 << i));
18
19                 if (k1 != 0 && k2 != 0)
20                         continue;
21                 if (k1 == 0 && k2 == 0)
22                         return false;
23
24                 if (k1 == v)
25                         return false;
26         }
27
28         return true;
29 }
30
31 static inline
32 bool ice_ternary_match(const u8 *key, const u8 *key_inv,
33                        const u8 *pat, int len)
34 {
35         int i;
36
37         for (i = 0; i < len; i++)
38                 if (!ice_ternary_match_byte(key[i], key_inv[i], pat[i]))
39                         return false;
40
41         return true;
42 }
43
44 #endif /* _ICE_TMATCH_H_ */