All of lore.kernel.org
 help / color / mirror / Atom feed
From: masami.hiramatsu.pt@hitachi.com (Masami Hiramatsu)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support
Date: Wed, 26 Nov 2014 17:33:05 +0900	[thread overview]
Message-ID: <54759041.9080105@hitachi.com> (raw)
In-Reply-To: <20141120135851.GA32528@linaro.org>

(2014/11/21 0:02), Steve Capper wrote:
> On Tue, Nov 18, 2014 at 01:32:50AM -0500, David Long wrote:
>> From: "David A. Long" <dave.long@linaro.org>
>>
>> This patchset is heavily based on Sandeepa Prabhu's ARM v8 kprobes patches, first
>> seen in October 2013.  This version attempts to address concerns raised by
>> reviewers and also fixes problems discovered during testing, particularly during
>> SMP testing.
>>
>> This patchset adds support for kernel probes(kprobes), jump probes(jprobes)
>> and return probes(kretprobes) support for ARM64.
>>
>> Kprobes mechanism makes use of software breakpoint and single stepping
>> support available in the ARM v8 kernel.
>>
>> Changes since v2 include:
>>
>> 1) Removal of NOP padding in kprobe XOL slots.  Slots are now exactly one
>> instruction long.
>> 2) Disabling of interrupts during execution in single-step mode.
>> 3) Fixing of numerous problems in instruction simulation code.
>> 4) Support for the HAVE_REGS_AND_STACK_ACCESS_API feature is added, to allow
>> access to kprobes through debugfs.
>> 5) kprobes is *not* enabled in defconfig.
>> 6) Numerous complaints from checkpatch have been cleaned up, although a couple
>> remain as removing the function pointer typedefs results in ugly code.
> 
> Hi David,
> I've been playing with this on a Juno board.
> I ran into one crash, which I'm not yet sure is an issue, but thought I
> would flag it.
> 
> I opted to put a kprobe on memcpy, this is an assembler function so I
> located it via:
> $ nm ./vmlinux | grep \ memcpy$
> fffffe0000408a00 T memcpy
> 
> Then placed a probe as follows:
> echo "p:memcpy 0xfffffe0000408a00 %x2" > /sys/kernel/debug/tracing/kprobe_events

You can also do "p:memcpy memcpy %x2" > ...

> 
> I was able to cat out the /sys/kernel/debug/tracing/trace_pipe file and
> activate the probe via:
> echo 1 > /sys/kernel/debug/tracing/events/kprobes/enable
> 
> Everything worked well, and I got the expected output.
> 
> I then tried to record events with perf via:
> perf record -e kprobes:memcpy -a sleep 5
> 
> Then I got an, easily reproducible, panic (pasted below).

On x86, I didn't get a panic.

> 
> The point of failure in the panic was:
> fs/buffer.c:1257
> 
> static inline void check_irqs_on(void)
> {
> #ifdef irqs_disabled
>         BUG_ON(irqs_disabled());
> #endif
> }
> 
> I will do some more digging; but I have managed to code up an ftrace
> static probe on memcpy and record that using perf on arm64 without
> issue.

Yeah, this can be a bug related to kprobes recursive call.
Could you do "cat /sys/kernel/debug/tracing/kprobe_profile" (before
run perf)?
The first digit is # of hit, and the second is # of missed (since
recursively called).

On x86, right after tracing by ftrace, we have no missed probe.

 # cat /sys/kernel/debug/tracing/kprobe_profile
  memcpy                                                  4547               0

But after tracing by perf, many missed events I could see.

 # cat /sys/kernel/debug/tracing/kprobe_profile
  memcpy                                                413983            7632

So I guess this can be related to the recursive call (which
is correctly handled on x86).

Thank you,

-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt at hitachi.com

WARNING: multiple messages have this Message-ID (diff)
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Steve Capper <steve.capper@linaro.org>
Cc: David Long <dave.long@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	Russell King <linux@arm.linux.org.uk>,
	"Jon Medhurst (Tixy)" <tixy@linaro.org>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Sandeepa Prabhu <sandeepa.prabhu@linaro.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	William Cohen <wcohen@redhat.com>,
	davem@davemloft.net
Subject: Re: [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support
Date: Wed, 26 Nov 2014 17:33:05 +0900	[thread overview]
Message-ID: <54759041.9080105@hitachi.com> (raw)
In-Reply-To: <20141120135851.GA32528@linaro.org>

(2014/11/21 0:02), Steve Capper wrote:
> On Tue, Nov 18, 2014 at 01:32:50AM -0500, David Long wrote:
>> From: "David A. Long" <dave.long@linaro.org>
>>
>> This patchset is heavily based on Sandeepa Prabhu's ARM v8 kprobes patches, first
>> seen in October 2013.  This version attempts to address concerns raised by
>> reviewers and also fixes problems discovered during testing, particularly during
>> SMP testing.
>>
>> This patchset adds support for kernel probes(kprobes), jump probes(jprobes)
>> and return probes(kretprobes) support for ARM64.
>>
>> Kprobes mechanism makes use of software breakpoint and single stepping
>> support available in the ARM v8 kernel.
>>
>> Changes since v2 include:
>>
>> 1) Removal of NOP padding in kprobe XOL slots.  Slots are now exactly one
>> instruction long.
>> 2) Disabling of interrupts during execution in single-step mode.
>> 3) Fixing of numerous problems in instruction simulation code.
>> 4) Support for the HAVE_REGS_AND_STACK_ACCESS_API feature is added, to allow
>> access to kprobes through debugfs.
>> 5) kprobes is *not* enabled in defconfig.
>> 6) Numerous complaints from checkpatch have been cleaned up, although a couple
>> remain as removing the function pointer typedefs results in ugly code.
> 
> Hi David,
> I've been playing with this on a Juno board.
> I ran into one crash, which I'm not yet sure is an issue, but thought I
> would flag it.
> 
> I opted to put a kprobe on memcpy, this is an assembler function so I
> located it via:
> $ nm ./vmlinux | grep \ memcpy$
> fffffe0000408a00 T memcpy
> 
> Then placed a probe as follows:
> echo "p:memcpy 0xfffffe0000408a00 %x2" > /sys/kernel/debug/tracing/kprobe_events

You can also do "p:memcpy memcpy %x2" > ...

> 
> I was able to cat out the /sys/kernel/debug/tracing/trace_pipe file and
> activate the probe via:
> echo 1 > /sys/kernel/debug/tracing/events/kprobes/enable
> 
> Everything worked well, and I got the expected output.
> 
> I then tried to record events with perf via:
> perf record -e kprobes:memcpy -a sleep 5
> 
> Then I got an, easily reproducible, panic (pasted below).

On x86, I didn't get a panic.

> 
> The point of failure in the panic was:
> fs/buffer.c:1257
> 
> static inline void check_irqs_on(void)
> {
> #ifdef irqs_disabled
>         BUG_ON(irqs_disabled());
> #endif
> }
> 
> I will do some more digging; but I have managed to code up an ftrace
> static probe on memcpy and record that using perf on arm64 without
> issue.

Yeah, this can be a bug related to kprobes recursive call.
Could you do "cat /sys/kernel/debug/tracing/kprobe_profile" (before
run perf)?
The first digit is # of hit, and the second is # of missed (since
recursively called).

On x86, right after tracing by ftrace, we have no missed probe.

 # cat /sys/kernel/debug/tracing/kprobe_profile
  memcpy                                                  4547               0

But after tracing by perf, many missed events I could see.

 # cat /sys/kernel/debug/tracing/kprobe_profile
  memcpy                                                413983            7632

So I guess this can be related to the recursive call (which
is correctly handled on x86).

Thank you,

-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com



  reply	other threads:[~2014-11-26  8:33 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-18  6:32 [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support David Long
2014-11-18  6:32 ` David Long
2014-11-18  6:32 ` [PATCH v3 1/5] arm64: Kprobes with single stepping support David Long
2014-11-18  6:32   ` David Long
2014-11-18 13:28   ` Jon Medhurst (Tixy)
2014-11-18 13:28     ` Jon Medhurst (Tixy)
2014-11-21  4:28     ` David Long
2014-11-21  4:28       ` David Long
2014-11-18 14:38   ` William Cohen
2014-11-18 14:38     ` William Cohen
2014-11-18 14:39   ` William Cohen
2014-11-18 14:39     ` William Cohen
2014-11-18 14:56   ` Will Deacon
2014-11-18 14:56     ` Will Deacon
2014-11-19 11:21     ` Sandeepa Prabhu
2014-11-19 11:21       ` Sandeepa Prabhu
2014-11-19 11:25       ` Will Deacon
2014-11-19 11:25         ` Will Deacon
2014-11-19 14:55         ` David Long
2014-11-19 14:55           ` David Long
2014-11-20  5:10           ` Sandeepa Prabhu
2014-11-20  5:10             ` Sandeepa Prabhu
2014-11-26  6:46           ` David Long
2014-11-26  6:46             ` David Long
2014-11-26 10:09             ` Will Deacon
2014-11-26 10:09               ` Will Deacon
2014-12-22 10:10   ` Pratyush Anand
2014-12-22 10:10     ` Pratyush Anand
2014-11-18  6:32 ` [PATCH v3 2/5] arm64: Kprobes instruction simulation support David Long
2014-11-18  6:32   ` David Long
2014-11-18 14:43   ` William Cohen
2014-11-18 14:43     ` William Cohen
2014-11-18  6:32 ` [PATCH v3 3/5] arm64: Add kernel return probes support(kretprobes) David Long
2014-11-18  6:32   ` David Long
2014-11-18 14:50   ` William Cohen
2014-11-18 14:50     ` William Cohen
2014-11-18  6:32 ` [PATCH v3 4/5] kprobes: Add arm64 case in kprobe example module David Long
2014-11-18  6:32   ` David Long
2014-11-18  6:32 ` [PATCH v3 5/5] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2014-11-18  6:32   ` David Long
2014-11-18 14:52   ` Will Deacon
2014-11-18 14:52     ` Will Deacon
2014-11-20  7:20     ` Masami Hiramatsu
2014-11-20  7:20       ` Masami Hiramatsu
2014-11-21  6:16     ` David Long
2014-11-21  6:16       ` David Long
2014-11-20 15:02 ` [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support Steve Capper
2014-11-20 15:02   ` Steve Capper
2014-11-26  8:33   ` Masami Hiramatsu [this message]
2014-11-26  8:33     ` Masami Hiramatsu
2014-11-26 10:03     ` Steve Capper
2014-11-26 10:03       ` Steve Capper
2014-11-26 17:46       ` David Long
2014-11-26 17:46         ` David Long
2014-11-26 18:59         ` Steve Capper
2014-11-26 18:59           ` Steve Capper
2014-11-27  6:07           ` Masami Hiramatsu
2014-11-27  6:07             ` Masami Hiramatsu
2014-11-28 16:01             ` Steve Capper
2014-11-28 16:01               ` Steve Capper
2014-12-01  9:37               ` Masami Hiramatsu
2014-12-01  9:37                 ` Re: " Masami Hiramatsu
2014-12-02 19:27                 ` William Cohen
2014-12-02 19:27                   ` William Cohen
2014-12-02 20:00                   ` William Cohen
2014-12-02 20:00                     ` William Cohen
2014-12-03  3:36                   ` Masami Hiramatsu
2014-12-03  3:36                     ` Masami Hiramatsu
2014-12-03 14:54                 ` William Cohen
2014-12-03 14:54                   ` William Cohen
2014-12-03 22:54                   ` David Long
2014-12-03 22:54                     ` David Long
2014-12-04  0:02                     ` David Long
2014-12-04  0:02                       ` David Long
2014-12-04  1:16                     ` William Cohen
2014-12-04  1:16                       ` William Cohen
2014-12-04  2:48                       ` David Long
2014-12-04  2:48                         ` David Long
2014-12-04 10:21                         ` Steve Capper
2014-12-04 10:21                           ` Steve Capper
2014-12-04 10:43                           ` Masami Hiramatsu
2014-12-04 10:43                             ` Masami Hiramatsu
2014-12-04 11:29                             ` Steve Capper
2014-12-04 11:29                               ` Steve Capper
2014-12-04 11:53                               ` Masami Hiramatsu
2014-12-04 11:53                                 ` Masami Hiramatsu
2014-12-09 13:33                                 ` Steve Capper
2014-12-09 13:33                                   ` Steve Capper
2014-12-09 14:27                                   ` David Long
2014-12-09 14:27                                     ` David Long
2014-12-10 16:38                                     ` Steve Capper
2014-12-10 16:38                                       ` Steve Capper
2014-12-12 22:42                                       ` David Long
2014-12-12 22:42                                         ` David Long
2014-12-12 23:10                                         ` Steve Capper
2014-12-12 23:10                                           ` Steve Capper
2014-12-15  5:58                                           ` Masami Hiramatsu
2014-12-15  5:58                                             ` Masami Hiramatsu
2014-12-15  6:29                                           ` David Long
2014-12-15  6:29                                             ` David Long
2014-12-05  5:08                       ` William Cohen
2014-12-05  5:08                         ` William Cohen
2014-11-27  5:13       ` Masami Hiramatsu
2014-11-27  5:13         ` Masami Hiramatsu

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=54759041.9080105@hitachi.com \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=linux-arm-kernel@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.