linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ipmi: add ipmi tracepoints
@ 2013-10-30 10:35 Hushan Jia
  0 siblings, 0 replies; only message in thread
From: Hushan Jia @ 2013-10-30 10:35 UTC (permalink / raw)
  To: Corey Minyard, Steven Rostedt, Frederic Weisbecker, Ingo Molnar
  Cc: linux-kernel, openipmi-developer, oliver.yang, hushan.jia

From: Hushan Jia <hushan.jia@emc.com>

Sometimes it's essential to tracing ipmi communications when doing platform related work,
including the commands and messages between user spaces and the system interface.
This patch add 5 tracepoints to ipmi driver, and remove old debugging output code:

ipmi_cmd_request
ipmi_smi_msg_send
ipmi_smi_msg_invalidcmd
ipmi_smi_msg_recv
ipmi_smi_msg_resend

Signed-off-by: Hushan Jia <hushan.jia@emc.com>
Signed-off-by: Oliver Yang <oliver.yang@emc.com>
Cc: Corey Minyard <minyard@acm.org>

---
 drivers/char/ipmi/ipmi_msghandler.c |   44 +++++-------------
 include/trace/events/ipmi.h         |   86 +++++++++++++++++++++++++++++++++++
 2 files changed, 97 insertions(+), 33 deletions(-)
 create mode 100644 include/trace/events/ipmi.h

diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index ec4e10f..d89dd78 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -431,6 +431,9 @@ struct ipmi_smi {
 };
 #define to_si_intf_from_dev(device) container_of(device, struct ipmi_smi, dev)
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/ipmi.h>
+
 /**
  * The driver model view of the IPMI messaging driver.
  */
@@ -1458,6 +1461,7 @@ static int i_ipmi_request(ipmi_user_t          user,
 	unsigned long            flags;
 	struct ipmi_smi_handlers *handlers;
 
+	trace_ipmi_cmd_request(intf, msg);
 
 	if (supplied_recv)
 		recv_msg = supplied_recv;
@@ -1806,14 +1810,7 @@ static int i_ipmi_request(ipmi_user_t          user,
 		goto out_err;
 	}
 
-#ifdef DEBUG_MSGING
-	{
-		int m;
-		for (m = 0; m < smi_msg->data_size; m++)
-			printk(" %2.2x", smi_msg->data[m]);
-		printk("\n");
-	}
-#endif
+	trace_ipmi_smi_msg_send(smi_msg);
 
 	handlers->sender(intf->send_info, smi_msg, priority);
 	rcu_read_unlock();
@@ -3132,15 +3129,8 @@ static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
 		msg->data[10] = ipmb_checksum(&(msg->data[6]), 4);
 		msg->data_size = 11;
 
-#ifdef DEBUG_MSGING
-	{
-		int m;
-		printk("Invalid command:");
-		for (m = 0; m < msg->data_size; m++)
-			printk(" %2.2x", msg->data[m]);
-		printk("\n");
-	}
-#endif
+		trace_ipmi_smi_msg_invalidcmd(msg);
+
 		rcu_read_lock();
 		handlers = intf->handlers;
 		if (handlers) {
@@ -3647,13 +3637,8 @@ static int handle_one_recv_msg(ipmi_smi_t          intf,
 	int requeue;
 	int chan;
 
-#ifdef DEBUG_MSGING
-	int m;
-	printk("Recv:");
-	for (m = 0; m < msg->rsp_size; m++)
-		printk(" %2.2x", msg->rsp[m]);
-	printk("\n");
-#endif
+	trace_ipmi_smi_msg_recv(msg);
+
 	if (msg->rsp_size < 2) {
 		/* Message is too small to be correct. */
 		printk(KERN_WARNING PFX "BMC returned to small a message"
@@ -3951,15 +3936,8 @@ smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
 	smi_msg->data_size = recv_msg->msg.data_len;
 	smi_msg->msgid = STORE_SEQ_IN_MSGID(seq, seqid);
 
-#ifdef DEBUG_MSGING
-	{
-		int m;
-		printk("Resend: ");
-		for (m = 0; m < smi_msg->data_size; m++)
-			printk(" %2.2x", smi_msg->data[m]);
-		printk("\n");
-	}
-#endif
+	trace_ipmi_smi_msg_resend(smi_msg);
+
 	return smi_msg;
 }
 
diff --git a/include/trace/events/ipmi.h b/include/trace/events/ipmi.h
new file mode 100644
index 0000000..07599b6
--- /dev/null
+++ b/include/trace/events/ipmi.h
@@ -0,0 +1,86 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM ipmi
+
+#if !defined(_TRACE_IPMI_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_IPMI_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(ipmi_cmd_request,
+
+	TP_PROTO(ipmi_smi_t intf,
+		struct kernel_ipmi_msg *msg),
+
+	TP_ARGS(intf, msg),
+
+	TP_STRUCT__entry(
+		__string(   devname, intf->my_dev_name )
+		__field(    unsigned char, netfn )
+		__field(    unsigned char, cmd  )
+		__field(    unsigned short, data_len    )
+		__dynamic_array(    char, data, msg->data_len   )
+	),
+
+	TP_fast_assign(
+		__assign_str(devname, intf->my_dev_name);
+		__entry->netfn          = msg->netfn;
+		__entry->cmd            = msg->cmd;
+		__entry->data_len       = msg->data_len;
+		memcpy(__get_dynamic_array(data), msg->data, msg->data_len);
+	),
+
+	TP_printk("dev=%s netfn=%02x cmd=%02x data[%d]=%s",
+		__get_str(devname),
+		__entry->netfn,
+		__entry->cmd,
+		__entry->data_len,
+		__print_hex(__get_dynamic_array(data), __entry->data_len)
+	 )
+);
+
+DECLARE_EVENT_CLASS(ipmi_smi_msg_template,
+
+	TP_PROTO(struct ipmi_smi_msg *msg),
+
+	TP_ARGS(msg),
+
+	TP_STRUCT__entry(
+		__field(    int, data_size   )
+		__dynamic_array(    unsigned char, data, msg->data_size  )
+	),
+
+	TP_fast_assign(
+		__entry->data_size    = msg->data_size;
+		memcpy(__get_dynamic_array(data), msg->data, msg->data_size);
+	),
+
+	TP_printk("data[%d]=%s", __entry->data_size,
+		__print_hex(__get_dynamic_array(data), __entry->data_size)
+	)
+);
+
+DEFINE_EVENT(ipmi_smi_msg_template, ipmi_smi_msg_send,
+	TP_PROTO(struct ipmi_smi_msg *msg),
+	TP_ARGS(msg)
+);
+
+DEFINE_EVENT(ipmi_smi_msg_template, ipmi_smi_msg_invalidcmd,
+	TP_PROTO(struct ipmi_smi_msg *msg),
+	TP_ARGS(msg)
+);
+
+DEFINE_EVENT(ipmi_smi_msg_template, ipmi_smi_msg_recv,
+	TP_PROTO(struct ipmi_smi_msg *msg),
+	TP_ARGS(msg)
+);
+
+DEFINE_EVENT(ipmi_smi_msg_template, ipmi_smi_msg_resend,
+	TP_PROTO(struct ipmi_smi_msg *msg),
+	TP_ARGS(msg)
+);
+
+#endif /* _TRACE_IPMI_H */
+
+/* This part must be out of the protection */
+#include <trace/define_trace.h>
+
-- 
1.7.7




^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-10-30 10:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-30 10:35 [PATCH] ipmi: add ipmi tracepoints Hushan Jia

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