Fixes some RISCV compilation issues
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 27 Feb 2012 21:25:20 +0000 (13:25 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 27 Feb 2012 21:25:20 +0000 (13:25 -0800)
Documentation/processes.txt
kern/include/process.h
kern/src/process.c
user/parlib/include/riscv/vcore.h

index 42f620a..8cc44c3 100644 (file)
@@ -347,8 +347,8 @@ bother sending IPIs, and if an IPI is sent before notifications are masked,
 then the kernel will double-check this flag to make sure interrupts should
 have arrived.
 
-Notification unmasking is done by setting the notif_enabled flag (similar to
-turning interrupts on in hardware).  When a core starts up, this flag is off,
+Notification unmasking is done by clearing the notif_disabled flag (similar to
+turning interrupts on in hardware).  When a core starts up, this flag is on,
 meaning that notifications are disabled by default.  It is the process's
 responsibility to turn on notifications for a given vcore.
 
@@ -425,7 +425,7 @@ which we aren't even sure is a problem yet.
 We considered having the kernel be aware of a process's transition stacks and
 sizes so that it can detect if a vcore is in a notification handler based on
 the stack pointer in the trapframe when a trap or interrupt fires.  While
-cool, the flag for notif_enabled is much easier and just as capable.
+cool, the flag for notif_disabled is much easier and just as capable.
 Userspace needs to be aware of various races, and only enable notifications
 when it is ready to have its transition stack clobbered.  This means that when
 switching from big user-thread to user-thread, the process should temporarily
@@ -465,8 +465,8 @@ wanted, but the vcore did not get truly interrupted since its notifs were
 disabled.  There is a race between checking the queue/bitmask and then enabling
 notifications.  The way we deal with it is that the kernel posts the
 message/bit, then sets notif_pending.  Then it sends the IPI, which may or may
-not be received (based on notif_enabled).  (Actually, the kernel only ought to
-send the IPI if notif_pending was 0 (atomically) and notif_enabled is 1).  When
+not be received (based on notif_disabled).  (Actually, the kernel only ought to
+send the IPI if notif_pending was 0 (atomically) and notif_disabled is 0).  When
 leaving the transition stack, userspace should clear the notif_pending, then
 check the queue do whatever, and then try to pop the tf.  When popping the tf,
 after enabling notifications, check notif_pending.  If it is still clear, return
index f6f8be3..9067de4 100644 (file)
@@ -101,9 +101,9 @@ struct vcore *vcoreid2vcore(struct proc *p, uint32_t vcoreid);
  *
  * WARNING: YOU MUST HOLD THE PROC_LOCK BEFORE CALLING THESE! */
 /* Gives process p the additional num cores listed in corelist */
-void __proc_give_cores(struct proc *SAFE p, uint32_t *pcorelist, size_t num);
+void __proc_give_cores(struct proc *p, uint32_t *pc_arr, uint32_t num);
 /* Takes from process p the num cores listed in pc_arr */
-void __proc_take_corelist(struct proc *p, uint32_t *pc_arr, size_t num,
+void __proc_take_corelist(struct proc *p, uint32_t *pc_arr, uint32_t num,
                           bool preempt);
 /* Takes all cores, returns the count, fills in pc_arr with their pcoreid */
 uint32_t __proc_take_allcores(struct proc *p, uint32_t *pc_arr, bool preempt);
index 8dc7f64..b480e4a 100644 (file)
@@ -1223,7 +1223,7 @@ static void __proc_unmap_allcores(struct proc *p)
  * Don't use this for taking all of a process's cores.
  *
  * Make sure you hold the lock when you call this. */
-void __proc_take_corelist(struct proc *p, uint32_t *pc_arr, size_t num,
+void __proc_take_corelist(struct proc *p, uint32_t *pc_arr, uint32_t num,
                           bool preempt)
 {
        struct vcore *vc;
index c062c68..71ad7e8 100644 (file)
@@ -41,7 +41,7 @@ void __save_ros_tf_regs(struct user_trapframe *tf);
 static void __pop_ros_tf_notifs(struct user_trapframe *tf,
                                 struct preempt_data* vcpd, uint32_t vcoreid)
 {
-       vcpd->notif_enabled = true;
+       vcpd->notif_disabled = FALSE;
 
        __sync_synchronize();
 
@@ -53,7 +53,7 @@ static void __pop_ros_tf_notifs(struct user_trapframe *tf,
 static void __pop_ros_tf_notifs_raw(struct user_trapframe *tf,
                                     struct preempt_data* vcpd, uint32_t vcoreid)
 {
-       vcpd->notif_enabled = true;
+       vcpd->notif_disabled = FALSE;
 }
 
 static inline void __pop_ros_tf(struct user_trapframe *tf, uint32_t vcoreid,