summaryrefslogtreecommitdiff
path: root/kernel/arch
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-21 00:14:29 +0100
committerAnton Kling <anton@kling.gg>2024-02-21 00:14:29 +0100
commit8ff63b062d724826d8017504063df9b92f8e6703 (patch)
tree03bf0b5a278a4908da8912f956e5651bea9412f1 /kernel/arch
parenta85eacdd2406fede4d6ff5cb130b1758978cabb3 (diff)
New clang-format options
Diffstat (limited to 'kernel/arch')
-rw-r--r--kernel/arch/i386/mmu.c87
1 files changed, 58 insertions, 29 deletions
diff --git a/kernel/arch/i386/mmu.c b/kernel/arch/i386/mmu.c
index f958455..201fa8e 100644
--- a/kernel/arch/i386/mmu.c
+++ b/kernel/arch/i386/mmu.c
@@ -77,14 +77,16 @@ u32 mmu_get_number_of_allocated_frames(void) {
Page *get_page(void *ptr, PageDirectory *directory, int create_new_page,
int set_user) {
uintptr_t address = (uintptr_t)ptr;
- if (!directory)
+ if (!directory) {
directory = get_active_pagedirectory();
+ }
address /= 0x1000;
u32 table_index = address / 1024;
if (!directory->tables[table_index]) {
- if (!create_new_page)
+ if (!create_new_page) {
return 0;
+ }
u32 physical;
directory->tables[table_index] =
@@ -121,8 +123,9 @@ void *next_page(void *ptr) {
}
void *align_page(void *a) {
- if ((uintptr_t)a & (PAGE_SIZE - 1))
+ if ((uintptr_t)a & (PAGE_SIZE - 1)) {
return next_page(a);
+ }
return a;
}
@@ -135,12 +138,15 @@ void flush_tlb(void) {
u32 first_free_frame(void) {
for (u32 i = 1; i < INDEX_FROM_BIT(num_of_frames); i++) {
- if (frames[i] == 0xFFFFFFFF)
+ if (frames[i] == 0xFFFFFFFF) {
continue;
+ }
- for (u32 c = 0; c < 32; c++)
- if (!(frames[i] & ((u32)1 << c)))
+ for (u32 c = 0; c < 32; c++) {
+ if (!(frames[i] & ((u32)1 << c))) {
return i * 32 + c;
+ }
+ }
}
kprintf("ERROR Num frames: %x\n", mmu_get_number_of_allocated_frames());
@@ -192,8 +198,9 @@ PageTable *clone_table(u32 src_index, PageDirectory *src_directory,
// copy data to it.
for (u32 i = 0; i < 1024; i++) {
// Find a unused table
- if (src_directory->tables[i])
+ if (src_directory->tables[i]) {
continue;
+ }
// Link the table to the new table temporarily
src_directory->tables[i] = new_table;
@@ -204,8 +211,9 @@ PageTable *clone_table(u32 src_index, PageDirectory *src_directory,
// For each page in the table copy all the data over.
for (u32 c = 0; c < 1024; c++) {
// Only copy pages that are used.
- if (!src->pages[c].frame || !src->pages[c].present)
+ if (!src->pages[c].frame || !src->pages[c].present) {
continue;
+ }
u32 table_data_pointer = i << 22 | c << 12;
u32 src_data_pointer = src_index << 22 | c << 12;
@@ -241,8 +249,9 @@ PageTable *copy_table(PageTable *src, u32 *physical_address) {
}
PageDirectory *clone_directory(PageDirectory *original) {
- if (!original)
+ if (!original) {
original = get_active_pagedirectory();
+ }
u32 physical_address;
PageDirectory *new_directory =
@@ -267,8 +276,9 @@ PageDirectory *clone_directory(PageDirectory *original) {
}
if (original->tables[i] == kernel_directory->tables[i] || i > 641) {
- if (original->tables[i])
+ if (original->tables[i]) {
assert(kernel_directory->tables[i]);
+ }
new_directory->tables[i] = kernel_directory->tables[i];
new_directory->physical_tables[i] = kernel_directory->physical_tables[i];
continue;
@@ -287,8 +297,9 @@ void mmu_allocate_shared_kernel_region(void *rc, size_t n) {
size_t num_pages = n / PAGE_SIZE;
for (size_t i = 0; i <= num_pages; i++) {
Page *p = get_page((void *)(rc + i * 0x1000), NULL, PAGE_ALLOCATE, 0);
- if (!p->present || !p->frame)
+ if (!p->present || !p->frame) {
allocate_frame(p, 0, 1);
+ }
}
}
@@ -296,8 +307,9 @@ void mmu_remove_virtual_physical_address_mapping(void *ptr, size_t length) {
size_t num_pages = (uintptr_t)align_page((void *)length) / PAGE_SIZE;
for (size_t i = 0; i < num_pages; i++) {
Page *p = get_page(ptr + (i * PAGE_SIZE), NULL, PAGE_NO_ALLOCATE, 0);
- if (!p)
+ if (!p) {
return;
+ }
p->frame = 0;
p->present = 0;
}
@@ -389,12 +401,15 @@ void mmu_free_address_range(void *ptr, size_t length) {
size_t num_pages = (size_t)align_page((void *)length) / PAGE_SIZE;
for (size_t i = 0; i < num_pages; i++, ptr += PAGE_SIZE) {
Page *page = get_page(ptr, NULL, PAGE_NO_ALLOCATE, 0);
- if (!page)
+ if (!page) {
continue;
- if (!page->present)
+ }
+ if (!page->present) {
continue;
- if (!page->frame)
+ }
+ if (!page->frame) {
continue;
+ }
write_to_frame(((u32)page->frame) * 0x1000, 0);
page->present = 0;
page->rw = 0;
@@ -446,8 +461,9 @@ struct PhysVirtMap phys_to_virt_map[256] = {0};
void create_physical_to_virtual_mapping(void *physical, void *virtual,
u32 length) {
for (u16 i = 0; i < 256; i++) {
- if (phys_to_virt_map[i].in_use)
+ if (phys_to_virt_map[i].in_use) {
continue;
+ }
phys_to_virt_map[i].physical = (u32)physical;
phys_to_virt_map[i].virtual = (u32) virtual;
phys_to_virt_map[i].length = length;
@@ -459,13 +475,16 @@ void create_physical_to_virtual_mapping(void *physical, void *virtual,
void *physical_to_virtual(void *address) {
for (u16 i = 0; i < 256; i++) {
- if (!phys_to_virt_map[i].in_use)
+ if (!phys_to_virt_map[i].in_use) {
continue;
+ }
if (phys_to_virt_map[i].physical + phys_to_virt_map[i].length <
- (u32)address)
+ (u32)address) {
continue;
- if (phys_to_virt_map[i].physical > (u32)address)
+ }
+ if (phys_to_virt_map[i].physical > (u32)address) {
continue;
+ }
return (void *)phys_to_virt_map[i].virtual;
}
assert(0);
@@ -473,8 +492,9 @@ void *physical_to_virtual(void *address) {
}
void *virtual_to_physical(void *address, PageDirectory *directory) {
- if (0 == directory)
+ if (0 == directory) {
directory = get_active_pagedirectory();
+ }
Page *p = get_page((void *)address, directory, PAGE_NO_ALLOCATE, 0);
return (void *)((u32)p->frame * 0x1000) + (((uintptr_t)address) & 0xFFF);
}
@@ -520,18 +540,21 @@ void *is_valid_user_c_string(const char *ptr, size_t *size) {
size_t s = 0;
for (; ((u32)ptr - (u32)r) < 0x1000;) {
void *page = (void *)((uintptr_t)ptr & (uintptr_t)(~(PAGE_SIZE - 1)));
- if (!is_valid_userpointer(page, PAGE_SIZE))
+ if (!is_valid_userpointer(page, PAGE_SIZE)) {
return NULL;
+ }
if (!((uintptr_t)ptr & (PAGE_SIZE - 1))) {
ptr++;
s++;
}
- for (; (uintptr_t)ptr & (PAGE_SIZE - 1); ptr++, s++)
+ for (; (uintptr_t)ptr & (PAGE_SIZE - 1); ptr++, s++) {
if (!*ptr) {
- if (size)
+ if (size) {
*size = s;
+ }
return r;
}
+ }
}
// String is too long, something has probably gone wrong.
assert(0);
@@ -543,12 +566,15 @@ void *is_valid_userpointer(const void *ptr, size_t s) {
size_t num_pages = (uintptr_t)align_page((void *)s) / 0x1000;
for (size_t i = 0; i < num_pages; i++, t += 0x1000) {
Page *page = get_page((void *)t, NULL, PAGE_NO_ALLOCATE, 0);
- if (!page)
+ if (!page) {
return NULL;
- if (!page->present)
+ }
+ if (!page->present) {
return NULL;
- if (!page->user)
+ }
+ if (!page->user) {
return NULL;
+ }
}
return (void *)ptr;
}
@@ -565,8 +591,9 @@ void enable_paging(void) {
}
void create_table(int table_index) {
- if (kernel_directory->tables[table_index])
+ if (kernel_directory->tables[table_index]) {
return;
+ }
u32 physical;
kernel_directory->tables[table_index] = (PageTable *)0xDEADBEEF;
kernel_directory->tables[table_index] =
@@ -600,8 +627,9 @@ void paging_init(u64 memsize) {
PageTable *table = kernel_directory->tables[i];
write_to_frame(kernel_directory->physical_tables[i], 1);
for (size_t j = 0; j < 1024; j++) {
- if (!table->pages[j].present)
+ if (!table->pages[j].present) {
continue;
+ }
// Add the frame to our bitmap to ensure it does not get used by
// another newly created page.
write_to_frame(table->pages[j].frame * 0x1000, 1);
@@ -611,8 +639,9 @@ void paging_init(u64 memsize) {
switch_page_directory(kernel_directory);
// Make null dereferences crash.
get_page(NULL, kernel_directory, PAGE_ALLOCATE, 0)->present = 0;
- for (int i = 0; i < 25; i++)
+ for (int i = 0; i < 25; i++) {
create_table(770 + i);
+ }
kernel_directory = clone_directory(kernel_directory);
switch_page_directory(kernel_directory);