Message ID | 20131028194914.GA15103@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 10/28, Oleg Nesterov wrote: > > Yes, yes, sorry for confusion. What I actually tried to suggest is > something like the trivial patch below. > > Then arm can do: > > uprobe_opcode_t arch_uprobe_swbp_insn(struct arch_uprobe *auprobe) > { > return __opcode_to_mem_arm(auprobe->bpinsn); > } > > No? > > > I notice there don't seem to be any alternative set_swbp functions > > in the (rc6) kernel tree > > Yes... I think we should simply make it "static". And set_orig_insn() > too. Or. arm can actually reimplement set_swbp(). This doesn't mean the duplication of write_opcode() code, we can simply export this helper. Either way is imho better than this patch. Unless I missed something. Oleg.
On 10/29/13 15:59, Oleg Nesterov wrote: > On 10/28, Oleg Nesterov wrote: >> >> Yes, yes, sorry for confusion. What I actually tried to suggest is >> something like the trivial patch below. >> >> Then arm can do: >> >> uprobe_opcode_t arch_uprobe_swbp_insn(struct arch_uprobe *auprobe) >> { >> return __opcode_to_mem_arm(auprobe->bpinsn); >> } >> >> No? >> >>> I notice there don't seem to be any alternative set_swbp functions >>> in the (rc6) kernel tree >> >> Yes... I think we should simply make it "static". And set_orig_insn() >> too. > > Or. arm can actually reimplement set_swbp(). This doesn't mean the > duplication of write_opcode() code, we can simply export this helper. > That actually looks to me like the cleanest approach. I have changed the static write_opcode() to a global uprobe_write_opcode(), and now call it from an arm set_swbp(). Please do *not* make set_swbp() (and set_orig_insn()) static's. It looks like we now have a use for at least one of them. Thanks, -dl
On 11/01, David Long wrote: > > On 10/29/13 15:59, Oleg Nesterov wrote: >> >> Or. arm can actually reimplement set_swbp(). This doesn't mean the >> duplication of write_opcode() code, we can simply export this helper. >> > > That actually looks to me like the cleanest approach. I have changed > the static write_opcode() to a global uprobe_write_opcode(), and now > call it from an arm set_swbp(). OK, great. > Please do *not* make set_swbp() (and set_orig_insn()) static's. It > looks like we now have a use for at least one of them. I am not sure... it still seems to me it makes sense to cleanup this interface... But. I am not going to do this until we merge your changes. We will see then. Oleg.
--- x/kernel/events/uprobes.c +++ x/kernel/events/uprobes.c @@ -304,6 +304,11 @@ put_old: return ret; } +uprobe_opcode_t __weak arch_uprobe_swbp_insn(struct arch_uprobe *auprobe) +{ + return UPROBE_SWBP_INSN; +} + /** * set_swbp - store breakpoint at a given address. * @auprobe: arch specific probepoint information. @@ -315,7 +320,7 @@ put_old: */ int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) { - return write_opcode(mm, vaddr, UPROBE_SWBP_INSN); + return write_opcode(mm, vaddr, arch_uprobe_swbp_insn(auprobe)); } /**