fix(smp): add per-core TSS descriptors in GDT and defer AP wakeup after kernel init

This commit is contained in:
RarDog
2026-09-02 19:51:53 +03:00
parent eed05c1eca
commit 28da1587b9
4 changed files with 99 additions and 37 deletions
-8
View File
@@ -35,22 +35,17 @@ impl FrameAllocator {
let entry_count = (*memmap).entry_count as usize;
let entries_ptr = (*memmap).entries;
kprintln!("[PFA] entry_count={}, entries_ptr={:#018x}", entry_count, entries_ptr as u64);
let mut max_paddr: u64 = 0;
for i in 0..entry_count {
let entry = *entries_ptr.add(i);
let end = (*entry).base + (*entry).length;
kprintln!("[PFA] entry[{}]: base={:#x} len={:#x} type={}", i, (*entry).base, (*entry).length, (*entry).typ);
if end > max_paddr {
max_paddr = end;
}
}
kprintln!("[PFA] max_paddr={:#x}", max_paddr);
self.total_frames = (max_paddr as usize) / PAGE_SIZE;
self.bitmap_size_bytes = (self.total_frames + 7) / 8;
kprintln!("[PFA] total_frames={}, bitmap_size={} bytes", self.total_frames, self.bitmap_size_bytes);
// Find a usable region large enough to place the bitmap
let mut bitmap_paddr: u64 = 0;
@@ -68,11 +63,8 @@ impl FrameAllocator {
kprintln!("[FATAL] Could not find memory for PFA bitmap!");
return;
}
kprintln!("[PFA] Bitmap at phys={:#x}, virt={:#x}", bitmap_paddr, bitmap_paddr + hhdm);
self.bitmap = (bitmap_paddr + hhdm) as *mut u8;
core::ptr::write_bytes(self.bitmap, 0xFF, self.bitmap_size_bytes);
kprintln!("[PFA] Bitmap zeroed OK");
self.free_frames = 0;
for i in 0..entry_count {