parlib: Have all processes listen for diagnostics
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 6 Jan 2017 21:06:56 +0000 (16:06 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 10 Jan 2017 00:01:40 +0000 (19:01 -0500)
Applications can register event handlers on this event ID, and people can
poke the event from the command line.

e.g., in some app:

 register_ev_handler(EV_FREE_APPLE_PIE, ev_handle_diag, NULL);

From the command line:

$ notify PID 9

And ev_handle_diag() will run on vcore 0 in VC context.

"Free apple pie" is an old joke.  You can have an event mean whatever you
want - it could even mean there is free pie somewhere.  Now applications
can explicitly add whatever handlers they want to this venerated ID.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/uthread.c

index 49bd56a..74de3d8 100644 (file)
@@ -233,6 +233,10 @@ void __attribute__((constructor)) uthread_lib_init(void)
        ros_errno_loc = __ros_errno_loc;
        ros_errstr_loc = __ros_errstr_loc;
        register_ev_handler(EV_EVENT, handle_ev_ev, 0);
+       /* Accept diagnostic events.  Other parts of the program/libraries can
+        * register handlers to run.  You can kick these with "notify PID 9". */
+       enable_kevent(EV_FREE_APPLE_PIE, 0, EVENT_IPI | EVENT_WAKEUP |
+                                           EVENT_SPAM_PUBLIC);
 }
 
 /* 2LSs shouldn't call uthread_vcore_entry directly */