diff --git a/lib/mammoth/include/mammoth/memory_region.h b/lib/mammoth/include/mammoth/memory_region.h index a74b36f..6728f55 100644 --- a/lib/mammoth/include/mammoth/memory_region.h +++ b/lib/mammoth/include/mammoth/memory_region.h @@ -51,7 +51,6 @@ class OwnedMemoryRegion { static OwnedMemoryRegion FromCapability(z_cap_t vmmo_cap); - uint64_t paddr() { return paddr_; } uint64_t vaddr() { return vaddr_; } uint64_t size() { return size_; } @@ -61,11 +60,9 @@ class OwnedMemoryRegion { explicit operator bool() { return vmmo_cap_ != 0; } private: - OwnedMemoryRegion(uint64_t vmmo_cap, uint64_t paddr, uint64_t vaddr, - uint64_t size) - : vmmo_cap_(vmmo_cap), paddr_(paddr), vaddr_(vaddr), size_(size) {} + OwnedMemoryRegion(uint64_t vmmo_cap, uint64_t vaddr, uint64_t size) + : vmmo_cap_(vmmo_cap), vaddr_(vaddr), size_(size) {} uint64_t vmmo_cap_ = 0; - uint64_t paddr_ = 0; uint64_t vaddr_ = 0; uint64_t size_ = 0; }; diff --git a/lib/mammoth/src/memory_region.cpp b/lib/mammoth/src/memory_region.cpp index 9b7ea57..23e7db4 100644 --- a/lib/mammoth/src/memory_region.cpp +++ b/lib/mammoth/src/memory_region.cpp @@ -45,10 +45,8 @@ MappedMemoryRegion MappedMemoryRegion::FromCapability(z_cap_t vmmo_cap) { } OwnedMemoryRegion::OwnedMemoryRegion(OwnedMemoryRegion&& other) - : OwnedMemoryRegion(other.vmmo_cap_, other.paddr_, other.vaddr_, - other.size_) { + : OwnedMemoryRegion(other.vmmo_cap_, other.vaddr_, other.size_) { other.vmmo_cap_ = 0; - other.paddr_ = 0; other.vaddr_ = 0; other.size_ = 0; } @@ -58,11 +56,9 @@ OwnedMemoryRegion& OwnedMemoryRegion::operator=(OwnedMemoryRegion&& other) { check(ZCapRelease(vmmo_cap_)); } vmmo_cap_ = other.vmmo_cap_; - paddr_ = other.paddr_; vaddr_ = other.vaddr_; size_ = other.size_; other.vmmo_cap_ = 0; - other.paddr_ = 0; other.vaddr_ = 0; other.size_ = 0; return *this; @@ -70,6 +66,7 @@ OwnedMemoryRegion& OwnedMemoryRegion::operator=(OwnedMemoryRegion&& other) { OwnedMemoryRegion::~OwnedMemoryRegion() { if (vmmo_cap_ != 0) { + check(ZAddressSpaceUnmap(gSelfVmasCap, vaddr_, vaddr_ + size_)); check(ZCapRelease(vmmo_cap_)); } } @@ -78,6 +75,8 @@ OwnedMemoryRegion OwnedMemoryRegion::FromCapability(z_cap_t vmmo_cap) { uint64_t vaddr; check(ZAddressSpaceMap(gSelfVmasCap, 0, vmmo_cap, &vaddr)); + uint64_t size; + check(ZMemoryObjectInspect(vmmo_cap, &size)); // FIXME: get the size here. - return OwnedMemoryRegion(vmmo_cap, 0, vaddr, 0); + return OwnedMemoryRegion(vmmo_cap, vaddr, size); }