From 1f79046bd73abf5cc1dc5ad1f817a7851496ae0c Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Mon, 23 May 2016 23:05:30 -0500 Subject: greybus: tracing: fix hd traces Currently there are two trace points defined for the Greybus host device structure. One records information when a message gets sent, and another when it gets received. Neither of these is really a host device event. We have trace points defined for messages that dump information about all sent and received messages. As a result, the information about sending messages over a host is redundant, and can go away. (Note that the message traces may need a little refinement so they produce all desired information.) Instead of these trace points, define some that are directly related to the host device abstraction: when one is created, added, deleted, or released (destroyed). These do not require a CPort ID or payload size, so eliminate those two parameters from the host device trace point prototype. Change the trace information recorded for a host device to be just a subset of interesting fields in a host device. Signed-off-by: Alex Elder Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/core.c | 6 ++-- drivers/staging/greybus/es2.c | 4 --- drivers/staging/greybus/greybus_trace.h | 52 ++++++++++++++++++++------------- drivers/staging/greybus/hd.c | 10 ++++++- 4 files changed, 44 insertions(+), 28 deletions(-) diff --git a/drivers/staging/greybus/core.c b/drivers/staging/greybus/core.c index 6d6a2bb..b1a7b11 100644 --- a/drivers/staging/greybus/core.c +++ b/drivers/staging/greybus/core.c @@ -14,8 +14,10 @@ #include "greybus.h" #include "greybus_trace.h" -EXPORT_TRACEPOINT_SYMBOL_GPL(gb_host_device_send); -EXPORT_TRACEPOINT_SYMBOL_GPL(gb_host_device_recv); +EXPORT_TRACEPOINT_SYMBOL_GPL(gb_hd_create); +EXPORT_TRACEPOINT_SYMBOL_GPL(gb_hd_release); +EXPORT_TRACEPOINT_SYMBOL_GPL(gb_hd_add); +EXPORT_TRACEPOINT_SYMBOL_GPL(gb_hd_del); /* Allow greybus to be disabled at boot if needed */ static bool nogreybus; diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c index 5bd348f..24fef34 100644 --- a/drivers/staging/greybus/es2.c +++ b/drivers/staging/greybus/es2.c @@ -16,8 +16,6 @@ #include "greybus.h" #include "kernel_ver.h" #include "connection.h" -#include "greybus_trace.h" - /* Fixed CPort numbers */ #define ES2_CPORT_CDSI0 16 @@ -469,7 +467,6 @@ static int message_send(struct gb_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) { dev_err(&udev->dev, "failed to submit out-urb: %d\n", retval); @@ -909,7 +906,6 @@ static void cport_in_callback(struct urb *urb) cport_id = gb_message_cport_unpack(header); 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 { diff --git a/drivers/staging/greybus/greybus_trace.h b/drivers/staging/greybus/greybus_trace.h index ba93873..cbbc959 100644 --- a/drivers/staging/greybus/greybus_trace.h +++ b/drivers/staging/greybus/greybus_trace.h @@ -158,45 +158,55 @@ DEFINE_OPERATION_EVENT(gb_operation_put_active); DECLARE_EVENT_CLASS(gb_host_device, - TP_PROTO(struct gb_host_device *hd, u16 intf_cport_id, - size_t payload_size), + TP_PROTO(struct gb_host_device *hd), - TP_ARGS(hd, intf_cport_id, payload_size), + TP_ARGS(hd), TP_STRUCT__entry( - __string(name, dev_name(&hd->dev)) - __field(u16, intf_cport_id) - __field(size_t, payload_size) + __field(int, bus_id) + __field(u8, num_cports) + __field(size_t, buffer_size_max) ), TP_fast_assign( - __assign_str(name, dev_name(&hd->dev)) - __entry->intf_cport_id = intf_cport_id; - __entry->payload_size = payload_size; + __entry->bus_id = hd->bus_id; + __entry->num_cports = hd->num_cports; + __entry->buffer_size_max = hd->buffer_size_max; ), - TP_printk("greybus:%s if_id=%u l=%zu", __get_str(name), - __entry->intf_cport_id, __entry->payload_size) + TP_printk("greybus: bus_id=%d num_cports=%hu mtu=%zu", + __entry->bus_id, __entry->num_cports, + __entry->buffer_size_max) ); #define DEFINE_HD_EVENT(name) \ DEFINE_EVENT(gb_host_device, name, \ - TP_PROTO(struct gb_host_device *hd, \ - u16 intf_cport_id, \ - size_t payload_size), \ - TP_ARGS(hd, intf_cport_id, payload_size)) + TP_PROTO(struct gb_host_device *hd), \ + TP_ARGS(hd)) + +/* + * Occurs after a new host device is successfully created, before + * its SVC has been set up. + */ +DEFINE_HD_EVENT(gb_hd_create); + +/* + * Occurs after the last reference to a host device has been + * dropped. + */ +DEFINE_HD_EVENT(gb_hd_release); /* - * Occurs immediately before calling usb_submit_urb() to send a - * message to the UniPro bridge. + * Occurs after a new host device has been added, after the + * connection to its SVC has * been enabled. */ -DEFINE_HD_EVENT(gb_host_device_send); +DEFINE_HD_EVENT(gb_hd_add); /* - * Occurs after receiving a UniPro message via the USB subsystem, - * just prior to handing it to the Greybus core for handling. + * Occurs when a host device is being disconnected from the AP USB + * host controller. */ -DEFINE_HD_EVENT(gb_host_device_recv); +DEFINE_HD_EVENT(gb_hd_del); #undef DEFINE_HD_EVENT diff --git a/drivers/staging/greybus/hd.c b/drivers/staging/greybus/hd.c index fba6d76..f64b592 100644 --- a/drivers/staging/greybus/hd.c +++ b/drivers/staging/greybus/hd.c @@ -11,7 +11,7 @@ #include #include "greybus.h" - +#include "greybus_trace.h" static struct ida gb_hd_bus_id_map; @@ -87,6 +87,8 @@ void gb_hd_cport_release(struct gb_host_device *hd, u16 cport_id) } ida_simple_remove(&hd->cport_id_map, cport_id); + + trace_gb_hd_release(hd); } static void gb_hd_release(struct device *dev) @@ -168,6 +170,8 @@ struct gb_host_device *gb_hd_create(struct gb_hd_driver *driver, device_initialize(&hd->dev); dev_set_name(&hd->dev, "greybus%d", hd->bus_id); + trace_gb_hd_create(hd); + hd->svc = gb_svc_create(hd); if (!hd->svc) { dev_err(&hd->dev, "failed to create svc\n"); @@ -193,12 +197,16 @@ int gb_hd_add(struct gb_host_device *hd) return ret; } + trace_gb_hd_add(hd); + return 0; } EXPORT_SYMBOL_GPL(gb_hd_add); void gb_hd_del(struct gb_host_device *hd) { + trace_gb_hd_del(hd); + /* * Tear down the svc and flush any on-going hotplug processing before * removing the remaining interfaces. -- cgit v1.1