On Mon, May 13, 2019 at 2:26 PM Liran Alon <liran.alon@xxxxxxxxxx> wrote: > > > > > On 13 May 2019, at 18:15, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > On Mon, May 13, 2019 at 04:38:32PM +0200, Alexandre Chartre wrote: > >> diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c > >> index 46df4c6..317e105 100644 > >> --- a/arch/x86/mm/fault.c > >> +++ b/arch/x86/mm/fault.c > >> @@ -33,6 +33,10 @@ > >> #define CREATE_TRACE_POINTS > >> #include <asm/trace/exceptions.h> > >> > >> +bool (*kvm_page_fault_handler)(struct pt_regs *regs, unsigned long error_code, > >> + unsigned long address); > >> +EXPORT_SYMBOL(kvm_page_fault_handler); > > > > NAK NAK NAK NAK > > > > This is one of the biggest anti-patterns around. > > I agree. > I think that mm should expose a mm_set_kvm_page_fault_handler() or something (give it a better name). > Similar to how arch/x86/kernel/irq.c have kvm_set_posted_intr_wakeup_handler(). > > -Liran > This sounds like a great use case for static_call(). PeterZ, do you suppose we could wire up static_call() with the module infrastructure to make it easy to do "static_call to such-and-such GPL module symbol if that symbol is in a loaded module, else nop"?