Re: device_attach(9) and driver initialization
On Apr 7, 2012, at 9:04 AM, Nathan Whitehorn wrote:
> On 04/07/12 07:50, Konstantin Belousov wrote:
>> Hello,
>> there seems to be a problem with device attach sequence offered by =
newbus.
>> Basically, when device attach method is executing, device is not =
fully
>> initialized yet. Also the device state in the newbus part of the =
world
>> is DS_ALIVE. There is definitely no shattering news in the =
statements,
>> but drivers that e.g. create devfs node to communicate with consumers
>> are prone to a race.
>>=20
>> If /dev node is created inside device attach method, then usermode
>> can start calling cdevsw methods before device fully initialized =
itself.
>> Even more, if device tries to use newbus helpers in cdevsw methods,
>> like device_busy(9), then panic occurs "called for unatteched =
device".
>> I get reports from users about this issues, to it is not something
>> that only could happen.
>>=20
>> I propose to add DEVICE_AFTER_ATTACH() driver method, to be called
>> from newbus right after device attach finished and newbus considers
>> the device fully initialized. Driver then could create devfs node
>> in the after_attach method instead of attach. Please see the patch =
below.
>>=20
>=20
> Something like this would also be very useful for drivers that need to =
interact across the device tree, if newbus called it only after all =
drivers have been attached. Drivers that need to see other potentially =
attached drivers now need to do some hacks with SYSINIT. Would it be =
possible to do this? I don't think it changes the functionality you =
need.
Well, there's a problem here. You never know that you've attached =
everything, so you could never really call it. Many busses enumerate =
asynchronously, so it may be hard to get the semantics that you desire =
unless the two devices you want to coordinate are in the static part of =
the tree.
Warner
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
討論串 (同標題文章)
完整討論串 (本文為第 18 之 26 篇):