riscv64/mmu: use struct bitfield for flags and std::atomic

Fixes some PTE concurrent access bugs.

Change-Id: I09ec56861fae389a8a3e228b17a3921b85202c8b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6949
Reviewed-by: Alex von Gluck IV <[email protected]>
This commit is contained in:
X512
2023-09-25 15:50:59 +00:00
committed by Alex von Gluck IV
parent f83058d1ed
commit 98895d0417
7 changed files with 270 additions and 230 deletions
@@ -124,23 +124,20 @@ enum {
pteIdxBits = 9,
};
enum {
pteValid = 0,
pteRead = 1,
pteWrite = 2,
pteExec = 3,
pteUser = 4,
pteGlobal = 5,
pteAccessed = 6,
pteDirty = 7,
};
union Pte {
struct {
uint64 flags: 8;
uint64 rsw: 2;
uint64 ppn: 44;
uint64 reserved: 10;
uint64 isValid: 1;
uint64 isRead: 1;
uint64 isWrite: 1;
uint64 isExec: 1;
uint64 isUser: 1;
uint64 isGlobal: 1;
uint64 isAccessed: 1;
uint64 isDirty: 1;
uint64 rsw: 2;
uint64 ppn: 44;
uint64 reserved: 10;
};
uint64 val;
};