cvs commit: src/sys/ia64/ia64 machdep.c

Doug Rabson dfr at qubesoft.com
Fri Feb 4 08:51:07 PST 2005


On 4 Feb 2005, at 16:46, M. Warner Losh wrote:

> In message: <4f339e2416fad9f0baab265cec8a744d at qubesoft.com>
>             Doug Rabson <dfr at qubesoft.com> writes:
> :
> : On 4 Feb 2005, at 16:36, M. Warner Losh wrote:
> :
> : > In message: <5539563a425020d35ef1878057f4f85d at qubesoft.com>
> : >             Doug Rabson <dfr at qubesoft.com> writes:
> : > :
> : > : On 4 Feb 2005, at 16:14, M. Warner Losh wrote:
> : > :
> : > : > In message: <84e9ba659174ea3f7c7b2930c0ae3759 at xcllnt.net>
> : > : >             Marcel Moolenaar <marcel at xcllnt.net> writes:
> : > : > : > I'm not sure if my approach is correct -- should different
> : > drivers
> : > : > for
> : > : > : > the same hardware share the same devclass?
> : > : > :
> : > : > : A datapoint: sio(4) and uart(4) are different drivers for the
> : > same
> : > : > : hardware.
> : > : > : They don't share the devclass.
> : > : >
> : > : > Neither do they share the same name.
> : > :
> : > : Just to make things clear, if two drivers use the same name, they
> : > will
> : > : always share the devclass automatically (whether or not they use 
> the
> : > : same variable to reference the devclass) and will allocate
> : > : non-conflicting unit numbers.
> : >
> : > Cool.  I'd thought I'd wound up with two instances of ed0 when I 
> had
> : > different devclasses in the if_ed_isa and if_ed_pci files once 
> upon a
> : > time...
> :
> : This shouldn't be possible - both the driver registrations should go
> : through devclass_find_internal() to find their devclasses and this
> : always searches for an existing class before it creates one. If this
> : happens then its a serious bug...
>
> I think I had this problem in 4.0-current before 4.0 release.  Maybe
> there used to be a bug, or I did something stupid...
>
> If this is the case, why then do we have the allocation of devclass in
> the drivers and not just leave it to subr_bus.c?

It is in subr_bus.c - the drivers end up in driver_module_handler() 
where they sort out the devclass and add the driver to the parent's 
driver list etc.

You can call devclass_create() if you have some other unusual reason 
(perhaps some some generic code which does cdevsw[] handling for ell 
"foobar" devices or whatever) but it also ends up going through 
devclass_find_internal() which returns the existing devclass if there 
already is one.

>



More information about the cvs-all mailing list