rem: dprintf("install_interrupt_handler: vector %ld\n", vector);
context: long install_interrupt_handler(long vector, interrupt_handler handler,                               void* data){	struct io_handler *io = NULL; 	int state;	dprintf("install_interrupt_handler: vector %ld\n", vector);		/* find the chain of handlers for this irq.	 * NB there can be multiple handlers for the same IRQ, especially for	 * PCI drivers. Where we have multiple handlers we will call each in turn	 * until one returns a value other than B_UNHANDLED_INTERRUPT.	 */	io = (struct io_handler *)kmalloc(sizeof(struct io_handler)); 	if (io == NULL) 		return ENOMEM; 	io->func = handler; 	io->data = data; 	/* Make sure our list is init'd or bad things will happen */	if (io_vectors[vector].handler_list.next == NULL) {		io_vectors[vector].handler_list.next = &io_vectors[vector].handler_list;		io_vectors[vector].handler_list.prev = &io_vectors[vector].handler_list;	}		/* Disable the interrupts, get the spinlock for this irq only	 * and then insert the handler */	state = int_disable_interrupts();	acquire_spinlock(&io_vectors[vector].vector_lock); 	insque(io, &io_vectors[vector].handler_list);	release_spinlock(&io_vectors[vector].vector_lock); 	int_restore_interrupts(state); 	return 0;}