summaryrefslogtreecommitdiff
path: root/viengoos/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'viengoos/server.c')
-rw-r--r--viengoos/server.c169
1 files changed, 86 insertions, 83 deletions
diff --git a/viengoos/server.c b/viengoos/server.c
index 21bc244..26b73d0 100644
--- a/viengoos/server.c
+++ b/viengoos/server.c
@@ -225,11 +225,13 @@ server_loop (void)
DEBUG (1, "Caller has no assigned activity");
continue;
}
- if (object_type ((struct object *) activity) != vg_cap_activity_control)
+ if (object_type ((struct vg_object *) activity)
+ != vg_cap_activity_control)
{
DEBUG (1, "Caller's activity slot contains a %s,"
"not an activity_control",
- vg_cap_type_string (object_type ((struct object *) activity)));
+ vg_cap_type_string
+ (object_type ((struct vg_object *) activity)));
continue;
}
@@ -275,18 +277,18 @@ server_loop (void)
cap.discardable = false;
}
- struct object *page = vg_cap_to_object (activity, &cap);
+ struct vg_object *page = vg_cap_to_object (activity, &cap);
if (! page && cap.type != vg_cap_void)
/* It's not in-memory. See if it was discarded. If not,
load it using vg_cap_to_object. */
{
int object = (cap.oid % (VG_FOLIO_OBJECTS + 1)) - 1;
vg_oid_t foid = cap.oid - object - 1;
- struct folio *folio
- = (struct folio *) object_find (activity, foid,
+ struct vg_folio *folio
+ = (struct vg_folio *) object_find (activity, foid,
VG_OBJECT_POLICY_DEFAULT);
assert (folio);
- assert (object_type ((struct object *) folio) == vg_cap_folio);
+ assert (object_type ((struct vg_object *) folio) == vg_cap_folio);
if (cap.version == folio_object_version (folio, object))
{
@@ -326,8 +328,9 @@ server_loop (void)
info.discarded = discarded;
- activation_fault_send_marshal (reply_buffer, VG_PTR_TO_ADDR (fault),
- sp, ip, info, VG_ADDR_VOID);
+ vg_activation_fault_send_marshal (reply_buffer,
+ VG_PTR_TO_ADDR (fault),
+ sp, ip, info, VG_ADDR_VOID);
thread_raise_exception (activity, thread, reply_buffer);
continue;
@@ -373,7 +376,7 @@ server_loop (void)
if (! writable && cap.discardable)
cap.discardable = false;
- struct object *page = vg_cap_to_object (activity, &cap);
+ struct vg_object *page = vg_cap_to_object (activity, &cap);
if (! page)
break;
@@ -501,7 +504,7 @@ server_loop (void)
error_t OBJECT_ (struct vg_cap *root,
vg_addr_t addr, int type, bool require_writable,
- struct object **objectp, bool *writable)
+ struct vg_object **objectp, bool *writable)
{
bool w = true;
struct vg_cap cap;
@@ -539,7 +542,7 @@ server_loop (void)
}
#define OBJECT(root_, addr_, type_, require_writable_, writablep_) \
({ \
- struct object *OBJECT_ret; \
+ struct vg_object *OBJECT_ret; \
error_t err = OBJECT_ (root_, addr_, type_, require_writable_, \
&OBJECT_ret, writablep_); \
if (err) \
@@ -561,7 +564,7 @@ server_loop (void)
/* This is annoying: 1) a thread could be in a folio so we \
can't directly lookup the slot, 2) we only want the \
thread if it matches the guard exactly. */ \
- struct object *t_; \
+ struct vg_object *t_; \
error_t err = OBJECT_ (&thread->aspace, root_addr_, \
vg_cap_thread, true, &t_, NULL); \
if (! err) \
@@ -655,7 +658,7 @@ server_loop (void)
CAP_ (&thread->aspace, send_buf, vg_cap_page, true, &cap);
else
{
- struct object *object = NULL;
+ struct vg_object *object = NULL;
OBJECT_ (&thread->aspace, send_messenger,
vg_cap_messenger, true, &object, NULL);
if (object)
@@ -744,7 +747,7 @@ server_loop (void)
}
if (unlikely ((flags & VG_IPC_RECEIVE_SET_THREAD_TO_CALLER)))
- messenger->thread = object_to_cap ((struct object *) thread);
+ messenger->thread = object_to_cap ((struct vg_object *) thread);
if (unlikely ((flags & VG_IPC_RECEIVE_SET_ASROOT_TO_CALLERS)))
messenger->as_root = thread->aspace;
@@ -755,7 +758,7 @@ server_loop (void)
MESSENGER. */
struct messenger *sender;
object_wait_queue_for_each (principal,
- (struct object *) messenger, sender)
+ (struct vg_object *) messenger, sender)
if (sender->wait_reason == MESSENGER_WAIT_TRANSFER_MESSAGE)
/* There is. Transfer SENDER's message to MESSENGER. */
{
@@ -836,7 +839,7 @@ server_loop (void)
source->buffer = CAP (&thread->aspace, send_buf, vg_cap_page, true);
if (unlikely ((flags & VG_IPC_SEND_SET_THREAD_TO_CALLER)))
- source->thread = object_to_cap ((struct object *) thread);
+ source->thread = object_to_cap ((struct vg_object *) thread);
if (unlikely ((flags & VG_IPC_SEND_SET_ASROOT_TO_CALLERS)))
source->as_root = thread->aspace;
@@ -844,10 +847,10 @@ server_loop (void)
source->activate_on_send = (flags & VG_IPC_SEND_ACTIVATE);
bool target_writable = true;
- struct object *target;
+ struct vg_object *target;
/* We special case VOID to mean the current thread. */
if (VG_ADDR_IS_VOID (target_messenger))
- target = (struct object *) thread;
+ target = (struct vg_object *) thread;
else
target = OBJECT (&thread->aspace, target_messenger, -1, false,
&target_writable);
@@ -862,8 +865,8 @@ server_loop (void)
message. */
{
DEBUG (5, "IPC: " VG_OID_FMT " -> " VG_OID_FMT,
- VG_OID_PRINTF (object_oid ((struct object *) source)),
- VG_OID_PRINTF (object_oid ((struct object *) target)));
+ VG_OID_PRINTF (object_oid ((struct vg_object *) source)),
+ VG_OID_PRINTF (object_oid ((struct vg_object *) target)));
if ((flags & VG_IPC_SEND_INLINE))
{
@@ -980,7 +983,7 @@ server_loop (void)
them. */
struct vg_cap target_root_cap;
struct vg_cap *target_root;
- if (likely (target == (struct object *) thread))
+ if (likely (target == (struct vg_object *) thread))
target_root = &thread->aspace;
else if (object_type (target) == vg_cap_thread)
target_root = &((struct thread *) target)->aspace;
@@ -991,16 +994,16 @@ server_loop (void)
}
DEBUG (4, VG_OID_FMT " %s(%llx) -> " VG_OID_FMT " %s(%llx)",
- VG_OID_PRINTF (object_oid ((struct object *) source)),
- vg_cap_type_string (object_type ((struct object *) source)),
+ VG_OID_PRINTF (object_oid ((struct vg_object *) source)),
+ vg_cap_type_string (object_type ((struct vg_object *) source)),
source->id,
- VG_OID_PRINTF (object_oid ((struct object *) target)),
+ VG_OID_PRINTF (object_oid ((struct vg_object *) target)),
vg_cap_type_string (object_type (target)),
object_type (target) == vg_cap_messenger
? ((struct messenger *) target)->id : 0);
if (reply)
DEBUG (4, "reply to: " VG_OID_FMT "(%llx)",
- VG_OID_PRINTF (object_oid ((struct object *) reply)),
+ VG_OID_PRINTF (object_oid ((struct vg_object *) reply)),
reply->id);
switch (label)
@@ -1079,7 +1082,7 @@ server_loop (void)
if (! writable && cap.discardable)
cap.discardable = false;
- struct object *page = vg_cap_to_object (activity, &cap);
+ struct vg_object *page = vg_cap_to_object (activity, &cap);
if (! page)
break;
@@ -1125,19 +1128,19 @@ server_loop (void)
struct activity *activity = (struct activity *) target;
- struct folio_policy policy;
+ struct vg_folio_policy policy;
err = vg_folio_alloc_send_unmarshal (message, &policy, NULL);
if (err)
REPLY (err);
DEBUG (4, "(" VG_ADDR_FMT ")", VG_ADDR_PRINTF (target_messenger));
- struct folio *folio = folio_alloc (activity, policy);
+ struct vg_folio *folio = folio_alloc (activity, policy);
if (! folio)
REPLY (ENOMEM);
vg_folio_alloc_reply (principal, reply,
- object_to_cap ((struct object *) folio));
+ object_to_cap ((struct vg_object *) folio));
break;
}
@@ -1146,7 +1149,7 @@ server_loop (void)
if (object_type (target) != vg_cap_folio)
REPLY (EINVAL);
- struct folio *folio = (struct folio *) target;
+ struct vg_folio *folio = (struct vg_folio *) target;
err = vg_folio_free_send_unmarshal (message, NULL);
if (err)
@@ -1165,11 +1168,11 @@ server_loop (void)
if (object_type (target) != vg_cap_folio)
REPLY (EINVAL);
- struct folio *folio = (struct folio *) target;
+ struct vg_folio *folio = (struct vg_folio *) target;
uint32_t idx;
uint32_t type;
- struct object_policy policy;
+ struct vg_object_policy policy;
uintptr_t return_code;
err = vg_folio_object_alloc_send_unmarshal (message,
@@ -1212,10 +1215,10 @@ server_loop (void)
if (object_type (target) != vg_cap_folio)
REPLY (EINVAL);
- struct folio *folio = (struct folio *) target;
+ struct vg_folio *folio = (struct vg_folio *) target;
uintptr_t flags;
- struct folio_policy in, out;
+ struct vg_folio_policy in, out;
err = vg_folio_policy_send_unmarshal (message, &flags, &in, NULL);
if (err)
@@ -1311,14 +1314,14 @@ server_loop (void)
/* The caller changed the policy. Also change it on the
object. */
{
- struct object *object = cap_to_object_soft (principal,
+ struct vg_object *object = cap_to_object_soft (principal,
target);
if (object)
{
struct object_desc *desc
= object_to_object_desc (object);
- struct object_policy p = desc->policy;
+ struct vg_object_policy p = desc->policy;
/* XXX: This should only be allowed if TARGET
grants writable access to the object. */
@@ -1357,7 +1360,7 @@ server_loop (void)
if (target->type == vg_cap_rpage)
cap.discardable = false;
- struct object *page = cap_to_object_soft (principal, &cap);
+ struct vg_object *page = cap_to_object_soft (principal, &cap);
if (page)
{
object_to_object_desc (page)->mapped = true;
@@ -1454,7 +1457,7 @@ server_loop (void)
int idx = (cap.oid % (1 + VG_FOLIO_OBJECTS)) - 1;
vg_oid_t foid = cap.oid - idx - 1;
- struct folio *folio = (struct folio *)
+ struct vg_folio *folio = (struct vg_folio *)
object_find (activity, foid, VG_OBJECT_POLICY_VOID);
if (folio_object_version (folio, idx) != cap.version)
@@ -1481,7 +1484,7 @@ server_loop (void)
{
profile_region ("object_discard-prefault");
- struct object *page = vg_cap_to_object (principal, &cap);
+ struct vg_object *page = vg_cap_to_object (principal, &cap);
if (page)
{
object_to_object_desc (page)->mapped = true;
@@ -1518,7 +1521,7 @@ server_loop (void)
DEBUG (4, VG_ADDR_FMT, VG_ADDR_PRINTF (target_messenger));
- struct folio *folio = objects_folio (principal, target);
+ struct vg_folio *folio = objects_folio (principal, target);
folio_object_content_set (folio,
objects_folio_offset (target), false);
@@ -1538,8 +1541,8 @@ server_loop (void)
VG_ADDR_PRINTF (target_messenger), clear ? "" : "no ");
struct object_desc *desc = object_to_object_desc (target);
- uintptr_t status = (desc->user_referenced ? object_referenced : 0)
- | (desc->user_dirty ? object_dirty : 0);
+ uintptr_t status = (desc->user_referenced ? vg_object_referenced : 0)
+ | (desc->user_dirty ? vg_object_dirty : 0);
if (clear)
{
@@ -1553,7 +1556,7 @@ server_loop (void)
case VG_object_name:
{
- struct object_name name;
+ struct vg_object_name name;
err = vg_object_name_send_unmarshal (message, &name, NULL);
if (object_type (target) == vg_cap_activity_control)
@@ -1581,7 +1584,7 @@ server_loop (void)
REPLY (EINVAL);
struct thread *t = (struct thread *) target;
- struct hurd_thread_exregs_in in;
+ struct vg_thread_exregs_in in;
uintptr_t control;
vg_addr_t aspace_addr;
vg_addr_t activity_addr;
@@ -1600,44 +1603,44 @@ server_loop (void)
t->name.name[0] ? t->name.name : "",
t->name.name[0] ? ": " : "",
VG_ADDR_PRINTF (target_messenger), t->tid,
- (control & HURD_EXREGS_SET_UTCB) ? "U" : "-",
- (control & HURD_EXREGS_SET_EXCEPTION_MESSENGER) ? "E" : "-",
- (control & HURD_EXREGS_SET_ASPACE) ? "R" : "-",
- (control & HURD_EXREGS_SET_ACTIVITY) ? "A" : "-",
- (control & HURD_EXREGS_SET_SP) ? "S" : "-",
- (control & HURD_EXREGS_SET_IP) ? "I" : "-",
- (control & HURD_EXREGS_SET_EFLAGS) ? "F" : "-",
- (control & HURD_EXREGS_SET_USER_HANDLE) ? "U" : "-",
+ (control & VG_EXREGS_SET_UTCB) ? "U" : "-",
+ (control & VG_EXREGS_SET_EXCEPTION_MESSENGER) ? "E" : "-",
+ (control & VG_EXREGS_SET_ASPACE) ? "R" : "-",
+ (control & VG_EXREGS_SET_ACTIVITY) ? "A" : "-",
+ (control & VG_EXREGS_SET_SP) ? "S" : "-",
+ (control & VG_EXREGS_SET_IP) ? "I" : "-",
+ (control & VG_EXREGS_SET_EFLAGS) ? "F" : "-",
+ (control & VG_EXREGS_SET_USER_HANDLE) ? "U" : "-",
(control & _L4_XCHG_REGS_CANCEL_RECV) ? "R" : "-",
(control & _L4_XCHG_REGS_CANCEL_SEND) ? "S" : "-",
(control & _L4_XCHG_REGS_CANCEL_IPC) ? "I" : "-",
(control & _L4_XCHG_REGS_HALT) ? "H" : "-",
(control & _L4_XCHG_REGS_SET_HALT) ? "Y" : "N");
- if ((control & HURD_EXREGS_SET_UTCB))
+ if ((control & VG_EXREGS_SET_UTCB))
DEBUG (d, "utcb: " VG_ADDR_FMT, VG_ADDR_PRINTF (utcb_addr));
- if ((control & HURD_EXREGS_SET_EXCEPTION_MESSENGER))
+ if ((control & VG_EXREGS_SET_EXCEPTION_MESSENGER))
DEBUG (d, "exception messenger: " VG_ADDR_FMT,
VG_ADDR_PRINTF (exception_messenger_addr));
- if ((control & HURD_EXREGS_SET_ASPACE))
+ if ((control & VG_EXREGS_SET_ASPACE))
DEBUG (d, "aspace: " VG_ADDR_FMT, VG_ADDR_PRINTF (aspace_addr));
- if ((control & HURD_EXREGS_SET_ACTIVITY))
+ if ((control & VG_EXREGS_SET_ACTIVITY))
DEBUG (d, "activity: " VG_ADDR_FMT, VG_ADDR_PRINTF (activity_addr));
- if ((control & HURD_EXREGS_SET_SP))
+ if ((control & VG_EXREGS_SET_SP))
DEBUG (d, "sp: %p", (void *) in.sp);
- if ((control & HURD_EXREGS_SET_IP))
+ if ((control & VG_EXREGS_SET_IP))
DEBUG (d, "ip: %p", (void *) in.ip);
- if ((control & HURD_EXREGS_SET_EFLAGS))
+ if ((control & VG_EXREGS_SET_EFLAGS))
DEBUG (d, "eflags: %p", (void *) in.eflags);
- if ((control & HURD_EXREGS_SET_USER_HANDLE))
+ if ((control & VG_EXREGS_SET_USER_HANDLE))
DEBUG (d, "user_handle: %p", (void *) in.user_handle);
struct vg_cap aspace = VG_CAP_VOID;
- if ((HURD_EXREGS_SET_ASPACE & control))
+ if ((VG_EXREGS_SET_ASPACE & control))
aspace = CAP (&thread->aspace, aspace_addr, -1, false);
struct vg_cap a = VG_CAP_VOID;
- if ((HURD_EXREGS_SET_ACTIVITY & control))
+ if ((VG_EXREGS_SET_ACTIVITY & control))
{
/* XXX: Remove this hack... */
if (VG_ADDR_IS_VOID (activity_addr))
@@ -1648,11 +1651,11 @@ server_loop (void)
}
struct vg_cap utcb = VG_CAP_VOID;
- if ((HURD_EXREGS_SET_UTCB & control))
+ if ((VG_EXREGS_SET_UTCB & control))
utcb = CAP (&thread->aspace, utcb_addr, vg_cap_page, true);
struct vg_cap exception_messenger = VG_CAP_VOID;
- if ((HURD_EXREGS_SET_EXCEPTION_MESSENGER & control))
+ if ((VG_EXREGS_SET_EXCEPTION_MESSENGER & control))
exception_messenger
= CAP (&thread->aspace, exception_messenger_addr,
vg_cap_rmessenger, false);
@@ -1662,7 +1665,7 @@ server_loop (void)
struct vg_cap utcb_out = thread->utcb;
struct vg_cap exception_messenger_out = thread->exception_messenger;
- struct hurd_thread_exregs_out out;
+ struct vg_thread_exregs_out out;
out.sp = in.sp;
out.ip = in.ip;
out.eflags = in.eflags;
@@ -1724,7 +1727,7 @@ server_loop (void)
struct activity *activity = (struct activity *) target;
uintptr_t flags;
- struct activity_policy in;
+ struct vg_activity_policy in;
err = vg_activity_policy_send_unmarshal (message, &flags, &in,
NULL);
@@ -1765,7 +1768,7 @@ server_loop (void)
| VG_ACTIVITY_POLICY_SIBLING_REL_WEIGHT_SET
| VG_ACTIVITY_POLICY_STORAGE_SET)))
{
- struct activity_policy p = principal->policy;
+ struct vg_activity_policy p = principal->policy;
if ((flags & VG_ACTIVITY_POLICY_CHILD_REL_PRIORITY_SET))
p.child_rel.priority = in.child_rel.priority;
@@ -1803,38 +1806,38 @@ server_loop (void)
int period = activity->current_period - 1;
if (period < 0)
- period = (ACTIVITY_STATS_PERIODS + 1) + period;
+ period = (VG_ACTIVITY_STATS_PERIODS + 1) + period;
DEBUG (4, OBJECT_NAME_FMT ": %s%s%s(%d), "
"period: %d (current: %d)",
- OBJECT_NAME_PRINTF ((struct object *) activity),
- flags & activity_info_stats ? "stats" : "",
- (flags == (activity_info_pressure|activity_info_stats))
+ OBJECT_NAME_PRINTF ((struct vg_object *) activity),
+ flags & vg_activity_info_stats ? "stats" : "",
+ (flags == (vg_activity_info_pressure|vg_activity_info_stats))
? ", " : "",
- flags & activity_info_pressure ? "pressure" : "",
+ flags & vg_activity_info_pressure ? "pressure" : "",
flags,
until_period, activity->stats[period].period);
- if ((flags & activity_info_stats)
+ if ((flags & vg_activity_info_stats)
&& activity->stats[period].period > 0
&& activity->stats[period].period >= until_period)
/* Return the available statistics. */
{
/* XXX: Only return valid stat buffers. */
- struct activity_info info;
- info.event = activity_info_stats;
+ struct vg_activity_info info;
+ info.event = vg_activity_info_stats;
int i;
- for (i = 0; i < ACTIVITY_STATS_PERIODS; i ++)
+ for (i = 0; i < VG_ACTIVITY_STATS_PERIODS; i ++)
{
period = activity->current_period - 1 - i;
if (period < 0)
- period = (ACTIVITY_STATS_PERIODS + 1) + period;
+ period = (VG_ACTIVITY_STATS_PERIODS + 1) + period;
info.stats.stats[i] = activity->stats[period];
}
- info.stats.count = ACTIVITY_STATS_PERIODS;
+ info.stats.count = VG_ACTIVITY_STATS_PERIODS;
vg_activity_info_reply (principal, reply, info);
}
@@ -1884,8 +1887,8 @@ server_loop (void)
case VG_futex:
{
/* Helper function to wake and requeue waiters. */
- int wake (int to_wake, struct object *object1, int offset1,
- int to_requeue, struct object *object2, int offset2)
+ int wake (int to_wake, struct vg_object *object1, int offset1,
+ int to_requeue, struct vg_object *object2, int offset2)
{
int count = 0;
struct messenger *m;
@@ -1962,7 +1965,7 @@ server_loop (void)
char *mode = "unknown";
- struct object *page = vg_cap_to_object (principal, &thread->utcb);
+ struct vg_object *page = vg_cap_to_object (principal, &thread->utcb);
if (page && object_type (page) == vg_cap_page)
{
struct vg_utcb *utcb = (struct vg_utcb *) page;
@@ -1990,7 +1993,7 @@ server_loop (void)
};
vg_addr_t addr = vg_addr_chop (VG_PTR_TO_ADDR (addr1), PAGESIZE_LOG2);
- struct object *object1 = OBJECT (&thread->aspace,
+ struct vg_object *object1 = OBJECT (&thread->aspace,
addr, vg_cap_page, true, NULL);
int offset1 = (uintptr_t) addr1 & (PAGESIZE - 1);
int *vaddr1 = (void *) object1 + offset1;
@@ -2029,7 +2032,7 @@ server_loop (void)
case FUTEX_WAKE_OP:
addr = vg_addr_chop (VG_PTR_TO_ADDR (addr2), PAGESIZE_LOG2);
- struct object *object2 = OBJECT (&thread->aspace,
+ struct vg_object *object2 = OBJECT (&thread->aspace,
addr, vg_cap_page, true, NULL);
int offset2 = (uintptr_t) addr2 & (PAGESIZE - 1);
int *vaddr2 = (void *) object2 + offset2;