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:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user