Mark Kettenis <[email protected]> wrote:

> > Date: Mon, 2 Sep 2019 16:49:56 +0200
> > From: Alexander Bluhm <[email protected]>
> 
> I'm still looking into this issue.   However:
> 
> > OpenBSD 6.6-beta (GENERIC.MP) #276: Sun Sep  1 22:36:53 MDT 2019
> >     [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > real mem = 6416760832 (6119MB)
> > avail mem = 6209593344 (5921MB)
> > mpath0 at root
> > scsibus0 at mpath0: 256 targets
> > mainbus0 at root
> > bios0 at mainbus0: SMBIOS rev. 2.6 @ 0x99c00 (88 entries)
> > bios0: vendor American Megatrends Inc. version "1.1b" date 03/04/2010
> > bios0: Supermicro X8DTH-i/6/iF/6F
> 
> This happens to be one of the few systems that is blacklistted by
> Linux.  Still thinking about a better approach.
> 
> I'd also like to point out that the following messages:
> 
> > uhci0 at pci0 dev 26 function 0 "Intel 82801JI USB" rev 0x00: can't map i/o 
> > space
> > uhci1 at pci0 dev 26 function 1 "Intel 82801JI USB" rev 0x00: can't map i/o 
> > space
> 
> mean that uhci(4) didn't fully attach but that the driver's activate
> function doesn't properly check that the registers are accessable.

Speaking broadly, These "don't fully attach" drivers are a disturbing problem.

It is a weakness in Torek's configuration subsystem that the probe/match
routine cannot early-execute a complex detection and then pass the result
to the attach routine.  Pretty obvious how it came about, in sparc / OFW
systems these kinds of "there but not there" conditions are impossible.

In that world, a match function only looks at the parent-bus, not at
child-device characteristics.

Not being able to pass a partial result from match -> attach, means
trying to setup-and-some-checking would require duplication of code in
both match & attach functions.  Since people don't want to duplicate
code, they don't do so.  They they allow the match to complete, and
silently to finish the job correctly in attach.  But having suceeded to
match, the device is now in the device-tree and later code will call some
of the methods....

Another possible approach would be that attach can return a failure,
rather than void.  If an attach function returns failure, remove it from
the device tree, so that the methods are unreachable.  Like an undo of
the match.  This would be a huge diff adjusting return conditions of all
attach functions.

If the mapping cannot be solved, maybe the activate function can skip
all work if sc->sc.sc_size is 0.



Reply via email to