linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/5]  Add Per-transport SCMI debug statistics
@ 2024-07-30  9:33 Luke Parkin
  2024-07-30  9:33 ` [PATCH v4 1/5] firmware: arm_scmi: Remove superfluous handle_to_scmi_info Luke Parkin
                   ` (5 more replies)
  0 siblings, 6 replies; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

This series adds support for tracking information about the SCMI [Patch 2/3]
A config option to enable this [Patch 2]
Cleans up a unneeded call to handle_scmi_info [Patch 1]
In [Patch 4] a selection of new debugfs entries to present these counters
Then finally in [Patch 5] enabled writing on the debugfs entries to reset counts

Based on v6.9, Tested on Arm Juno [1]

Thanks,
Luke

[1]: https://www.arm.com/products/development-tools/development-boards/juno-arm-dev-platform

V3->V4
Rename to counters rather than statistics to reflect the scmi protocol better.
Use basic writing rather than custom function on debugfs in patch 5.
V2->V3
Switch statistic counters to an array to store statistics.
Add more statistics
Add the ability to reset statistics, both individually and all
V1->V2
Add a minor fix removing an unneeded call to handle_to_scmi_info
Use new scmi_log_stats op/no-op rather than if(IS_ENABLED)
Drop unneeded atomic_set's
Use a helper function for stats debugfs creation

Luke Parkin (5):
  firmware: arm_scmi: Remove superfluous handle_to_scmi_info
  firmware: arm_scmi: Add support for tracking metrics
  firmware: arm_scmi: Track basic SCMI metrics
  firmware: arm_scmi: Create debugfs files for counts
  firmware: arm_scmi: Reset counters

 drivers/firmware/arm_scmi/Kconfig  | 11 ++++
 drivers/firmware/arm_scmi/common.h | 27 ++++++++++
 drivers/firmware/arm_scmi/driver.c | 87 +++++++++++++++++++++++++++---
 3 files changed, 117 insertions(+), 8 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v4 1/5] firmware: arm_scmi: Remove superfluous handle_to_scmi_info
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
@ 2024-07-30  9:33 ` Luke Parkin
  2024-07-30  9:33 ` [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics Luke Parkin
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

Remove duplicate handle_to_scmi_info

Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Luke Parkin <luke.parkin@arm.com>
---
 drivers/firmware/arm_scmi/driver.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 6b6957f4743f..56a93d20bf23 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -1261,9 +1261,6 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
 					    xfer->rx.buf, xfer->rx.len);
 
 			if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT)) {
-				struct scmi_info *info =
-					handle_to_scmi_info(cinfo->handle);
-
 				scmi_raw_message_report(info->raw, xfer,
 							SCMI_RAW_REPLY_QUEUE,
 							cinfo->id);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
  2024-07-30  9:33 ` [PATCH v4 1/5] firmware: arm_scmi: Remove superfluous handle_to_scmi_info Luke Parkin
@ 2024-07-30  9:33 ` Luke Parkin
  2024-07-30 16:21   ` Cristian Marussi
  2024-07-30  9:33 ` [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics Luke Parkin
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

Add a new optional config option for tracking, configurable
	at build.
Add methods for counting key metrics

Signed-off-by: Luke Parkin <luke.parkin@arm.com>
---
v3->v4
Rename to counters rather than statistic tracking
Move enum tracker to common.h
Move stats array into debug
v2->v3
Switch to an enum & array method of storing statistics
v1->v2
Config option now depends on DEBUG_FS
Add scmi_log_stats rather than if(IS_ENABLED)
Move location of scmi_debug_stats in the scmi_info struct
---
 drivers/firmware/arm_scmi/Kconfig  | 11 +++++++++++
 drivers/firmware/arm_scmi/common.h | 13 +++++++++++++
 drivers/firmware/arm_scmi/driver.c |  2 ++
 3 files changed, 26 insertions(+)

diff --git a/drivers/firmware/arm_scmi/Kconfig b/drivers/firmware/arm_scmi/Kconfig
index aa5842be19b2..b3ccd565b986 100644
--- a/drivers/firmware/arm_scmi/Kconfig
+++ b/drivers/firmware/arm_scmi/Kconfig
@@ -55,6 +55,17 @@ config ARM_SCMI_RAW_MODE_SUPPORT_COEX
 	  operate normally, thing which could make an SCMI test suite using the
 	  SCMI Raw mode support unreliable. If unsure, say N.
 
+config ARM_SCMI_DEBUG_COUNTERS
+	bool "Enable SCMI debug tracking"
+	select ARM_SCMI_NEED_DEBUGFS
+	depends on DEBUG_FS
+	help
+	  Enables debug tracking for the SCMI subsystem.
+
+	  Enable this option to create a new debugfs directory which contains
+	  several useful debug counters. This can be helpful for debugging and
+	  SCMI monitoring. If unsure, say N.
+
 config ARM_SCMI_HAVE_TRANSPORT
 	bool
 	help
diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
index b5ac25dbc1ca..8f80bf0ddddd 100644
--- a/drivers/firmware/arm_scmi/common.h
+++ b/drivers/firmware/arm_scmi/common.h
@@ -301,6 +301,19 @@ extern const struct scmi_desc scmi_optee_desc;
 
 void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv);
 
+enum debug_counters {
+	SCMI_DEBUG_COUNTERS_LAST
+};
+
+#ifdef CONFIG_ARM_SCMI_DEBUG_COUNTERS
+static inline void scmi_inc_count(atomic_t *arr, int stat)
+{
+	atomic_inc(&arr[stat]);
+}
+#else
+static inline void scmi_inc_count(atomic_t *arr, int stat) {}
+#endif
+
 enum scmi_bad_msg {
 	MSG_UNEXPECTED = -1,
 	MSG_INVALID = -2,
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 56a93d20bf23..958b2ac92050 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -117,12 +117,14 @@ struct scmi_protocol_instance {
  * @name: Name of this SCMI instance
  * @type: Type of this SCMI instance
  * @is_atomic: Flag to state if the transport of this instance is atomic
+ * @counters: An array of atomic_c's used for tracking statistics (if enabled)
  */
 struct scmi_debug_info {
 	struct dentry *top_dentry;
 	const char *name;
 	const char *type;
 	bool is_atomic;
+	atomic_t counters[SCMI_DEBUG_COUNTERS_LAST];
 };
 
 /**
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
  2024-07-30  9:33 ` [PATCH v4 1/5] firmware: arm_scmi: Remove superfluous handle_to_scmi_info Luke Parkin
  2024-07-30  9:33 ` [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics Luke Parkin
@ 2024-07-30  9:33 ` Luke Parkin
  2024-07-30 16:22   ` Cristian Marussi
  2024-07-30  9:33 ` [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts Luke Parkin
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

Add counting of initial metrics

Signed-off-by: Luke Parkin <luke.parkin@arm.com>
---
V3->V4
Use new names for functions
Use counter instead of stats for clarity
V2->V3
Add more statistics
Use new log_stats method.
V1->V2
Drop unneccesary atomic_set's
Use new 'scmi_log_stats' to simplify incrementing of atomics
Move scmi_log_stats to locations which mean no extra conditionals
	are needed
---
 drivers/firmware/arm_scmi/common.h | 14 ++++++++++++++
 drivers/firmware/arm_scmi/driver.c | 25 ++++++++++++++++++++-----
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
index 8f80bf0ddddd..acec283f49de 100644
--- a/drivers/firmware/arm_scmi/common.h
+++ b/drivers/firmware/arm_scmi/common.h
@@ -302,6 +302,20 @@ extern const struct scmi_desc scmi_optee_desc;
 void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv);
 
 enum debug_counters {
+	SENT_OK,
+	SENT_FAIL,
+	SENT_FAIL_POLLING_UNSUPPORTED,
+	SENT_FAIL_CHANNEL_NOT_FOUND,
+	RESPONSE_OK,
+	NOTIF_OK,
+	DLYD_RESPONSE_OK,
+	XFERS_RESPONSE_TIMEOUT,
+	XFERS_RESPONSE_POLLED_TIMEOUT,
+	RESPONSE_POLLED_OK,
+	ERR_MSG_UNEXPECTED,
+	ERR_MSG_INVALID,
+	ERR_MSG_NOMEM,
+	ERR_PROTOCOL,
 	SCMI_DEBUG_COUNTERS_LAST
 };
 
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 958b2ac92050..5acd3d324def 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -990,6 +990,7 @@ scmi_xfer_command_acquire(struct scmi_chan_info *cinfo, u32 msg_hdr)
 		spin_unlock_irqrestore(&minfo->xfer_lock, flags);
 
 		scmi_bad_message_trace(cinfo, msg_hdr, MSG_UNEXPECTED);
+		scmi_inc_count(info->dbg->counters, ERR_MSG_UNEXPECTED);
 
 		return xfer;
 	}
@@ -1017,6 +1018,8 @@ scmi_xfer_command_acquire(struct scmi_chan_info *cinfo, u32 msg_hdr)
 			msg_type, xfer_id, msg_hdr, xfer->state);
 
 		scmi_bad_message_trace(cinfo, msg_hdr, MSG_INVALID);
+		scmi_inc_count(info->dbg->counters, ERR_MSG_INVALID);
+
 
 		/* On error the refcount incremented above has to be dropped */
 		__scmi_xfer_put(minfo, xfer);
@@ -1056,6 +1059,7 @@ static void scmi_handle_notification(struct scmi_chan_info *cinfo,
 			PTR_ERR(xfer));
 
 		scmi_bad_message_trace(cinfo, msg_hdr, MSG_NOMEM);
+		scmi_inc_count(info->dbg->counters, ERR_MSG_NOMEM);
 
 		scmi_clear_channel(info, cinfo);
 		return;
@@ -1071,6 +1075,7 @@ static void scmi_handle_notification(struct scmi_chan_info *cinfo,
 	trace_scmi_msg_dump(info->id, cinfo->id, xfer->hdr.protocol_id,
 			    xfer->hdr.id, "NOTI", xfer->hdr.seq,
 			    xfer->hdr.status, xfer->rx.buf, xfer->rx.len);
+	scmi_inc_count(info->dbg->counters, NOTIF_OK);
 
 	scmi_notify(cinfo->handle, xfer->hdr.protocol_id,
 		    xfer->hdr.id, xfer->rx.buf, xfer->rx.len, ts);
@@ -1130,8 +1135,10 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo,
 	if (xfer->hdr.type == MSG_TYPE_DELAYED_RESP) {
 		scmi_clear_channel(info, cinfo);
 		complete(xfer->async_done);
+		scmi_inc_count(info->dbg->counters, DLYD_RESPONSE_OK);
 	} else {
 		complete(&xfer->done);
+		scmi_inc_count(info->dbg->counters, RESPONSE_OK);
 	}
 
 	if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT)) {
@@ -1215,6 +1222,7 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
 			       struct scmi_xfer *xfer, unsigned int timeout_ms)
 {
 	int ret = 0;
+	struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
 
 	if (xfer->hdr.poll_completion) {
 		/*
@@ -1235,13 +1243,12 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
 					"timed out in resp(caller: %pS) - polling\n",
 					(void *)_RET_IP_);
 				ret = -ETIMEDOUT;
+				scmi_inc_count(info->dbg->counters, XFERS_RESPONSE_POLLED_TIMEOUT);
 			}
 		}
 
 		if (!ret) {
 			unsigned long flags;
-			struct scmi_info *info =
-				handle_to_scmi_info(cinfo->handle);
 
 			/*
 			 * Do not fetch_response if an out-of-order delayed
@@ -1261,6 +1268,7 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
 					    "RESP" : "resp",
 					    xfer->hdr.seq, xfer->hdr.status,
 					    xfer->rx.buf, xfer->rx.len);
+			scmi_inc_count(info->dbg->counters, RESPONSE_POLLED_OK);
 
 			if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT)) {
 				scmi_raw_message_report(info->raw, xfer,
@@ -1275,6 +1283,7 @@ static int scmi_wait_for_reply(struct device *dev, const struct scmi_desc *desc,
 			dev_err(dev, "timed out in resp(caller: %pS)\n",
 				(void *)_RET_IP_);
 			ret = -ETIMEDOUT;
+			scmi_inc_count(info->dbg->counters, XFERS_RESPONSE_TIMEOUT);
 		}
 	}
 
@@ -1358,13 +1367,15 @@ static int do_xfer(const struct scmi_protocol_handle *ph,
 	    !is_transport_polling_capable(info->desc)) {
 		dev_warn_once(dev,
 			      "Polling mode is not supported by transport.\n");
+		scmi_inc_count(info->dbg->counters, SENT_FAIL_POLLING_UNSUPPORTED);
 		return -EINVAL;
 	}
 
 	cinfo = idr_find(&info->tx_idr, pi->proto->id);
-	if (unlikely(!cinfo))
+	if (unlikely(!cinfo)) {
+		scmi_inc_count(info->dbg->counters, SENT_FAIL_CHANNEL_NOT_FOUND);
 		return -EINVAL;
-
+	}
 	/* True ONLY if also supported by transport. */
 	if (is_polling_enabled(cinfo, info->desc))
 		xfer->hdr.poll_completion = true;
@@ -1396,16 +1407,20 @@ static int do_xfer(const struct scmi_protocol_handle *ph,
 	ret = info->desc->ops->send_message(cinfo, xfer);
 	if (ret < 0) {
 		dev_dbg(dev, "Failed to send message %d\n", ret);
+		scmi_inc_count(info->dbg->counters, SENT_FAIL);
 		return ret;
 	}
 
 	trace_scmi_msg_dump(info->id, cinfo->id, xfer->hdr.protocol_id,
 			    xfer->hdr.id, "CMND", xfer->hdr.seq,
 			    xfer->hdr.status, xfer->tx.buf, xfer->tx.len);
+	scmi_inc_count(info->dbg->counters, SENT_OK);
 
 	ret = scmi_wait_for_message_response(cinfo, xfer);
-	if (!ret && xfer->hdr.status)
+	if (!ret && xfer->hdr.status) {
 		ret = scmi_to_linux_errno(xfer->hdr.status);
+		scmi_inc_count(info->dbg->counters, ERR_PROTOCOL);
+	}
 
 	if (info->desc->ops->mark_txdone)
 		info->desc->ops->mark_txdone(cinfo, ret, xfer);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
                   ` (2 preceding siblings ...)
  2024-07-30  9:33 ` [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics Luke Parkin
@ 2024-07-30  9:33 ` Luke Parkin
  2024-07-30 16:23   ` Cristian Marussi
  2024-07-31 12:11   ` Sudeep Holla
  2024-07-30  9:33 ` [PATCH v4 5/5] firmware: arm_scmi: Reset counters Luke Parkin
  2024-07-30 16:41 ` [PATCH v4 0/5] Add Per-transport SCMI debug statistics Cristian Marussi
  5 siblings, 2 replies; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

Create debugfs files for the metrics in the debug_counters array

Signed-off-by: Luke Parkin <luke.parkin@arm.com>
---
v3->v4
Use new locations for debug array
Use counter instead of stats
v2->v3
Add extra statistics also added in v3
v1->v2
Only create stats pointer if stats are enabled
Move stats debugfs creation into a seperate helper function
---
 drivers/firmware/arm_scmi/driver.c | 38 ++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 5acd3d324def..ec6434692d1a 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -2847,6 +2847,41 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
 	return NOTIFY_OK;
 }
 
+static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
+					struct dentry *trans)
+{
+	struct dentry *counters;
+
+	counters = debugfs_create_dir("counters", trans);
+
+	debugfs_create_atomic_t("sent_ok", 0400, counters,
+				&dbg->counters[SENT_OK]);
+	debugfs_create_atomic_t("sent_fail", 0400, counters,
+				&dbg->counters[SENT_FAIL]);
+	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
+				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
+	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
+				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
+	debugfs_create_atomic_t("response_ok", 0400, counters,
+				&dbg->counters[RESPONSE_OK]);
+	debugfs_create_atomic_t("notif_ok", 0400, counters,
+				&dbg->counters[NOTIF_OK]);
+	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
+				&dbg->counters[DLYD_RESPONSE_OK]);
+	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
+				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
+	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
+				&dbg->counters[RESPONSE_POLLED_OK]);
+	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
+				&dbg->counters[ERR_MSG_UNEXPECTED]);
+	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
+				&dbg->counters[ERR_MSG_INVALID]);
+	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
+				&dbg->counters[ERR_MSG_NOMEM]);
+	debugfs_create_atomic_t("err_protocol", 0400, counters,
+				&dbg->counters[ERR_PROTOCOL]);
+}
+
 static void scmi_debugfs_common_cleanup(void *d)
 {
 	struct scmi_debug_info *dbg = d;
@@ -2913,6 +2948,9 @@ static struct scmi_debug_info *scmi_debugfs_common_setup(struct scmi_info *info)
 	debugfs_create_u32("rx_max_msg", 0400, trans,
 			   (u32 *)&info->rx_minfo.max_msg);
 
+	if (IS_ENABLED(CONFIG_ARM_SCMI_DEBUG_COUNTERS))
+		scmi_debugfs_counters_setup(dbg, trans);
+
 	dbg->top_dentry = top_dentry;
 
 	if (devm_add_action_or_reset(info->dev,
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 5/5] firmware: arm_scmi: Reset counters
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
                   ` (3 preceding siblings ...)
  2024-07-30  9:33 ` [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts Luke Parkin
@ 2024-07-30  9:33 ` Luke Parkin
  2024-07-30 16:37   ` Cristian Marussi
  2024-07-30 16:41 ` [PATCH v4 0/5] Add Per-transport SCMI debug statistics Cristian Marussi
  5 siblings, 1 reply; 16+ messages in thread
From: Luke Parkin @ 2024-07-30  9:33 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, arm-scmi
  Cc: sudeep.holla, cristian.marussi, Luke Parkin

Allow writing to atomics to reset
Create reset_all counters debugfs file to reset all counters

Signed-off-by: Luke Parkin <luke.parkin@arm.com>
---
v3->v4
Use basic writing to allow any number to be set rather than forcing
	a set to 0
---
 drivers/firmware/arm_scmi/driver.c | 45 +++++++++++++++++++++---------
 1 file changed, 32 insertions(+), 13 deletions(-)

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index ec6434692d1a..9e8720c27d51 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -2847,6 +2847,24 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
 	return NOTIFY_OK;
 }
 
+static ssize_t reset_all_on_write(struct file *filp, const char __user *buf,
+				  size_t count, loff_t *ppos)
+{
+	struct scmi_debug_info *dbg = filp->private_data;
+
+	for (int i = 0; i < SCMI_DEBUG_COUNTERS_LAST; i++)
+		atomic_set(&dbg->counters[i], 0);
+
+	return count;
+}
+
+static const struct file_operations fops_reset_counts = {
+	.owner = THIS_MODULE,
+	.open = simple_open,
+	.llseek = no_llseek,
+	.write = reset_all_on_write,
+};
+
 static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
 					struct dentry *trans)
 {
@@ -2854,32 +2872,33 @@ static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
 
 	counters = debugfs_create_dir("counters", trans);
 
-	debugfs_create_atomic_t("sent_ok", 0400, counters,
+	debugfs_create_atomic_t("sent_ok", 0600, counters,
 				&dbg->counters[SENT_OK]);
-	debugfs_create_atomic_t("sent_fail", 0400, counters,
+	debugfs_create_atomic_t("sent_fail", 0600, counters,
 				&dbg->counters[SENT_FAIL]);
-	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
+	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0600, counters,
 				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
-	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
+	debugfs_create_atomic_t("sent_fail_channel_not_found", 0600, counters,
 				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
-	debugfs_create_atomic_t("response_ok", 0400, counters,
+	debugfs_create_atomic_t("response_ok", 0600, counters,
 				&dbg->counters[RESPONSE_OK]);
-	debugfs_create_atomic_t("notif_ok", 0400, counters,
+	debugfs_create_atomic_t("notif_ok", 0600, counters,
 				&dbg->counters[NOTIF_OK]);
-	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
+	debugfs_create_atomic_t("dlyd_resp_ok", 0600, counters,
 				&dbg->counters[DLYD_RESPONSE_OK]);
-	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
+	debugfs_create_atomic_t("xfers_resp_timeout", 0600, counters,
 				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
-	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
+	debugfs_create_atomic_t("response_polled_ok", 0600, counters,
 				&dbg->counters[RESPONSE_POLLED_OK]);
-	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
+	debugfs_create_atomic_t("err_msg_unexpected", 0600, counters,
 				&dbg->counters[ERR_MSG_UNEXPECTED]);
-	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
+	debugfs_create_atomic_t("err_msg_invalid", 0600, counters,
 				&dbg->counters[ERR_MSG_INVALID]);
-	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
+	debugfs_create_atomic_t("err_msg_nomem", 0600, counters,
 				&dbg->counters[ERR_MSG_NOMEM]);
-	debugfs_create_atomic_t("err_protocol", 0400, counters,
+	debugfs_create_atomic_t("err_protocol", 0600, counters,
 				&dbg->counters[ERR_PROTOCOL]);
+	debugfs_create_file("reset", 0200, counters, dbg, &fops_reset_counts);
 }
 
 static void scmi_debugfs_common_cleanup(void *d)
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics
  2024-07-30  9:33 ` [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics Luke Parkin
@ 2024-07-30 16:21   ` Cristian Marussi
  0 siblings, 0 replies; 16+ messages in thread
From: Cristian Marussi @ 2024-07-30 16:21 UTC (permalink / raw)
  To: Luke Parkin
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, sudeep.holla,
	cristian.marussi

On Tue, Jul 30, 2024 at 10:33:39AM +0100, Luke Parkin wrote:
> Add a new optional config option for tracking, configurable
> 	at build.
> Add methods for counting key metrics

This commit message is a bit messed up, BUT it is fine, NO need to
respin a v5 just for this, we'll fix this on merge.

Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics
  2024-07-30  9:33 ` [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics Luke Parkin
@ 2024-07-30 16:22   ` Cristian Marussi
  0 siblings, 0 replies; 16+ messages in thread
From: Cristian Marussi @ 2024-07-30 16:22 UTC (permalink / raw)
  To: Luke Parkin
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, sudeep.holla,
	cristian.marussi

On Tue, Jul 30, 2024 at 10:33:40AM +0100, Luke Parkin wrote:
> Add counting of initial metrics
> 

LGTM.

Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-30  9:33 ` [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts Luke Parkin
@ 2024-07-30 16:23   ` Cristian Marussi
  2024-07-31 12:11   ` Sudeep Holla
  1 sibling, 0 replies; 16+ messages in thread
From: Cristian Marussi @ 2024-07-30 16:23 UTC (permalink / raw)
  To: Luke Parkin
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, sudeep.holla,
	cristian.marussi

On Tue, Jul 30, 2024 at 10:33:41AM +0100, Luke Parkin wrote:
> Create debugfs files for the metrics in the debug_counters array
>
 
Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 5/5] firmware: arm_scmi: Reset counters
  2024-07-30  9:33 ` [PATCH v4 5/5] firmware: arm_scmi: Reset counters Luke Parkin
@ 2024-07-30 16:37   ` Cristian Marussi
  0 siblings, 0 replies; 16+ messages in thread
From: Cristian Marussi @ 2024-07-30 16:37 UTC (permalink / raw)
  To: Luke Parkin
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, sudeep.holla,
	cristian.marussi

On Tue, Jul 30, 2024 at 10:33:42AM +0100, Luke Parkin wrote:
> Allow writing to atomics to reset
> Create reset_all counters debugfs file to reset all counters
> 

Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 0/5]  Add Per-transport SCMI debug statistics
  2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
                   ` (4 preceding siblings ...)
  2024-07-30  9:33 ` [PATCH v4 5/5] firmware: arm_scmi: Reset counters Luke Parkin
@ 2024-07-30 16:41 ` Cristian Marussi
  5 siblings, 0 replies; 16+ messages in thread
From: Cristian Marussi @ 2024-07-30 16:41 UTC (permalink / raw)
  To: Luke Parkin
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, sudeep.holla,
	cristian.marussi

On Tue, Jul 30, 2024 at 10:33:37AM +0100, Luke Parkin wrote:
> This series adds support for tracking information about the SCMI [Patch 2/3]
> A config option to enable this [Patch 2]
> Cleans up a unneeded call to handle_scmi_info [Patch 1]
> In [Patch 4] a selection of new debugfs entries to present these counters
> Then finally in [Patch 5] enabled writing on the debugfs entries to reset counts
> 
> Based on v6.9, Tested on Arm Juno [1]

Hi,

seems good to me. (...you have NOT rebased on v6.11-rc1 ... but it does
apply cleanly anyway apparently...or you dont have updated the above :D)

... anyway...let's see if Sudeep has any remarks...if not this will go
straight into -next soon so that bots can keep on bothering you on my behalf :P

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-30  9:33 ` [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts Luke Parkin
  2024-07-30 16:23   ` Cristian Marussi
@ 2024-07-31 12:11   ` Sudeep Holla
  2024-07-31 12:32     ` Cristian Marussi
  1 sibling, 1 reply; 16+ messages in thread
From: Sudeep Holla @ 2024-07-31 12:11 UTC (permalink / raw)
  To: Luke Parkin, Cristian Marussi
  Cc: linux-kernel, linux-arm-kernel, arm-scmi, cristian.marussi

On Tue, Jul 30, 2024 at 10:33:41AM +0100, Luke Parkin wrote:
> Create debugfs files for the metrics in the debug_counters array
> 
> Signed-off-by: Luke Parkin <luke.parkin@arm.com>
> ---
> v3->v4
> Use new locations for debug array
> Use counter instead of stats
> v2->v3
> Add extra statistics also added in v3
> v1->v2
> Only create stats pointer if stats are enabled
> Move stats debugfs creation into a seperate helper function
> ---
>  drivers/firmware/arm_scmi/driver.c | 38 ++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
> index 5acd3d324def..ec6434692d1a 100644
> --- a/drivers/firmware/arm_scmi/driver.c
> +++ b/drivers/firmware/arm_scmi/driver.c
> @@ -2847,6 +2847,41 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
>  	return NOTIFY_OK;
>  }
>  
> +static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
> +					struct dentry *trans)
> +{
> +	struct dentry *counters;
> +
> +	counters = debugfs_create_dir("counters", trans);
> +
> +	debugfs_create_atomic_t("sent_ok", 0400, counters,
> +				&dbg->counters[SENT_OK]);
> +	debugfs_create_atomic_t("sent_fail", 0400, counters,
> +				&dbg->counters[SENT_FAIL]);
> +	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
> +				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
> +	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
> +				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
> +	debugfs_create_atomic_t("response_ok", 0400, counters,
> +				&dbg->counters[RESPONSE_OK]);
> +	debugfs_create_atomic_t("notif_ok", 0400, counters,
> +				&dbg->counters[NOTIF_OK]);
> +	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
> +				&dbg->counters[DLYD_RESPONSE_OK]);
> +	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
> +				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
> +	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
> +				&dbg->counters[RESPONSE_POLLED_OK]);
> +	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
> +				&dbg->counters[ERR_MSG_UNEXPECTED]);
> +	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
> +				&dbg->counters[ERR_MSG_INVALID]);
> +	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
> +				&dbg->counters[ERR_MSG_NOMEM]);
> +	debugfs_create_atomic_t("err_protocol", 0400, counters,
> +				&dbg->counters[ERR_PROTOCOL]);

Just curious and wonder if we can keep all these read-only and have another
debugfs file which is write only to just reset the counters ?

Cristian,

Thoughts ? Or am I missing somthing ?

-- 
Regards,
Sudeep


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-31 12:11   ` Sudeep Holla
@ 2024-07-31 12:32     ` Cristian Marussi
  2024-07-31 12:40       ` Sudeep Holla
  0 siblings, 1 reply; 16+ messages in thread
From: Cristian Marussi @ 2024-07-31 12:32 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: Luke Parkin, Cristian Marussi, linux-kernel, linux-arm-kernel,
	arm-scmi

On Wed, Jul 31, 2024 at 01:11:22PM +0100, Sudeep Holla wrote:
> On Tue, Jul 30, 2024 at 10:33:41AM +0100, Luke Parkin wrote:
> > Create debugfs files for the metrics in the debug_counters array
> > 
> > Signed-off-by: Luke Parkin <luke.parkin@arm.com>
> > ---
> > v3->v4
> > Use new locations for debug array
> > Use counter instead of stats
> > v2->v3
> > Add extra statistics also added in v3
> > v1->v2
> > Only create stats pointer if stats are enabled
> > Move stats debugfs creation into a seperate helper function
> > ---
> >  drivers/firmware/arm_scmi/driver.c | 38 ++++++++++++++++++++++++++++++
> >  1 file changed, 38 insertions(+)
> > 
> > diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
> > index 5acd3d324def..ec6434692d1a 100644
> > --- a/drivers/firmware/arm_scmi/driver.c
> > +++ b/drivers/firmware/arm_scmi/driver.c
> > @@ -2847,6 +2847,41 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
> >  	return NOTIFY_OK;
> >  }
> >  
> > +static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
> > +					struct dentry *trans)
> > +{
> > +	struct dentry *counters;
> > +
> > +	counters = debugfs_create_dir("counters", trans);
> > +
> > +	debugfs_create_atomic_t("sent_ok", 0400, counters,
> > +				&dbg->counters[SENT_OK]);
> > +	debugfs_create_atomic_t("sent_fail", 0400, counters,
> > +				&dbg->counters[SENT_FAIL]);
> > +	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
> > +				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
> > +	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
> > +				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
> > +	debugfs_create_atomic_t("response_ok", 0400, counters,
> > +				&dbg->counters[RESPONSE_OK]);
> > +	debugfs_create_atomic_t("notif_ok", 0400, counters,
> > +				&dbg->counters[NOTIF_OK]);
> > +	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
> > +				&dbg->counters[DLYD_RESPONSE_OK]);
> > +	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
> > +				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
> > +	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
> > +				&dbg->counters[RESPONSE_POLLED_OK]);
> > +	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
> > +				&dbg->counters[ERR_MSG_UNEXPECTED]);
> > +	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
> > +				&dbg->counters[ERR_MSG_INVALID]);
> > +	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
> > +				&dbg->counters[ERR_MSG_NOMEM]);
> > +	debugfs_create_atomic_t("err_protocol", 0400, counters,
> > +				&dbg->counters[ERR_PROTOCOL]);
> 
> Just curious and wonder if we can keep all these read-only and have another
> debugfs file which is write only to just reset the counters ?
> 
> Cristian,
> 
> Thoughts ? Or am I missing somthing ?

Do you mean creating a bunch of additional reset_sent_ok
reset_<your_counters> that are just WO and used to reset each single
counter ?
(...I suppose because a global WO reset-all is already there...)

...I think it should be doable easily...but with a lot of duplication so
my next questions would be why ? what would be the gain ?
is it worth the effort being debug feats ?

Thanks,
Cristian



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-31 12:32     ` Cristian Marussi
@ 2024-07-31 12:40       ` Sudeep Holla
  2024-07-31 12:54         ` Cristian Marussi
  0 siblings, 1 reply; 16+ messages in thread
From: Sudeep Holla @ 2024-07-31 12:40 UTC (permalink / raw)
  To: Cristian Marussi
  Cc: Luke Parkin, linux-kernel, Sudeep Holla, linux-arm-kernel,
	arm-scmi

On Wed, Jul 31, 2024 at 01:32:00PM +0100, Cristian Marussi wrote:
> On Wed, Jul 31, 2024 at 01:11:22PM +0100, Sudeep Holla wrote:
> > On Tue, Jul 30, 2024 at 10:33:41AM +0100, Luke Parkin wrote:
> > > Create debugfs files for the metrics in the debug_counters array
> > > 
> > > Signed-off-by: Luke Parkin <luke.parkin@arm.com>
> > > ---
> > > v3->v4
> > > Use new locations for debug array
> > > Use counter instead of stats
> > > v2->v3
> > > Add extra statistics also added in v3
> > > v1->v2
> > > Only create stats pointer if stats are enabled
> > > Move stats debugfs creation into a seperate helper function
> > > ---
> > >  drivers/firmware/arm_scmi/driver.c | 38 ++++++++++++++++++++++++++++++
> > >  1 file changed, 38 insertions(+)
> > > 
> > > diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
> > > index 5acd3d324def..ec6434692d1a 100644
> > > --- a/drivers/firmware/arm_scmi/driver.c
> > > +++ b/drivers/firmware/arm_scmi/driver.c
> > > @@ -2847,6 +2847,41 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
> > >  	return NOTIFY_OK;
> > >  }
> > >  
> > > +static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
> > > +					struct dentry *trans)
> > > +{
> > > +	struct dentry *counters;
> > > +
> > > +	counters = debugfs_create_dir("counters", trans);
> > > +
> > > +	debugfs_create_atomic_t("sent_ok", 0400, counters,
> > > +				&dbg->counters[SENT_OK]);
> > > +	debugfs_create_atomic_t("sent_fail", 0400, counters,
> > > +				&dbg->counters[SENT_FAIL]);
> > > +	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
> > > +				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
> > > +	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
> > > +				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
> > > +	debugfs_create_atomic_t("response_ok", 0400, counters,
> > > +				&dbg->counters[RESPONSE_OK]);
> > > +	debugfs_create_atomic_t("notif_ok", 0400, counters,
> > > +				&dbg->counters[NOTIF_OK]);
> > > +	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
> > > +				&dbg->counters[DLYD_RESPONSE_OK]);
> > > +	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
> > > +				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
> > > +	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
> > > +				&dbg->counters[RESPONSE_POLLED_OK]);
> > > +	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
> > > +				&dbg->counters[ERR_MSG_UNEXPECTED]);
> > > +	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
> > > +				&dbg->counters[ERR_MSG_INVALID]);
> > > +	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
> > > +				&dbg->counters[ERR_MSG_NOMEM]);
> > > +	debugfs_create_atomic_t("err_protocol", 0400, counters,
> > > +				&dbg->counters[ERR_PROTOCOL]);
> > 
> > Just curious and wonder if we can keep all these read-only and have another
> > debugfs file which is write only to just reset the counters ?
> > 
> > Cristian,
> > 
> > Thoughts ? Or am I missing somthing ?
> 
> Do you mean creating a bunch of additional reset_sent_ok
> reset_<your_counters> that are just WO and used to reset each single
> counter ?

No, not at all. Sorry if my response meant that.

> (...I suppose because a global WO reset-all is already there...)
>

Indeed, I hadn't seen it carefully. Do we really need per counter reset ?
For me one global reset all with all files read-only should suffice.
Let me know if and why you think otherwise.

--
Regards,
Sudeep


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-31 12:40       ` Sudeep Holla
@ 2024-07-31 12:54         ` Cristian Marussi
  2024-07-31 13:00           ` Luke Parkin
  0 siblings, 1 reply; 16+ messages in thread
From: Cristian Marussi @ 2024-07-31 12:54 UTC (permalink / raw)
  To: Sudeep Holla
  Cc: Cristian Marussi, Luke Parkin, linux-kernel, linux-arm-kernel,
	arm-scmi

On Wed, Jul 31, 2024 at 01:40:49PM +0100, Sudeep Holla wrote:
> On Wed, Jul 31, 2024 at 01:32:00PM +0100, Cristian Marussi wrote:
> > On Wed, Jul 31, 2024 at 01:11:22PM +0100, Sudeep Holla wrote:
> > > On Tue, Jul 30, 2024 at 10:33:41AM +0100, Luke Parkin wrote:
> > > > Create debugfs files for the metrics in the debug_counters array
> > > > 
> > > > Signed-off-by: Luke Parkin <luke.parkin@arm.com>
> > > > ---
> > > > v3->v4
> > > > Use new locations for debug array
> > > > Use counter instead of stats
> > > > v2->v3
> > > > Add extra statistics also added in v3
> > > > v1->v2
> > > > Only create stats pointer if stats are enabled
> > > > Move stats debugfs creation into a seperate helper function
> > > > ---
> > > >  drivers/firmware/arm_scmi/driver.c | 38 ++++++++++++++++++++++++++++++
> > > >  1 file changed, 38 insertions(+)
> > > > 
> > > > diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
> > > > index 5acd3d324def..ec6434692d1a 100644
> > > > --- a/drivers/firmware/arm_scmi/driver.c
> > > > +++ b/drivers/firmware/arm_scmi/driver.c
> > > > @@ -2847,6 +2847,41 @@ static int scmi_device_request_notifier(struct notifier_block *nb,
> > > >  	return NOTIFY_OK;
> > > >  }
> > > >  
> > > > +static void scmi_debugfs_counters_setup(struct scmi_debug_info *dbg,
> > > > +					struct dentry *trans)
> > > > +{
> > > > +	struct dentry *counters;
> > > > +
> > > > +	counters = debugfs_create_dir("counters", trans);
> > > > +
> > > > +	debugfs_create_atomic_t("sent_ok", 0400, counters,
> > > > +				&dbg->counters[SENT_OK]);
> > > > +	debugfs_create_atomic_t("sent_fail", 0400, counters,
> > > > +				&dbg->counters[SENT_FAIL]);
> > > > +	debugfs_create_atomic_t("sent_fail_polling_unsupported", 0400, counters,
> > > > +				&dbg->counters[SENT_FAIL_POLLING_UNSUPPORTED]);
> > > > +	debugfs_create_atomic_t("sent_fail_channel_not_found", 0400, counters,
> > > > +				&dbg->counters[SENT_FAIL_CHANNEL_NOT_FOUND]);
> > > > +	debugfs_create_atomic_t("response_ok", 0400, counters,
> > > > +				&dbg->counters[RESPONSE_OK]);
> > > > +	debugfs_create_atomic_t("notif_ok", 0400, counters,
> > > > +				&dbg->counters[NOTIF_OK]);
> > > > +	debugfs_create_atomic_t("dlyd_resp_ok", 0400, counters,
> > > > +				&dbg->counters[DLYD_RESPONSE_OK]);
> > > > +	debugfs_create_atomic_t("xfers_resp_timeout", 0400, counters,
> > > > +				&dbg->counters[XFERS_RESPONSE_TIMEOUT]);
> > > > +	debugfs_create_atomic_t("response_polled_ok", 0400, counters,
> > > > +				&dbg->counters[RESPONSE_POLLED_OK]);
> > > > +	debugfs_create_atomic_t("err_msg_unexpected", 0400, counters,
> > > > +				&dbg->counters[ERR_MSG_UNEXPECTED]);
> > > > +	debugfs_create_atomic_t("err_msg_invalid", 0400, counters,
> > > > +				&dbg->counters[ERR_MSG_INVALID]);
> > > > +	debugfs_create_atomic_t("err_msg_nomem", 0400, counters,
> > > > +				&dbg->counters[ERR_MSG_NOMEM]);
> > > > +	debugfs_create_atomic_t("err_protocol", 0400, counters,
> > > > +				&dbg->counters[ERR_PROTOCOL]);
> > > 
> > > Just curious and wonder if we can keep all these read-only and have another
> > > debugfs file which is write only to just reset the counters ?
> > > 
> > > Cristian,
> > > 
> > > Thoughts ? Or am I missing somthing ?
> > 
> > Do you mean creating a bunch of additional reset_sent_ok
> > reset_<your_counters> that are just WO and used to reset each single
> > counter ?
> 
> No, not at all. Sorry if my response meant that.
> 
> > (...I suppose because a global WO reset-all is already there...)
> >
> 
> Indeed, I hadn't seen it carefully. Do we really need per counter reset ?
> For me one global reset all with all files read-only should suffice.
> Let me know if and why you think otherwise.

Well we don't need strictly anything since it is a debug/devel feat, it
just seemed handy to have a way to just reset one of the counters you are
actively working on, if you think about a testing or live devel
scenario...but it is not really needed and I have no strong opinion
about this...it was just a nice to have I asked Luke to add last minute...

...patch 5 indeed already adds also a global WO reset, beside switching all
the above counters to RW...it is just a matter to drop those RO->RW perms
changes in patch 5.

Thanks,
Cristian


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts
  2024-07-31 12:54         ` Cristian Marussi
@ 2024-07-31 13:00           ` Luke Parkin
  0 siblings, 0 replies; 16+ messages in thread
From: Luke Parkin @ 2024-07-31 13:00 UTC (permalink / raw)
  To: Cristian Marussi, Sudeep Holla; +Cc: linux-kernel, linux-arm-kernel, arm-scmi

>> Indeed, I hadn't seen it carefully. Do we really need per counter reset ?
>> For me one global reset all with all files read-only should suffice.
>> Let me know if and why you think otherwise.
>
> Well we don't need strictly anything since it is a debug/devel feat, it
> just seemed handy to have a way to just reset one of the counters you are
> actively working on, if you think about a testing or live devel
> scenario...but it is not really needed and I have no strong opinion
> about this...it was just a nice to have I asked Luke to add last minute...
>
From my perspective, there isn't really any drawbacks to allowing writes to the
per counter reset? It's just a nice-to-have without much drawback, unless I'm
missing something.

Thanks,
Luke


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2024-07-31 13:45 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-30  9:33 [PATCH v4 0/5] Add Per-transport SCMI debug statistics Luke Parkin
2024-07-30  9:33 ` [PATCH v4 1/5] firmware: arm_scmi: Remove superfluous handle_to_scmi_info Luke Parkin
2024-07-30  9:33 ` [PATCH v4 2/5] firmware: arm_scmi: Add support for tracking metrics Luke Parkin
2024-07-30 16:21   ` Cristian Marussi
2024-07-30  9:33 ` [PATCH v4 3/5] firmware: arm_scmi: Track basic SCMI metrics Luke Parkin
2024-07-30 16:22   ` Cristian Marussi
2024-07-30  9:33 ` [PATCH v4 4/5] firmware: arm_scmi: Create debugfs files for counts Luke Parkin
2024-07-30 16:23   ` Cristian Marussi
2024-07-31 12:11   ` Sudeep Holla
2024-07-31 12:32     ` Cristian Marussi
2024-07-31 12:40       ` Sudeep Holla
2024-07-31 12:54         ` Cristian Marussi
2024-07-31 13:00           ` Luke Parkin
2024-07-30  9:33 ` [PATCH v4 5/5] firmware: arm_scmi: Reset counters Luke Parkin
2024-07-30 16:37   ` Cristian Marussi
2024-07-30 16:41 ` [PATCH v4 0/5] Add Per-transport SCMI debug statistics Cristian Marussi

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).