mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-31 00:24:51 +00:00
parent
554146d39c
commit
d4c55bec2a
@ -158,7 +158,7 @@ namespace Genode
|
||||
** Address-space interface **
|
||||
*****************************/
|
||||
|
||||
void flush(addr_t, size_t) { PDBG("not implemented"); }
|
||||
void flush(addr_t, size_t);
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2012-2013 Genode Labs GmbH
|
||||
* Copyright (C) 2012-2015 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
@ -17,6 +17,17 @@
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
void Platform_pd::flush(addr_t virt_base, size_t size)
|
||||
{
|
||||
Lock::Guard guard(*lock());
|
||||
|
||||
if (_tt) _tt->remove_translation(virt_base, size, page_slab());
|
||||
|
||||
/* update translation caches */
|
||||
Kernel::update_pd(kernel_pd());
|
||||
}
|
||||
|
||||
|
||||
Platform_pd::~Platform_pd()
|
||||
{
|
||||
Lock::Guard guard(_lock);
|
||||
|
@ -31,29 +31,10 @@ using namespace Genode;
|
||||
|
||||
void Rm_client::unmap(addr_t, addr_t virt_base, size_t size)
|
||||
{
|
||||
/* determine and lock PD */
|
||||
Platform_thread * const pt = (Platform_thread *)badge();
|
||||
if (!pt) {
|
||||
PERR("failed to get thread of RM client");
|
||||
return;
|
||||
}
|
||||
Platform_pd * const pd = pt->pd();
|
||||
if (!pd) {
|
||||
PERR("failed to get PD of RM client");
|
||||
return;
|
||||
}
|
||||
Lock::Guard guard(*pd->lock());
|
||||
Locked_ptr<Address_space> locked_address_space(_address_space);
|
||||
|
||||
/* update translation table of the PD */
|
||||
Translation_table * const tt = pd->translation_table();
|
||||
if (!tt) {
|
||||
PERR("failed to get translation table of RM client");
|
||||
return;
|
||||
}
|
||||
tt->remove_translation(virt_base, size, pd->page_slab());
|
||||
|
||||
/* update translation caches */
|
||||
Kernel::update_pd(pd->kernel_pd());
|
||||
if (locked_address_space.is_valid())
|
||||
locked_address_space->flush(virt_base, size);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user