提交 6c3ab204 编写于 作者: P Pieter Jansen van Vuuren 提交者: David S. Miller

nfp: fix flower offload metadata flag usage

Hardware has no notion of new or last mask id, instead it makes use of the
message type (i.e. add flow or del flow) in combination with a single bit
in metadata flags to determine when to add or delete a mask id. Previously
we made use of the new or last flags to indicate that a new mask should be
allocated or deallocated, respectively. This incorrect behaviour is fixed
by making use single bit in metadata flags to indicate mask allocation or
deallocation.

Fixes: 43f84b72 ("nfp: add metadata to each flow offload")
Signed-off-by: NPieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Reviewed-by: NJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a52b04bc
...@@ -52,8 +52,7 @@ struct nfp_app; ...@@ -52,8 +52,7 @@ struct nfp_app;
#define NFP_FLOWER_MASK_ELEMENT_RS 1 #define NFP_FLOWER_MASK_ELEMENT_RS 1
#define NFP_FLOWER_MASK_HASH_BITS 10 #define NFP_FLOWER_MASK_HASH_BITS 10
#define NFP_FL_META_FLAG_NEW_MASK 128 #define NFP_FL_META_FLAG_MANAGE_MASK BIT(7)
#define NFP_FL_META_FLAG_LAST_MASK 1
#define NFP_FL_MASK_REUSE_TIME_NS 40000 #define NFP_FL_MASK_REUSE_TIME_NS 40000
#define NFP_FL_MASK_ID_LOCATION 1 #define NFP_FL_MASK_ID_LOCATION 1
......
...@@ -282,7 +282,7 @@ nfp_check_mask_add(struct nfp_app *app, char *mask_data, u32 mask_len, ...@@ -282,7 +282,7 @@ nfp_check_mask_add(struct nfp_app *app, char *mask_data, u32 mask_len,
id = nfp_add_mask_table(app, mask_data, mask_len); id = nfp_add_mask_table(app, mask_data, mask_len);
if (id < 0) if (id < 0)
return false; return false;
*meta_flags |= NFP_FL_META_FLAG_NEW_MASK; *meta_flags |= NFP_FL_META_FLAG_MANAGE_MASK;
} }
*mask_id = id; *mask_id = id;
...@@ -299,6 +299,9 @@ nfp_check_mask_remove(struct nfp_app *app, char *mask_data, u32 mask_len, ...@@ -299,6 +299,9 @@ nfp_check_mask_remove(struct nfp_app *app, char *mask_data, u32 mask_len,
if (!mask_entry) if (!mask_entry)
return false; return false;
if (meta_flags)
*meta_flags &= ~NFP_FL_META_FLAG_MANAGE_MASK;
*mask_id = mask_entry->mask_id; *mask_id = mask_entry->mask_id;
mask_entry->ref_cnt--; mask_entry->ref_cnt--;
if (!mask_entry->ref_cnt) { if (!mask_entry->ref_cnt) {
...@@ -306,7 +309,7 @@ nfp_check_mask_remove(struct nfp_app *app, char *mask_data, u32 mask_len, ...@@ -306,7 +309,7 @@ nfp_check_mask_remove(struct nfp_app *app, char *mask_data, u32 mask_len,
nfp_release_mask_id(app, *mask_id); nfp_release_mask_id(app, *mask_id);
kfree(mask_entry); kfree(mask_entry);
if (meta_flags) if (meta_flags)
*meta_flags |= NFP_FL_META_FLAG_LAST_MASK; *meta_flags |= NFP_FL_META_FLAG_MANAGE_MASK;
} }
return true; return true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册