commit 2
This commit is contained in:
parent
4212c4c674
commit
4b2ade8552
@ -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",
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
|
@ -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 .{};
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user