Extract a through-monitor-only cap_identify call from debug_cap_identify.
authorRazvan Damachi <razvan.damachi@gmail.com>
Mon, 26 Jun 2017 11:58:56 +0000 (13:58 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Thu, 31 Aug 2017 14:35:08 +0000 (16:35 +0200)
commit5b4fdc259c92c054220720c93d23031468631783
tree0eeb21657485e73b5d7776d06ce33108f92cd1d7
parenta697aaea1aad6da91fab3bf01683313b90e83a53
Extract a through-monitor-only cap_identify call from debug_cap_identify.

The function debug_cap_identify in debug.c used to try to identify the given
capref by first invoking the kernel, then performing an RPC with the monitor,
if the kernel invocation failed. The kernel invocation was there for domains
that hold the cap_kernel, which is necessary for the invocation to succeed.
Therefore, having the invocation there for domains which do not hold cap_kernel
is redundant, incurring unnecessary extra work.

A monitor_cap_identify_remote function is now part of monitor_client.c, through
which callers can identify caprefs through the monitor directly. The old
debug_cap_identify function in debug.c now resorts to this new function if the
kernel invocation fails.

Moreover, userspace apps such as the process manager or spawnd need to identify
caps involved in their RPCs (e.g. domain caps), however they do not hold the
cap_kernel reference. They can thus now use the new function to query the
monitor directly, without attempting to drop in the local kernel first.

Signed-off-by: Razvan Damachi <razvan.damachi@gmail.com>
include/barrelfish/monitor_client.h
lib/barrelfish/debug.c
lib/barrelfish/domain.c
lib/barrelfish/monitor_client.c