[ros-kernel] PCI device memory mapping into usermode - Page at
address 0xXxx not usable
jimtabor at adsl-64-217-116-74.dsl.hstntx.swbell.net
Wed Aug 18 06:36:22 CEST 2004
Royce Mitchell III wrote:
> This question seems to have gone unanswered. Does anybody have any ideas
> to share with Gregor?
> Gregor Anich wrote:
>> 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
I'm having the same problem with map view. I can map a region to view and
try to access it through read virtual, I get a exception fault and sometimes
a page fault. We need to map I/O memory as Kernel mode user can read only or
map it to user mode r/w once the PCI device is id with memory I/O.
We need to implement memory boundary checking with the virtual kernel
More information about the Ros-kernel