linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Long <dave.long@linaro.org>
To: "Jon Medhurst (Tixy)" <tixy@linaro.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	linux-arm-kernel@lists.infradead.org,
	Rabin Vincent <rabin@rab.in>, Oleg Nesterov <oleg@redhat.com>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	Ingo Molnar <mingo@redhat.com>,
	linux-kernel@vger.kernel.org,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v2 10/13] kprobes: Remove uneeded kernel dependency on struct arch_specific_insn
Date: Thu, 14 Nov 2013 15:33:13 -0500	[thread overview]
Message-ID: <52853389.7080105@linaro.org> (raw)
In-Reply-To: <1384438551.3388.78.camel@linaro1.home>

On 11/14/13 09:15, Jon Medhurst (Tixy) wrote:
> On Thu, 2013-11-14 at 11:02 +0900, Masami Hiramatsu wrote:
>> (2013/11/14 2:13), Jon Medhurst (Tixy) wrote:
>>> On Tue, 2013-10-15 at 17:04 -0400, David Long wrote:
>>>> From: "David A. Long" <dave.long@linaro.org>
>>>>
>>>> Instead of depending on include/asm/kprobes.h to provide a dummy definition
>>>> for struct arch_specific_insn, do so in include/linux/kprobes.h.
>>>
>>> That change description doesn't quite seem to quite make sense to me.
>>>
>>> Anyway, what we're trying to do with this patch is to allow us to use
>>> arch_specific_insn for purposes additional to implementing kprobes. This
>>> patch enables that but I'm wary that the kprobes code assumes that ainsn
>>> is a struct arch_specific_insn, e.g. in linux/kernel/kprobes.c we have:
>>>
>>> 	memcpy(&p->ainsn, &ap->ainsn, sizeof(struct arch_specific_insn));
>>>
>>> Now, that code isn't compiled when kprobes isn't configured, but it
>>> seams to me to be safer if that was also changed to
>>>
>>> 	memcpy(&p->ainsn, &ap->ainsn, sizeof(p->ainsn));
>>

That does look like an important improvement.

>> This kind of cleanup looks good for me, but I don't agree to change
>> the type of the member (removing is OK) by Kconfig.
>
> Wouldn't that still require an #ifdef CONFIG_KPROBES around ainsn?
> Admittedly a less ugly one than one to change its type to an int.
>

It is also possible to make the include of asm/kprobes.h unconditional, 
although that might only cause the #ifdef to appear in more than one 
include file.

>>   If you want to
>> change the framework of kprobes and uprobes itself (unification),
>> I'm appreciate to discuss with you and uprobes people, because it
>> will involve all arch dependent code change, *NOT ONLY* the ARM issue.
>
> Well, I don't think the goal wasn't unification as such. For kprobes on
> ARM we have to decode and simulate pretty much the entire instruction
> set(s) and the attempt to implement uprobes on ARM have tried to make
> use of as much of that as possible. The tricky bit has been as to where
> to try and draw the level of abstraction, and it seems this may well be
> leaking out of the arch specific arena.
>
> Bit of background, Dave Long has been working on ARM uprobes based on
> Rabin Vincent's earlier work, and I, as author of a large part of the
> current ARM kprobes code, have been reviewing (not very satisfactorily I
> admit) the bits that impact that. One of my motivations has been to push
> the kprobes instruction decoding to be more generic, rather than special
> casing things to cope with uprobes. This is because I'm aware of the
> reoccurring theme on the ARM lists that it would be good to not have all
> the different methods of instruction decoding, for probes, debug and
> simulation, etc. (I'm sceptical that a one-size-fits-all is possible,
> but consolidation where practical is good).
>
>>
>>> However, I also wonder if we should instead leave arch_specific_insn as
>>> a kprobes specific structure and on ARM define it in terms of a new more
>>> generic 'struct probe_insn'? The drawback with that is that we'd
>>> probably end up with a struct just containing a single member which
>>> seems a bit redundant:
>>>
>>> struct arch_specific_insn {
>>> 	struct probe_insn pinsn;
>>> };
>>
>> I also disagree it. If you have a plan to integrate uprobes and kprobes
>> arch specific code, please share it with us.
>
> There's not really a 'plan', just an attempt to reuse the instruction
> decoding code used by kprobes in the implementation of uprobes, i.e. the
> patch series [1] which this mail thread is in reply to.
>
> [1] http://thread.gmane.org/gmane.linux.kernel/1579985
>
>>   I'm happy to work with you.
>> There are already many maintainers on each feature who is responsible for
>> it (even it is a piece of code), and scripts/get_maintainers.pl gives you
>> who are.
>>

Sorry, that would indeed have told me that you were responsible for 
include/linux/kprobes.h.

>>
>> Srikar, Oleg, I think it's a good time to merge such arch_specific mechanism
>> of uprobes and kprobes. Would you think we can do similar thing on x86 too?
>

I welcome input from people who have experience in this area.  I have no 
desire to complicate efforts that might be attempted on other 
architectures, but the existing code was unique to ARM and the goal here 
was just to share it on ARM in implementing the currently non-existant 
ARM uprobes feature.  It seems to me the leakage of these changes into 
generic kprobes code is exceedingly small, and unlikely to be a 
hinderance to any future work (if any is even needed or planned) 
supporting uprobes or kprobes on other architectures.  In the meantime 
we have ARM users who have been asking for uprobes support for a while 
and this is, IMHO, a fairly clean approach to providing it.

-dl


  reply	other threads:[~2013-11-14 20:33 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-15 21:04 [PATCH v2 00/13] uprobes: Add uprobes support for ARM David Long
2013-10-15 21:04 ` [PATCH v2 01/13] uprobes: move function declarations out of arch David Long
2013-11-05 16:01   ` Oleg Nesterov
2013-11-05 18:16     ` Oleg Nesterov
2013-11-05 19:01       ` [PATCH] uprobes: Export write_opcode() as uprobe_write_opcode() Oleg Nesterov
2013-11-05 19:55         ` David Long
2013-11-05 19:13       ` [PATCH v2 01/13] uprobes: move function declarations out of arch David Long
2013-10-15 21:04 ` [PATCH v2 02/13] uprobes: allow ignoring of probe hits David Long
2013-10-19 17:02   ` Oleg Nesterov
2013-10-22  3:45     ` David Long
2013-10-22 11:25       ` Oleg Nesterov
2013-10-22 23:56         ` David Long
2013-10-28 18:54     ` Oleg Nesterov
2013-10-30 21:11       ` David Long
2013-10-15 21:04 ` [PATCH v2 03/13] uprobes: allow arch access to xol slot David Long
2013-10-19 16:36   ` Oleg Nesterov
2013-10-23  0:03     ` David Long
2013-10-29 15:40       ` Oleg Nesterov
2013-11-04 19:49         ` [PATCH] uprobes: introduce arch_uprobe->ixol Oleg Nesterov
2013-11-04 21:25           ` David Long
2013-11-05 16:04           ` David Long
2013-11-05 18:01             ` Oleg Nesterov
2013-11-05 18:45               ` David Long
2013-10-15 21:04 ` [PATCH v2 04/13] uprobes: allow arch-specific initialization David Long
2013-10-19 16:42   ` Oleg Nesterov
2013-10-23  1:21     ` David Long
2013-10-28 18:58       ` Oleg Nesterov
2013-10-31 18:41         ` David Long
2013-11-01 13:52           ` Oleg Nesterov
2013-11-04  3:24             ` David Long
2013-10-15 21:04 ` [PATCH v2 05/13] uprobes: add arch write opcode hook David Long
2013-10-19 16:50   ` Oleg Nesterov
2013-10-23 18:20     ` David Long
2013-10-28 19:49       ` Oleg Nesterov
2013-10-29 19:59         ` Oleg Nesterov
2013-11-02  3:33           ` David Long
2013-11-02 14:03             ` Oleg Nesterov
2013-10-15 21:04 ` [PATCH v2 06/13] ARM: move shared uprobe/kprobe definitions into new include file David Long
2013-10-15 21:04 ` [PATCH v2 07/13] ARM: move generic thumb instruction parsing code to new files for use by other features David Long
2013-11-13 17:09   ` Jon Medhurst (Tixy)
2013-11-14 14:13     ` David Long
2013-10-15 21:04 ` [PATCH v2 08/13] ARM: use a function table for determining instruction interpreter actions David Long
2013-11-13 17:11   ` Jon Medhurst (Tixy)
2013-11-14 15:17     ` David Long
2013-10-15 21:04 ` [PATCH v2 09/13] ARM: Disable jprobe selftests in thumb kernels David Long
2013-11-07 17:26   ` Jon Medhurst (Tixy)
2013-11-10 22:57     ` David Long
2013-10-15 21:04 ` [PATCH v2 10/13] kprobes: Remove uneeded kernel dependency on struct arch_specific_insn David Long
2013-11-13 17:13   ` Jon Medhurst (Tixy)
2013-11-14  2:02     ` Masami Hiramatsu
2013-11-14 14:15       ` Jon Medhurst (Tixy)
2013-11-14 20:33         ` David Long [this message]
2013-11-15 10:23           ` Masami Hiramatsu
2013-11-15 15:16             ` David Long
2013-11-15 10:11         ` Re: " Masami Hiramatsu
2013-11-14  1:20   ` Masami Hiramatsu
2013-10-15 21:04 ` [PATCH v2 11/13] ARM: Finish renaming ARM kprobes APIs for sharing with uprobes David Long
2013-11-13 17:16   ` Jon Medhurst (Tixy)
2013-11-15 15:45     ` David Long
2013-10-15 21:04 ` [PATCH v2 12/13] ARM: add uprobes support David Long
2013-10-15 21:04 ` [PATCH v2 13/13] ARM: Remove uprobes dependency on kprobes 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=52853389.7080105@linaro.org \
    --to=dave.long@linaro.org \
    --cc=ananth@in.ibm.com \
    --cc=davem@davemloft.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --cc=rabin@rab.in \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=tixy@linaro.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;
as well as URLs for NNTP newsgroup(s).