Commit 3ca269d8 authored by Prasanna S Panchamukhi's avatar Prasanna S Panchamukhi Committed by Linus Torvalds
Browse files

[PATCH] Switch Kprobes inline functions to __kprobes for ia64



Andrew Morton pointed out that compiler might not inline the functions
marked for inline in kprobes.  There-by allowing the insertion of probes
on these kprobes routines, which might cause recursion.

This patch removes all such inline and adds them to kprobes section
there by disallowing probes on all such routines.  Some of the routines
can even still be inlined, since these routines gets executed after the
kprobes had done necessay setup for reentrancy.
Signed-off-by: default avatarPrasanna S Panchamukhi <prasanna@in.ibm.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 46dbe2f4
...@@ -251,7 +251,7 @@ static void __kprobes prepare_break_inst(uint template, uint slot, ...@@ -251,7 +251,7 @@ static void __kprobes prepare_break_inst(uint template, uint slot,
update_kprobe_inst_flag(template, slot, major_opcode, kprobe_inst, p); update_kprobe_inst_flag(template, slot, major_opcode, kprobe_inst, p);
} }
static inline void get_kprobe_inst(bundle_t *bundle, uint slot, static void __kprobes get_kprobe_inst(bundle_t *bundle, uint slot,
unsigned long *kprobe_inst, uint *major_opcode) unsigned long *kprobe_inst, uint *major_opcode)
{ {
unsigned long kprobe_inst_p0, kprobe_inst_p1; unsigned long kprobe_inst_p0, kprobe_inst_p1;
...@@ -278,7 +278,7 @@ static inline void get_kprobe_inst(bundle_t *bundle, uint slot, ...@@ -278,7 +278,7 @@ static inline void get_kprobe_inst(bundle_t *bundle, uint slot,
} }
/* Returns non-zero if the addr is in the Interrupt Vector Table */ /* Returns non-zero if the addr is in the Interrupt Vector Table */
static inline int in_ivt_functions(unsigned long addr) static int __kprobes in_ivt_functions(unsigned long addr)
{ {
return (addr >= (unsigned long)__start_ivt_text return (addr >= (unsigned long)__start_ivt_text
&& addr < (unsigned long)__end_ivt_text); && addr < (unsigned long)__end_ivt_text);
...@@ -308,19 +308,19 @@ static int __kprobes valid_kprobe_addr(int template, int slot, ...@@ -308,19 +308,19 @@ static int __kprobes valid_kprobe_addr(int template, int slot,
return 0; return 0;
} }
static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)
{ {
kcb->prev_kprobe.kp = kprobe_running(); kcb->prev_kprobe.kp = kprobe_running();
kcb->prev_kprobe.status = kcb->kprobe_status; kcb->prev_kprobe.status = kcb->kprobe_status;
} }
static inline void restore_previous_kprobe(struct kprobe_ctlblk *kcb) static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb)
{ {
__get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp;
kcb->kprobe_status = kcb->prev_kprobe.status; kcb->kprobe_status = kcb->prev_kprobe.status;
} }
static inline void set_current_kprobe(struct kprobe *p, static void __kprobes set_current_kprobe(struct kprobe *p,
struct kprobe_ctlblk *kcb) struct kprobe_ctlblk *kcb)
{ {
__get_cpu_var(current_kprobe) = p; __get_cpu_var(current_kprobe) = p;
......
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