Insert the correct address into the allocations map
This commit is contained in:
parent
34d7bb6806
commit
36a0f24fc8
1 changed files with 5 additions and 3 deletions
|
@ -253,7 +253,7 @@ pub fn VirtualMemoryManager(comptime Payload: type) type {
|
||||||
try phys_list.append(phys);
|
try phys_list.append(phys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = try self.allocations.put(virt, Allocation{ .physical = phys_list });
|
_ = try self.allocations.put(virtual.start, Allocation{ .physical = phys_list });
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -310,7 +310,7 @@ pub fn VirtualMemoryManager(comptime Payload: type) type {
|
||||||
/// Bitmap.BitmapError.OutOfBounds - The address is out of the manager's bounds
|
/// Bitmap.BitmapError.OutOfBounds - The address is out of the manager's bounds
|
||||||
///
|
///
|
||||||
pub fn free(self: *Self, vaddr: usize) (bitmap.Bitmap(u32).BitmapError || VmmError)!void {
|
pub fn free(self: *Self, vaddr: usize) (bitmap.Bitmap(u32).BitmapError || VmmError)!void {
|
||||||
const entry = vaddr / BLOCK_SIZE;
|
const entry = (vaddr - self.start) / BLOCK_SIZE;
|
||||||
if (try self.bmp.isSet(entry)) {
|
if (try self.bmp.isSet(entry)) {
|
||||||
// There will be an allocation associated with this virtual address
|
// There will be an allocation associated with this virtual address
|
||||||
const allocation = self.allocations.get(vaddr) orelse unreachable;
|
const allocation = self.allocations.get(vaddr) orelse unreachable;
|
||||||
|
@ -318,7 +318,7 @@ pub fn VirtualMemoryManager(comptime Payload: type) type {
|
||||||
defer physical.deinit();
|
defer physical.deinit();
|
||||||
const num_physical_allocations = physical.items.len;
|
const num_physical_allocations = physical.items.len;
|
||||||
for (physical.items) |block, i| {
|
for (physical.items) |block, i| {
|
||||||
// Clear the address space entry, unmap the virtual memory and free the physical memory
|
// Clear the address space entry and free the physical memory
|
||||||
try self.bmp.clearEntry(entry + i);
|
try self.bmp.clearEntry(entry + i);
|
||||||
pmm.free(block) catch |e| panic(@errorReturnTrace(), "Failed to free PMM reserved memory at 0x{X}: {}\n", .{ block * BLOCK_SIZE, e });
|
pmm.free(block) catch |e| panic(@errorReturnTrace(), "Failed to free PMM reserved memory at 0x{X}: {}\n", .{ block * BLOCK_SIZE, e });
|
||||||
}
|
}
|
||||||
|
@ -469,6 +469,8 @@ test "set" {
|
||||||
const pend = vend + 123;
|
const pend = vend + 123;
|
||||||
const attrs = Attributes{ .kernel = true, .writable = true, .cachable = true };
|
const attrs = Attributes{ .kernel = true, .writable = true, .cachable = true };
|
||||||
try vmm.set(.{ .start = vstart, .end = vend }, mem.Range{ .start = pstart, .end = pend }, attrs);
|
try vmm.set(.{ .start = vstart, .end = vend }, mem.Range{ .start = pstart, .end = pend }, attrs);
|
||||||
|
// Make sure it put the correct address in the map
|
||||||
|
std.testing.expect(vmm.allocations.get(vstart) != null);
|
||||||
|
|
||||||
var allocations = test_allocations orelse unreachable;
|
var allocations = test_allocations orelse unreachable;
|
||||||
// The entries before the virtual start shouldn't be set
|
// The entries before the virtual start shouldn't be set
|
||||||
|
|
Loading…
Reference in a new issue