History log of /haiku/src/system/kernel/arch/x86/paging/pae/X86VMTranslationMapPAE.cpp
Revision Date Author Comments
# e98ad6fc 14-Sep-2022 David Karoly <karolyd577@gmail.com>

kernel/x86/pae: fix build with TRACE enabled

Change-Id: Ifbf979608978a66ad6d2b9af8002c39f1f205422
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5661
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# 057fe191 01-Sep-2021 Augustin Cavalier <waddlesplash@gmail.com>

kernel: Break thread-related AutoLockers into a separate header.

Including thread.h brings a massive array of things with it from
the kernel thread arch headers, team and thread definitions,
hash tables, linked lists, Referenceable, etc. that the vast majority
of AutoLock.h consumers neither want nor need.

So, put these in a separate header, and adjust all consumers of these
lockers to include the new file.

This change exposes the fact that a lot of files were inadvertently
making use of headers included indirectly through thread.h. Those
will be fixed in the next commit.


# dde876f9 14-Apr-2018 Jérôme Duval <jerome.duval@gmail.com>

kernel: pae paging: align *TableEntry() with 64bit paging

use SetTableEntry() in PutPageTableInPageDir() and PutPageTableEntryInTable().


# 0a4cbd78 07-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Extend kernel tracing

* Beside the physical address also print the PTE flags.
* Also trace Protect(), ClearFlags(), ClearAccessedAndModified().


# 736fe5bc 05-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Fix build with TRANSLATION_MAP_TRACING enabled


# 372b309a 05-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Fix gcc 2 warning

... which due to the reactivated -Werror causes the build to fail.


# 7b83ce11 04-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add KDL command "mapping"

* VMTranslationMap:
- Add DebugPrintMappingInfo(): Given a virtual address it is supposed
to print the paging structure information for that address. To be
implemented by derived classes.
- Add DebugGetReverseMappingInfo(): Given a physical addresss it is
supposed to find all virtual addresses mapped to it. To be
implemented by derived classes.
* X86VMTranslationMapPAE: Implement the new methods
DebugPrintMappingInfo() and DebugGetReverseMappingInfo().
* Add KDL command "mapping". It supports both virtual address lookups
and reverse lookups.


# 372a6663 17-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Add some ktracing for page (un)mapping


# 6508ce9f 17-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE::Map(): More info in assert


# be573dcd 22-Apr-2013 Pawel Dziepak <pdziepak@quarnos.org>

arch: make sure not to set NX-bit when it is reserved


# 966f2076 06-Mar-2013 Pawel Dziepak <pdziepak@quarnos.org>

x86: enable data execution prevention

Set execute disable bit for any page that belongs to area with neither
B_EXECUTE_AREA nor B_KERNEL_EXECUTE_AREA set.

In order to take advanage of NX bit in 32 bit protected mode PAE must be
enabled. Thus, from now on it is also enabled when the CPU supports NX bit.

vm_page_fault() takes additional argument which indicates whether page fault
was caused by an illegal instruction fetch.


# e276cc04 05-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Finished implementation of x86_64 paging.

* vm_init now runs up until create_preloaded_image_areas(), which needs
fixing to handle ELF64.
* Not completely tested. I know Map(), Unmap() and Query() work fine, the
other methods have not been tested as the kernel doesn't boot far enough
for any of them to be called yet. As far as I know they're correct, though.
* Not yet implemented the destructor for X86VMTranslationMap64Bit or Init()
for a user address space.


# 643cf35e 03-Dec-2011 Michael Lotz <mmlr@mlotz.ch>

Add debug helper functions to mark pages present.

They can be used to mark pages as present/non-present without actually
unmapping them. Marking pages as non-present causes every access to
fault. We can use that for debugging as it allows us to "read protect"
individual kernel pages.


# 4535495d 10-Jan-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Merged the signals branch into trunk, with these changes:
* The team and thread kernel structures have been renamed to Team and Thread
respectively and moved into the new BKernel namespace.
* Several (kernel add-on) sources have been converted from C to C++ since
private kernel headers are included that are no longer C compatible.

Changes after merging:
* Fixed gcc 2 build (warnings mainly in the scary firewire bus manager).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 506894b6 30-Aug-2010 Axel Dörfler <axeld@pinc-software.de>

* Return an error on initialization error. This fixes CID 1566.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38461 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b9447668 10-Jul-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Moved the vm_page initialization from vm_page.cpp:vm_page_init() to the new
vm_page::Init().
* Made vm_page::wired_count private and added accessor methods.
* Added VMCache::fWiredPagesCount (the number of wired pages the cache
contains) and accessor methods.
* Made more use of vm_page::IsMapped().
* vm_copy_on_write_area(): Added vm_page_reservation* parameter that can be
used to request a special handling for wired pages. If given the wired pages
are replaced by copies and the original pages are moved to the upper cache.
* vm_copy_area():
- We don't need to do any wired ranges handling, if the source area is a
B_SHARED_AREA, since we don't touch the area's mappings in this case.
- We no longer wait for wired ranges of the concerned areas to disappear.
Instead we use the new vm_copy_on_write_area() feature and just let it
copy the wired pages. This fixes #6288, an issue introduced with the use
of user mutexes in libroot: When executing multiple concurrent fork()s all
but the first one would wait on the fork mutex, which (being a user mutex)
would wire a page that the vm_copy_area() of the first fork() would wait
for.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37460 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a81a992 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Optimized implementations for UnmapPages() and UnmapArea().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37193 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8bcc0694 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Simplifications and indentation correction.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37191 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c6f52e83 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Missed in r37187: Use the new VMTranslationMap::[Accessed]PageUnmapped()
helper methods to avoid code duplication.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37188 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 96732e86 13-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMap{32bit,PAE}::UnmapPage(): Added some helpful output to
asserts.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37128 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 68b53104 11-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Implemented X86VMTranslationMapPAE and X86PagingStructuresPAE destruction.
* Implemented X86VMTranslationMapPAE::QueryInterrupt().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37100 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b35f3d13 10-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE::Init(): Implemented the initialization for userland
maps. Now we can at least fully boot in qemu with one CPU. A few things
still need to be implemented, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37090 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c4c918a 10-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Fleshed out most of the unimplemented methods. The kernel boots up to the
creation of the initial shell, now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37085 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b4d62a2 08-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Skeleton classes for PAE support.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37066 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0a4cbd786c7970d571a0468e920d9db9de0dfdfb 07-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Extend kernel tracing

* Beside the physical address also print the PTE flags.
* Also trace Protect(), ClearFlags(), ClearAccessedAndModified().


# 736fe5bc63e80e95657a12d10d517f718ec91f35 05-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Fix build with TRANSLATION_MAP_TRACING enabled


# 372b309a4aa490d1fdde97694e3b8678c1e28b13 05-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Fix gcc 2 warning

... which due to the reactivated -Werror causes the build to fail.


# 7b83ce1142f92bfe60462d33ffd3a215944c7319 04-Dec-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add KDL command "mapping"

* VMTranslationMap:
- Add DebugPrintMappingInfo(): Given a virtual address it is supposed
to print the paging structure information for that address. To be
implemented by derived classes.
- Add DebugGetReverseMappingInfo(): Given a physical addresss it is
supposed to find all virtual addresses mapped to it. To be
implemented by derived classes.
* X86VMTranslationMapPAE: Implement the new methods
DebugPrintMappingInfo() and DebugGetReverseMappingInfo().
* Add KDL command "mapping". It supports both virtual address lookups
and reverse lookups.


# 372a66634410cf0450e426716c14ad42d40c0da4 17-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE: Add some ktracing for page (un)mapping


# 6508ce9f521fa173b64b11cb35dff85c8bf86558 17-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE::Map(): More info in assert


# be573dcd88b099c4ba98dcf3c63300231f207a37 22-Apr-2013 Pawel Dziepak <pdziepak@quarnos.org>

arch: make sure not to set NX-bit when it is reserved


# 966f207668d19610dae34d5331150e3742815bcf 06-Mar-2013 Pawel Dziepak <pdziepak@quarnos.org>

x86: enable data execution prevention

Set execute disable bit for any page that belongs to area with neither
B_EXECUTE_AREA nor B_KERNEL_EXECUTE_AREA set.

In order to take advanage of NX bit in 32 bit protected mode PAE must be
enabled. Thus, from now on it is also enabled when the CPU supports NX bit.

vm_page_fault() takes additional argument which indicates whether page fault
was caused by an illegal instruction fetch.


# e276cc0457a4ddb3f137504e220ee5e839f132d4 05-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Finished implementation of x86_64 paging.

* vm_init now runs up until create_preloaded_image_areas(), which needs
fixing to handle ELF64.
* Not completely tested. I know Map(), Unmap() and Query() work fine, the
other methods have not been tested as the kernel doesn't boot far enough
for any of them to be called yet. As far as I know they're correct, though.
* Not yet implemented the destructor for X86VMTranslationMap64Bit or Init()
for a user address space.


# 643cf35ee8b8ba35ef88ca9daba4ca9ab65cf1ff 03-Dec-2011 Michael Lotz <mmlr@mlotz.ch>

Add debug helper functions to mark pages present.

They can be used to mark pages as present/non-present without actually
unmapping them. Marking pages as non-present causes every access to
fault. We can use that for debugging as it allows us to "read protect"
individual kernel pages.


# 4535495d80c86e19e2610e7444a4fcefe3e0f8e6 10-Jan-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Merged the signals branch into trunk, with these changes:
* The team and thread kernel structures have been renamed to Team and Thread
respectively and moved into the new BKernel namespace.
* Several (kernel add-on) sources have been converted from C to C++ since
private kernel headers are included that are no longer C compatible.

Changes after merging:
* Fixed gcc 2 build (warnings mainly in the scary firewire bus manager).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 506894b6a88c329c7bcbd626499fbbea8d332b5a 30-Aug-2010 Axel Dörfler <axeld@pinc-software.de>

* Return an error on initialization error. This fixes CID 1566.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38461 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b9447668707741085389f650383b018d33d7d0bf 10-Jul-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Moved the vm_page initialization from vm_page.cpp:vm_page_init() to the new
vm_page::Init().
* Made vm_page::wired_count private and added accessor methods.
* Added VMCache::fWiredPagesCount (the number of wired pages the cache
contains) and accessor methods.
* Made more use of vm_page::IsMapped().
* vm_copy_on_write_area(): Added vm_page_reservation* parameter that can be
used to request a special handling for wired pages. If given the wired pages
are replaced by copies and the original pages are moved to the upper cache.
* vm_copy_area():
- We don't need to do any wired ranges handling, if the source area is a
B_SHARED_AREA, since we don't touch the area's mappings in this case.
- We no longer wait for wired ranges of the concerned areas to disappear.
Instead we use the new vm_copy_on_write_area() feature and just let it
copy the wired pages. This fixes #6288, an issue introduced with the use
of user mutexes in libroot: When executing multiple concurrent fork()s all
but the first one would wait on the fork mutex, which (being a user mutex)
would wire a page that the vm_copy_area() of the first fork() would wait
for.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37460 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a81a99203854619934782be0316f3f4c3a1ddf6 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Optimized implementations for UnmapPages() and UnmapArea().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37193 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8bcc0694ad931bc1bb988ec925f4819dd1a0577e 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Simplifications and indentation correction.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37191 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c6f52e83280eeebb23e68c686a2dda6071d3a180 21-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Missed in r37187: Use the new VMTranslationMap::[Accessed]PageUnmapped()
helper methods to avoid code duplication.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37188 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 96732e8650592415bcd28e13b3188ed754504b57 13-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMap{32bit,PAE}::UnmapPage(): Added some helpful output to
asserts.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37128 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 68b53104ba4f01a0399a1a32710388faf3805d4d 11-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Implemented X86VMTranslationMapPAE and X86PagingStructuresPAE destruction.
* Implemented X86VMTranslationMapPAE::QueryInterrupt().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37100 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b35f3d132cd1db0f828794dcf6a04d638e4d0018 10-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

X86VMTranslationMapPAE::Init(): Implemented the initialization for userland
maps. Now we can at least fully boot in qemu with one CPU. A few things
still need to be implemented, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37090 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c4c918a3da495a74d756206a8b7c3dbf1286109 10-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Fleshed out most of the unimplemented methods. The kernel boots up to the
creation of the initial shell, now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37085 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b4d62a2618dd2ae37b975e4ca283b410f39f9c7 08-Jun-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

Skeleton classes for PAE support.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37066 a95241bf-73f2-0310-859d-f6bbb57e9c96