On Thu, Jan 10, 2013 at 05:41:38PM +0100, Roger Pau Monné wrote: > [...] > That's how is done in Linux, and that was my first attempt to implement > this device under NetBSD. However, I've also found problems with this > implementation. In d_mmap you have to return physical addresses, the > problem with that is that Xen has physical addresses and machine > addresses, and there's a mapping between physical and machine addresses > (physical addresses are used as a translation to machine addresses, so > the OS thinks memory is contiguous, when it is not). > > When returning physical addresses from the d_mmap handler I've found > that the memory system extracts the machine address behind that physical > address and tries to assign that machine address to a VA in the calling > process virtual memory. This did not work, because the machine address > behind the physical address returned in the handler doesn't belong to > the same domain, so trying to map this to a different VA in userspace is > not allowed (Xen only allows this by using a set of specific hypercalls, > as you can see in gntmap_grant_ref).
Can't your ioctl work in the same way as IOCTL_PRIVCMD_MMAP ? Reading quickly the code, I think this one works with machine adresses and its onw fault handler, and doesn't deal with physical addresses at all. I think this is what you need. -- Manuel Bouyer <[email protected]> NetBSD: 26 ans d'experience feront toujours la difference --
