From: Denys Vlasenko <dvlasenk@redhat.com>
To: LKML <linux-kernel@vger.kernel.org>
Subject: Abuse of CONFIG_FOO's as feature selectors
Date: Wed, 22 Apr 2015 20:20:21 +0200 [thread overview]
Message-ID: <5537E665.3010800@redhat.com> (raw)
Hi,
Kernel has a growing number of CONFIG items which are not
user-selectable features of their particular kernel builds,
but simply booleans controlled by other CONFIGs.
Example:
config X86
def_bool y
select ARCH_MIGHT_HAVE_ACPI_PDC if ACPI
select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
select ARCH_HAS_FAST_MULTIPLIER
select ARCH_HAS_GCOV_PROFILE_ALL
select ARCH_MIGHT_HAVE_PC_PARPORT
select ARCH_MIGHT_HAVE_PC_SERIO
select HAVE_AOUT if X86_32
select HAVE_UNSTABLE_SCHED_CLOCK
select ARCH_SUPPORTS_NUMA_BALANCING if X86_64
select ARCH_SUPPORTS_INT128 if X86_64
select HAVE_IDE
select HAVE_OPROFILE
...
I see how this practice originated: "select" statement
was initially added so that if feature X requires feature Y,
this can be enforced, but it was easy to use it to define
other booleans.
I have a feeling that in retrospect, it was a mistake.
It clutters .config with information which has nothing to do
with user's choice.
More importantly, now when you read some code, you don't know
whether a CONFIG_FOO you look at is user's configuration choice
or something else.
Now there are hundreds, maybe even thousands of these non-config
CONFIGs everywhere.
The same effect can be achieved, with marginally more typing,
with usual C defines in some header file:
#ifdef CONFIG_X86
# define ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
# define ARCH_HAS_FAST_MULTIPLIER
# define ARCH_HAS_GCOV_PROFILE_ALL
# define ARCH_MIGHT_HAVE_PC_PARPORT
# define ARCH_MIGHT_HAVE_PC_SERIO
...
Maybe we should stop doing the former and use the latter method?
next reply other threads:[~2015-04-22 18:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-22 18:20 Denys Vlasenko [this message]
2015-04-22 18:56 ` Abuse of CONFIG_FOO's as feature selectors Andreas Ruprecht
2015-04-23 12:11 ` Stefan Hengelein
2015-04-23 19:28 ` Paul Bolle
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=5537E665.3010800@redhat.com \
--to=dvlasenk@redhat.com \
--cc=linux-kernel@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;
as well as URLs for NNTP newsgroup(s).