On Wednesday, May 16, 2012 4:07:43 pm John Baldwin wrote:
> On Wednesday, May 16, 2012 12:18:25 pm Andriy Gapon wrote:
> > on 16/05/2012 17:50 John Baldwin said the following:
> > > On Tuesday, May 15, 2012 12:35:12 pm Andriy Gapon wrote:
> > >> Not sure what you disagree with...
> > >> First, the wildcard device is added to the child list during the walk.
> > >> Then, the unit 0 device is added to the list when acpi_timer identify is 
> > >> executed.
> > >> Then, the wildcard device is probed and gets unit number of zero.
> > >> Then, the fixed device is being probed and the unit number conflict 
> > >> arises.
> > >>
> > >> Am I misunderstanding something?
> > > 
> > > Yes.  The third step will see that unit 0 is already in use and shouldn't
> > > reuse unit 0.
> > > 
> > 
> > Looks like I missed the call to devclass_add_device() in make_device().
> > 
> > Your guess:
> > > I wonder if this is related to the recent changes to set the unit number 
> > > for CPUs?
> > 
> > seems to be true.
> > 
> > The device_t-s created for CPUs have NULL driver name / devclass, but a
> > non-wildcard unit number.  So when such a device with unit number 0 is 
> > probed by
> > acpi_timer we get a unit number conflict with acpi_timer0 pre-created via 
> > the
> > identify.
> > Similarly we get conflicts for acpi_sysresource driver, because we do an 
> > early
> > probe-and-attach for this driver and the attached devices get some unit 
> > numbers
> > (0, 1, etc).  So when during the normal probe pass the "CPU" devices with 
> > matching
> > unit numbers are passed to the driver the conflict results.
> > 
> > I guess that it is an unorthodox use of newbus to specify a unit number 
> > without
> > specifying a driver name...  It's like saying "this device must be unit N 
> > whatever
> > driver claims it (be it kbdN or diskN) just because I say so".  Not sure if 
> > this
> > ever makes sense and maybe we should prohibit such a combination (reject it 
> > earlier).
> > I guess that in this particular case we already know that the devices are 
> > really
> > CPU devices and are going to be claimed by acpi cpu driver.  So we should 
> > pass
> > "cpu" as the name.
> 
> Oh, whoops.  Actually, the right way to do this I think is 
> bus_hint_device_unit()
> (and/or, not make the unit number in cpuX mean anything at all, but use a 
> separate
> ivar to track what PCPU_GET(cpuid) a given cpuX device corresponds to).  I 
> think
> the last approach is really the right way to fix this.

I haven't been able to try this yet, but I have a first cut at
www.freebsd.org/~jhb/patches/acpi_cpu.patch

-- 
John Baldwin
_______________________________________________
freebsd-acpi@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
To unsubscribe, send any mail to "freebsd-acpi-unsubscr...@freebsd.org"

Reply via email to