Removed extraneous event/bcq utilities
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 28 Jul 2011 22:11:32 +0000 (15:11 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:05 +0000 (17:36 -0700)
mon_bcq() was getting useless quickly.  It helped with a brutal bug, but
isn't needed in its older form any more.

event_activity() wasn't particularly useful.  The only "legit" use was
to poll in syscall.c, which I want to discourage.  We might bring it
back in the future, but only if there is real need.

kern/include/monitor.h
kern/src/monitor.c
tests/syscall.c
user/parlib/event.c
user/parlib/include/event.h

index 8f277df..6f285b1 100644 (file)
@@ -32,6 +32,5 @@ int mon_monitor(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf);
 int mon_fs(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf);
 int mon_bb(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf);
 int mon_alarm(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf);
-int mon_bcq(int argc, char **argv, struct trapframe *tf);
 
 #endif // !ROS_KERN_MONITOR_H
index d976cd6..728b2f6 100644 (file)
@@ -64,7 +64,6 @@ static command_t (RO commands)[] = {
        { "fs", "Filesystem Diagnostics", mon_fs},
        { "bb", "Try to run busybox (ash)", mon_bb},
        { "alarm", "Alarm Diagnostics", mon_alarm},
-       { "bcq", "BCQ Diagnostics", mon_bcq},
 };
 #define NCOMMANDS (sizeof(commands)/sizeof(commands[0]))
 
@@ -899,36 +898,3 @@ int mon_alarm(int argc, char **argv, struct trapframe *tf)
        }
        return 0;
 }
-
-/* This is ghetto: assumes a VCPD 10 element BCQ.  This is a pain in the ass to
- * do generically, since size of a struct doesn't tell you its alignment.
- * (picture a struct with just chars vs one that requires padding due to longer
- * members).  This just works for event BCQs. */
-int mon_bcq(int argc, char **argv, struct trapframe *tf)
-{
-       if (argc < 2) {
-               printk("Usage: bcq OPTION [KVA_OF_BCQ] \n");
-               printk("\tstatus KVA_OF_BCQ: prints the status of the bcq\n");
-               return 1;
-       }
-       if (!strcmp(argv[1], "status")) {
-               if (argc != 3) {
-                       printk("Give me a bcq.\n");
-                       return 1;
-               }
-               struct event_msg_bcq *bcq =
-                                    (struct event_msg_bcq*)strtol(argv[2], 0, 16);
-               printk("Event BCQ: %08p\n", bcq);
-               printk("\tprod_idx: %08p\n", bcq->hdr.prod_idx);
-               printk("\tcons_pub_idx: %08p\n", bcq->hdr.cons_pub_idx);
-               printk("\tcons_pvt_idx: %08p\n", bcq->hdr.cons_pvt_idx);
-               for (int i = 0; i < NR_BCQ_EVENTS; i++) {
-                       printk("Element %d, rdy_for_cons: %02p\n", i,
-                              bcq->wraps[i].rdy_for_cons);
-               }
-       } else {
-               printk("Bad option\n");
-               return 1;
-       }
-       return 0;
-}
index 3350121..fa939b8 100644 (file)
@@ -44,14 +44,9 @@ int main(int argc, char** argv)
        num_started = __ros_arch_syscall((long)&sysc, 1);
        if (!(atomic_read(&sysc.flags) & SC_DONE))
                printf("Not done, looping!\n");
-       #if 0
-       /* You could poll on this */
-       while (!(sysc.flags & SC_DONE))
-               cpu_relax();
-       #endif
-       /* But let's check on events...  Spin til something happened, then handle
-        * events.  This method is just used for this testing code. */
-       while (!event_activity(ev_q->ev_mbox, ev_q->ev_flags))
+       /* You could poll on this.  This is really ghetto, but i got rid of
+        * event_activity, whose sole purpose was to encourage spinning. */
+       while (!(atomic_read(&sysc.flags) & SC_DONE))
                cpu_relax();
        handle_event_q(ev_q);
        /* by now, we should have run our handler */
index 88b49bd..8f7de31 100644 (file)
@@ -105,23 +105,6 @@ void disable_kevent(unsigned int ev_type)
 }
 
 /********* Event Handling / Reception ***********/
-/* Tests the ev_q to see if anything has happened on it.  Up to the caller to do
- * something with the info, such as try and dequeue or handle an overflow.
- * Flags is for the ev_q's flags (if you know it), which is to check the NO_MSG
- * style ev_qs. */
-bool event_activity(struct event_mbox *ev_mbox, int flags)
-{
-       if (!bcq_empty(&ev_mbox->ev_msgs))
-               return TRUE;
-       /* Only need to check the bitmask for activity if we've had overflows or if
-        * we are a NO_MSG.  This means the client can clear its overflows. */
-       if (ev_mbox->ev_overflows || (flags & EVENT_NOMSG)) {
-               if (!BITMASK_IS_CLEAR(&ev_mbox->ev_bitmap, MAX_NR_EVENT))
-                       return TRUE;
-       }
-       return FALSE;
-}
-
 /* Clears the overflows, returning the number of overflows cleared. */
 unsigned int event_clear_overflows(struct event_queue *ev_q)
 {
@@ -189,14 +172,9 @@ static int handle_mbox(struct event_mbox *ev_mbox, unsigned int flags)
        int retval = 0;
        uint32_t vcoreid = vcore_id();
 
-       /* TODO: This may be unnecessary anymore.  All it does is save the effort of
-        * checking the bitmask, though if we send EVENT_NOMSG, we'll have to check
-        * the bitmask anyway (the flag means you could get bit events that aren't
-        * overflow. */
-       if (!event_activity(ev_mbox, flags))
-               return retval;
        /* Handle full messages.  Will deal with overflow and bits later. */
        retval = handle_mbox_msgs(ev_mbox);
+
        /* Race here with another core clearing overflows/bits.  Don't have more
         * than one vcore work on an mbox without being more careful of overflows
         * (as in, assume any overflow means all bits must be checked, since someone
index 022ee60..7dc164e 100644 (file)
@@ -23,7 +23,6 @@ void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags);
 void disable_kevent(unsigned int ev_type);
 
 /********* Event Handling / Reception ***********/
-bool event_activity(struct event_mbox *ev_mbox, int flags);
 unsigned int event_clear_overflows(struct event_queue *ev_q);
 unsigned int get_event_type(struct event_mbox *ev_mbox);