Re: [patch 1/3] fastboot: Create a "asynchronous" initlevel
From: Rene Herman
Date: Sun Jul 20 2008 - 10:18:18 EST
On 20-07-08 13:10, Arjan van de Ven wrote:
On Sun, 20 Jul 2008 09:23:31 +0200
Rene Herman <rene.herman@xxxxxxxxxxxx> wrote:
Yes, I see. Unfortunately, WITH your patches, driver_probe_done()
would also no longer be safe when run from a late_initcall() it would
appear.
true for now (but see below)
I have the sneaking suspicion that this is a bit of a fundamental
issue. Turning some of the driver level (6) async basicaly removes
the ordering between drivers and late_initcall (level 7).
I was hoping to not need this ordering.
May have found an issue with 3/3 for this same reason. You make the ACPI
button driver async but acpi_wakeup_device_init() is a late_initcall and
comments that it interacts with the button driver.
The button driver could be a module so a complete reversal of ordering
between acpi_wakeup_device() and acpi_button_init() might in itself not
be a problem (undeterministic order even with the button driver builtin
might be undesireable I guess) but ...
Correct me if I'm wrong but I believe your patch implies that we could
be racing between acpi_wakeup_device() and acpi_button_init()? If yes,
do bad things happen when we race checking dev->wakeup.state.enabled?
As far as I can see, the acpi_device_lock isn't serialising here so if
we have just done the acpi_enable_gpe() in acpi_button_add() but haven't
set the enabled flag yet we could do it again here it seems.
The ACPI button driver doesn't appear to have a specific maintainer and
Len Brown was on vacation I believe but this would ideally like a
comment from that side...
I trust it will completely and utterly destroy the point of this
patch to flush level 6a before starting level 7?
Thankfully it doesn't destroy it, the reason for this is that level 6
itself tends to take long enough to get benefits. It's just that if we
can get both 6 and 7 it's nicer. But if we end up needing to sync, so
be it.
I worry...
Note: syncing on a driver_probe_done() from level 7 is not going to be
pretty (think "multi-second extra boot time).
Part of me wants to only sync level 6a from the first
driver_probe_done() so that only people who already pay these extra
seconds suffer this one as well ;-)
Makes sense in this specific case. Generally, utility of late_initcall()
does seem to be impacted by this. Unless you can be sure that every
device you depend on is and always will be sync you might as well be
device_initcall() yourself after all.
Yes, I did note the bit about the endpoint probing already being async
for example for USB but now you can't even be sure that it _started_
meaning you also couldn't really devise some private synchronization
mechanism either.
Rene.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/