All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] tracing: Allow synthetic events to pass around stacktraces
@ 2023-02-02 12:50 Dan Carpenter
  2023-02-02 15:26 ` Steven Rostedt
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2023-02-02 12:50 UTC (permalink / raw)
  To: rostedt; +Cc: linux-trace-kernel

Hello Steven Rostedt (Google),

The patch 00cf3d672a9d: "tracing: Allow synthetic events to pass
around stacktraces" from Jan 17, 2023, leads to the following Smatch
static checker warning:

	kernel/trace/trace_events_synth.c:567 trace_event_raw_event_synth()
	warn: inconsistent indenting

kernel/trace/trace_events_synth.c
    515 static notrace void trace_event_raw_event_synth(void *__data,
    516                                                 u64 *var_ref_vals,
    517                                                 unsigned int *var_ref_idx)
    518 {
    519         unsigned int i, n_u64, val_idx, len, data_size = 0;
    520         struct trace_event_file *trace_file = __data;
    521         struct synth_trace_event *entry;
    522         struct trace_event_buffer fbuffer;
    523         struct trace_buffer *buffer;
    524         struct synth_event *event;
    525         int fields_size = 0;
    526 
    527         event = trace_file->event_call->data;
    528 
    529         if (trace_trigger_soft_disabled(trace_file))
    530                 return;
    531 
    532         fields_size = event->n_u64 * sizeof(u64);
    533 
    534         for (i = 0; i < event->n_dynamic_fields; i++) {
    535                 unsigned int field_pos = event->dynamic_fields[i]->field_pos;
    536                 char *str_val;
    537 
    538                 val_idx = var_ref_idx[field_pos];
    539                 str_val = (char *)(long)var_ref_vals[val_idx];
    540 
    541                 len = kern_fetch_store_strlen((unsigned long)str_val);
    542 
    543                 fields_size += len;
    544         }
    545 
    546         /*
    547          * Avoid ring buffer recursion detection, as this event
    548          * is being performed within another event.
    549          */
    550         buffer = trace_file->tr->array_buffer.buffer;
    551         ring_buffer_nest_start(buffer);
    552 
    553         entry = trace_event_buffer_reserve(&fbuffer, trace_file,
    554                                            sizeof(*entry) + fields_size);
    555         if (!entry)
    556                 goto out;
    557 
    558         for (i = 0, n_u64 = 0; i < event->n_fields; i++) {
    559                 val_idx = var_ref_idx[i];
    560                 if (event->fields[i]->is_string) {
    561                         char *str_val = (char *)(long)var_ref_vals[val_idx];
    562 
    563                         len = trace_string(entry, event, str_val,
    564                                            event->fields[i]->is_dynamic,
    565                                            data_size, &n_u64);
    566                         data_size += len; /* only dynamic string increments */
--> 567                 } if (event->fields[i]->is_stack) {

else if intended?

    568                         long *stack = (long *)(long)var_ref_vals[val_idx];
    569 
    570                         len = trace_stack(entry, event, stack,
    571                                            data_size, &n_u64);
    572                         data_size += len;
    573                 } else {
    574                         struct synth_field *field = event->fields[i];
    575                         u64 val = var_ref_vals[val_idx];
    576 
    577                         switch (field->size) {
    578                         case 1:
    579                                 *(u8 *)&entry->fields[n_u64] = (u8)val;
    580                                 break;
    581 
    582                         case 2:
    583                                 *(u16 *)&entry->fields[n_u64] = (u16)val;
    584                                 break;
    585 
    586                         case 4:
    587                                 *(u32 *)&entry->fields[n_u64] = (u32)val;
    588                                 break;
    589 
    590                         default:
    591                                 entry->fields[n_u64] = val;
    592                                 break;
    593                         }
    594                         n_u64++;
    595                 }
    596         }
    597 
    598         trace_event_buffer_commit(&fbuffer);
    599 out:
    600         ring_buffer_nest_end(buffer);
    601 }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] tracing: Allow synthetic events to pass around stacktraces
  2023-02-02 12:50 [bug report] tracing: Allow synthetic events to pass around stacktraces Dan Carpenter
@ 2023-02-02 15:26 ` Steven Rostedt
  0 siblings, 0 replies; 2+ messages in thread
From: Steven Rostedt @ 2023-02-02 15:26 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-trace-kernel

On Thu, 2 Feb 2023 15:50:20 +0300
Dan Carpenter <error27@gmail.com> wrote:

> Hello Steven Rostedt (Google),
> 
> The patch 00cf3d672a9d: "tracing: Allow synthetic events to pass
> around stacktraces" from Jan 17, 2023, leads to the following Smatch
> static checker warning:
> 
> 	kernel/trace/trace_events_synth.c:567 trace_event_raw_event_synth()
> 	warn: inconsistent indenting

Already reported and a fix is pending.

  https://lore.kernel.org/all/20230131095237.63e3ca8d@gandalf.local.home/

Thanks,

-- Steve

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-02-02 15:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-02 12:50 [bug report] tracing: Allow synthetic events to pass around stacktraces Dan Carpenter
2023-02-02 15:26 ` Steven Rostedt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.