This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: [PATCH] kprobes for s390 architecture
- From: Heiko Carstens <heiko dot carstens at de dot ibm dot com>
- To: Martin Schwidefsky <schwidefsky at de dot ibm dot com>, Jan Glauber <jan dot glauber at de dot ibm dot com>, linux-kernel at vger dot kernel dot org, systemtap at sources dot redhat dot com
- Date: Fri, 7 Jul 2006 19:25:55 +0200
- Subject: Re: [PATCH] kprobes for s390 architecture
- References: <20060623150344.GL9446@osiris.boeblingen.de.ibm.com> <OF44DB398C.F7A51098-ON88257196.007CD277-88257196.007DC8F0@us.ibm.com> <20060623222106.GA25410@osiris.ibm.com> <20060624113641.GB10403@osiris.ibm.com> <1151421789.5390.65.camel@localhost> <20060628055857.GA9452@osiris.boeblingen.de.ibm.com> <20060707172333.GA12068@localhost.localdomain>
> ok, I tried, but my "better ideas" made things worse. stop_machine_run() wins:
>
> void __kprobes arch_arm_kprobe(struct kprobe *p)
> {
> struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
> unsigned long status = kcb->kprobe_status;
> struct ins_replace_args args;
>
> args.ptr = p->addr;
> args.old = p->opcode;
> args.new = BREAKPOINT_INSTRUCTION;
>
> kcb->kprobe_status = KPROBE_SWAP_INST;
> stop_machine_run(swap_instruction, &args, NR_CPUS);
> kcb->kprobe_status = status;
> }
>
> It works, and I guess at this point is the only way to do it. I'll send out a
> full patch with this and the other cleanups later.
How fast is this if you have to exchange several hundred instructions?