From: Keith Owens <kaos@sgi.com>
To: linux-ia64@vger.kernel.org
Subject: Re: [PATCH] IA64 trap code 16 bytes atomic copy on montecito
Date: Tue, 31 Oct 2006 06:18:25 +0000 [thread overview]
Message-ID: <21344.1162275505@kao2.melbourne.sgi.com> (raw)
In-Reply-To: <4546E55E.3050207@intel.com>
"bibo,mao" (on Tue, 31 Oct 2006 13:55:42 +0800) wrote:
>hi,
> On IA64 kprobe can not insert trap code on slot 1 because
>opcode of slot 1 crosses over two consecutive 8-bytes. On
>montecito machine 16 bytes atomic operation is avaiable,
>This patch implements 16 bytes atomic copy on montecito
>machine, so that kprobe can probe any slot on montecito
>machine.
> Any comments is welcome.
>
>Signed-off-by: bibo, mao <bibo.mao@intel.com>
>
>thanks
>bibo,mao
>
> arch/ia64/kernel/jprobes.S | 38 +++++++++++++++++++++++++++
> arch/ia64/kernel/kprobes.c | 16 ++++++++++++----
> include/asm-ia64/kprobes.h | 1 +
> 3 files changed, 51 insertions(+), 4 deletions(-)
>-------------------------------------------------------------
>
>diff -Nruap -X 2.6.19-rc2.org/Documentation/dontdiff 2.6.19-rc2.org/arch/ia64/kernel/jprobes.S 2.6.19-rc2/arch/ia64/kernel/jprobes.S
>--- 2.6.19-rc2.org/arch/ia64/kernel/jprobes.S 2006-03-27 14:41:20.000000000 +0800
>+++ 2.6.19-rc2/arch/ia64/kernel/jprobes.S 2006-10-31 12:29:14.000000000 +0800
>@@ -87,3 +87,41 @@ GLOBAL_ENTRY(flush_register_stack)
> br.ret.sptk.many rp
> END(flush_register_stack)
>
>+/* this function uses st16/ld16 to atomically copy one bundle
>+ * to code area, it requires src address and dest address is
>+ * not in UC/UCE/WC area. Currently kernel physical memory
>+ * identified map is cachable and WB, so there is no such check.
>+ * input0: represents whether this cpu supports atomic
>+ * st16/ld16 instruction
>+ * input1: destionation address of bundle copy
>+ * input2: source address of bundle copy
>+ * return: -1 failed, 0 succeed
Trailing whitspace in patch, on the end of the 'return:' comment..
>+ */
>+GLOBAL_ENTRY(kprobe_update_inst_bundle)
>+ alloc loc0=ar.pfs,3,1,0,0
>+
>+ and r15\x15,r34
>+ and r14\x15,r33
Use in0, in1, in2, not r32-34.
>+ mov r8=-1
>+ ;;
>+ cmp.eq p9,p8=0,r15
>+ cmp.eq p7,p6=0,r14
"cmp.ne p8,p0=0,r15" is more readable. You are testing for a non-zero
value, but using cmp.eq then testing the second predicate is harder to
read.
I have never understood why people code two predicates on cmp when they
only ever use one of them, it makes other coders stop and check "where
is the other predicate used?". p0 makes it explicit that the second
predicate is not used.
>+(p6) br.ret.dptk.many b0
>+ ;;
>+ cmp4.eq p7,p6=0,r32
>+(p8) br.ret.dpnt.many b0
>+ ;;
>+(p7) ld8 r14=[r34],8
>+ mov r8=r0
>+(p6) ld16 r14=[r34]
>+ ;;
>+(p7) st8 [r33]=r14,8
That st8 is not an atomic operation on an instruction slot, which
conflicts with the function's specification. It is probably cleaner to
do any non-atomic updates in C, so this routine only does ld16/st16.
That also removes the atomic input and conditional code from the
assembler function. The less that is coded in assembler, the better.
>+(p6) st16 [r33]=r14
>+ ;;
>+(p7) ld8 r14=[r34]
>+ ;;
>+(p7) st8 [r33]=r14
>+ nop.i 0x0
Why insert an explicit nop? The assembler does that for you.
>+ br.ret.sptk.many b0
>+ ;;
Trailing whitespace again.
>+END(kprobe_update_inst_bundle)
next prev parent reply other threads:[~2006-10-31 6:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-31 5:55 [PATCH] IA64 trap code 16 bytes atomic copy on montecito bibo,mao
2006-10-31 6:18 ` Keith Owens [this message]
2006-10-31 7:53 ` Chen, Kenneth W
2006-10-31 8:09 ` Chen, Kenneth W
2006-10-31 8:19 ` bibo,mao
2006-10-31 8:40 ` Chen, Kenneth W
2006-10-31 12:48 ` bibo,mao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=21344.1162275505@kao2.melbourne.sgi.com \
--to=kaos@sgi.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox