• A
    powerpc/modules: Module CRC relocation fix causes perf issues · 0e0ed640
    Anton Blanchard 提交于
    Module CRCs are implemented as absolute symbols that get resolved by
    a linker script. We build an intermediate .o that contains an
    unresolved symbol for each CRC. genksysms parses this .o, calculates
    the CRCs and writes a linker script that "resolves" the symbols to
    the calculated CRC.
    
    Unfortunately the ppc64 relocatable kernel sees these CRCs as symbols
    that need relocating and relocates them at boot. Commit d4703aef
    (module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y)
    added a hook to reverse the bogus relocations. Part of this patch
    created a symbol at 0x0:
    
    # head -2 /proc/kallsyms
    0000000000000000 T reloc_start
    c000000000000000 T .__start
    
    This reloc_start symbol is causing lots of confusion to perf. It
    thinks reloc_start is a massive function that stretches from 0x0 to
    0xc000000000000000 and we get various cryptic errors out of perf,
    including:
    
    problem incrementing symbol count, skipping event
    
    This patch removes the  reloc_start linker script label and instead
    defines it as PHYSICAL_START. We also need to wrap it with
    CONFIG_PPC64 because the ppc32 kernel can set a non zero
    PHYSICAL_START at compile time and we wouldn't want to subtract
    it from the CRCs in that case.
    Signed-off-by: NAnton Blanchard <anton@samba.org>
    Cc: <stable@kernel.org>
    Acked-by: NRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
    0e0ed640
module.h 2.3 KB