mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
mmu: rename ARCH_MMU_FLAG_* to ARCH_MMU_FLAGS_*
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
#define PDPTMASK (uint64_t)0b111111111000000000000000000000000000000
|
#define PDPTMASK (uint64_t)0b111111111000000000000000000000000000000
|
||||||
#define PML4MASK (uint64_t)0b111111111000000000000000000000000000000000000000
|
#define PML4MASK (uint64_t)0b111111111000000000000000000000000000000000000000
|
||||||
|
|
||||||
#define INTERMEDIATE_FLAGS ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_USER
|
#define INTERMEDIATE_FLAGS ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_USER
|
||||||
|
|
||||||
// returns hhdm address of next entry
|
// returns hhdm address of next entry
|
||||||
|
|
||||||
@@ -176,9 +176,9 @@ static void *kerneladdr[6] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static mmuflags_t kernelflags[3] = {
|
static mmuflags_t kernelflags[3] = {
|
||||||
ARCH_MMU_FLAG_READ,
|
ARCH_MMU_FLAGS_READ,
|
||||||
ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC,
|
ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC,
|
||||||
ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_NOEXEC
|
ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_NOEXEC
|
||||||
};
|
};
|
||||||
|
|
||||||
extern volatile struct limine_memmap_request pmm_liminemap;
|
extern volatile struct limine_memmap_request pmm_liminemap;
|
||||||
@@ -225,7 +225,7 @@ void arch_mmu_init() {
|
|||||||
for (size_t i = 0; i < pmm_liminemap.response->entry_count; ++i) {
|
for (size_t i = 0; i < pmm_liminemap.response->entry_count; ++i) {
|
||||||
struct limine_memmap_entry *e = pmm_liminemap.response->entries[i];
|
struct limine_memmap_entry *e = pmm_liminemap.response->entries[i];
|
||||||
for (uint64_t i = 0; i < e->length; i += PAGE_SIZE) {
|
for (uint64_t i = 0; i < e->length; i += PAGE_SIZE) {
|
||||||
uint64_t entry = ((e->base + i) & ADDRMASK) | ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC;
|
uint64_t entry = ((e->base + i) & ADDRMASK) | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC;
|
||||||
__assert(add_page(FROM_HHDM(template), MAKE_HHDM((void *)(e->base + i)), entry, 0));
|
__assert(add_page(FROM_HHDM(template), MAKE_HHDM((void *)(e->base + i)), entry, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@
|
|||||||
#define USERSPACE_END (void *)0x00007fffffffffff
|
#define USERSPACE_END (void *)0x00007fffffffffff
|
||||||
|
|
||||||
#define PAGE_SIZE 4096
|
#define PAGE_SIZE 4096
|
||||||
#define ARCH_MMU_FLAG_READ (uint64_t)1
|
#define ARCH_MMU_FLAGS_READ (uint64_t)1
|
||||||
#define ARCH_MMU_FLAG_WRITE (uint64_t)2
|
#define ARCH_MMU_FLAGS_WRITE (uint64_t)2
|
||||||
#define ARCH_MMU_FLAG_USER (uint64_t)4
|
#define ARCH_MMU_FLAGS_USER (uint64_t)4
|
||||||
#define ARCH_MMU_FLAG_NOEXEC ((uint64_t)1 << 63)
|
#define ARCH_MMU_FLAGS_NOEXEC ((uint64_t)1 << 63)
|
||||||
|
|
||||||
typedef uint64_t mmuflags_t;
|
typedef uint64_t mmuflags_t;
|
||||||
typedef uint64_t * pagetableptr_t; // physical address
|
typedef uint64_t * pagetableptr_t; // physical address
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ static void initindirect(scache_t *cache, slab_t *slab, void **base, void *objba
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool growcache(scache_t *cache) {
|
static bool growcache(scache_t *cache) {
|
||||||
void *_slab = vmm_map(NULL, PAGE_SIZE, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC, NULL);
|
void *_slab = vmm_map(NULL, PAGE_SIZE, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
|
||||||
if (_slab == NULL)
|
if (_slab == NULL)
|
||||||
return false;
|
return false;
|
||||||
slab_t *slab = GET_SLAB(_slab);
|
slab_t *slab = GET_SLAB(_slab);
|
||||||
@@ -58,7 +58,7 @@ static bool growcache(scache_t *cache) {
|
|||||||
if (cache->size < SLAB_INDIRECT_CUTOFF) {
|
if (cache->size < SLAB_INDIRECT_CUTOFF) {
|
||||||
initdirect(cache, slab, _slab);
|
initdirect(cache, slab, _slab);
|
||||||
} else {
|
} else {
|
||||||
void *base = vmm_map(NULL, cache->slabobjcount * cache->truesize, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC, NULL);
|
void *base = vmm_map(NULL, cache->slabobjcount * cache->truesize, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
|
||||||
if (base == NULL) {
|
if (base == NULL) {
|
||||||
vmm_unmap(_slab, PAGE_SIZE, 0);
|
vmm_unmap(_slab, PAGE_SIZE, 0);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
+7
-7
@@ -245,13 +245,13 @@ bool vmm_pagefault(void *addr, bool user, int actions) {
|
|||||||
|
|
||||||
int invalidactions = 0;
|
int invalidactions = 0;
|
||||||
|
|
||||||
if ((range->mmuflags & ARCH_MMU_FLAG_READ) == 0)
|
if ((range->mmuflags & ARCH_MMU_FLAGS_READ) == 0)
|
||||||
invalidactions |= VMM_ACTION_READ;
|
invalidactions |= VMM_ACTION_READ;
|
||||||
|
|
||||||
if ((range->mmuflags & ARCH_MMU_FLAG_WRITE) == 0)
|
if ((range->mmuflags & ARCH_MMU_FLAGS_WRITE) == 0)
|
||||||
invalidactions |= VMM_ACTION_WRITE;
|
invalidactions |= VMM_ACTION_WRITE;
|
||||||
|
|
||||||
if ((range->mmuflags & ARCH_MMU_FLAG_NOEXEC))
|
if ((range->mmuflags & ARCH_MMU_FLAGS_NOEXEC))
|
||||||
invalidactions |= VMM_ACTION_EXEC;
|
invalidactions |= VMM_ACTION_EXEC;
|
||||||
|
|
||||||
if (invalidactions & actions)
|
if (invalidactions & actions)
|
||||||
@@ -411,12 +411,12 @@ void vmm_init() {
|
|||||||
|
|
||||||
for (uint64_t i = 0; i < pmm_liminemap.response->entry_count; ++i) {
|
for (uint64_t i = 0; i < pmm_liminemap.response->entry_count; ++i) {
|
||||||
struct limine_memmap_entry *e = pmm_liminemap.response->entries[i];
|
struct limine_memmap_entry *e = pmm_liminemap.response->entries[i];
|
||||||
__assert(vmm_map(MAKE_HHDM(e->base), e->length, 0, ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC, NULL));
|
__assert(vmm_map(MAKE_HHDM(e->base), e->length, 0, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
__assert(vmm_map(&_text_start, (uintptr_t)&_text_end - (uintptr_t)&_text_start, 0, ARCH_MMU_FLAG_READ, NULL));
|
__assert(vmm_map(&_text_start, (uintptr_t)&_text_end - (uintptr_t)&_text_start, 0, ARCH_MMU_FLAGS_READ, NULL));
|
||||||
__assert(vmm_map(&_rodata_start, (uintptr_t)&_rodata_end - (uintptr_t)&_rodata_start, 0, ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_NOEXEC, NULL));
|
__assert(vmm_map(&_rodata_start, (uintptr_t)&_rodata_end - (uintptr_t)&_rodata_start, 0, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_NOEXEC, NULL));
|
||||||
__assert(vmm_map(&_data_start, (uintptr_t)&_data_end - (uintptr_t)&_data_start, 0, ARCH_MMU_FLAG_READ | ARCH_MMU_FLAG_WRITE | ARCH_MMU_FLAG_NOEXEC, NULL));
|
__assert(vmm_map(&_data_start, (uintptr_t)&_data_end - (uintptr_t)&_data_start, 0, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL));
|
||||||
|
|
||||||
printspace(&kernelspace);
|
printspace(&kernelspace);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user