Re: [PATCH net-next 1/3] net: prestera: acl: migrate to new vTCAM api
From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-11-25 03:17:08
Also in:
lkml
On Tue, 23 Nov 2021 18:58:00 +0200 Volodymyr Mytnyk wrote:
From: Volodymyr Mytnyk <redacted> - Add new vTCAM HW API to configure HW ACLs. - Migrate acl to use new vTCAM HW API. - No counter support in this patch-set. Co-developed-by: Yevhen Orlov <redacted> Signed-off-by: Yevhen Orlov <redacted> Signed-off-by: Volodymyr Mytnyk <redacted>
struct prestera_acl_ruleset {
+ struct rhash_head ht_node; /* Member of acl HT */
+ struct prestera_acl_ruleset_ht_key ht_key;
struct rhashtable rule_ht;
- struct prestera_switch *sw;
- u16 id;
+ struct prestera_acl *acl;
+ unsigned long rule_count;
+ refcount_t refcount;
+ void *keymask;
+ bool offload;
+ u32 vtcam_id;
+ u16 pcl_id;put the pcl_id earlier for better packing?
};
+struct prestera_acl_vtcam {
+ struct list_head list;
+ __be32 keymask[__PRESTERA_ACL_RULE_MATCH_TYPE_MAX];
+ bool is_keymask_set;
+ refcount_t refcount;
+ u8 lookup;same here, 1B types together
u32 id; };
+int prestera_acl_ruleset_keymask_set(struct prestera_acl_ruleset *ruleset,
+ void *keymask)
{
- prestera_hw_acl_ruleset_del(ruleset->sw, ruleset->id);
- rhashtable_destroy(&ruleset->rule_ht);
- kfree(ruleset);
+ void *__keymask;
+
+ if (!keymask || !ruleset)Can this legitimately happen? No defensive programming, please.
+ return -EINVAL; + + __keymask = kmalloc(ACL_KEYMASK_SIZE, GFP_KERNEL); + if (!__keymask) + return -ENOMEM; + + memcpy(__keymask, keymask, ACL_KEYMASK_SIZE);
kmemdup()
+ ruleset->keymask = __keymask; + + return 0; }