Question regarding Rm_client::unmap in Fiasco.OC
jaeyong yoo
y.jaeyong at ...9...
Fri Dec 28 02:12:24 CET 2012
Hello,
While I was browsing, I found that, in function
Rm_session_client::detach(), there is a part that looping over Rm_client
and unmap it:
for (Rm_client *rc = _clients.first(); rc; rc =
rc->List<Rm_client>::Element::next()) {
/*
* XXX Unmapping managed dataspaces on kernels, which take
a core-
* local virtual address as unmap argument is not
supported yet.
* This is the case for Fiasco, Pistachio, and NOVA. On
those
* kernels, the unmap operation must be issued for each
leaf
* dataspace the managed dataspace is composed of. For
kernels with
* support for directed unmap (OKL4 or Codezero), unmap
can be
* simply applied for the contiguous virtual address
region in the
* client.
*/
if (!platform()->supports_direct_unmap()
&& dsc->is_managed() && dsc->core_local_addr() == 0) {
PWRN("unmapping of managed dataspaces not yet
supported");
break;
}
rc->unmap(dsc->core_local_addr() + region->offset(), //
<=== this part
region->base(), region->size());
}
The implementation of Rm_client::unmap is the following:
void Rm_client::unmap(addr_t core_local_base, addr_t virt_base,
size_t size)
{
// TODO unmap it only from target space
unmap_local(core_local_base, size >> get_page_size_log2());
}
In the above function, since it is not using any member variables of
Rm_client, when Rm_session_client::detach() calls multiple of
Rm_client::unmap it is just calling the same function of "unmap_local" with
the same parameters.
It results in calling l4_task_unmap multiple times with the same parameters.
I'm just concern that this may not cause anything harmful.
Best,
Jaeyong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.genode.org/pipermail/users/attachments/20121228/9c33441e/attachment.html>
More information about the users
mailing list