2014-11-24 11:40+0100, Jan Kiszka: > On 2014-11-24 11:12, Paolo Bonzini wrote: > > On 24/11/2014 05:36, nick wrote: > >> Greetings Again Gleb and others, > >> I am assuming in the code I am pasting below the fix me is obsolete now and I can remove it. :) > >> Cheers Nick > >> TP_printk("%s (0x%x)", > >> __print_symbolic(__entry->exception, kvm_trace_sym_exc), > >> /* FIXME: don't print error_code if not present */ > >> __entry->has_error ? __entry->error_code : 0) > >> ); > >> > > > > No, it's not obsolete, the idea is to print only > > > > %s > > > > instead of > > > > %s (0x%x) > > > > if __entry->has_error is false. I don't know the trace API well enough > > to know if that is possible. > > Last time I ran across such a scenario, it was not feasible and > essentially required separate tracepoints. But maybe Steven knows a trick. The format string has to be a string literal[1]; we could change it to allow expressions[2], but what we want is almost possible through a direct call to trace_seq_printf()[3]. The raw result would look like #define __print(fmt, args...) ({ \ const char *buf_start = trace_seq_buffer_ptr(p); \ trace_seq_printf(p, fmt, args); \ trace_seq_putc(p, '\0'); \ buf_start; \ }) TP_printk("%s%s", [...], __entry->has_error ? __print("(0x%x)", __entry->error_code) : "") and would be acceptable if something __print-like made it into a ftrace helper[4]. (Userspace won't be able to nicely print it otherwise.) --- 1: #define TP_printk(fmt, args...) fmt "\n", args 2: TP_printk(__entry->has_error ? "%s (0x%x)" : "%s", [...] 3: Already in scsi_dispatch_cmd_start or kvm_mmu_get_page tracepoints. 4: Like __print_hex or print_symbolic. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html