• James Morse's avatar
    KVM: arm64: Move pmu hyp code under hyp's Makefile to avoid instrumentation · b7c50fab
    James Morse authored
    KVM's pmu.c contains the __hyp_text needed to switch the pmu registers
    between host and guest. Because this isn't covered by the 'hyp' Makefile,
    it can be built with kasan and friends when these are enabled in Kconfig.
    
    When starting a guest, this results in:
    | Kernel panic - not syncing: HYP panic:
    | PS:a00003c9 PC:000083000028ada0 ESR:86000007
    | FAR:000083000028ada0 HPFAR:0000000029df5300 PAR:0000000000000000
    | VCPU:000000004e10b7d6
    | CPU: 0 PID: 3088 Comm: qemu-system-aar Not tainted 5.2.0-rc1 #11026
    | Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno Development Plat
    | Call trace:
    |  dump_backtrace+0x0/0x200
    |  show_stack+0x20/0x30
    |  dump_stack+0xec/0x158
    |  panic+0x1ec/0x420
    |  panic+0x0/0x420
    | SMP: stopping secondary CPUs
    | Kernel Offset: disabled
    | CPU features: 0x002,25006082
    | Memory Limit: none
    | ---[ end Kernel panic - not syncing: HYP panic:
    
    This is caused by functions in pmu.c calling the instrumented
    code, which isn't mapped to hyp. From objdump -r:
    | RELOCATION RECORDS FOR [.hyp.text]:
    | OFFSET           TYPE              VALUE
    | 0000000000000010 R_AARCH64_CALL26  __sanitizer_cov_trace_pc
    | 0000000000000018 R_AARCH64_CALL26  __asan_load4_noabort
    | 0000000000000024 R_AARCH64_CALL26  __asan_load4_noabort
    
    Move the affected code to a new file under 'hyp's Makefile.
    
    Fixes: 3d91befb ("arm64: KVM: Enable !VHE support for :G/:H perf event modifiers")
    Cc: Andrew Murray <Andrew.Murray@arm.com>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    b7c50fab
switch.c 18.9 KB