NVIDIA FreeBSD kernel feature requests
John Baldwin
jhb at freebsd.org
Wed Jul 5 19:35:06 UTC 2006
On Monday 03 July 2006 00:02, M. Warner Losh wrote:
> In message: <20060629111231.GA692 at wolf.nvidia.com>
> Christian Zander <czander at nvidia.com> writes:
> : This summary makes an attempt to describe the kernel interfaces needed by
> : the NVIDIA FreeBSD i386 graphics driver to achieve feature parity with
> : the Linux/Solaris graphics drivers, and/or required to make support for
> : the FreeBSD amd64 platform feasible. It also describes some of the
> : technical difficulties encountered by NVIDIA during the FreeBSD i386
> : graphics driver's development, how these problems have been worked around
> : and what could be done to solve them better.
>
> Thank you for taking the time to let us know how we might make the
> system better.
>
> : The NVIDIA graphics driver needs to be able to create uncached kernel
> : and user mappings of I/O memory, such as NVIDIA GPU registers. The
> : FreeBSD kernel does not currently provide the interfaces necessary to
> : specify the memory type when creating such mappings, which makes it
> : difficult for the NVIDIA graphics driver to guarantee that the correct
> : memory type is selected.
>
> Is this via the bus_alloc_resource interface? Is uncached kernel
> memory different than non-prefetchable memory? If so, please specify
> how it is different. If not, then we have an interface that will do
> what you want, except it is only implemented for cardbus and would
> need to be implemented for pci pci and pci host bridges. Would having
> better functionality here help? I noticed it wasn't on the task list...
This isn't an issue of how the memory is mapped in the PCI-PCI bridge where
non-prefetchable is used to keep the bridge from prefetching things, but as
to how the memory is mapped in the CPU itself. Also, I've seen mention of
using bus_dma, etc. One of the problems is our current bus APIs have a very
limited view of caching "modes". E.g. here you mention overloading
non-prefetchable to get a UC mapping. In bus_dma(9) we have the COHERENT
flag to UC rather than a WB mapping. Neither of these API's allow for, say,
WC (Write-Combining) mappings. :) Other OS's such as Windows and OS X allow
you to explicitly specify what type of cache "mode" you want for a mapping.
--
John Baldwin
More information about the freebsd-hackers
mailing list