> Yes, this is really a different hardware model than we're used to 
> dealing with for DRI drivers, however it's not a problem for the most 
> part - if you don't need to take the lock, don't.  But then you need 
> some other way of dealing with the other hacky stuff we get away with by 
>    lock abuses eg. VT switching.

We could abuse a RW lock model here where normal command submission
takes a read lock (can be shared) and big hammer like VT switch takes a
write lock.

> For the memory manager, I guess there are two choices:  1) make the 
> driver use a command-buffer approach even though the hardware supports 
> per-context ring buffers, or 2) extend the memory manager.
> 
> Extending the memory manager would involve adding an ability to lock and 
> unlock surfaces to VRAM/AGP addresses - this would require kernel 
> interaction I guess.  The driver would have to lock the surfaces then be 
> free to submit commands to the ring, then explicitly unlock the 
> surfaces.  This is actually a pretty nasty approach - it makes it very 
> hard to deal with low-memory situations - it's impossible to kick out 
> another processes allocations.
> 
> I wonder how NV deals with this...

I've heard some of the proprietary drivers play MMU tricks. We could do
something similar... when kicking a pixmap out, we "remap" the virtual
mapping for that pixmap to backup memory. But that means fundamentally
changing our model where we have a big mapping for the fb which we then
cut into objects and instead mmap objects separately. As for kicking out
mappings behind somebody's back, it works fine :) We do that for SPEs
local stores on the Cell processor. A no_page() function will refill as
needed from either the HW or the backing store and use
unmap_mapping_range() can kick that out behind any process back. The
main problem I see with that approach is that you have to either map the
backup memory non-cacheable which can be trouble on some platforms (*)
or cacheable which means that the same bit of memory will either be
cacheable or non-cacheable depending on wether you get the HW, which
might be trouble to some apps unless you are careful.

(*) The kernel always keeps a cacheable linear mapping of all memory and
the nasty prefetchers or speculative execution units might thus bring
something from your page otherwise mapped non-cacheable into userspace
in the cache that way. Some CPUs will shoke badly if you access via a
non-cacheable mapping something that is present in the cache.

Ben.



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to