Thread (42 messages) flat view 42 messages, 6 authors, 2021-12-17

Re: [PATCH v6 net-next 08/12] flow_offload: add process to update action stats from hardware

From: Jamal Hadi Salim <jhs@mojatatu.com>
Date: 2021-12-11 19:52:11

On 2021-12-09 04:28, Simon Horman wrote:
quoted hunk ↗ jump to hunk
include/net/act_api.h |  1 +
  include/net/pkt_cls.h | 18 ++++++++++--------
  net/sched/act_api.c   | 34 ++++++++++++++++++++++++++++++++++
  3 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/include/net/act_api.h b/include/net/act_api.h
index 7e4e79b50216..ce094e79f722 100644
--- a/include/net/act_api.h
+++ b/include/net/act_api.h
@@ -253,6 +253,7 @@ void tcf_action_update_stats(struct tc_action *a, u64 bytes, u64 packets,
  			     u64 drops, bool hw);
  int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int);
  
+int tcf_action_update_hw_stats(struct tc_action *action);
  int tcf_action_check_ctrlact(int action, struct tcf_proto *tp,
  			     struct tcf_chain **handle,
  			     struct netlink_ext_ack *newchain);
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
index 13f0e4a3a136..1942fe72b3e3 100644
--- a/include/net/pkt_cls.h
+++ b/include/net/pkt_cls.h
@@ -269,18 +269,20 @@ tcf_exts_stats_update(const struct tcf_exts *exts,
  #ifdef CONFIG_NET_CLS_ACT
  	int i;
  
-	preempt_disable();
-
  	for (i = 0; i < exts->nr_actions; i++) {
  		struct tc_action *a = exts->actions[i];
  
-		tcf_action_stats_update(a, bytes, packets, drops,
-					lastuse, true);
-		a->used_hw_stats = used_hw_stats;
-		a->used_hw_stats_valid = used_hw_stats_valid;
-	}
+		/* if stats from hw, just skip */
+		if (tcf_action_update_hw_stats(a)) {
+			preempt_disable();
+			tcf_action_stats_update(a, bytes, packets, drops,
+						lastuse, true);
+			preempt_enable();
  
-	preempt_enable();
+			a->used_hw_stats = used_hw_stats;
+			a->used_hw_stats_valid = used_hw_stats_valid;
+		}
+	}
  #endif
  }
Sorry - didnt quiet follow this one even after reading to the end.
I may have missed the obvious in the equivalence:
In the old code we did the preempt first then collect. The changed
version only does it if tcf_action_update_hw_stats() is true.

cheers,
jamal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help