static void ser_dump_vfs() { /* Notify VFS it has to generate stack traces. Kernel can't do that as * it's not aware of user space threads. */ mini_notify(proc_addr(KERNEL), VFS_PROC_NR); }
/*===========================================================================* * generic_handler * *===========================================================================*/ static int generic_handler(irq_hook_t * hook) { /* This function handles hardware interrupt in a simple and generic way. All * interrupts are transformed into messages to a driver. The IRQ line will be * reenabled if the policy says so. */ int proc_nr; /* As a side-effect, the interrupt handler gathers random information by * timestamping the interrupt events. This is used for /dev/random. */ get_randomness(&krandom, hook->irq); /* Check if the handler is still alive. * If it's dead, this should never happen, as processes that die * automatically get their interrupt hooks unhooked. */ if(!isokendpt(hook->proc_nr_e, &proc_nr)) panic("invalid interrupt handler: %d", hook->proc_nr_e); /* Add a bit for this interrupt to the process' pending interrupts. When * sending the notification message, this bit map will be magically set * as an argument. */ priv(proc_addr(proc_nr))->s_int_pending |= (1 << hook->notify_id); /* Build notification message and return. */ mini_notify(proc_addr(HARDWARE), hook->proc_nr_e); return(hook->policy & IRQ_REENABLE); }
/*===========================================================================* * cause_alarm * *===========================================================================*/ static void cause_alarm(timer_t *tp) { /* Routine called if a timer goes off and the process requested a synchronous * alarm. The process number is stored in timer argument 'ta_int'. Notify that * process with a notification message from CLOCK. */ endpoint_t proc_nr_e = tmr_arg(tp)->ta_int; /* get process number */ mini_notify(proc_addr(CLOCK), proc_nr_e); /* notify process */ }