[ros-kernel] PCI device memory mapping into usermode - Page at address 0xXxx not usable

Gregor Anich blight at blight.eu.org
Sat Jul 17 14:28:16 CEST 2004


Hi!

 From time to time I am working to get the NVIDIA OpenGL driver running 
a bit... It is trying to map it's framebuffer into user-mode using 
VideoPortMapMemory() (reactos/drivers/video/videoprt/resource.c) which 
does not handle usermode at the moment, but I am trying to fix it. 
People told me to map a view of \Device\PhysicalMemory into usermode. If 
I do this (given the physical address from HalTranslateBusAddress()) all 
the calls succeed and I return a user-mode pointer. On the first access 
to this area a not-present fault happens and the mm is trying to create 
the mapping now. It fails in ntoskrnl/mm/i386/page.c, line 1212 
(MmCreateVirtualMapping()) - Page at address 0xf0043000 not usable - 
bugcheck. This happens because the physical address is only checked 
against physical ram by MmIsUsablePage() I guess.
In windows 2k on my machine when I look at the memory ranges of my GF2 
GTS there is one which covers 0xf0000000-0xf7ffffff so I think 
0xf0043000 should be usable and MmIsUsablePage() is wrong.

When looking at MmIsUsablePage() (ntoskrnl/mm/freelist.c, line 746) I 
wonder why it doesn't check if the calculated Start is >= 
MmPageArraySize - isnt that a bug for any physical address checked >= 
MmPageArraySize * PAGE_SIZE?

When I uncomment the call to MmIsUsablePage() and the following bugcheck 
the NVIDIA driver does neither crash nor display any kind of output.

Thanks,
  blight


More information about the Ros-kernel mailing list