Re: Properly managing sub-allocations
John Baldwin <[email protected]> Mon, 2 Oct 2006 14:03:50 -0400
| Newsgroups | gmane.os.freebsd.devel.new-bus |
|---|---|
| Message-ID | <[email protected]> |
On Monday 02 October 2006 13:39, M. Warner Losh wrote: > In message: <[email protected]> > John Baldwin <[email protected]> writes: > : I'm trying to cleanup a few things in apci and I ran into what I think is a > : new-bus architecture issue. Specifically, acpi likes to allocate system > : resource resources from its parent, and then turn around and sub-alloc those > : out to children. This mostly works fine except for the bus space details of > : the bus tag and bus handle. Currently acpi(4) just copies the tag from the > : corresponding resource from the parent and sets the handle to the start of > : the resource. This just happens to work currently because i386 and amd64 use > : the start of the resource for the handle for SYS_RES_IO and overwrite the > : handle in nexus_activate_resource() for SYS_RES_MEMORY. This does add some > : ugliness though in that acpi needs to go find the parent resouce to copy the > : bus tag. However, it's current algorithm wouldn't work in general (PC98 > : needs to alloc bus handles, and it does so in nexus_alloc_resource() for > : example). > : > : To solve this, I think we need to stop setting bus tags and handles in > : bus_alloc_resource(). One solution might be to add a new bus method to set > : those for a resource, but I think the better solution would be to set the bus > : tags and handles in bus_activate_resource(). It already sort of does this > : for some cases (SYS_RES_MEMORY on x86 for example) and will work with the > : existing ACPI model (it already passes up activate_resource to the parent, so > : we would just have to remove the explicit setting of the bus tag and handle). > : > : I actually wonder if this isn't how things are supposed to be in the first > : place and that the current aberrations are just bugs? > > I think you are right. Thinking about it, you can't access the > resources until you've activated them... > > However, this may break some existing drivers that allocate a BAR, > peek at its type and then either activate it or allocate another > BAR... The TAG is valid, but the handle isn't. They generally peak at the BAR register itself though, not the value of rman_get_bustag() though, right? > This specific problem will never happen in pc98, since there are no > ACPI pc98 machines and can never be. Yeah, but I can cleanup the stuff in ACPI a good bit if I can get it to stop peeking at the "real" resource to get the bus tag. Also, I think fixing this would be important for a driver that wanted to sub-alloc its resources out to children (like vgapci, which currently cheats on that). -- John Baldwin _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-new-bus To unsubscribe, send any mail to "[email protected]"