linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct
@ 2020-06-15  7:22 Stanley Chu
  2020-06-15  7:22 ` [PATCH v3 1/2] scsi: ufs: Remove unused field in struct uic_command Stanley Chu
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Stanley Chu @ 2020-06-15  7:22 UTC (permalink / raw)
  To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb, asutoshd
  Cc: beanhuo, cang, matthias.bgg, bvanassche, linux-mediatek,
	linux-arm-kernel, linux-kernel, kuohong.wang, peter.wang,
	chun-hung.wu, andy.teng, cc.chou, chaotian.jing, Stanley Chu

Hi,
This series adds trace event for UIC commands and do a small cleanup in struct uic_command.

v2 -> v3:
  - Refactor "complete" event hooks in ufshcd_uic_cmd_compl() (Avri Altman)

v1 -> v2:
  - Rename "uic_send" to "send" and "uic_complete" to "complete"
  - Move "send" trace before UIC command is sent otherwise "send" trace may log incorrect arguments
  - Move "complete" trace to UIC interrupt handler to make logging time precise

Stanley Chu (2):
  scsi: ufs: Remove unused field in struct uic_command
  scsi: ufs: Add trace event for UIC commands

 drivers/scsi/ufs/ufshcd.c  | 26 ++++++++++++++++++++++++++
 drivers/scsi/ufs/ufshcd.h  |  4 ----
 include/trace/events/ufs.h | 31 +++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+), 4 deletions(-)

-- 
2.18.0

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

* [PATCH v3 1/2] scsi: ufs: Remove unused field in struct uic_command
  2020-06-15  7:22 [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Stanley Chu
@ 2020-06-15  7:22 ` Stanley Chu
  2020-06-15  7:22 ` [PATCH v3 2/2] scsi: ufs: Add trace event for UIC commands Stanley Chu
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Stanley Chu @ 2020-06-15  7:22 UTC (permalink / raw)
  To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb, asutoshd
  Cc: beanhuo, cang, matthias.bgg, bvanassche, linux-mediatek,
	linux-arm-kernel, linux-kernel, kuohong.wang, peter.wang,
	chun-hung.wu, andy.teng, cc.chou, chaotian.jing, Stanley Chu

Remove unused field "cmd_active" and "result" in struct ufs_command.

Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/scsi/ufs/ufshcd.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index bf97d616e597..7fa35c78342b 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -88,8 +88,6 @@ enum dev_cmd_type {
  * @argument1: UIC command argument 1
  * @argument2: UIC command argument 2
  * @argument3: UIC command argument 3
- * @cmd_active: Indicate if UIC command is outstanding
- * @result: UIC command result
  * @done: UIC command completion
  */
 struct uic_command {
@@ -97,8 +95,6 @@ struct uic_command {
 	u32 argument1;
 	u32 argument2;
 	u32 argument3;
-	int cmd_active;
-	int result;
 	struct completion done;
 };
 
-- 
2.18.0

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

* [PATCH v3 2/2] scsi: ufs: Add trace event for UIC commands
  2020-06-15  7:22 [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Stanley Chu
  2020-06-15  7:22 ` [PATCH v3 1/2] scsi: ufs: Remove unused field in struct uic_command Stanley Chu
@ 2020-06-15  7:22 ` Stanley Chu
  2020-06-15  7:31 ` [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Avri Altman
  2020-06-16  3:59 ` Martin K. Petersen
  3 siblings, 0 replies; 5+ messages in thread
From: Stanley Chu @ 2020-06-15  7:22 UTC (permalink / raw)
  To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb, asutoshd
  Cc: beanhuo, cang, matthias.bgg, bvanassche, linux-mediatek,
	linux-arm-kernel, linux-kernel, kuohong.wang, peter.wang,
	chun-hung.wu, andy.teng, cc.chou, chaotian.jing, Stanley Chu

Use the ftrace infrastructure to conditionally trace UFS UIC command
events.

New trace event "ufshcd_uic_command" is created, which samples the
following UFS UIC command data:
- Device name
- Optional identification string
- UIC command opcode
- UIC command argument1
- UIC command argument2
- UIC command argement3

Usage:
	echo 1 > /sys/kernel/debug/tracing/events/ufs/enable
	cat /sys/kernel/debug/tracing/trace_pipe

Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Acked-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/scsi/ufs/ufshcd.c  | 26 ++++++++++++++++++++++++++
 include/trace/events/ufs.h | 31 +++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index ad4fc829cbb2..1e1316ba7082 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -340,6 +340,26 @@ static void ufshcd_add_tm_upiu_trace(struct ufs_hba *hba, unsigned int tag,
 			&descp->input_param1);
 }
 
+static void ufshcd_add_uic_command_trace(struct ufs_hba *hba,
+					 struct uic_command *ucmd,
+					 const char *str)
+{
+	u32 cmd;
+
+	if (!trace_ufshcd_uic_command_enabled())
+		return;
+
+	if (!strcmp(str, "send"))
+		cmd = ucmd->command;
+	else
+		cmd = ufshcd_readl(hba, REG_UIC_COMMAND);
+
+	trace_ufshcd_uic_command(dev_name(hba->dev), str, cmd,
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_1),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3));
+}
+
 static void ufshcd_add_command_trace(struct ufs_hba *hba,
 		unsigned int tag, const char *str)
 {
@@ -2052,6 +2072,8 @@ ufshcd_dispatch_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 	ufshcd_writel(hba, uic_cmd->argument2, REG_UIC_COMMAND_ARG_2);
 	ufshcd_writel(hba, uic_cmd->argument3, REG_UIC_COMMAND_ARG_3);
 
+	ufshcd_add_uic_command_trace(hba, uic_cmd, "send");
+
 	/* Write UIC Cmd */
 	ufshcd_writel(hba, uic_cmd->command & COMMAND_OPCODE_MASK,
 		      REG_UIC_COMMAND);
@@ -4833,6 +4855,10 @@ static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 		complete(hba->uic_async_done);
 		retval = IRQ_HANDLED;
 	}
+
+	if (retval == IRQ_HANDLED)
+		ufshcd_add_uic_command_trace(hba, hba->active_uic_cmd,
+					     "complete");
 	return retval;
 }
 
diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h
index 5f300739240d..84841b3a7ffd 100644
--- a/include/trace/events/ufs.h
+++ b/include/trace/events/ufs.h
@@ -249,6 +249,37 @@ TRACE_EVENT(ufshcd_command,
 	)
 );
 
+TRACE_EVENT(ufshcd_uic_command,
+	TP_PROTO(const char *dev_name, const char *str, u32 cmd,
+		 u32 arg1, u32 arg2, u32 arg3),
+
+	TP_ARGS(dev_name, str, cmd, arg1, arg2, arg3),
+
+	TP_STRUCT__entry(
+		__string(dev_name, dev_name)
+		__string(str, str)
+		__field(u32, cmd)
+		__field(u32, arg1)
+		__field(u32, arg2)
+		__field(u32, arg3)
+	),
+
+	TP_fast_assign(
+		__assign_str(dev_name, dev_name);
+		__assign_str(str, str);
+		__entry->cmd = cmd;
+		__entry->arg1 = arg1;
+		__entry->arg2 = arg2;
+		__entry->arg3 = arg3;
+	),
+
+	TP_printk(
+		"%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x",
+		__get_str(str), __get_str(dev_name), __entry->cmd,
+		__entry->arg1, __entry->arg2, __entry->arg3
+	)
+);
+
 TRACE_EVENT(ufshcd_upiu,
 	TP_PROTO(const char *dev_name, const char *str, void *hdr, void *tsf),
 
-- 
2.18.0

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

* RE: [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct
  2020-06-15  7:22 [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Stanley Chu
  2020-06-15  7:22 ` [PATCH v3 1/2] scsi: ufs: Remove unused field in struct uic_command Stanley Chu
  2020-06-15  7:22 ` [PATCH v3 2/2] scsi: ufs: Add trace event for UIC commands Stanley Chu
@ 2020-06-15  7:31 ` Avri Altman
  2020-06-16  3:59 ` Martin K. Petersen
  3 siblings, 0 replies; 5+ messages in thread
From: Avri Altman @ 2020-06-15  7:31 UTC (permalink / raw)
  To: Stanley Chu, linux-scsi, martin.petersen, alim.akhtar, jejb, asutoshd
  Cc: beanhuo, cang, matthias.bgg, bvanassche, linux-mediatek,
	linux-arm-kernel, linux-kernel, kuohong.wang, peter.wang,
	chun-hung.wu, andy.teng, cc.chou, chaotian.jing

Looks good to me.
Thanks,
Avri

> 
> 
> Hi,
> This series adds trace event for UIC commands and do a small cleanup in
> struct uic_command.
> 
> v2 -> v3:
>   - Refactor "complete" event hooks in ufshcd_uic_cmd_compl() (Avri Altman)
> 
> v1 -> v2:
>   - Rename "uic_send" to "send" and "uic_complete" to "complete"
>   - Move "send" trace before UIC command is sent otherwise "send" trace may
> log incorrect arguments
>   - Move "complete" trace to UIC interrupt handler to make logging time
> precise
> 
> Stanley Chu (2):
>   scsi: ufs: Remove unused field in struct uic_command
>   scsi: ufs: Add trace event for UIC commands
> 
>  drivers/scsi/ufs/ufshcd.c  | 26 ++++++++++++++++++++++++++
>  drivers/scsi/ufs/ufshcd.h  |  4 ----
>  include/trace/events/ufs.h | 31 +++++++++++++++++++++++++++++++
>  3 files changed, 57 insertions(+), 4 deletions(-)
> 
> --
> 2.18.0

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

* Re: [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct
  2020-06-15  7:22 [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Stanley Chu
                   ` (2 preceding siblings ...)
  2020-06-15  7:31 ` [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Avri Altman
@ 2020-06-16  3:59 ` Martin K. Petersen
  3 siblings, 0 replies; 5+ messages in thread
From: Martin K. Petersen @ 2020-06-16  3:59 UTC (permalink / raw)
  To: linux-scsi, jejb, avri.altman, Stanley Chu, asutoshd, alim.akhtar
  Cc: Martin K . Petersen, peter.wang, beanhuo, matthias.bgg,
	chaotian.jing, cc.chou, bvanassche, kuohong.wang, cang,
	andy.teng, linux-kernel, linux-arm-kernel, chun-hung.wu,
	linux-mediatek

On Mon, 15 Jun 2020 15:22:33 +0800, Stanley Chu wrote:

> This series adds trace event for UIC commands and do a small cleanup in struct uic_command.
> 
> v2 -> v3:
>   - Refactor "complete" event hooks in ufshcd_uic_cmd_compl() (Avri Altman)
> 
> v1 -> v2:
>   - Rename "uic_send" to "send" and "uic_complete" to "complete"
>   - Move "send" trace before UIC command is sent otherwise "send" trace may log incorrect arguments
>   - Move "complete" trace to UIC interrupt handler to make logging time precise
> 
> [...]

Applied to 5.9/scsi-queue, thanks!

[1/2] scsi: ufs: Remove unused field in struct uic_command
      https://git.kernel.org/mkp/scsi/c/7a7df52dbc71
[2/2] scsi: ufs: Add trace event for UIC commands
      https://git.kernel.org/mkp/scsi/c/aa5c697988b4

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2020-06-16  4:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-15  7:22 [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Stanley Chu
2020-06-15  7:22 ` [PATCH v3 1/2] scsi: ufs: Remove unused field in struct uic_command Stanley Chu
2020-06-15  7:22 ` [PATCH v3 2/2] scsi: ufs: Add trace event for UIC commands Stanley Chu
2020-06-15  7:31 ` [PATCH v3 0/2] scsi: ufs: Add trace event for UIC commands and cleanup UIC struct Avri Altman
2020-06-16  3:59 ` Martin K. Petersen

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