Re: [PATCH v2] kernel: add kcov code coverage

From: Dmitry Vyukov
Date: Thu Jan 14 2016 - 07:21:53 EST


On Thu, Jan 14, 2016 at 10:23 AM, Kirill A. Shutemov
<kirill@xxxxxxxxxxxxx> wrote:
> On Thu, Jan 14, 2016 at 10:10:39AM +0100, Dmitry Vyukov wrote:
>> On Thu, Jan 14, 2016 at 10:03 AM, Kirill A. Shutemov
>> <kirill@xxxxxxxxxxxxx> wrote:
>> > Hi,
>> >
>> > I've tried to build current -next with the patch. It has few reject, but
>> > nothing major.
>> >
>> > Booting the kernel in qemu with CONFIG_KCOV=y has failed. It hangs on
>> > "smpboot: Total of 3 processors activated (9178.27 BogoMIPS)"
>> >
>> > The interesting part is that I have only 2 cpu in this setup!
>> >
>> > Huh?
>> >
>> > CONFIG_KCOV=n works fine.
>>
>>
>> Hi Kirill,
>>
>> Thanks for testing.
>>
>> I will try to reproduce this if you provide:
>> - location of the -next tree
>
> The usual one:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git next-20160114
>
>> - gcc revision
>
> Current gcc-snapshot from Debian:
>
> gcc version 6.0.0 20160105 (experimental) [trunk revision 232093] (Debian 20160105-1)
>
>> - .config
>
> Attached.
>
>> - qemu command line
>
> Nothing fancy:
>
> qemu-system-x86_64 -smp 2 -m 2048 -nographic -kernel bzImage -append "console=ttyS0 earlyprintk=serial"
>
>> Alternatively, you can try to bulk disable instrumentation of
>> everything related to boot process (by adding KCOV_INSTRUMENT := n to
>> the Makefile). Most likely it is due to instrumentation. If it helps,
>> try to bisect the the guilty files.
>
> Okay, I'll try.


I've tried with exactly your gcc revision and your config and VM boots fine...

For me it prints 4 CPUs:
[ 0.193348] smpboot: Total of 4 processors activated
so it is probably fine :)

I am almost sure that the root cause is kcov instrumentation is some
inappropriate place. I've fixed such symptoms several times by
disabling instrumentation in various places.

I've ported this patch to an older 3.13 kernel and I had to disabl all
instrumentation in the following files (with KCOV_INSTRUMENT := n):

arch/x86/kernel/cpu/Makefile
arch/x86/pci/Makefile
arch/x86/platform/Makefile
arch/x86/platform/**/Makefile
arch/x86/power/Makefile
arch/x86/realmode/Makefile
arch/x86/um/Makefile

Try these first.