tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Changing the return value of xxx_attach() from void to int.



On Fri, Jun 24, 2016 at 2:02 AM, Michael <macallan%netbsd.org@localhost> wrote:
> Hello,
>
> On Thu, 23 Jun 2016 16:13:53 +0000
> Taylor R Campbell <campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
>
>>    Date: Thu, 23 Jun 2016 19:40:14 +0900
>>    From: Masanobu SAITOH <msaitoh%execsw.org@localhost>
>>
>>      As you know, the return value of device driver's attach function is void.
>>    I've thought that we should change it to int for many years. I believe I'm
>>    not the only person.
>>
>> Sounds plausible to me.  Can you draft an example of a patch to a
>> driver that would usefully use this?  Something to demonstrate how
>> many untested code paths we can eliminate by moving conditional logic
>> about `device failed to attach' to autoconf instead of copying it in
>> drivers.
>
> I dimly remember running into this issue - had to abort attach()ing for
> some reason and leave a non-functional device_t hanging in the tree.
> A good example would be cold graphics chips that we don't know how to
> setup without firmware help ( That is, most of them. Many need things
> like memory controller and clocks set up in ways that can not be
> reliably probed. Clock chips tend to vary, video memory parameters are
> hard coded by BIOS with no good way to even guess them etc. )
> Like a PCish graphics card with x86 firmware in something not-a-PC.
> These will match() successfully ( since we only look for PCI IDs ) but
> can't continue halfway through attach().

Ideally xxxattach() becomes re-startable and can return EAGAIN so
autoconf(9) will call it when things are ready.

If autoconf(9) keeps device tree as data, there is little point to
have call-tree, like  xxxattach -> config_found -> yyyattach ->
config_find_* -> zzzattach.  Instead autoconf(9) does tree traversal
while keeping node states.  xxxattach might be called again after
sub-tree enumeration is done, if necessary.


Home | Main Index | Thread Index | Old Index