From: dave.long@linaro.org (David Long)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 00/14] uprobes: Add uprobes support for ARM
Date: Sun, 02 Mar 2014 07:02:06 -0500 [thread overview]
Message-ID: <53131DBE.7020500@linaro.org> (raw)
In-Reply-To: <20140301123026.GD21483@n2100.arm.linux.org.uk>
Oleg,
I've been looking at arch/Kconfig and kernel/trace/Kconfig where they
deal with uprobes. The relevant items are CONFIG_UPROBES and
CONFIG_UPROBE_EVENT. It just doesn't look right to me. It looks like
"select" is used in part maybe just to avoid the recursive dependency
error that would be generated if "depends on" were used in both places.
However I don't think UPROBES should be dependent on UPROBE_EVENT, only
the other way around. As RK noted in previous email (copied in part
below) the select does not pull in the lower level dependencies. This
all works on x86 only because arch/x86/Kconfig defines CONFIG_PERF_EVENT
(which feels like a big hammer). We don't need to do this on ARM, and
we don't do it. The result is that, unless PERF_EVENT is set
separately, uprobes tends not to build. I was lucking-out in my testing
due to other default config items turning on PERF_EVENT.
What do you think about the following patch?:
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 80bbb8c..8793066 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -87,7 +87,8 @@ config KPROBES_ON_FTRACE
>
> config UPROBES
> bool "Transparent user-space probes (EXPERIMENTAL)"
> - depends on UPROBE_EVENT && PERF_EVENTS
> + depends on ARCH_SUPPORTS_UPROBES
> + depends on PERF_EVENTS
> default n
> select PERCPU_RWSEM
> help
> diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> index 015f85a..7d2647e 100644
> --- a/kernel/trace/Kconfig
> +++ b/kernel/trace/Kconfig
> @@ -422,9 +422,8 @@ config KPROBE_EVENT
>
> config UPROBE_EVENT
> bool "Enable uprobes-based dynamic events"
> - depends on ARCH_SUPPORTS_UPROBES
> depends on MMU
> - select UPROBES
> + depends on UPROBES
> select PROBE_EVENTS
> select TRACING
> default n
This removes the pseudo-recursive dependency. The downside is that now
you have to set PERF_EVENTS to use UPROBES, and UPROBES to use
UPROBE_EVENT, whereas before on x86 you only had to set UPROBE_EVENT (as
long as PERF_EVENTS stays hardcoded on). I think this could be avoided
by making each "depends on" a "selects", since they apply transitively.
I'm sensing this would be an unpopular idea though.
-dl
On 03/01/14 07:30, Russell King - ARM Linux wrote:
[ ... ]
> Clearly, it doesn't make sense for UPROBES to be enabled with PERF_EVENTS
> disabled - and indeed the Kconfig ensures that this dependency is properly
> expressed:
>
> config UPROBES
> bool "Transparent user-space probes (EXPERIMENTAL)"
> depends on UPROBE_EVENT && PERF_EVENTS
> default n
> select PERCPU_RWSEM
>
> but where this all falls down is here:
>
> config UPROBE_EVENT
> bool "Enable uprobes-based dynamic events"
> depends on ARCH_SUPPORTS_UPROBES
> depends on MMU
> select UPROBES
> select PROBE_EVENTS
> select TRACING
> default n
>
> Which is yet another brilliant example of why this "select" crap is soo
> evil. Yes, the failing configuration has:
>
> CONFIG_UPROBE_EVENT=y
>
> Ineed, there was a Kconfig warning:
>
> warning: (UPROBE_EVENT) selects UPROBES which has unmet direct dependencies (UPROBE_EVENT && PERF_EVENTS)
>
> This is not your fault. It's the fault of everyone who passed through
> commit f3f096cfedf8113380c56fc855275cc75cd8cf55 without properly reviewing
> it and paying attention to that select crap. Given how evil "select" is,
> it's something which should always be thoroughly reviewed - with analysis
> of the dependencies. I believe commits which introduce new select
> statements should document an analysis of why those new select statements
> are appropriate and how they ensure that any dependencies of the selected
> symbol are not violated.
>
> Therefore, I will not take the ARM uprobes code while this kind of
> select abortion is present - it needs to be fixed first to avoid these
> build errors. Sorry.
>
next prev parent reply other threads:[~2014-03-02 12:02 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-10 7:38 [PATCH v6 00/14] uprobes: Add uprobes support for ARM David Long
2014-02-10 7:38 ` [PATCH v6 01/14] uprobes: allow ignoring of probe hits David Long
2014-02-10 7:38 ` [PATCH v6 02/14] ARM: move shared uprobe/kprobe definitions into new include file David Long
2014-02-10 7:38 ` [PATCH v6 03/14] ARM: Move generic arm instruction parsing code to new files for sharing between features David Long
2014-02-10 7:38 ` [PATCH v6 04/14] ARM: move generic thumb instruction parsing code to new files for use by other feature David Long
2014-02-10 7:38 ` [PATCH v6 05/14] ARM: use a function table for determining instruction interpreter action David Long
2014-02-10 7:38 ` [PATCH v6 06/14] ARM: Disable jprobes test when built into thumb-mode kernel David Long
2014-02-10 7:38 ` [PATCH v6 07/14] ARM: Remove use of struct kprobe from generic probes code David Long
2014-02-28 10:12 ` Russell King - ARM Linux
2014-02-28 14:11 ` Jon Medhurst (Tixy)
2014-02-28 14:45 ` Jon Medhurst (Tixy)
2014-03-02 10:37 ` David Long
2014-03-02 12:11 ` Russell King - ARM Linux
2014-02-10 7:38 ` [PATCH v6 08/14] ARM: Make the kprobes condition_check symbol names more generic David Long
2014-02-10 7:39 ` [PATCH v6 09/14] ARM: Change more ARM kprobes symbol names to something more David Long
2014-02-10 7:39 ` [PATCH v6 10/14] ARM: Rename the shared kprobes/uprobe return value enum David Long
2014-02-10 7:39 ` [PATCH v6 11/14] ARM: Change the remaining shared kprobes/uprobes symbols to something generic David Long
2014-02-10 7:39 ` [PATCH v6 12/14] ARM: Add an emulate flag to the kprobes/uprobes instruction decode functions David Long
2014-02-10 7:39 ` [PATCH v6 13/14] ARM: Make arch_specific_insn a define for new arch_probes_insn structure David Long
2014-02-10 7:39 ` [PATCH v6 14/14] ARM: add uprobes support David Long
2014-03-01 12:30 ` [PATCH v6 00/14] uprobes: Add uprobes support for ARM Russell King - ARM Linux
2014-03-02 12:02 ` David Long [this message]
2014-03-03 6:23 ` Srikar Dronamraju
2014-03-03 10:08 ` David Long
2014-03-03 10:39 ` Russell King - ARM Linux
2014-03-03 20:50 ` Oleg Nesterov
2014-03-04 0:53 ` Russell King - ARM Linux
2014-03-04 17:31 ` Oleg Nesterov
2014-03-06 8:10 ` 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=53131DBE.7020500@linaro.org \
--to=dave.long@linaro.org \
--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 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).