diff --git a/repos/base-hw/src/core/platform.cc b/repos/base-hw/src/core/platform.cc index aae397164..ce650d5fa 100644 --- a/repos/base-hw/src/core/platform.cc +++ b/repos/base-hw/src/core/platform.cc @@ -231,5 +231,6 @@ bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, return ::map_local(phys_addr, virt_addr, size / get_page_size()); } -bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size) { +bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, addr_t phys_addr, + unsigned size) { return ::unmap_local(virt_addr, size / get_page_size()); } diff --git a/repos/base-nova/src/core/platform.cc b/repos/base-nova/src/core/platform.cc index 0e7628794..98ccf9b4d 100644 --- a/repos/base-nova/src/core/platform.cc +++ b/repos/base-nova/src/core/platform.cc @@ -772,7 +772,8 @@ bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, } -bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size) +bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, addr_t phys_addr, + unsigned size) { unmap_local((Utcb *)Thread::myself()->utcb(), virt_addr, size / get_page_size()); diff --git a/repos/base-okl4/src/core/platform.cc b/repos/base-okl4/src/core/platform.cc index f12911a2c..b4137f7e0 100644 --- a/repos/base-okl4/src/core/platform.cc +++ b/repos/base-okl4/src/core/platform.cc @@ -62,7 +62,8 @@ bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, return map_local(phys_addr, virt_addr, size / get_page_size()); } -bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size) { +bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, addr_t phys_addr, + unsigned size) { return unmap_local(virt_addr, size / get_page_size()); } diff --git a/repos/base-sel4/src/core/platform.cc b/repos/base-sel4/src/core/platform.cc index aa8e5cd22..d0d27b3ec 100644 --- a/repos/base-sel4/src/core/platform.cc +++ b/repos/base-sel4/src/core/platform.cc @@ -72,7 +72,8 @@ bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, } -bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size) +bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, addr_t phys_addr, + unsigned size) { return unmap_local(virt_addr, size / get_page_size()); } diff --git a/repos/base/src/core/core_mem_alloc.cc b/repos/base/src/core/core_mem_alloc.cc index 41308344f..1fbc5a15b 100644 --- a/repos/base/src/core/core_mem_alloc.cc +++ b/repos/base/src/core/core_mem_alloc.cc @@ -83,7 +83,7 @@ void Mapped_mem_allocator::free(void *addr, size_t size) Block *b = static_cast(_virt_alloc->_find_by_address((addr_t)addr)); if (!b) return; - _unmap_local((addr_t)addr, b->size()); + _unmap_local((addr_t)addr, (addr_t)b->map_addr, b->size()); _phys_alloc->free(b->map_addr, b->size()); _virt_alloc->free(addr, b->size()); } diff --git a/repos/base/src/core/include/core_mem_alloc.h b/repos/base/src/core/include/core_mem_alloc.h index 6d78c8b62..a150ca4c0 100644 --- a/repos/base/src/core/include/core_mem_alloc.h +++ b/repos/base/src/core/include/core_mem_alloc.h @@ -136,9 +136,10 @@ class Genode::Mapped_mem_allocator : public Genode::Core_mem_translator * Note: has to be implemented by platform specific code * * \param virt_addr start address of virtual range + * \param phys_addr start address of physical range * \param size size of range */ - bool _unmap_local(addr_t virt_addr, unsigned size); + bool _unmap_local(addr_t virt_addr, addr_t phys_addr, unsigned size); /***********************************