From 6872c46129d00d0fcc0b32d73498fc86d6823137 Mon Sep 17 00:00:00 2001
From: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Date: Tue, 22 Sep 2015 18:06:39 -0700
Subject: [PATCH] greybus: es1, es2: hook tracepoints to hardware send/recv
 operations

This patch hooks tracepoints for the handoff point to/from hardware. With
these tracepoints in place we can view the time between gb_message_send and
usb_submit_urb and similarly we can view the time between cport_in_callback
and gb_message_recv_response/gb_message_recv_request

- trace_gb_host_device_send
- trace_gb_host_device_recv

It provides standard tracepoints at

/sys/kernel/debug/tracing/events/greybus/gb_host_device_send
/sys/kernel/debug/tracing/events/greybus/gb_host_device_recv

Giving outputs like

gb_host_device_recv: greybus:2-1 if_id=0000 l=10
gb_host_device_send: greybus:2-1 if_id=0000 l=10

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
---
 drivers/staging/greybus/es1.c | 8 ++++++--
 drivers/staging/greybus/es2.c | 8 ++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/greybus/es1.c b/drivers/staging/greybus/es1.c
index 72928152879b4..f2853ff4535d6 100644
--- a/drivers/staging/greybus/es1.c
+++ b/drivers/staging/greybus/es1.c
@@ -16,6 +16,7 @@
 #include "greybus.h"
 #include "kernel_ver.h"
 #include "connection.h"
+#include "greybus_trace.h"
 
 /* Memory sizes for the buffers sent to/from the ES1 controller */
 #define ES1_GBUF_MSG_SIZE_MAX	2048
@@ -215,6 +216,7 @@ static int message_send(struct greybus_host_device *hd, u16 cport_id,
 			  message->buffer, buffer_size,
 			  cport_out_callback, message);
 	urb->transfer_flags |= URB_ZERO_PACKET;
+	trace_gb_host_device_send(hd, cport_id, buffer_size);
 	retval = usb_submit_urb(urb, gfp_mask);
 	if (retval) {
 		pr_err("error %d submitting URB\n", retval);
@@ -369,12 +371,14 @@ static void cport_in_callback(struct urb *urb)
 	header = urb->transfer_buffer;
 	cport_id = gb_message_cport_unpack(header);
 
-	if (cport_id_valid(hd, cport_id))
+	if (cport_id_valid(hd, cport_id)) {
+		trace_gb_host_device_recv(hd, cport_id, urb->actual_length);
 		greybus_data_rcvd(hd, cport_id, urb->transfer_buffer,
 							urb->actual_length);
-	else
+	} else {
 		dev_err(dev, "%s: invalid cport id 0x%02x received\n",
 				__func__, cport_id);
+	}
 exit:
 	/* put our urb back in the request pool */
 	retval = usb_submit_urb(urb, GFP_ATOMIC);
diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c
index 7542101377819..8fee1162aea1b 100644
--- a/drivers/staging/greybus/es2.c
+++ b/drivers/staging/greybus/es2.c
@@ -16,6 +16,7 @@
 #include "greybus.h"
 #include "kernel_ver.h"
 #include "connection.h"
+#include "greybus_trace.h"
 
 /* Memory sizes for the buffers sent to/from the ES1 controller */
 #define ES1_GBUF_MSG_SIZE_MAX	2048
@@ -319,6 +320,7 @@ static int message_send(struct greybus_host_device *hd, u16 cport_id,
 			  message->buffer, buffer_size,
 			  cport_out_callback, message);
 	urb->transfer_flags |= URB_ZERO_PACKET;
+	trace_gb_host_device_send(hd, cport_id, buffer_size);
 	retval = usb_submit_urb(urb, gfp_mask);
 	if (retval) {
 		pr_err("error %d submitting URB\n", retval);
@@ -478,12 +480,14 @@ static void cport_in_callback(struct urb *urb)
 	header = urb->transfer_buffer;
 	cport_id = gb_message_cport_unpack(header);
 
-	if (cport_id_valid(hd, cport_id))
+	if (cport_id_valid(hd, cport_id)) {
+		trace_gb_host_device_recv(hd, cport_id, urb->actual_length);
 		greybus_data_rcvd(hd, cport_id, urb->transfer_buffer,
 							urb->actual_length);
-	else
+	} else {
 		dev_err(dev, "%s: invalid cport id 0x%02x received\n",
 				__func__, cport_id);
+	}
 exit:
 	/* put our urb back in the request pool */
 	retval = usb_submit_urb(urb, GFP_ATOMIC);
-- 
2.30.2