From: Volodymyr Mytnyk <volodymyr.mytnyk@plvision.eu>
To: netdev@vger.kernel.org
Cc: Taras Chornyi <taras.chornyi@plvision.eu>,
Mickey Rachamim <mickeyr@marvell.com>,
Serhiy Pshyk <serhiy.pshyk@plvision.eu>,
Volodymyr Mytnyk <vmytnyk@marvell.com>,
Taras Chornyi <tchornyi@marvell.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
linux-kernel@vger.kernel.org,
Serhiy Boiko <serhiy.boiko@marvell.com>
Subject: [PATCH net-next 3/3] net: prestera: acl: add rule stats support
Date: Tue, 23 Nov 2021 18:58:02 +0200 [thread overview]
Message-ID: <1637686684-2492-4-git-send-email-volodymyr.mytnyk@plvision.eu> (raw)
In-Reply-To: <1637686684-2492-1-git-send-email-volodymyr.mytnyk@plvision.eu>
From: Volodymyr Mytnyk <vmytnyk@marvell.com>
Make flower to use counter API to get rule HW statistics.
Co-developed-by: Serhiy Boiko <serhiy.boiko@marvell.com>
Signed-off-by: Serhiy Boiko <serhiy.boiko@marvell.com>
Signed-off-by: Volodymyr Mytnyk <vmytnyk@marvell.com>
---
.../net/ethernet/marvell/prestera/prestera_acl.c | 46 ++++++++++++++++++++--
.../net/ethernet/marvell/prestera/prestera_acl.h | 5 +++
2 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_acl.c b/drivers/net/ethernet/marvell/prestera/prestera_acl.c
index f0119d72427f..f8eb99967bbb 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_acl.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_acl.c
@@ -33,6 +33,10 @@ struct prestera_acl_rule_entry {
struct {
u8 valid:1;
} accept, drop, trap;
+ struct {
+ u32 id;
+ struct prestera_counter_block *block;
+ } counter;
};
};
@@ -358,6 +362,10 @@ int prestera_acl_rule_add(struct prestera_switch *sw,
rule->re_arg.vtcam_id = ruleset->vtcam_id;
rule->re_key.prio = rule->priority;
+ /* setup counter */
+ rule->re_arg.count.valid = true;
+ rule->re_arg.count.client = PRESTERA_HW_COUNTER_CLIENT_LOOKUP_0;
+
rule->re = prestera_acl_rule_entry_find(sw->acl, &rule->re_key);
err = WARN_ON(rule->re) ? -EEXIST : 0;
if (err)
@@ -412,9 +420,20 @@ int prestera_acl_rule_get_stats(struct prestera_acl *acl,
struct prestera_acl_rule *rule,
u64 *packets, u64 *bytes, u64 *last_use)
{
+ u64 current_packets;
+ u64 current_bytes;
+ int err;
+
+ err = prestera_counter_stats_get(acl->sw->counter,
+ rule->re->counter.block,
+ rule->re->counter.id,
+ ¤t_packets, ¤t_bytes);
+ if (err)
+ return err;
+
+ *packets = current_packets;
+ *bytes = current_bytes;
*last_use = jiffies;
- *packets = 0;
- *bytes = 0;
return 0;
}
@@ -460,6 +479,12 @@ static int __prestera_acl_rule_entry2hw_add(struct prestera_switch *sw,
act_hw[act_num].id = PRESTERA_ACL_RULE_ACTION_TRAP;
act_num++;
}
+ /* counter */
+ if (e->counter.block) {
+ act_hw[act_num].id = PRESTERA_ACL_RULE_ACTION_COUNT;
+ act_hw[act_num].count.id = e->counter.id;
+ act_num++;
+ }
return prestera_hw_vtcam_rule_add(sw, e->vtcam_id, e->key.prio,
e->key.match.key, e->key.match.mask,
@@ -470,7 +495,8 @@ static void
__prestera_acl_rule_entry_act_destruct(struct prestera_switch *sw,
struct prestera_acl_rule_entry *e)
{
- /* destroy action entry */
+ /* counter */
+ prestera_counter_put(sw->counter, e->counter.block, e->counter.id);
}
void prestera_acl_rule_entry_destroy(struct prestera_acl *acl,
@@ -499,8 +525,22 @@ __prestera_acl_rule_entry_act_construct(struct prestera_switch *sw,
e->drop.valid = arg->drop.valid;
/* trap */
e->trap.valid = arg->trap.valid;
+ /* counter */
+ if (arg->count.valid) {
+ int err;
+
+ err = prestera_counter_get(sw->counter, arg->count.client,
+ &e->counter.block,
+ &e->counter.id);
+ if (err)
+ goto err_out;
+ }
return 0;
+
+err_out:
+ __prestera_acl_rule_entry_act_destruct(sw, e);
+ return -EINVAL;
}
struct prestera_acl_rule_entry *
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_acl.h b/drivers/net/ethernet/marvell/prestera/prestera_acl.h
index a1a99f026b87..f2a46816c003 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_acl.h
+++ b/drivers/net/ethernet/marvell/prestera/prestera_acl.h
@@ -5,6 +5,7 @@
#define _PRESTERA_ACL_H_
#include <linux/types.h>
+#include "prestera_counter.h"
#define PRESTERA_ACL_KEYMASK_PCL_ID 0x3FF
#define PRESTERA_ACL_KEYMASK_PCL_ID_USER \
@@ -86,6 +87,10 @@ struct prestera_acl_rule_entry_arg {
struct {
u8 valid:1;
} accept, drop, trap;
+ struct {
+ u8 valid:1;
+ u32 client;
+ } count;
};
};
--
2.7.4
prev parent reply other threads:[~2021-11-23 17:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-23 16:57 [PATCH net-next 0/3] net: prestera: acl: migrate to new vTcam/counter api Volodymyr Mytnyk
2021-11-23 16:58 ` [PATCH net-next 1/3] net: prestera: acl: migrate to new vTCAM api Volodymyr Mytnyk
2021-11-25 3:15 ` Jakub Kicinski
2021-11-30 12:26 ` Volodymyr Mytnyk [C]
2021-11-25 3:17 ` Jakub Kicinski
2021-11-23 16:58 ` [PATCH net-next 2/3] net: prestera: add counter HW API Volodymyr Mytnyk
2021-11-25 3:16 ` Jakub Kicinski
2021-11-30 12:28 ` Volodymyr Mytnyk [C]
2021-11-23 16:58 ` Volodymyr Mytnyk [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1637686684-2492-4-git-send-email-volodymyr.mytnyk@plvision.eu \
--to=volodymyr.mytnyk@plvision.eu \
--cc=davem@davemloft.net \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mickeyr@marvell.com \
--cc=netdev@vger.kernel.org \
--cc=serhiy.boiko@marvell.com \
--cc=serhiy.pshyk@plvision.eu \
--cc=taras.chornyi@plvision.eu \
--cc=tchornyi@marvell.com \
--cc=vmytnyk@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).