Skip to content

Commit 97aaafa

Browse files
committed
FIXED
1 parent fc6aa46 commit 97aaafa

5 files changed

Lines changed: 14 additions & 3 deletions

File tree

include/arch/x86/mmu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ void mmu_init(void);
2020
// Map a page
2121
void mmu_map_page(uintptr_t virt, uintptr_t phys, uint32_t flags);
2222
void mmu_map_page_dir(uintptr_t* dir, uintptr_t virt, uintptr_t phys, uint32_t flags);
23+
void mmu_map_page_4mb(uintptr_t virt, uintptr_t phys, uint32_t flags);
2324

2425
// Unmap a page
2526
void mmu_unmap_page(uintptr_t virt);

include/cpu.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ static inline void tlb_flush(uintptr_t addr) { mmu_tlb_flush(addr); }
4242
static inline void tlb_flush_all(void) { mmu_tlb_flush_all(); }
4343

4444
// Paging control
45-
static inline void paging_switch_directory(uintptr_t dir_phys) { mmu_switch_space(dir_phys); }
4645

4746
// Halt the CPU
4847
void cpu_halt(void);

include/paging.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ int paging_clone_cow_range(uint32_t* parent, uint32_t* child, uint32_t start, ui
1919
static inline void paging_init(void) { mmu_init(); vmm_init(); }
2020
static inline void map_page(uint32_t virtual_addr, uint32_t physical_addr, uint32_t flags) { mmu_map_page(virtual_addr, physical_addr, flags); }
2121
static inline void map_page_dir(uint32_t* dir, uint32_t virtual_addr, uint32_t physical_addr, uint32_t flags) { mmu_map_page_dir((uintptr_t*)dir, virtual_addr, physical_addr, flags); }
22+
static inline void map_page_4mb(uint32_t virtual_addr, uint32_t physical_addr, uint32_t flags) { mmu_map_page_4mb(virtual_addr, physical_addr, flags); }
2223
static inline void vmm_map_page(uint32_t virtual_addr, uint32_t physical_addr, uint32_t flags) { mmu_map_page(virtual_addr, physical_addr, flags); }
2324
static inline void vmm_unmap_page(uint32_t virtual_addr) { mmu_unmap_page(virtual_addr); }
2425
static inline void unmap_page_dir(uint32_t* dir, uint32_t virtual_addr) { mmu_unmap_page_dir((uintptr_t*)dir, virtual_addr); }

src/ai/ai_model.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ void ai_scheduler_wait(ai_job_t* job) {
5757
}
5858
}
5959

60-
static void ai_worker_loop(void* arg) {
60+
static void __attribute__((unused)) ai_worker_loop(void* arg) {
6161
(void)arg;
6262
while (ai_scheduler_running) {
6363
ai_job_t* job = 0;

src/arch/x86/mmu.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ void mmu_init(void) {
139139
}
140140
}
141141

142-
paging_switch_directory((uintptr_t)page_directory);
142+
mmu_switch_space((uintptr_t)page_directory);
143143

144144
mmu_enable_pse();
145145
mmu_enable_paging();
@@ -173,6 +173,16 @@ void mmu_map_page(uintptr_t virt, uintptr_t phys, uint32_t flags) {
173173
mmu_map_page_dir((uintptr_t*)page_directory, virt, phys, flags);
174174
}
175175

176+
void mmu_map_page_4mb(uintptr_t virt, uintptr_t phys, uint32_t flags) {
177+
uint32_t irq_flags = spin_lock_irqsave(&paging_lock);
178+
uintptr_t aligned_virt = virt & 0xFFC00000;
179+
uintptr_t aligned_phys = phys & 0xFFC00000;
180+
uint32_t pd_index = aligned_virt >> 22;
181+
page_directory[pd_index] = aligned_phys | flags | PAGE_PRESENT | PAGE_PS;
182+
mmu_tlb_flush(aligned_virt);
183+
spin_unlock_irqrestore(&paging_lock, irq_flags);
184+
}
185+
176186
void mmu_unmap_page_dir(uintptr_t* dir, uintptr_t virt) {
177187
if (!dir) return;
178188
uint32_t irq_flags = spin_lock_irqsave(&paging_lock);

0 commit comments

Comments
 (0)