From: Paul Gortmaker <paul.gortmaker@windriver.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 1/7] platform_device: better support builtin boilerplate avoidance
Date: Wed, 27 May 2015 20:50:22 -0400 [thread overview]
Message-ID: <20150528005022.GA23774@windriver.com> (raw)
In-Reply-To: <CACRpkdb4Qdv2A_VZ4f9Duvfu7YEbV1+OP7Yx9Co1NeBVuT=TAQ@mail.gmail.com>
[Re: [PATCH 1/7] platform_device: better support builtin boilerplate avoidance] On 12/05/2015 (Tue 13:46) Linus Walleij wrote:
> On Sun, May 10, 2015 at 9:49 PM, Paul Gortmaker
> <paul.gortmaker@windriver.com> wrote:
>
> > We have macros that help reduce the boilerplate for modules
> > that register with no extra init/exit complexity other than the
> > most standard use case. However we see an increasing number of
> > non-modular drivers using these modular_driver() type register
> > functions.
> >
> > There are several downsides to this:
> > 1) The code can appear modular to a reader of the code, and they
> > won't know if the code really is modular without checking the
> > Makefile and Kconfig to see if compilation is governed by a
> > bool or tristate.
> > 2) Coders of drivers may be tempted to code up an __exit function
> > that is never used, just in order to satisfy the required three
> > args of the modular registration function.
> > 3) Non-modular code ends up including the <module.h> which increases
> > CPP overhead that they don't need.
> > 4) It hinders us from performing better separation of the module
> > init code and the generic init code.
> >
> > Here we introduce similar macros, with the mapping from module_driver
> > to builtin_driver and similar, so that simple changes of:
> >
> > module_platform_driver() ---> builtin_platform_driver()
> > module_platform_driver_probe() ---> builtin_platform_driver_probe().
> >
> > can help us avoid #3 above, without having to code up the same
> > __init functions and device_initcall() boilerplate.
> >
> > For non modular code, module_init becomes __initcall. But direct use
> > of __initcall is discouraged, vs. one of the priority categorized
> > subgroups. As __initcall gets mapped onto device_initcall, our
> > use of device_initcall directly in this change means that the
> > runtime impact is zero -- drivers will remain at level 6 in the
> > initcall ordering.
> >
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
>
> This does not inhibit probe() and remove() to be
> triggered from sysfs does it?
>
> What is needed on builtin drivers is to set
> .suppress_bind_attrs = true on the struct device_driver
> so that we inhibit the creation of sysfs files to probe
> and remove the driver by operator intervention.
Is this needed? I think we will break existing use cases if we do this.
For example, I have IGB as built-in, but I can still unbind one of the
four devices and make it available for PCI pass through to KVM with:
echo "0000:0a:00.1" > /sys/bus/pci/drivers/igb/unbind
echo "0000:0a:00.1" > /sys/bus/pci/drivers/pci-stub/bind
>
> I don't know if there is a simple way do address
> this though since you don't seem to operate on
> the struct device_driver, just pass it on.
>
> Maybe it's possible to inhibit compilation of
> builtin_platform_driver's if .suppress_bind_attrs == 0?
If we wanted to do this, I think we could simply do something like:
int __platform_driver_register(struct platform_driver *drv,
struct module *owner)
{
drv->driver.owner = owner;
drv->driver.bus = &platform_bus_type;
+ if (!owner) /* built in */
+ drv->driver.suppress_bind_attrs = true;
if (drv->probe)
drv->driver.probe = platform_drv_probe;
if (drv->remove)
...but again, I'm thinking that will break things for people, unless I'm
missing something here.
Paul.
--
>
> Yours,
> Linus Walleij
next prev parent reply other threads:[~2015-05-28 0:52 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-10 19:49 [PATCH 0/7] Introduce builtin_driver and use it for non-modular code Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-10 19:49 ` [PATCH 1/7] platform_device: better support builtin boilerplate avoidance Paul Gortmaker
2015-05-12 11:46 ` Linus Walleij
2015-05-28 0:50 ` Paul Gortmaker [this message]
2015-06-02 9:19 ` Linus Walleij
2015-06-03 14:07 ` Paul Gortmaker
2015-06-10 7:35 ` Linus Walleij
2015-05-10 19:49 ` [PATCH 2/7] drivers/platform: Convert non-modular pdev_bus to use builtin_driver_register Paul Gortmaker
2015-05-10 19:49 ` [PATCH 3/7] drivers/cpuidle: Convert non-modular drivers " Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-11 17:13 ` Daniel Lezcano
2015-05-11 17:13 ` Daniel Lezcano
2015-05-10 19:49 ` [PATCH 4/7] drivers/cpufreq: " Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-12 7:04 ` Viresh Kumar
2015-05-12 7:04 ` Viresh Kumar
2015-05-13 3:17 ` Paul Gortmaker
2015-05-13 3:17 ` Paul Gortmaker
2015-06-03 20:59 ` Paul Gortmaker
2015-06-03 20:59 ` Paul Gortmaker
2015-06-03 20:59 ` Paul Gortmaker
2015-06-03 21:12 ` [PATCH v2] drivers/cpufreq: Convert non-modular s5pv210-cpufreq.c to use builtin_platform_driver Paul Gortmaker
2015-06-03 21:12 ` Paul Gortmaker
2015-06-03 21:12 ` Paul Gortmaker
2015-06-04 2:28 ` Viresh Kumar
2015-06-04 2:28 ` Viresh Kumar
2015-06-15 23:50 ` Rafael J. Wysocki
2015-06-15 23:50 ` Rafael J. Wysocki
2015-06-16 15:37 ` Paul Gortmaker
2015-06-16 15:37 ` Paul Gortmaker
2015-06-16 15:37 ` Paul Gortmaker
2015-05-10 19:49 ` [PATCH 5/7] drivers/soc: Convert non-modular tegra/pmc to use builtin_driver_register Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-10 19:49 ` [PATCH 6/7] drivers/soc: Convert non-modular soc-realview " Paul Gortmaker
2015-05-12 11:39 ` Linus Walleij
2015-05-10 19:49 ` [PATCH 7/7] drivers/power: Convert non-modular syscon-reboot " Paul Gortmaker
2015-05-10 19:49 ` Paul Gortmaker
2015-05-23 17:55 ` Sebastian Reichel
2015-06-03 19:09 ` [PATCH] drivers/clk: convert sunxi/clk-mod0.c to use builtin_platform_driver Paul Gortmaker
2015-06-03 19:09 ` Paul Gortmaker
2015-06-04 16:21 ` Maxime Ripard
2015-06-04 16:21 ` Maxime Ripard
2015-06-04 22:50 ` Stephen Boyd
2015-06-04 22:50 ` Stephen Boyd
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=20150528005022.GA23774@windriver.com \
--to=paul.gortmaker@windriver.com \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--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 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.