• Dave Hansen's avatar
    x86: fix page fault tracing when KVM guest support enabled · 65a7f03f
    Dave Hansen authored
    I noticed on some of my systems that page fault tracing doesn't
    work:
    
    	cd /sys/kernel/debug/tracing
    	echo 1 > events/exceptions/enable
    	cat trace;
    	# nothing shows up
    
    I eventually traced it down to CONFIG_KVM_GUEST.  At least in a
    KVM VM, enabling that option breaks page fault tracing, and
    disabling fixes it.  I tried on some old kernels and this does
    not appear to be a regression: it never worked.
    
    There are two page-fault entry functions today.  One when tracing
    is on and another when it is off.  The KVM code calls do_page_fault()
    directly instead of calling the traced version:
    
    > dotraplinkage void __kprobes
    > do_async_page_fault(struct pt_regs *regs, unsigned long
    > error_code)
    > {
    >         enum ctx_state prev_state;
    >
    >         switch (kvm_read_and_reset_pf_reason()) {
    >         default:
    >                 do_page_fault(regs, error_code);
    >                 break;
    >         case KVM_PV_REASON_PAGE_NOT_PRESENT:
    
    I'm also having problems with the page fault tracing on bare
    metal (same symptom of no trace output).  I'm unsure if it's
    related.
    
    Steven had an alternative to this which has zero overhead when
    tracing is off where this includes the standard noops even when
    tracing is disabled.  I'm unconvinced that the extra complexity
    of his apporach:
    
    	http://lkml.kernel.org/r/20140508194508.561ed220@gandalf.local.home
    
    is worth it, expecially considering that the KVM code is already
    making page fault entry slower here.  This solution is
    dirt-simple.
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: x86@kernel.org
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Gleb Natapov <gleb@redhat.com>
    Cc: kvm@vger.kernel.org
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Acked-by: default avatar"H. Peter Anvin" <hpa@zytor.com>
    Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    65a7f03f
traps.h 4.87 KB