lkml.org 
[lkml]   [2020]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC PATCH bpf-next 0/6] bpf, printk: add BTF-based type printing
    Em Sat, Apr 18, 2020 at 09:05:36AM -0700, Alexei Starovoitov escreveu:
    > On Fri, Apr 17, 2020 at 11:42:34AM +0100, Alan Maguire wrote:
    > > ...gives us:
    > >
    > > {{{.next=00000000c7916e9c,.prev=00000000c7916e9c,{.dev=00000000c7916e9c|.dev_scratch=0}}|.rbnode={.__rb_parent_color=0,

    > This is unreadable.
    > I like the choice of C style output, but please format it similar to drgn. Like:
    > *(struct task_struct *)0xffff889ff8a08000 = {
    > .thread_info = (struct thread_info){
    > .flags = (unsigned long)0,
    > .status = (u32)0,
    > },
    > .state = (volatile long)1,
    > .stack = (void *)0xffffc9000c4dc000,
    > .usage = (refcount_t){
    > .refs = (atomic_t){
    > .counter = (int)2,
    > },
    > },
    > .flags = (unsigned int)4194560,
    > .ptrace = (unsigned int)0,

    > I like Arnaldo's idea as well, but I prefer zeros to be dropped by default.
    > Just like %d doesn't print leading zeros by default.
    > "%p0<struct sk_buff>" would print them.

    I was thinking about another way to compress the output of a given data
    structure someone is tracking, having to print it from time to time,
    which is to store a copy of the struct as you print it and then, when
    printing it again, print just its pointer, i.e. that:

    *(struct task_struct *)0xffff889ff8a08000 = {

    Line, then just printing the fields that changed, say just that refcount
    was bumped, so it first print:

    *(struct task_struct *)0xffff889ff8a08000 = {
    .thread_info = (struct thread_info){
    .flags = (unsigned long)0,
    .status = (u32)0,
    },
    .state = (volatile long)1,
    .stack = (void *)0xffffc9000c4dc000,
    .usage = (refcount_t){
    .refs = (atomic_t){
    .counter = (int)2,
    },
    },
    .flags = (unsigned int)4194560,
    .ptrace = (unsigned int)0,

    Then, the next time it would print:

    *(struct task_struct *)0xffff889ff8a08000 = {
    .usage = (refcount_t){
    .refs = (atomic_t){
    .counter = (int)3,
    },
    },
    },

    - Arnaldo

    \
     
     \ /
      Last update: 2020-04-20 22:55    [W:4.044 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site