netfilter: nft_set_pipapo: constify lookup fn args where possible
authorFlorian Westphal <fw@strlen.de>
Tue, 13 Feb 2024 15:23:37 +0000 (16:23 +0100)
committerFlorian Westphal <fw@strlen.de>
Wed, 21 Feb 2024 10:57:11 +0000 (11:57 +0100)
Those get called from packet path, content must not be modified.
No functional changes intended.

Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nft_set_pipapo.c
net/netfilter/nft_set_pipapo.h
net/netfilter/nft_set_pipapo_avx2.c

index aa1d9e93a9a04859d48e417501c7f9e889187400..dedb17a4e07c7116afa636a8b0fbbee4b204bf5c 100644 (file)
  * Return: -1 on no match, bit position on 'match_only', 0 otherwise.
  */
 int pipapo_refill(unsigned long *map, int len, int rules, unsigned long *dst,
-                 union nft_pipapo_map_bucket *mt, bool match_only)
+                 const union nft_pipapo_map_bucket *mt, bool match_only)
 {
        unsigned long bitset;
        int k, ret = -1;
@@ -412,9 +412,9 @@ bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set,
        struct nft_pipapo_scratch *scratch;
        unsigned long *res_map, *fill_map;
        u8 genmask = nft_genmask_cur(net);
+       const struct nft_pipapo_match *m;
+       const struct nft_pipapo_field *f;
        const u8 *rp = (const u8 *)key;
-       struct nft_pipapo_match *m;
-       struct nft_pipapo_field *f;
        bool map_index;
        int i;
 
@@ -519,11 +519,13 @@ static struct nft_pipapo_elem *pipapo_get(const struct net *net,
 {
        struct nft_pipapo_elem *ret = ERR_PTR(-ENOENT);
        struct nft_pipapo *priv = nft_set_priv(set);
-       struct nft_pipapo_match *m = priv->clone;
        unsigned long *res_map, *fill_map = NULL;
-       struct nft_pipapo_field *f;
+       const struct nft_pipapo_match *m;
+       const struct nft_pipapo_field *f;
        int i;
 
+       m = priv->clone;
+
        res_map = kmalloc_array(m->bsize_max, sizeof(*res_map), GFP_ATOMIC);
        if (!res_map) {
                ret = ERR_PTR(-ENOMEM);
@@ -1597,7 +1599,7 @@ static void pipapo_gc(struct nft_set *set, struct nft_pipapo_match *m)
 
        while ((rules_f0 = pipapo_rules_same_key(m->f, first_rule))) {
                union nft_pipapo_map_bucket rulemap[NFT_PIPAPO_MAX_FIELDS];
-               struct nft_pipapo_field *f;
+               const struct nft_pipapo_field *f;
                int i, start, rules_fx;
 
                start = first_rule;
@@ -2039,8 +2041,8 @@ static void nft_pipapo_walk(const struct nft_ctx *ctx, struct nft_set *set,
 {
        struct nft_pipapo *priv = nft_set_priv(set);
        struct net *net = read_pnet(&set->net);
-       struct nft_pipapo_match *m;
-       struct nft_pipapo_field *f;
+       const struct nft_pipapo_match *m;
+       const struct nft_pipapo_field *f;
        int i, r;
 
        rcu_read_lock();
index 3842c7341a9f40a088d78532c4b610f3a99d7d23..42464e7c24ac04fbecbc305ff13460ca5be45d2d 100644 (file)
@@ -187,7 +187,7 @@ struct nft_pipapo_elem {
 };
 
 int pipapo_refill(unsigned long *map, int len, int rules, unsigned long *dst,
-                 union nft_pipapo_map_bucket *mt, bool match_only);
+                 const union nft_pipapo_map_bucket *mt, bool match_only);
 
 /**
  * pipapo_and_field_buckets_4bit() - Intersect 4-bit buckets
@@ -195,7 +195,7 @@ int pipapo_refill(unsigned long *map, int len, int rules, unsigned long *dst,
  * @dst:       Area to store result
  * @data:      Input data selecting table buckets
  */
-static inline void pipapo_and_field_buckets_4bit(struct nft_pipapo_field *f,
+static inline void pipapo_and_field_buckets_4bit(const struct nft_pipapo_field *f,
                                                 unsigned long *dst,
                                                 const u8 *data)
 {
@@ -223,7 +223,7 @@ static inline void pipapo_and_field_buckets_4bit(struct nft_pipapo_field *f,
  * @dst:       Area to store result
  * @data:      Input data selecting table buckets
  */
-static inline void pipapo_and_field_buckets_8bit(struct nft_pipapo_field *f,
+static inline void pipapo_and_field_buckets_8bit(const struct nft_pipapo_field *f,
                                                 unsigned long *dst,
                                                 const u8 *data)
 {
index a3a8ddca991894b28aa1a1cd7c84ba0380366b5f..d08407d589eac54b10e4b4cc107e25adc875e9e2 100644 (file)
@@ -212,8 +212,9 @@ static int nft_pipapo_avx2_refill(int offset, unsigned long *map,
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_4b_2(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        u8 pg[2] = { pkt[0] >> 4, pkt[0] & 0xf };
@@ -274,8 +275,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_4b_4(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        u8 pg[4] = { pkt[0] >> 4, pkt[0] & 0xf, pkt[1] >> 4, pkt[1] & 0xf };
@@ -350,8 +352,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_4b_8(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        u8 pg[8] = {  pkt[0] >> 4,  pkt[0] & 0xf,  pkt[1] >> 4,  pkt[1] & 0xf,
                      pkt[2] >> 4,  pkt[2] & 0xf,  pkt[3] >> 4,  pkt[3] & 0xf,
@@ -445,8 +448,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_4b_12(unsigned long *map, unsigned long *fill,
-                                       struct nft_pipapo_field *f, int offset,
-                                       const u8 *pkt, bool first, bool last)
+                                       const struct nft_pipapo_field *f,
+                                       int offset, const u8 *pkt,
+                                       bool first, bool last)
 {
        u8 pg[12] = {  pkt[0] >> 4,  pkt[0] & 0xf,  pkt[1] >> 4,  pkt[1] & 0xf,
                       pkt[2] >> 4,  pkt[2] & 0xf,  pkt[3] >> 4,  pkt[3] & 0xf,
@@ -534,8 +538,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_4b_32(unsigned long *map, unsigned long *fill,
-                                       struct nft_pipapo_field *f, int offset,
-                                       const u8 *pkt, bool first, bool last)
+                                       const struct nft_pipapo_field *f,
+                                       int offset, const u8 *pkt,
+                                       bool first, bool last)
 {
        u8 pg[32] = {  pkt[0] >> 4,  pkt[0] & 0xf,  pkt[1] >> 4,  pkt[1] & 0xf,
                       pkt[2] >> 4,  pkt[2] & 0xf,  pkt[3] >> 4,  pkt[3] & 0xf,
@@ -669,8 +674,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_8b_1(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        unsigned long *lt = f->lt, bsize = f->bsize;
@@ -726,8 +732,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_8b_2(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        unsigned long *lt = f->lt, bsize = f->bsize;
@@ -790,8 +797,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_8b_4(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        unsigned long *lt = f->lt, bsize = f->bsize;
@@ -865,8 +873,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_8b_6(unsigned long *map, unsigned long *fill,
-                                      struct nft_pipapo_field *f, int offset,
-                                      const u8 *pkt, bool first, bool last)
+                                      const struct nft_pipapo_field *f,
+                                      int offset, const u8 *pkt,
+                                      bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        unsigned long *lt = f->lt, bsize = f->bsize;
@@ -950,8 +959,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_8b_16(unsigned long *map, unsigned long *fill,
-                                       struct nft_pipapo_field *f, int offset,
-                                       const u8 *pkt, bool first, bool last)
+                                       const struct nft_pipapo_field *f,
+                                       int offset, const u8 *pkt,
+                                       bool first, bool last)
 {
        int i, ret = -1, m256_size = f->bsize / NFT_PIPAPO_LONGS_PER_M256, b;
        unsigned long *lt = f->lt, bsize = f->bsize;
@@ -1042,8 +1052,9 @@ nothing:
  * word index to be checked next (i.e. first filled word).
  */
 static int nft_pipapo_avx2_lookup_slow(unsigned long *map, unsigned long *fill,
-                                       struct nft_pipapo_field *f, int offset,
-                                       const u8 *pkt, bool first, bool last)
+                                       const struct nft_pipapo_field *f,
+                                       int offset, const u8 *pkt,
+                                       bool first, bool last)
 {
        unsigned long bsize = f->bsize;
        int i, ret = -1, b;
@@ -1119,9 +1130,9 @@ bool nft_pipapo_avx2_lookup(const struct net *net, const struct nft_set *set,
        struct nft_pipapo *priv = nft_set_priv(set);
        struct nft_pipapo_scratch *scratch;
        u8 genmask = nft_genmask_cur(net);
+       const struct nft_pipapo_match *m;
+       const struct nft_pipapo_field *f;
        const u8 *rp = (const u8 *)key;
-       struct nft_pipapo_match *m;
-       struct nft_pipapo_field *f;
        unsigned long *res, *fill;
        bool map_index;
        int i, ret = 0;