Message ID | 20200214115634.30e8ebf2@gandalf.local.home (mailing list archive) |
---|---|
State | Mainlined |
Commit | 045706bff837ee89c13f1ace173db71922c1c40b |
Headers | show |
Series | xhci: Do not open code __print_symbolic() in xhci trace events | expand |
On 14.2.2020 18.56, Steven Rostedt wrote: > From: Steven Rostedt (VMware) <rostedt@goodmis.org> > > libtraceevent (used by perf and trace-cmd) failed to parse the > xhci_urb_dequeue trace event. This is because the user space trace > event format parsing is not a full C compiler. It can handle some basic > logic, but is not meant to be able to handle everything C can do. > > In cases where a trace event field needs to be converted from a number > to a string, there's the __print_symbolic() macro that should be used: > > See samples/trace_events/trace-events-sample.h > > Some xhci trace events open coded the __print_symbolic() causing the > user spaces tools to fail to parse it. This has to be replaced with > __print_symbolic() instead. > > CC: stable@vger.kernel.org > Reported-by: Tzvetomir Stoyanov <tstoyanov@vmware.com> > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=206531 > Fixes: 5abdc2e6e12ff ("usb: host: xhci: add urb_enqueue/dequeue/giveback tracers") > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > --- Thanks Added to queue -Mathias
diff --git a/drivers/usb/host/xhci-trace.h b/drivers/usb/host/xhci-trace.h index 56eb867803a6..b19582b2a72c 100644 --- a/drivers/usb/host/xhci-trace.h +++ b/drivers/usb/host/xhci-trace.h @@ -289,23 +289,12 @@ DECLARE_EVENT_CLASS(xhci_log_urb, ), TP_printk("ep%d%s-%s: urb %p pipe %u slot %d length %d/%d sgs %d/%d stream %d flags %08x", __entry->epnum, __entry->dir_in ? "in" : "out", - ({ char *s; - switch (__entry->type) { - case USB_ENDPOINT_XFER_INT: - s = "intr"; - break; - case USB_ENDPOINT_XFER_CONTROL: - s = "control"; - break; - case USB_ENDPOINT_XFER_BULK: - s = "bulk"; - break; - case USB_ENDPOINT_XFER_ISOC: - s = "isoc"; - break; - default: - s = "UNKNOWN"; - } s; }), __entry->urb, __entry->pipe, __entry->slot_id, + __print_symbolic(__entry->type, + { USB_ENDPOINT_XFER_INT, "intr" }, + { USB_ENDPOINT_XFER_CONTROL, "control" }, + { USB_ENDPOINT_XFER_BULK, "bulk" }, + { USB_ENDPOINT_XFER_ISOC, "isoc" }), + __entry->urb, __entry->pipe, __entry->slot_id, __entry->actual, __entry->length, __entry->num_mapped_sgs, __entry->num_sgs, __entry->stream, __entry->flags )