void mutex_unlock( struct mutex *m ) { interrupt_block(); m->locked=0; process_wakeup(&m->waitqueue); interrupt_unblock(); }
void interrupt_init() { int i; pic_init(32, 40); for (i = 32; i < 48; i++) { interrupt_disable(i); interrupt_acknowledge(i); } for (i = 0; i < 32; i++) { interrupt_handler_table[i] = unknown_exception; interrupt_spurious[i] = 0; interrupt_count[i] = 0; } for (i = 32; i < 48; i++) { interrupt_handler_table[i] = unknown_hardware; interrupt_spurious[i] = 0; interrupt_count[i] = 0; } // Wire vector index 14 to pagefault handler interrupt_handler_table[14] = exception_handle_pagefault; interrupt_unblock(); console_printf("interrupt: ready\n"); }
void mutex_lock( struct mutex *m ) { interrupt_block(); while(m->locked) { process_wait(&m->waitqueue); interrupt_block(); } m->locked=1; interrupt_unblock(); }