From 6872c46129d00d0fcc0b32d73498fc86d6823137 Mon Sep 17 00:00:00 2001 From: Bryan O'Donoghue 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 Signed-off-by: Greg Kroah-Hartman --- 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 72928152879b..f2853ff4535d 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 754210137781..8fee1162aea1 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);