[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