This commit is contained in:
David Gonzalez Martin 2023-12-05 13:18:59 -06:00
parent 4212c4c674
commit 4b2ade8552
5 changed files with 9 additions and 5 deletions

View File

@ -1,7 +1,7 @@
{ {
"architecture": "x86_64", "architecture": "x86_64",
"bootloader": "birth", "bootloader": "birth",
"boot_protocol": "bios", "boot_protocol": "uefi",
"execution_environment": "qemu", "execution_environment": "qemu",
"optimize_mode": "Debug", "optimize_mode": "Debug",
"execution_type": "emulated", "execution_type": "emulated",

View File

@ -779,13 +779,14 @@ pub fn setupMapping(scheduler: *cpu.UserScheduler, user_virtual_region: VirtualM
const scheduler_memory_map_flags = .{ const scheduler_memory_map_flags = .{
.write = true, .write = true,
.user = true, .user = true,
.huge_pages = false,
}; };
try map(user_address_space, regions.scheduler.virtual, regions.scheduler.physical, regions.scheduler.size, scheduler_memory_map_flags);
try map(user_address_space, regions.heap.virtual, regions.heap.physical, regions.heap.size, scheduler_memory_map_flags);
for (init_file.segments) |segment| { for (init_file.segments) |segment| {
try map(user_address_space, segment.virtual, segment.physical, segment.memory_size, segment.flags); try map(user_address_space, segment.virtual, segment.physical, segment.memory_size, segment.flags);
} }
try map(user_address_space, regions.scheduler.virtual, regions.scheduler.physical, regions.scheduler.size, scheduler_memory_map_flags);
try map(user_address_space, regions.heap.virtual, regions.heap.physical, regions.heap.size, scheduler_memory_map_flags);
// Map protected stack // Map protected stack
const privileged_stack_physical_region = try cpu.page_allocator.allocate(x86_64.capability_address_space_stack_size, .{ .reason = .user_protected }); const privileged_stack_physical_region = try cpu.page_allocator.allocate(x86_64.capability_address_space_stack_size, .{ .reason = .user_protected });
@ -793,6 +794,7 @@ pub fn setupMapping(scheduler: *cpu.UserScheduler, user_virtual_region: VirtualM
.write = true, .write = true,
.execute = false, .execute = false,
.user = false, .user = false,
.huge_pages = false,
}); });
const cpu_pml4 = try privileged_address_space.getPML4TableUnchecked(); const cpu_pml4 = try privileged_address_space.getPML4TableUnchecked();

View File

@ -266,6 +266,7 @@ fn spawnInitCommon(init_file: []const u8, cpu_page_tables: paging.CPUPageTables)
.execute = program_header.flags.executable, .execute = program_header.flags.executable,
.write = program_header.flags.writable, .write = program_header.flags.writable,
.user = true, .user = true,
.huge_pages = false,
}, },
.file_offset = program_header.offset, .file_offset = program_header.offset,
.file_size = program_header.size_in_file, .file_size = program_header.size_in_file,

View File

@ -65,7 +65,8 @@ pub const Mapping = extern struct {
execute: bool = false, execute: bool = false,
user: bool = false, user: bool = false,
secret: bool = false, secret: bool = false,
reserved: u26 = 0, huge_pages: bool = true,
reserved: u25 = 0,
pub inline fn empty() Flags { pub inline fn empty() Flags {
return .{}; return .{};

View File

@ -203,7 +203,7 @@ pub const Specific = extern struct {
if (size >= reverse_page_size) { if (size >= reverse_page_size) {
const is_smallest_page_size = reverse_page_index == reverse_valid_page_sizes.len - 1; const is_smallest_page_size = reverse_page_index == reverse_valid_page_sizes.len - 1;
if (is_smallest_page_size) { if (is_smallest_page_size or !general_flags.huge_pages) {
var virtual_address = asked_virtual_address.value(); var virtual_address = asked_virtual_address.value();
var physical_address = asked_physical_address.value(); var physical_address = asked_physical_address.value();