aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/kmi/sp_tree.h4
-rw-r--r--src/mem_regions.c31
-rw-r--r--src/sp_tree.c2
-rw-r--r--src/timer.c17
-rw-r--r--src/uapi/ipc.c4
5 files changed, 27 insertions, 31 deletions
diff --git a/include/kmi/sp_tree.h b/include/kmi/sp_tree.h
index f1f9fca..88facef 100644
--- a/include/kmi/sp_tree.h
+++ b/include/kmi/sp_tree.h
@@ -110,10 +110,10 @@ struct sp_root {
/** Which side of the parent node a new node should be inserted to. */
enum sp_dir {
/** Left side. */
- LEFT,
+ SP_LEFT,
/** Right side. */
- RIGHT
+ SP_RIGHT
};
/**
diff --git a/src/mem_regions.c b/src/mem_regions.c
index 9468774..707c2f0 100644
--- a/src/mem_regions.c
+++ b/src/mem_regions.c
@@ -54,10 +54,13 @@
static struct mem_region *__insert_free_region(struct mem_region_root *r,
struct mem_region *m)
{
+ /* this could be simplified by using my gsptrees in kmx, but at least
+ * this ensures 'inlining' of the condition checking so I'll let it stay
+ * for now */
struct sp_node *n = sp_root(&r->free_regions), *p = NULL;
vm_t start = m->start;
size_t size = m->end - m->start;
- enum sp_dir d = LEFT;
+ enum sp_dir d = SP_LEFT;
m->sp_n = (struct sp_node){ 0 };
@@ -68,30 +71,26 @@ static struct mem_region *__insert_free_region(struct mem_region_root *r,
if (size < nsize) {
n = sp_left(n);
- d = LEFT;
+ d = SP_LEFT;
}
else if (size > nsize) {
n = sp_right(n);
- d = RIGHT;
+ d = SP_RIGHT;
}
else if (start < t->start) {
n = sp_left(n);
- d = LEFT;
+ d = SP_LEFT;
}
else {
n = sp_right(n);
- d = RIGHT;
+ d = SP_RIGHT;
}
}
- if (sp_root(&r->free_regions))
- sp_insert(&sp_root(&r->free_regions), p, &m->sp_n, d);
- else
- sp_root(&r->free_regions) = &m->sp_n;
-
+ sp_insert(&sp_root(&r->free_regions), p, &m->sp_n, d);
return m;
}
@@ -107,7 +106,7 @@ static struct mem_region *__insert_used_region(struct mem_region_root *r,
{
struct sp_node *n = sp_root(&r->used_regions), *p = NULL;
vm_t start = m->start;
- enum sp_dir d = LEFT;
+ enum sp_dir d = SP_LEFT;
m->sp_n = (struct sp_node){ 0 };
@@ -118,22 +117,18 @@ static struct mem_region *__insert_used_region(struct mem_region_root *r,
if (start < t->start) {
n = sp_left(n);
- d = LEFT;
+ d = SP_LEFT;
}
else {
/* we should never encounter a situation where start =
* t->start */
n = sp_right(n);
- d = RIGHT;
+ d = SP_RIGHT;
}
}
- if (sp_root(&r->used_regions))
- sp_insert(&sp_root(&r->used_regions), p, &m->sp_n, d);
- else
- sp_root(&r->used_regions) = &m->sp_n;
-
+ sp_insert(&sp_root(&r->used_regions), p, &m->sp_n, d);
return m;
}
diff --git a/src/sp_tree.c b/src/sp_tree.c
index 9f69158..23f707b 100644
--- a/src/sp_tree.c
+++ b/src/sp_tree.c
@@ -155,7 +155,7 @@ void sp_insert(struct sp_node **root, struct sp_node *p, struct sp_node *n,
return;
}
- if (d == LEFT)
+ if (d == SP_LEFT)
sp_left(p) = n;
else
sp_right(p) = n;
diff --git a/src/timer.c b/src/timer.c
index 272ba02..474d995 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -89,7 +89,7 @@ static id_t __insert_timer(struct timer_node *ti)
{
struct sp_root *root = __cpu_timers();
struct sp_node *n = sp_root(root), *p = NULL;
- enum sp_dir d = LEFT;
+ enum sp_dir d = SP_LEFT;
while (n) {
struct timer_node *t = container_of(n, struct timer_node, sp_n);
if (ti->timer.cid == t->timer.cid) {
@@ -100,7 +100,10 @@ static id_t __insert_timer(struct timer_node *ti)
* to be handled after the one that's very close, but
* the timescales that we're dealing with are probably
* tiny enough that this won't matter, even if it
- * occurs. */
+ * occurs.
+ *
+ * This is one thing we couldn't do without having the
+ * internals of sptrees exposed. Pretty cool, huh? */
ti->timer.cid++;
}
@@ -108,18 +111,14 @@ static id_t __insert_timer(struct timer_node *ti)
if (ti->timer.cid < t->timer.cid) {
n = sp_left(n);
- d = LEFT;
+ d = SP_LEFT;
} else {
n = sp_right(n);
- d = RIGHT;
+ d = SP_RIGHT;
}
}
- if (sp_root(root))
- sp_insert(&sp_root(root), p, &ti->sp_n, d);
- else
- sp_root(root) = &ti->sp_n;
-
+ sp_insert(&sp_root(root), p, &ti->sp_n, d);
return ti->timer.cid;
}
diff --git a/src/uapi/ipc.c b/src/uapi/ipc.c
index cb2ce28..bc836fc 100644
--- a/src/uapi/ipc.c
+++ b/src/uapi/ipc.c
@@ -315,7 +315,9 @@ SYSCALL_DEFINE4(ipc_resp)(struct tcb *t, sys_arg_t d0, sys_arg_t d1,
if (unlikely(!is_rpc(t)))
return_args1(t, ERR_MISC);
- leave_rpc(t, SYS_RET6(OK, t->tid, d0, d1, d2, d3));
+ /* inform requester who answered (pid) in the case of the request being
+ * kicked forward */
+ leave_rpc(t, SYS_RET6(OK, t->pid, d0, d1, d2, d3));
}
/**