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 <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
#include "greybus.h"
#include "greybus_trace.h"
#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;
/* Allow greybus to be disabled at boot if needed */
static bool nogreybus;
#include "greybus.h"
#include "kernel_ver.h"
#include "connection.h"
#include "greybus.h"
#include "kernel_ver.h"
#include "connection.h"
-#include "greybus_trace.h"
-
/* Fixed CPort numbers */
#define ES2_CPORT_CDSI0 16
/* Fixed CPort numbers */
#define ES2_CPORT_CDSI0 16
message->buffer, buffer_size,
cport_out_callback, message);
urb->transfer_flags |= URB_ZERO_PACKET;
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);
retval = usb_submit_urb(urb, gfp_mask);
if (retval) {
dev_err(&udev->dev, "failed to submit out-urb: %d\n", retval);
cport_id = gb_message_cport_unpack(header);
if (cport_id_valid(hd, cport_id)) {
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 {
greybus_data_rcvd(hd, cport_id, urb->transfer_buffer,
urb->actual_length);
} else {
DECLARE_EVENT_CLASS(gb_host_device,
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),
- __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)
- __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, \
);
#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);
#include <linux/slab.h>
#include "greybus.h"
#include <linux/slab.h>
#include "greybus.h"
+#include "greybus_trace.h"
static struct ida gb_hd_bus_id_map;
static struct ida gb_hd_bus_id_map;
}
ida_simple_remove(&hd->cport_id_map, cport_id);
}
ida_simple_remove(&hd->cport_id_map, cport_id);
+
+ trace_gb_hd_release(hd);
}
static void gb_hd_release(struct device *dev)
}
static void gb_hd_release(struct device *dev)
device_initialize(&hd->dev);
dev_set_name(&hd->dev, "greybus%d", hd->bus_id);
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");
hd->svc = gb_svc_create(hd);
if (!hd->svc) {
dev_err(&hd->dev, "failed to create svc\n");
return 0;
}
EXPORT_SYMBOL_GPL(gb_hd_add);
void gb_hd_del(struct gb_host_device *hd)
{
return 0;
}
EXPORT_SYMBOL_GPL(gb_hd_add);
void gb_hd_del(struct gb_host_device *hd)
{
/*
* Tear down the svc and flush any on-going hotplug processing before
* removing the remaining interfaces.
/*
* Tear down the svc and flush any on-going hotplug processing before
* removing the remaining interfaces.