Thread (41 messages) 41 messages, 11 authors, 2016-11-30

Re: [RFC] fs: add userspace critical mounts event support

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2016-11-15 09:30:32
Also in: linuxppc-dev, lkml

On Tue, 2016-11-08 at 23:47 +0100, Luis R. Rodriguez wrote:
This issue still stands. At Plumbers Johannes Berg did indicate to me
he had a simple elegant solution in mind. He suggested that since the
usermode helper was available, he had added support to be able to
differentiate async firmware request calls form sync requests,
For reference:

commit e9045f9178f3e3445a3a5b85206f8681b3869562
Author: Johannes Berg [off-list ref]
Date:   Mon Mar 29 17:57:20 2010 +0200

    firmware class: export nowait to userspace
it can determine we're initramfs. The semantics issue is the same
though, is there a generic way to determine we're initramfs ? What if
we move multiple levels? Anyway -- provided we could figure this out,
userspace would simply yield and wait until the real rootfs is met. 
One way or another we have to have this kind of information somewhere.
I don't actually know how/where though.
Upon pivot_root() the assumption is all previous udev events pending
would be re-triggered and finally udev could finally confirm/deny if
the firmware was present.
The retriggering is already the case, as far as I know, if only to load
modules that weren't part of initramfs.
note Johannes was asking for *all* async firmware requests to always
rely on the kernel syfs UMH fallback -- this suggestion is against
the direction we've been taking to eventually compartamentalize the
kernel UMH code, so whatever we decide to do, lets please take a
breather and seriously address this properly *with* systemd folks.
I was saying that because that's the only way you can actually rely on
this functionality as a system integrator. If drivers have to opt in or
can opt out then you'll always end up chasing the drivers around.

My argument basically goes like this:

First, given good drivers (i.e. using request_firmware_nowait())
putting firmware even for a built-in driver into initramfs or not
should be a system integrator decision. If they don't need the device
that early, it should be possible for them to delay it. Or, perhaps, if
the firmware is too big, etc. I'm sure we can all come up with more
examples of why you'd want to do it one way or another.

Second, all of this can be solved in other ways by adding logic to the
kernel, like the rejected proposal to add a "rootfs available" bit
somewhere, that would cause async requests to behave similarly within
the kernel (don't return "not found" until they time out or this bit is
set, and retry loading when the bit gets set)

Third, having this in place can be more friendly to users who play with
kernel compilation, modules, etc. This is a fringe group in some ways,
but it is (was?) actually a relatively common complaint that drivers
built into the kernel wouldn't work - we'd always have to direct users
to do magic steps like rebuilding initramfs with the right options etc.

johannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help