Re: [PATCH] tracing: Cleanup the convoluted softirq tracepoints

From: Steven Rostedt
Date: Tue Oct 19 2010 - 18:14:51 EST


On Tue, 2010-10-19 at 23:45 +0200, Thomas Gleixner wrote:
> On Tue, 19 Oct 2010, Steven Rostedt wrote:
> > On Tue, 2010-10-19 at 21:49 +0200, Thomas Gleixner wrote:
> >
> > Because you do the h - softvec in the tracepoint parameter? I got a
> > different result:
>
> I guess some serious whacking is due.
>
> The compiler adds two jumps when the parameter changes due to
> (h -softvec) instead of (h, softvec) ????
>
> Dude, you can't be serious.
>
> If you would have asked about the compiler version I'm using and told
> me about the compiler version you are using, then I could take that
> answer somehow serious.

Heh, gcc has always been of a black magic for what it decided. But,
anyway, I'm using a self built version (vanilla from gcc.gnu.org) of
4.5.1. What are you using?

>
> It still would miss the "Uhhhh, your compiler creates crap code"
> alert, because that double jump is seriously broken and braindead.
>
> And I tell you more about this. You are going to piss off a lot of
> users of distro compilers because they will set CC_HAVE_ASM_GOTO
> happily and create the code I posted. Which will break the tracer no
> matter what.
>
> So you tracer maniacs happily played with some experimental compiler
> stuff w/o even testing your crap against something which ships with
> distros or is the reference 4.5 compiler on kernel.org ?
>
> I prefer you sending a patch to disable this, until it's sorted out,
> unless you want me to add some really outrageous changelog to the
> patch I'm going to put into tip tomorrow night, ok ?

Then lets just compare the crap versions you posted.

> - 1e: 83 3d 00 00 00 00 00 cmpl $0x0,0x0(%rip) # 25 <test+0x25>
> - 25: 74 4d je 74 <test+0x74>
> + 1e: e9 00 00 00 00 jmpq 23 <test+0x23>
> + 23: eb 4d jmp 72 <test+0x72>

Yes, gcc replaced a cmp and conditional jump with two unconditional
jumps. One of these jumps on boot up will be converted to a nop. Thus
the jump label code just converted a compare and conditional jump with a
nop and a non conditional jump.

This still sounds like a win to me, although we can do better. I guess
those poor sobs using a distro kernel compiled with a distro gcc that
has CC_HAVE_ASM_GOTO enabled will still be doing better than if it was
doing the if (enable) code.

-- Steve


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/