Use run_as_rkm() for simple functions

These were a few places where the kernel message trampoline was just a
wrapper around a single function.  There are a bunch of places where
there is a separate function that does a bunch of things in the kmsg.
I'm fine with leaving them as-is for now.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/src/kthread.c b/kern/src/kthread.c
index e1010ca..1457a3b 100644
--- a/kern/src/kthread.c
+++ b/kern/src/kthread.c
@@ -227,21 +227,13 @@
 	                    KMSG_ROUTINE);
 }
 
-/* Kmsg helper for kthread_yield */
-static void __wake_me_up(uint32_t srcid, long a0, long a1, long a2)
-{
-	struct semaphore *sem = (struct semaphore*)a0;
-	assert(sem_up(sem));
-}
-
 /* Stop the current kthread.  It'll get woken up next time we run routine kmsgs,
  * after all existing kmsgs are processed. */
 void kthread_yield(void)
 {
 	struct semaphore local_sem, *sem = &local_sem;
 	sem_init(sem, 0);
-	send_kernel_message(core_id(), __wake_me_up, (long)sem, 0, 0,
-	                    KMSG_ROUTINE);
+	run_as_rkm(sem_up, sem);
 	sem_down(sem);
 }
 
diff --git a/kern/src/rcu.c b/kern/src/rcu.c
index 8481025..23a8a6c 100644
--- a/kern/src/rcu.c
+++ b/kern/src/rcu.c
@@ -160,19 +160,13 @@
 		head->func(head);
 }
 
-static void __early_call_rcu_kmsg(uint32_t srcid, long a0, long a1, long a2)
-{
-	rcu_exec_cb((struct rcu_head*)a0);
-}
-
 void __early_call_rcu(struct rcu_head *head)
 {
 	extern bool booting;
 
 	assert(booting);
 	assert(core_id() == 0);
-	send_kernel_message(0, __early_call_rcu_kmsg, (long)head, 0, 0,
-	                    KMSG_ROUTINE);
+	run_as_rkm(rcu_exec_cb, head);
 }
 
 /* This could be called from a remote core, e.g. rcu_barrier().  Returns the
diff --git a/kern/src/schedule.c b/kern/src/schedule.c
index 5823b03..4804885 100644
--- a/kern/src/schedule.c
+++ b/kern/src/schedule.c
@@ -79,12 +79,6 @@
 	set_alarm(&per_cpu_info[core_id()].tchain, &ksched_waiter);
 }
 
-/* Need a kmsg to just run the sched, but not to rearm */
-static void __just_sched(uint32_t srcid, long a0, long a1, long a2)
-{
-	run_scheduler();
-}
-
 /* RKM alarm, to run the scheduler tick (not in interrupt context) and reset the
  * alarm.  Note that interrupts will be disabled, but this is not the same as
  * interrupt context.  We're a routine kmsg, which means the core is in a
@@ -301,8 +295,7 @@
 			/* process might be dying, with a KMSG to clean it up waiting on
 			 * this core.  can't do much, so we'll attempt to restart */
 			if (proc_is_dying(pcpui->owning_proc)) {
-				send_kernel_message(core_id(), __just_sched, 0, 0, 0,
-				                    KMSG_ROUTINE);
+				run_as_rkm(run_scheduler);
 				spin_unlock(&pcpui->owning_proc->proc_lock);
 				return FALSE;
 			}
diff --git a/kern/src/taskqueue.c b/kern/src/taskqueue.c
index e988409..0588afa 100644
--- a/kern/src/taskqueue.c
+++ b/kern/src/taskqueue.c
@@ -11,21 +11,12 @@
 #include <kthread.h>
 
 /* BSD Taskqueue wrappers. */
-static void __tq_wrapper(uint32_t srcid, long a0, long a1, long a2)
-{
-	task_fn_t tq_fn = (task_fn_t)a0;
-	void *tq_arg = (void*)a1;
-	tq_fn(tq_arg, 0);
-}
-
 int taskqueue_enqueue(struct taskqueue *queue, struct task *task)
 {
-	send_kernel_message(core_id(), __tq_wrapper, (long)task->ta_func,
-	                    (long)task->ta_context, 0, KMSG_ROUTINE);
+	run_as_rkm(task->ta_func, task->ta_context, 0);
 	return 0;
 }
 
-
 /* Linux workqueue wrappers */
 void flush_workqueue(struct workqueue_struct *wq)
 {