All of lore.kernel.org
 help / color / mirror / Atom feed
* kernelshark plugins and ftrace array fields
@ 2010-09-02 12:19 Avi Kivity
  2010-09-02 14:25 ` Steven Rostedt
  0 siblings, 1 reply; 10+ messages in thread
From: Avi Kivity @ 2010-09-02 12:19 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, KVM list

  I'd like to add enhance kvm_emulate_insn display in kernelshark to 
show the disassembly of the instruction being emulated.  However, 
pevent_get_field_val() doesn't support arrays (the instruction is 
provided in a 15-byte array).

Can you add support for arrays in the kernelshark API?  With that, it 
looks like adding disassembly output to the kvm plugin should be quite 
simple.

-- 
error compiling committee.c: too many arguments to function


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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 12:19 kernelshark plugins and ftrace array fields Avi Kivity
@ 2010-09-02 14:25 ` Steven Rostedt
  2010-09-02 14:34   ` Avi Kivity
  0 siblings, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 14:25 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 15:19 +0300, Avi Kivity wrote:
> I'd like to add enhance kvm_emulate_insn display in kernelshark to 
> show the disassembly of the instruction being emulated.  However, 
> pevent_get_field_val() doesn't support arrays (the instruction is 
> provided in a 15-byte array).
> 
> Can you add support for arrays in the kernelshark API?  With that, it 
> looks like adding disassembly output to the kvm plugin should be quite 
> simple.
> 

Sure, I could add a pevent_get_field_array() or something. Could you
tell me the event and give me an example of what you want to do.

Thanks,

-- Steve




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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 14:25 ` Steven Rostedt
@ 2010-09-02 14:34   ` Avi Kivity
  2010-09-02 15:52     ` Steven Rostedt
  2010-09-02 18:16     ` Steven Rostedt
  0 siblings, 2 replies; 10+ messages in thread
From: Avi Kivity @ 2010-09-02 14:34 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, KVM list

  On 09/02/2010 05:25 PM, Steven Rostedt wrote:
> On Thu, 2010-09-02 at 15:19 +0300, Avi Kivity wrote:
>> I'd like to add enhance kvm_emulate_insn display in kernelshark to
>> show the disassembly of the instruction being emulated.  However,
>> pevent_get_field_val() doesn't support arrays (the instruction is
>> provided in a 15-byte array).
>>
>> Can you add support for arrays in the kernelshark API?  With that, it
>> looks like adding disassembly output to the kvm plugin should be quite
>> simple.
>>
> Sure, I could add a pevent_get_field_array() or something. Could you
> tell me the event and give me an example of what you want to do.

plugin_kvm.c:

kvm_emulate_insn_handler()
{
    fetch insn array and len field
    feed into disassembler
    trace_seq_printf() the disassembled instruction
}

-- 
error compiling committee.c: too many arguments to function


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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 14:34   ` Avi Kivity
@ 2010-09-02 15:52     ` Steven Rostedt
  2010-09-02 16:06       ` Avi Kivity
  2010-09-02 18:16     ` Steven Rostedt
  1 sibling, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 15:52 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 17:34 +0300, Avi Kivity wrote:
> On 09/02/2010 05:25 PM, Steven Rostedt wrote:
> > On Thu, 2010-09-02 at 15:19 +0300, Avi Kivity wrote:
> >> I'd like to add enhance kvm_emulate_insn display in kernelshark to
> >> show the disassembly of the instruction being emulated.  However,
> >> pevent_get_field_val() doesn't support arrays (the instruction is
> >> provided in a 15-byte array).
> >>
> >> Can you add support for arrays in the kernelshark API?  With that, it
> >> looks like adding disassembly output to the kvm plugin should be quite
> >> simple.
> >>
> > Sure, I could add a pevent_get_field_array() or something. Could you
> > tell me the event and give me an example of what you want to do.
> 
> plugin_kvm.c:
> 
> kvm_emulate_insn_handler()
> {
>     fetch insn array and len field
>     feed into disassembler
>     trace_seq_printf() the disassembled instruction
> }

I don't have that tracepoint in any of my kernels. Is this new? I guess
if I see the TRACE_EVENT() I could emulate something and work with it.

-- Steve




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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 15:52     ` Steven Rostedt
@ 2010-09-02 16:06       ` Avi Kivity
  2010-09-02 17:55         ` Steven Rostedt
  0 siblings, 1 reply; 10+ messages in thread
From: Avi Kivity @ 2010-09-02 16:06 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, KVM list

  On 09/02/2010 06:52 PM, Steven Rostedt wrote:
>
>> plugin_kvm.c:
>>
>> kvm_emulate_insn_handler()
>> {
>>      fetch insn array and len field
>>      feed into disassembler
>>      trace_seq_printf() the disassembled instruction
>> }
> I don't have that tracepoint in any of my kernels. Is this new? I guess
> if I see the TRACE_EVENT() I could emulate something and work with it.
>

e46479f852ada, in 2.6.35-rc1.

-- 
error compiling committee.c: too many arguments to function


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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 16:06       ` Avi Kivity
@ 2010-09-02 17:55         ` Steven Rostedt
  0 siblings, 0 replies; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 17:55 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 19:06 +0300, Avi Kivity wrote:
> On 09/02/2010 06:52 PM, Steven Rostedt wrote:
> >
> >> plugin_kvm.c:
> >>
> >> kvm_emulate_insn_handler()
> >> {
> >>      fetch insn array and len field
> >>      feed into disassembler
> >>      trace_seq_printf() the disassembled instruction
> >> }
> > I don't have that tracepoint in any of my kernels. Is this new? I guess
> > if I see the TRACE_EVENT() I could emulate something and work with it.
> >
> 
> e46479f852ada, in 2.6.35-rc1.


Oops! sorry. All my boxes with KVM enabled were running 2.6.34 and I was
looking in the code under include/trace/events/kvm.h, forgetting that
these are defined in the arch/x86 tree.

Found it, thanks.

-- Steve




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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 14:34   ` Avi Kivity
  2010-09-02 15:52     ` Steven Rostedt
@ 2010-09-02 18:16     ` Steven Rostedt
  2010-09-02 18:38       ` Steven Rostedt
  1 sibling, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 18:16 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 17:34 +0300, Avi Kivity wrote:
> On 09/02/2010 05:25 PM, Steven Rostedt wrote:
> > On Thu, 2010-09-02 at 15:19 +0300, Avi Kivity wrote:
> >> I'd like to add enhance kvm_emulate_insn display in kernelshark to
> >> show the disassembly of the instruction being emulated.  However,
> >> pevent_get_field_val() doesn't support arrays (the instruction is
> >> provided in a 15-byte array).
> >>
> >> Can you add support for arrays in the kernelshark API?  With that, it
> >> looks like adding disassembly output to the kvm plugin should be quite
> >> simple.
> >>
> > Sure, I could add a pevent_get_field_array() or something. Could you
> > tell me the event and give me an example of what you want to do.
> 
> plugin_kvm.c:
> 
> kvm_emulate_insn_handler()
> {
>     fetch insn array and len field
>     feed into disassembler
>     trace_seq_printf() the disassembled instruction
> }
> 

OK, with no modification of what I have already, I just created this
handler:

static int
kvm_emulate_insn_handler(struct trace_seq *s, struct record *record,
                         struct event_format *event, void *context)
{
        struct format_field *field;
        unsigned char *data = record->data;
        int i;

        field = pevent_find_field(event, "insn");
        if (!field) {
                trace_seq_puts(s, "Can't find inst field");
                return 0;
        }

        trace_seq_puts(s, "insn: ");
        for (i = 0; i < field->size; i++) {
                trace_seq_printf(s, "%s%02x",
                                 i ? "," : "",
                                 data[field->offset + i]);
        }

        return 0;
}


I think this is what you would want, right?

-- Steve




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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 18:16     ` Steven Rostedt
@ 2010-09-02 18:38       ` Steven Rostedt
  2010-09-02 19:24         ` Steven Rostedt
  0 siblings, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 18:38 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 14:16 -0400, Steven Rostedt wrote:
> On Thu, 2010-09-02 at 17:34 +0300, Avi Kivity wrote:

> 
> OK, with no modification of what I have already, I just created this
> handler:
> 
> static int
> kvm_emulate_insn_handler(struct trace_seq *s, struct record *record,
>                          struct event_format *event, void *context)
> {
>         struct format_field *field;
>         unsigned char *data = record->data;
>         int i;
> 
>         field = pevent_find_field(event, "insn");
>         if (!field) {
>                 trace_seq_puts(s, "Can't find inst field");
>                 return 0;
>         }
> 
>         trace_seq_puts(s, "insn: ");
>         for (i = 0; i < field->size; i++) {
>                 trace_seq_printf(s, "%s%02x",
>                                  i ? "," : "",
>                                  data[field->offset + i]);
>         }
> 
>         return 0;
> }
> 
> 
> I think this is what you would want, right?

I think I will add a:

void *pevent_get_field_raw(stuct trace_seq *s,
			struct event_format *event, 
			char *field_name,
			struct record *record,
			int **field_len);

which will return a pointer into record->data and set the field_len to
the actual size.

This will be useful for dynamic arrays too, since it is more complex
than just using a field->offset.

-- Steve



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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 18:38       ` Steven Rostedt
@ 2010-09-02 19:24         ` Steven Rostedt
  2010-09-05  7:08           ` Avi Kivity
  0 siblings, 1 reply; 10+ messages in thread
From: Steven Rostedt @ 2010-09-02 19:24 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, KVM list

On Thu, 2010-09-02 at 14:38 -0400, Steven Rostedt wrote:

> I think I will add a:
> 
> void *pevent_get_field_raw(stuct trace_seq *s,
> 			struct event_format *event, 
> 			char *field_name,
> 			struct record *record,
> 			int **field_len);
> 
> which will return a pointer into record->data and set the field_len to
> the actual size.
> 
> This will be useful for dynamic arrays too, since it is more complex
> than just using a field->offset.

I just pushed out the changes and my new example looks like this:

static int
kvm_emulate_insn_handler(struct trace_seq *s, struct record *record,
                         struct event_format *event, void *context)
{
        unsigned char *data;
        int len;
        int i;

        data = pevent_get_field_raw(s, event, "insn", record,
                                    &len, 1);
        if (!data)
                return -1;

        trace_seq_puts(s, "insn: ");
        for (i = 0; i < len; i++) {
                trace_seq_printf(s, "%s%02x",
                                 i ? "," : "",
                                 data[i]);
        }

        return 0;
}



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

* Re: kernelshark plugins and ftrace array fields
  2010-09-02 19:24         ` Steven Rostedt
@ 2010-09-05  7:08           ` Avi Kivity
  0 siblings, 0 replies; 10+ messages in thread
From: Avi Kivity @ 2010-09-05  7:08 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, KVM list

  On 09/02/2010 10:24 PM, Steven Rostedt wrote:
>
> I just pushed out the changes and my new example looks like this:
>
> static int
> kvm_emulate_insn_handler(struct trace_seq *s, struct record *record,
>                           struct event_format *event, void *context)
> {
>          unsigned char *data;
>          int len;
>          int i;
>
>          data = pevent_get_field_raw(s, event, "insn", record,
>                                      &len, 1);
>          if (!data)
>                  return -1;
>
>          trace_seq_puts(s, "insn: ");
>          for (i = 0; i<  len; i++) {
>                  trace_seq_printf(s, "%s%02x",
>                                   i ? "," : "",
>                                   data[i]);
>          }
>
>          return 0;
> }
>

That looks perfect.  But on which branch can I find it?

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.


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

end of thread, other threads:[~2010-09-05  7:08 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-02 12:19 kernelshark plugins and ftrace array fields Avi Kivity
2010-09-02 14:25 ` Steven Rostedt
2010-09-02 14:34   ` Avi Kivity
2010-09-02 15:52     ` Steven Rostedt
2010-09-02 16:06       ` Avi Kivity
2010-09-02 17:55         ` Steven Rostedt
2010-09-02 18:16     ` Steven Rostedt
2010-09-02 18:38       ` Steven Rostedt
2010-09-02 19:24         ` Steven Rostedt
2010-09-05  7:08           ` Avi Kivity

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.