refactor(mm): rework how map_kernel is defined

This commit is contained in:
Loïc Grégoire
2026-04-18 20:56:52 -04:00
parent c48ae7fc1e
commit 1d747029c4
+5 -10
View File
@@ -4,17 +4,14 @@ const mm = r.mm;
const mi = mm.private; const mi = mm.private;
const config = @import("config"); const config = @import("config");
const is_um = @hasDecl(config, "CONFIG_ARCH_UM");
pub const map_kernel = if (!is_um)
struct {
extern var text_start_addr: u8; extern var text_start_addr: u8;
extern var text_end_addr: u8; extern var text_end_addr: u8;
extern var rodata_start_addr: u8; extern var rodata_start_addr: u8;
extern var rodata_end_addr: u8; extern var rodata_end_addr: u8;
extern var data_start_addr: u8; extern var data_start_addr: u8;
extern var data_end_addr: u8; extern var data_end_addr: u8;
pub fn call(boot_info: *pl.BootInfo) void {
fn map_kernel(boot_info: *pl.BootInfo) void {
const kaddr = boot_info.kernel_address; const kaddr = boot_info.kernel_address;
const text_start = @intFromPtr(&text_start_addr); const text_start = @intFromPtr(&text_start_addr);
@@ -31,6 +28,7 @@ pub const map_kernel = if (!is_um)
const start_phys = kaddr.physical_base; const start_phys = kaddr.physical_base;
const start_virt = kaddr.virtual_base; const start_virt = kaddr.virtual_base;
const until_size = text_start - start_virt; const until_size = text_start - start_virt;
mi.kernel_pmap.map_contiguous_range(start_virt, start_phys, until_size, .{ mi.kernel_pmap.map_contiguous_range(start_virt, start_phys, until_size, .{
.read = true, .read = true,
.write = true, .write = true,
@@ -90,15 +88,12 @@ pub const map_kernel = if (!is_um)
}); });
} }
} }
}.call
else
struct {
pub fn call(_: *pl.BootInfo) void {}
}.call;
pub fn init(boot_info: *pl.BootInfo) linksection(r.init) void { pub fn init(boot_info: *pl.BootInfo) linksection(r.init) void {
mi.phys.init(boot_info); mi.phys.init(boot_info);
if (!@hasDecl(config, "CONFIG_ARCH_UM")) {
map_kernel(boot_info); map_kernel(boot_info);
}
mi.kernel_pmap.activate(); mi.kernel_pmap.activate();
mi.phys.init_pfndb(); mi.phys.init_pfndb();
mi.zone.early_init(); mi.zone.early_init();