Subject: Problems with autoconf matching
To: None <tech-kern@NetBSD.org>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: tech-kern
Date: 09/01/2007 17:25:17
Hello,
[ Please CC me ]
I am adding a new 'genfb' driver to mac68k, aimed at replacing
intvid, macvid and the macfb that attaches to these two.
The relevant part of the current configuration file looks like this
(I'm discarding macvid for simplicity):
-----
intvid0 at obio? # Internal video hardware
macfb* at intvid?
genfb* at obio? # Internal video hardware
wsdisplay* at genfb? console ?
wsdisplay* at macfb? console ?
-----
So we have this chain of devices:
1) The old one: wsdisplay -> macfb -> intvid -> obio
2) The new one: wsdisplay -> genfb -> obio
intvid and genfb have the exact same autoconf matching functions
because they can handle the same set of devices (yes, the plan is to
kill intvid later on). However, I have changed genfb to return 5 on
match, instead of the 1 that intvid returns, so that the kernel gives
priority to genfb. Unfortunately this doesn't seem to work as expected.
For simplicity I have reduced the above configuration into the
following:
-----
intvid0 at obio? # Internal video hardware
genfb* at obio? # Internal video hardware
wsdisplay* at genfb? console ?
-----
So basically we now only have intvid and genfb competing to handle
the same video device, and we don't have macfb into the mix (which
messes other code due to conditional compilation and it could cause
other nasty problems).
Based on this simplified configuration, if I compile both intvid and
genfb into the kernel, it seems that the system is picking up the
intvid driver. I say "seems" because I cannot see what happens later
because the machine hangs. (Adding macfb does not help either.)
If I disable intvid, the machine boots. If I disable genfb and add
macfb on top of intvid, it also works.
If I change intvid's match routine to return 0 in all cases, the
kernel properly picks up genfb and boots correctly.
AIUI, as genfb returns 5 during match and intvid returns 1, autoconf
should simply discard intvid and use genfb, isn't it? It should
behave as if intvid's match returned 0, as the last test I did. But
for some reason there seems to be a problem in this. Or is my
reasoning wrong?
Thanks,
--
Julio M. Merino Vidal <jmmv84@gmail.com>