summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/operation.c
diff options
context:
space:
mode:
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>2015-09-18 16:38:45 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2015-09-18 14:07:28 -0700
commit5c8ad599b942a9a027045e69fc76c84f23c0acf0 (patch)
tree349c5dabf6cfe89e0869f031d4585654fc1747bd /drivers/staging/greybus/operation.c
parentbb03ed920166a1fa2df77d5ef96ff1d749fa2967 (diff)
greybus: operation, core: hook tracepoints into message opertions
This patch hooks tracepoints for greybus messages - trace_gb_message_send - trace_gb_message_recv_request - trace_gb_message_recv_response - trace_gb_message_cancel_outgoing - trace_gb_message_cancel_incoming It provides standard tracepoints at /sys/kernel/debug/tracing/events/greybus/gb_message_send /sys/kernel/debug/tracing/events/greybus/gb_message_recv_response /sys/kernel/debug/tracing/events/greybus/gb_message_recv_request /sys/kernel/debug/tracing/events/greybus/gb_message_cancel_outgoing /sys/kernel/debug/tracing/events/greybus/gb_message_cancel_incoming Giving outputs like gb_message_recv_request: greybus:1-1.1:0 op=0001 if_id=0000 hd_id=0000 l=2 gb_message_send: greybus:1-1.1:0 op=0001 if_id=0000 hd_id=0000 l=2 Similarly perf events can be viewed with standard perf tools e.g. root@beaglebone:~# perf list 'greybus:*' greybus:gb_message_send [Tracepoint event] greybus:gb_message_recv_request [Tracepoint event] greybus:gb_message_recv_response [Tracepoint event] greybus:gb_message_cancel_outgoing [Tracepoint event] greybus:gb_message_cancel_incoming [Tracepoint event] Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/operation.c')
-rw-r--r--drivers/staging/greybus/operation.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index f9b71e79b4c4..d159831f1421 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -15,6 +15,7 @@
#include <linux/workqueue.h>
#include "greybus.h"
+#include "greybus_trace.h"
static struct kmem_cache *gb_operation_cache;
static struct kmem_cache *gb_message_cache;
@@ -197,6 +198,7 @@ static int gb_message_send(struct gb_message *message, gfp_t gfp)
{
struct gb_connection *connection = message->operation->connection;
+ trace_gb_message_send(message);
return connection->hd->driver->message_send(connection->hd,
connection->hd_cport_id,
message,
@@ -834,6 +836,7 @@ static void gb_connection_recv_request(struct gb_connection *connection,
gb_operation_put(operation);
return;
}
+ trace_gb_message_recv_request(operation->request);
/*
* The initial reference to the operation will be dropped when the
@@ -872,6 +875,7 @@ static void gb_connection_recv_response(struct gb_connection *connection,
message->header->type, size, message_size);
errno = -EMSGSIZE;
}
+ trace_gb_message_recv_response(operation->response);
/* We must ignore the payload if a bad status is returned */
if (errno)
@@ -942,6 +946,7 @@ void gb_operation_cancel(struct gb_operation *operation, int errno)
gb_message_cancel(operation->request);
queue_work(gb_operation_completion_wq, &operation->work);
}
+ trace_gb_message_cancel_outgoing(operation->request);
atomic_inc(&operation->waiters);
wait_event(gb_operation_cancellation_queue,
@@ -968,6 +973,7 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno)
if (!gb_operation_result_set(operation, errno))
gb_message_cancel(operation->response);
}
+ trace_gb_message_cancel_incoming(operation->response);
atomic_inc(&operation->waiters);
wait_event(gb_operation_cancellation_queue,