Commit b1801812 authored by Ingo Molnar's avatar Ingo Molnar

x86, mm, kprobes: fault.c, simplify notify_page_fault()

Impact: cleanup

Remove an #ifdef from notify_page_fault(). The function still
compiles to nothing in the !CONFIG_KPROBES case.

Introduce kprobes_built_in() and kprobe_fault_handler() helpers
to allow this - they returns 0 if !CONFIG_KPROBES.

No code changed:

   text	   data	    bss	    dec	    hex	filename
   4618	     32	     24	   4674	   1242	fault.o.before
   4618	     32	     24	   4674	   1242	fault.o.after

Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent b814d41f
...@@ -68,11 +68,10 @@ static inline int kmmio_fault(struct pt_regs *regs, unsigned long addr) ...@@ -68,11 +68,10 @@ static inline int kmmio_fault(struct pt_regs *regs, unsigned long addr)
static inline int notify_page_fault(struct pt_regs *regs) static inline int notify_page_fault(struct pt_regs *regs)
{ {
#ifdef CONFIG_KPROBES
int ret = 0; int ret = 0;
/* kprobe_running() needs smp_processor_id() */ /* kprobe_running() needs smp_processor_id() */
if (!user_mode_vm(regs)) { if (kprobes_built_in() && !user_mode_vm(regs)) {
preempt_disable(); preempt_disable();
if (kprobe_running() && kprobe_fault_handler(regs, 14)) if (kprobe_running() && kprobe_fault_handler(regs, 14))
ret = 1; ret = 1;
...@@ -80,9 +79,6 @@ static inline int notify_page_fault(struct pt_regs *regs) ...@@ -80,9 +79,6 @@ static inline int notify_page_fault(struct pt_regs *regs)
} }
return ret; return ret;
#else
return 0;
#endif
} }
/* /*
......
...@@ -182,6 +182,14 @@ struct kprobe_blackpoint { ...@@ -182,6 +182,14 @@ struct kprobe_blackpoint {
DECLARE_PER_CPU(struct kprobe *, current_kprobe); DECLARE_PER_CPU(struct kprobe *, current_kprobe);
DECLARE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); DECLARE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
/*
* For #ifdef avoidance:
*/
static inline int kprobes_built_in(void)
{
return 1;
}
#ifdef CONFIG_KRETPROBES #ifdef CONFIG_KRETPROBES
extern void arch_prepare_kretprobe(struct kretprobe_instance *ri, extern void arch_prepare_kretprobe(struct kretprobe_instance *ri,
struct pt_regs *regs); struct pt_regs *regs);
...@@ -271,8 +279,16 @@ void unregister_kretprobes(struct kretprobe **rps, int num); ...@@ -271,8 +279,16 @@ void unregister_kretprobes(struct kretprobe **rps, int num);
void kprobe_flush_task(struct task_struct *tk); void kprobe_flush_task(struct task_struct *tk);
void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head);
#else /* CONFIG_KPROBES */ #else /* !CONFIG_KPROBES: */
static inline int kprobes_built_in(void)
{
return 0;
}
static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
{
return 0;
}
static inline struct kprobe *get_kprobe(void *addr) static inline struct kprobe *get_kprobe(void *addr)
{ {
return NULL; return NULL;
...@@ -329,5 +345,5 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num) ...@@ -329,5 +345,5 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num)
static inline void kprobe_flush_task(struct task_struct *tk) static inline void kprobe_flush_task(struct task_struct *tk)
{ {
} }
#endif /* CONFIG_KPROBES */ #endif /* CONFIG_KPROBES */
#endif /* _LINUX_KPROBES_H */ #endif /* _LINUX_KPROBES_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment