[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1FE6DD409037234FAB833C420AA843EC84804C@orsmsx424.amr.corp.intel.com>
Date: Tue, 5 Feb 2008 15:34:16 -0800
From: "Luck, Tony" <tony.luck@...el.com>
To: "Masami Hiramatsu" <mhiramat@...hat.com>,
"Ananth N Mavinakayanahalli" <ananth@...ibm.com>,
"Jim Keniston" <jkenisto@...ibm.com>,
"Li, Shaohua" <shaohua.li@...el.com>
Cc: "LKML" <linux-kernel@...r.kernel.org>,
"ia64" <linux-ia64@...r.kernel.org>,
"systemtap-ml" <systemtap@...rces.redhat.com>
Subject: RE: [RFC][PATCH] kprobes: kprobe-booster for ia64
+/* 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists