linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Holler <holler@ahsoftware.de>
To: Grant Likely <grant.likely@linaro.org>,
	Tomasz Figa <tomasz.figa@gmail.com>,
	linux-kernel@vger.kernel.org
Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Russell King <linux@arm.linux.org.uk>, Jon Loeliger <jdl@jdl.com>,
	Rob Herring <robh+dt@kernel.org>
Subject: Re: [RFC PATCH 2/9] dt: deps: dependency based device creation
Date: Mon, 19 May 2014 10:41:11 +0200	[thread overview]
Message-ID: <5379C3A7.1090404@ahsoftware.de> (raw)
In-Reply-To: <20140518145922.9D59FC40D85@trevor.secretlab.ca>

Am 18.05.2014 16:59, schrieb Grant Likely:
> Hi Tomasz,
>
> Thanks for weighing in on this. Thoughts and comments below.
>
> On Sat, 17 May 2014 16:24:19 +0200, Tomasz Figa <tomasz.figa@gmail.com> wrote:

> registration order. Alexander had to hook into the driver registration
> patch to get the optimal probe order. For device order to be effective,

I had to hook into the driver registration to get information about the 
(available) drivers. Without the hook it is currently impossible to 
identify drivers before they start doing things.

To reccover, I had to solve several problems:

- Getting dependencies (happens almost automatically by using phandle 
references)
- Get them to the kernel (done by using a new property)
- Build order (already a solved problem, think at make)
- Identify available drivers (invented hook, "well done" is meant in 
regard to this feature, I needed a name and found "well done" apropriate 
because it too might stimulate driver authors to use it)
- Check out how to handle/start/register devices and drivers (in order).

I think the last one is the most unfinished and questionable part.

The part to identify drivers could be done much better by linking an 
array of struct platform_driver, but in order to use such an array, 
drivers have to be done "well done" too (which means no action before 
probe). So that well-done hook can be seen as an intermediate step.

> Having said that, there are some things that I worry about. I worry
> about the cost of doing dependency sorting, both in calculating the
> dependency tree and in pushing back probe calls to the end of initcalls.

Building and calculating the dependency tree just needs a few ms and I 
think it's much faster than what is necessary afterwards, all those 
string compares to match drivers/devices.

But this string compares already do happen, and I think this part could 
optimized a lot, when a list of drivers and their compatibility strings 
is available. Then it's possible to build a hash or e.g. radix tree 
which leads from the compatibility string to the available driver(s).

> I worry that incorrect dependency information will cause some devices to
> not get bound (say because the kernel things the dependency isn't met
> when it actually is).

All (not started) drivers and (unbounded) devices can still be 
registered/bound after those which appear in the order. That would be 
just like before.

But as said, the whole handling which happens after the order was build 
is done quick & dirty, done with missing knownledge about the device 
model, and might contain a lot of bugs and even might need that some 
drivers will be changed.

Therefor all changes disappear when CONFIG_OF_DEPENDENCIES is disabled. 
So tested platforms might use it (taking advantage of a deterministic 
order in order to get rid of hardcoded stuff to fix the order) and 
others don't have to care.

So, as already said, I've posted these patches to make evaluation easy, 
without the need to discuss just ideas but something real to play with 
(in order to get something happen on this front, not just hardcoded 
hacks done in individual drivers because such passes maintainers easier).

I didn't cared much about form or how to split those patches into more 
convenient parts. That is stuff where I just do it like a maintainer 
does want it. I did them as I like them, and I don't want to end up in a 
time wasting discussions about form, style or similiar questions.

So if anyone would be comfortable to merge these patches (for evaluation 
by others) in other form or splitted in more parts, I will just hear and do.

I also don't have any objections in changes in the stuff which happens 
after the order was build. In fact I would even like it if someone with 
more experience with the driver model would do it. I just had to do 
something there too, otherwise it would still have been just an idea 
which wouldn't offer much motivation to actually look at it.

Regards,

Alexander Holler

  reply	other threads:[~2014-05-19  8:43 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-12 16:47 [RFC PATCH 0/9] dt: dependencies (for deterministic driver initialization order based on the DT) Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 1/9] dt: deps: dtc: Automatically add new property 'dependencies' which contains a list of referenced phandles Alexander Holler
2014-05-17 12:16   ` Tomasz Figa
2014-05-19 12:35     ` Alexander Holler
     [not found]       ` <CAJgR-BhRtc1XGqk-TVOrf2y_pYS+nratkPrf+OenP4SFcyK3ng@mail.gmail.com>
2014-05-19 17:26         ` Alexander Holler
2014-05-27 20:02       ` Grant Likely
2014-05-27 20:31         ` Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 2/9] dt: deps: dependency based device creation Alexander Holler
2014-05-14 14:05   ` Grant Likely
2014-05-14 14:49     ` Alexander Holler
2014-05-14 17:20       ` Alexander Holler
2014-05-14 20:06       ` Grant Likely
2014-05-14 21:10         ` Alexander Holler
2014-05-16 11:00           ` Grant Likely
2014-05-18  9:53             ` Alexander Holler
2014-05-16 17:31           ` Alexander Shiyan
2014-05-14 15:51     ` Alexander Holler
2014-05-17 14:24     ` Tomasz Figa
2014-05-18 14:59       ` Grant Likely
2014-05-19  8:41         ` Alexander Holler [this message]
2014-05-12 16:47 ` [RFC PATCH 3/9] dt: deps: dtc: Add option to print initialization order Alexander Holler
     [not found]   ` <CAJgR-BhnFngGr9qxa7NvF7GExiCAr1=HS16AtN20uj7nCmLcKQ@mail.gmail.com>
2014-05-12 22:58     ` Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 4/9] dt: deps: dtc: Add option to print dependency graph as dot (Graphviz) Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 5/9] dt: deps: register drivers based on the initialization order based on DT Alexander Holler
2014-05-14 14:13   ` Grant Likely
2014-05-14 14:58     ` Alexander Holler
2014-05-14 19:32       ` Grant Likely
2014-05-12 16:47 ` [RFC PATCH 6/9] dt: deps: WIP: well done drivers Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 7/9] dt: deps: kirkwood: make it possible to use CONFIG_OF_DEPENDENCIES Alexander Holler
2014-05-12 16:47 ` [RFC PATCH 8/9] dt: deps: dts: kirkwood: dockstar: add dependency ehci -> usb power regulator Alexander Holler
2014-05-12 16:48 ` [RFC PATCH 9/9] dt: deps: omap2: make it possible to use CONFIG_OF_DEPENDENCIES Alexander Holler
2014-05-13 15:40 ` [PATCH 10/9] dt: deps: fix bug not registering late drivers when OF_DEPENDENCIES is disabled Alexander Holler
2014-05-13 19:27 ` [RFC PATCH 11/9] dt: deps: dtc: introduce new (virtual) property no-dependencies Alexander Holler
2014-05-14  8:20 ` dt: deps: some tips about how to debug/evaluate this feature Alexander Holler
2014-05-14 14:19 ` [RFC PATCH 0/9] dt: dependencies (for deterministic driver initialization order based on the DT) Grant Likely
2014-05-14 15:02   ` Alexander Holler
2014-05-14 16:05     ` Grant Likely
2014-05-14 16:23       ` Alexander Holler
2014-05-14 17:30         ` Rob Herring
2014-05-14 17:45           ` Alexander Holler
2014-05-14 17:53             ` Alexander Holler
2014-05-14 18:16               ` Alexander Holler
2014-05-14 19:13                 ` Alexander Holler
2014-05-14 19:06             ` Rob Herring
2014-05-14 19:24               ` Alexander Holler
2014-05-15  1:46                 ` Alexander Holler
2014-05-14 23:00               ` Alexander Holler
2014-08-21 14:02   ` Thierry Reding
2014-08-21 19:19     ` Alexander Holler
2014-08-22 13:19       ` Mark Rutland
2014-08-22 15:45         ` Alexander Holler
2014-08-25  9:39         ` Thierry Reding
2014-08-25 13:08           ` Jon Loeliger
2014-08-25 13:37             ` Thierry Reding
2014-08-25 14:13               ` Jon Loeliger
2014-08-25 14:41                 ` Thierry Reding
2014-08-26  8:42               ` Grant Likely
2014-08-26  8:49                 ` Thierry Reding
2014-08-26  9:42                   ` Alexander Holler
2014-08-26 10:11                     ` Mark Rutland
2014-08-26 10:24                       ` Thierry Reding
2014-08-27 10:34                       ` Grant Likely
2014-08-27 14:44                         ` Catalin Marinas
2014-08-27 16:22                           ` Stephen Warren
2014-08-27 16:30                             ` Alexander Holler
2014-08-27 16:37                               ` Stephen Warren
2014-08-27 16:58                                 ` Alexander Holler
2014-08-27 17:52                                 ` Catalin Marinas
2014-08-27 18:14                                   ` Alexander Holler
2014-08-28  6:50                                 ` Alexander Holler
2014-08-28  9:23                                   ` Catalin Marinas
2014-08-29  1:43                                     ` Alexander Holler
2014-08-26 10:25                     ` Thierry Reding
2014-08-26 10:44                       ` Alexander Holler
2014-08-26 11:01                         ` Alexander Holler
2014-08-26 11:08                         ` Thierry Reding
2014-08-26 11:23                           ` Alexander Holler
2014-08-26 11:47                             ` Thierry Reding
2014-08-26 12:00                               ` Alexander Holler
2014-08-26 13:58                                 ` Jon Loeliger
2014-08-26 14:17                                   ` Thierry Reding
2014-08-27  7:16                                   ` Alexander Holler
2014-08-27  9:26                                     ` Alexander Holler
2014-08-26  7:56             ` Alexander Holler
2014-08-26  8:51             ` Grant Likely
2014-08-26  9:56               ` Alexander Holler
2014-08-26 10:18               ` Alexander Holler
2014-08-26  9:54           ` Mark Rutland

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=5379C3A7.1090404@ahsoftware.de \
    --to=holler@ahsoftware.de \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jdl@jdl.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=robh+dt@kernel.org \
    --cc=tomasz.figa@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 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).