This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
RE: [RFC][PATCH] kprobes: kprobe-booster for ia64
- From: "Luck, Tony" <tony dot luck at intel dot com>
- To: "Masami Hiramatsu" <mhiramat at redhat dot com>, "Ananth N Mavinakayanahalli" <ananth at in dot ibm dot com>, "Jim Keniston" <jkenisto at us dot ibm dot com>, "Li, Shaohua" <shaohua dot li at intel dot com>
- Cc: "LKML" <linux-kernel at vger dot kernel dot org>, "ia64" <linux-ia64 at vger dot kernel dot org>, "systemtap-ml" <systemtap at sources dot redhat dot com>
- Date: Tue, 5 Feb 2008 15:34:16 -0800
- Subject: RE: [RFC][PATCH] kprobes: kprobe-booster for ia64
- References: <47A8E995.1090400@redhat.com>
+/* Insert a long branch code */
+static void __kprobes set_brl_inst(void *from, void *to)
+{
+ s64 rel = ((s64) to - (s64) from) >> 4;
+ bundle_t *brl;
+ brl = (bundle_t *) ((u64) from & ~0xf);
+ brl->quad0.template = 0x05; /* [MLX](stop) */
+ brl->quad0.slot0 = NOP_M_INST; /* nop.m 0x0 */
+ brl->quad0.slot1_p0 = ((rel >> 20) & 0x7fffffffff) << 2;
+ brl->quad1.slot1_p1 = (((rel >> 20) & 0x7fffffffff) << 2) >> (64 - 46);
+ /* brl.cond.sptk.many.clr rel<<4 (qp=0) */
+ brl->quad1.slot2 = BRL_INST(rel >> 59, rel & 0xfffff);
+}
Is this function operating directly on the instruction bundle in the
kernel code? If so, the bundle will contain some "interesting"
intermediate values as each of the "brl->xxx = yyy;" are processed.
If another cpu should try to execute this bundle while the modifications
are in progress, then the results will be not what you want.
On cpu models that support st16 you could construct the brl instruction
and use a single st16 to update the whole bundle atomically.
-Tony