All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Long <dave.long@linaro.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: "Catalin Marinas" <catalin.marinas@arm.com>,
	"Huang Shijie" <shijie.huang@arm.com>,
	"James Morse" <james.morse@arm.com>,
	"Marc Zyngier" <marc.zyngier@arm.com>,
	"Pratyush Anand" <panand@redhat.com>,
	"Sandeepa Prabhu" <sandeepa.s.prabhu@gmail.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"William Cohen" <wcohen@redhat.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Steve Capper" <steve.capper@linaro.org>,
	"Li Bin" <huawei.libin@huawei.com>,
	"Adam Buchbinder" <adam.buchbinder@gmail.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Andrey Ryabinin" <ryabinin.a.a@gmail.com>,
	"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
	"Christoffer Dall" <christoffer.dall@linaro.org>,
	"Daniel Thompson" <daniel.thompson@linaro.org>,
	"Dave P Martin" <Dave.Martin@arm.com>,
	"Jens Wiklander" <jens.wiklander@linaro.org>,
	"Jisheng Zhang" <jszhang@marvell.com>,
	"John Blackwood" <john.blackwood@ccur.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Petr Mladek" <pmladek@suse.com>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Suzuki K Poulose" <suzuki.poulose@arm.com>,
	"Vladimir Murzin" <Vladimir.Murzin@arm.com>,
	"Yang Shi" <yang.shi@linaro.org>,
	"Zi Shen Lim" <zlim.lnx@gmail.com>,
	"yalin wang" <yalin.wang2010@gmail.com>,
	"Mark Brown" <broonie@kernel.org>
Subject: Re: [PATCH v13 05/10] arm64: Kprobes with single stepping support
Date: Mon, 13 Jun 2016 11:22:47 -0400	[thread overview]
Message-ID: <575ECFC7.10207@linaro.org> (raw)
In-Reply-To: <20160613155017.860097875e8bc86563a065ce@kernel.org>

On 06/13/2016 02:50 AM, Masami Hiramatsu wrote:
> On Mon, 13 Jun 2016 00:10:29 -0400
> David Long <dave.long@linaro.org> wrote:
>
>>>> ---
>>>>    arch/arm64/Kconfig                      |   1 +
>>>>    arch/arm64/include/asm/debug-monitors.h |   5 +
>>>>    arch/arm64/include/asm/insn.h           |   4 +-
>>>>    arch/arm64/include/asm/kprobes.h        |  60 ++++
>>>>    arch/arm64/include/asm/probes.h         |  44 +++
>>>>    arch/arm64/kernel/Makefile              |   1 +
>>>>    arch/arm64/kernel/debug-monitors.c      |  18 +-
>>>>    arch/arm64/kernel/kprobes-arm64.c       | 144 +++++++++
>>>>    arch/arm64/kernel/kprobes-arm64.h       |  35 +++
>>>>    arch/arm64/kernel/kprobes.c             | 526 ++++++++++++++++++++++++++++++++
>>>
>>> Not sure why kprobes.c and kprobes-arm64.c are splitted.
>>>
>>>
>>
>> This comes from the model of the arm32 kprobes code where handling of
>> the low-level instruction simulation is implemented in separate files
>> for 32-bit vs. thumb instructions.  It should make a little more sense
>> in the future when additional instruction simulation code will hopefully
>> be added for those instructions we cannot currently single-step
>> out-of-line.  It also probably *could* be merged into one file.
>
> Hmm, at least the name of arch/arm64/kernel/kprobes-arm64.c is
> meaningless. As we've done in x86, I think we can make it
> arch/arm64/kernel/kprobes/decode-insn.{c,h}
>

I've changed the name to kprobe-decode-insn.[hc], or do you feel 
strongly the three kprobes source files in arch/arm64/kernel need their 
own subdirectory?

>
> [..]
>>>> +
>>>> +/* Return:
>>>> + *   INSN_REJECTED     If instruction is one not allowed to kprobe,
>>>> + *   INSN_GOOD         If instruction is supported and uses instruction slot,
>>>> + *   INSN_GOOD_NO_SLOT If instruction is supported but doesn't use its slot.
>>>
>>> Is there any chance to return INSN_GOOD_NO_SLOT?
>>>
>>
>> Ah, that gets used later when simulation support is added.  I've removed
>> this enum value from this commit and will add it to the later one.
>> Please no one complain about using an enum instead of a bool, it will
>> eventually have three possible values.
>
> OK :)
>
> [..]
>>>> +enum kprobe_insn __kprobes
>>>> +arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
>>>> +{
>>>> +	enum kprobe_insn decoded;
>>>> +	kprobe_opcode_t insn = le32_to_cpu(*addr);
>>>> +	kprobe_opcode_t *scan_start = addr - 1;
>>>> +	kprobe_opcode_t *scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	struct module *mod;
>>>> +#endif
>>>> +
>>>> +	if (addr >= (kprobe_opcode_t *)_text &&
>>>> +	    scan_end < (kprobe_opcode_t *)_text)
>>>> +		scan_end = (kprobe_opcode_t *)_text;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	else {
>>>> +		preempt_disable();
>>>> +		mod = __module_address((unsigned long)addr);
>>>> +		if (mod && within_module_init((unsigned long)addr, mod) &&
>>>> +			!within_module_init((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->init_layout.base;
>>>> +		else if (mod && within_module_core((unsigned long)addr, mod) &&
>>>> +			!within_module_core((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->core_layout.base;
>>>
>>> What happen if mod == NULL? it should be return error, isn't it?
>>>
>>
>> No, it should be fine.  It just means it didn't have to do either of the
>> extra checks to limit the end of the search through the code to the
>> boundary of one of the corresponding module text sections. It means the
>> instruction is in the regular kernel (non-module) text segment.
>
> Ah, I see. It is OK then. :)
>
> Thank you,
>
>

Thanks,
-dl

WARNING: multiple messages have this Message-ID (diff)
From: dave.long@linaro.org (David Long)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v13 05/10] arm64: Kprobes with single stepping support
Date: Mon, 13 Jun 2016 11:22:47 -0400	[thread overview]
Message-ID: <575ECFC7.10207@linaro.org> (raw)
In-Reply-To: <20160613155017.860097875e8bc86563a065ce@kernel.org>

On 06/13/2016 02:50 AM, Masami Hiramatsu wrote:
> On Mon, 13 Jun 2016 00:10:29 -0400
> David Long <dave.long@linaro.org> wrote:
>
>>>> ---
>>>>    arch/arm64/Kconfig                      |   1 +
>>>>    arch/arm64/include/asm/debug-monitors.h |   5 +
>>>>    arch/arm64/include/asm/insn.h           |   4 +-
>>>>    arch/arm64/include/asm/kprobes.h        |  60 ++++
>>>>    arch/arm64/include/asm/probes.h         |  44 +++
>>>>    arch/arm64/kernel/Makefile              |   1 +
>>>>    arch/arm64/kernel/debug-monitors.c      |  18 +-
>>>>    arch/arm64/kernel/kprobes-arm64.c       | 144 +++++++++
>>>>    arch/arm64/kernel/kprobes-arm64.h       |  35 +++
>>>>    arch/arm64/kernel/kprobes.c             | 526 ++++++++++++++++++++++++++++++++
>>>
>>> Not sure why kprobes.c and kprobes-arm64.c are splitted.
>>>
>>>
>>
>> This comes from the model of the arm32 kprobes code where handling of
>> the low-level instruction simulation is implemented in separate files
>> for 32-bit vs. thumb instructions.  It should make a little more sense
>> in the future when additional instruction simulation code will hopefully
>> be added for those instructions we cannot currently single-step
>> out-of-line.  It also probably *could* be merged into one file.
>
> Hmm, at least the name of arch/arm64/kernel/kprobes-arm64.c is
> meaningless. As we've done in x86, I think we can make it
> arch/arm64/kernel/kprobes/decode-insn.{c,h}
>

I've changed the name to kprobe-decode-insn.[hc], or do you feel 
strongly the three kprobes source files in arch/arm64/kernel need their 
own subdirectory?

>
> [..]
>>>> +
>>>> +/* Return:
>>>> + *   INSN_REJECTED     If instruction is one not allowed to kprobe,
>>>> + *   INSN_GOOD         If instruction is supported and uses instruction slot,
>>>> + *   INSN_GOOD_NO_SLOT If instruction is supported but doesn't use its slot.
>>>
>>> Is there any chance to return INSN_GOOD_NO_SLOT?
>>>
>>
>> Ah, that gets used later when simulation support is added.  I've removed
>> this enum value from this commit and will add it to the later one.
>> Please no one complain about using an enum instead of a bool, it will
>> eventually have three possible values.
>
> OK :)
>
> [..]
>>>> +enum kprobe_insn __kprobes
>>>> +arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
>>>> +{
>>>> +	enum kprobe_insn decoded;
>>>> +	kprobe_opcode_t insn = le32_to_cpu(*addr);
>>>> +	kprobe_opcode_t *scan_start = addr - 1;
>>>> +	kprobe_opcode_t *scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	struct module *mod;
>>>> +#endif
>>>> +
>>>> +	if (addr >= (kprobe_opcode_t *)_text &&
>>>> +	    scan_end < (kprobe_opcode_t *)_text)
>>>> +		scan_end = (kprobe_opcode_t *)_text;
>>>> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
>>>> +	else {
>>>> +		preempt_disable();
>>>> +		mod = __module_address((unsigned long)addr);
>>>> +		if (mod && within_module_init((unsigned long)addr, mod) &&
>>>> +			!within_module_init((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->init_layout.base;
>>>> +		else if (mod && within_module_core((unsigned long)addr, mod) &&
>>>> +			!within_module_core((unsigned long)scan_end, mod))
>>>> +			scan_end = (kprobe_opcode_t *)mod->core_layout.base;
>>>
>>> What happen if mod == NULL? it should be return error, isn't it?
>>>
>>
>> No, it should be fine.  It just means it didn't have to do either of the
>> extra checks to limit the end of the search through the code to the
>> boundary of one of the corresponding module text sections. It means the
>> instruction is in the regular kernel (non-module) text segment.
>
> Ah, I see. It is OK then. :)
>
> Thank you,
>
>

Thanks,
-dl

  reply	other threads:[~2016-06-13 15:23 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-03  3:26 [PATCH v13 00/10] arm64: Add kernel probes (kprobes) support David Long
2016-06-03  3:26 ` David Long
2016-06-03  3:26 ` [PATCH v13 01/10] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-06-03  3:26   ` David Long
2016-06-03 11:36   ` Masami Hiramatsu
2016-06-03 11:36     ` Masami Hiramatsu
2016-06-20  2:43   ` Li Bin
2016-06-20  2:43     ` Li Bin
2016-06-23 13:48     ` David Long
2016-06-23 13:48       ` David Long
2016-06-03  3:26 ` [PATCH v13 02/10] arm64: Add more test functions to insn.c David Long
2016-06-03  3:26   ` David Long
2016-06-08  1:14   ` Masami Hiramatsu
2016-06-08  1:14     ` Masami Hiramatsu
2016-06-10 14:54     ` David Long
2016-06-10 14:54       ` David Long
2016-06-03  3:26 ` [PATCH v13 03/10] arm64: add conditional instruction simulation support David Long
2016-06-03  3:26   ` David Long
2016-06-04  3:53   ` Masami Hiramatsu
2016-06-04  3:53     ` Masami Hiramatsu
2016-06-13  4:19     ` David Long
2016-06-13  4:19       ` David Long
2016-06-03  3:26 ` [PATCH v13 04/10] arm64: Blacklist non-kprobe-able symbol David Long
2016-06-03  3:26   ` David Long
2016-06-04  3:40   ` Masami Hiramatsu
2016-06-04  3:40     ` Masami Hiramatsu
2016-06-07  3:52     ` David Long
2016-06-07  3:52       ` David Long
2016-06-10 19:16     ` David Long
2016-06-10 19:16       ` David Long
2016-06-03  3:26 ` [PATCH v13 05/10] arm64: Kprobes with single stepping support David Long
2016-06-03  3:26   ` David Long
2016-06-08  1:07   ` Masami Hiramatsu
2016-06-08  1:07     ` Masami Hiramatsu
2016-06-13  4:10     ` David Long
2016-06-13  4:10       ` David Long
2016-06-13  6:50       ` Masami Hiramatsu
2016-06-13  6:50         ` Masami Hiramatsu
2016-06-13 15:22         ` David Long [this message]
2016-06-13 15:22           ` David Long
2016-06-14  0:45           ` Masami Hiramatsu
2016-06-14  0:45             ` Masami Hiramatsu
2016-06-22 18:28             ` David Long
2016-06-22 18:28               ` David Long
2016-06-14  1:42   ` Masami Hiramatsu
2016-06-14  1:42     ` Masami Hiramatsu
2016-06-03  3:26 ` [PATCH v13 06/10] arm64: Treat all entry code as non-kprobe-able David Long
2016-06-03  3:26   ` David Long
2016-06-07  0:34   ` Masami Hiramatsu
2016-06-07  0:34     ` Masami Hiramatsu
2016-06-03  3:26 ` [PATCH v13 07/10] arm64: kprobes instruction simulation support David Long
2016-06-03  3:26   ` David Long
2016-06-03  3:26 ` [PATCH v13 08/10] arm64: Add trampoline code for kretprobes David Long
2016-06-03  3:26   ` David Long
2016-06-07 10:38   ` Masami Hiramatsu
2016-06-07 10:38     ` Masami Hiramatsu
2016-06-13  4:23     ` David Long
2016-06-13  4:23       ` David Long
2016-06-03  3:26 ` [PATCH v13 09/10] arm64: Add kernel return probes support (kretprobes) David Long
2016-06-03  3:26   ` David Long
2016-06-07 10:28   ` Masami Hiramatsu
2016-06-07 10:28     ` Masami Hiramatsu
2016-06-22 18:16     ` David Long
2016-06-22 18:16       ` David Long
2016-06-03  3:26 ` [PATCH v13 10/10] kprobes: Add arm64 case in kprobe example module David Long
2016-06-03  3:26   ` David Long
2016-06-07 10:12   ` Masami Hiramatsu
2016-06-07 10:12     ` Masami Hiramatsu
2016-06-08  5:49   ` Huang Shijie
2016-06-08  5:49     ` Huang Shijie
2016-06-27  2:54     ` David Long
2016-06-27  2:54       ` David Long

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=575ECFC7.10207@linaro.org \
    --to=dave.long@linaro.org \
    --cc=Dave.Martin@arm.com \
    --cc=Vladimir.Murzin@arm.com \
    --cc=adam.buchbinder@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.bennee@linaro.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=daniel.thompson@linaro.org \
    --cc=huawei.libin@huawei.com \
    --cc=james.morse@arm.com \
    --cc=jens.wiklander@linaro.org \
    --cc=john.blackwood@ccur.com \
    --cc=jszhang@marvell.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=mhiramat@kernel.org \
    --cc=panand@redhat.com \
    --cc=pmladek@suse.com \
    --cc=robin.murphy@arm.com \
    --cc=ryabinin.a.a@gmail.com \
    --cc=sandeepa.s.prabhu@gmail.com \
    --cc=shijie.huang@arm.com \
    --cc=steve.capper@linaro.org \
    --cc=suzuki.poulose@arm.com \
    --cc=wcohen@redhat.com \
    --cc=will.deacon@arm.com \
    --cc=yalin.wang2010@gmail.com \
    --cc=yang.shi@linaro.org \
    --cc=zlim.lnx@gmail.com \
    /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.