Thomas Gleixner <t...@linutronix.de> writes: > No point in assigning the interrupt vectors if there is no interrupt > chip installed. Move it to lguest_setup_irq(). > > Signed-off-by: Thomas Gleixner <t...@linutronix.de> > Cc: Rusty Russell <ru...@rustcorp.com.au> > --- > arch/x86/lguest/boot.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > Index: tip/arch/x86/lguest/boot.c > =================================================================== > --- tip.orig/arch/x86/lguest/boot.c > +++ tip/arch/x86/lguest/boot.c > @@ -855,17 +855,13 @@ static void lguest_disable_irq(struct pc > > /* > * This sets up the Interrupt Descriptor Table (IDT) entry for each hardware > - * interrupt (except 128, which is used for system calls), and then tells the > - * Linux infrastructure that each interrupt is controlled by our level-based > - * lguest interrupt controller. > + * interrupt (except 128, which is used for system calls). > */ > static void __init lguest_init_IRQ(void) > { > unsigned int i; > > for (i = FIRST_EXTERNAL_VECTOR; i < FIRST_SYSTEM_VECTOR; i++) { > - /* Some systems map "vectors" to interrupts weirdly. Not us! */ > - __this_cpu_write(vector_irq[i], i - FIRST_EXTERNAL_VECTOR); > if (i != IA32_SYSCALL_VECTOR) > set_intr_gate(i, irq_entries_start + > 8 * (i - FIRST_EXTERNAL_VECTOR)); > @@ -893,8 +889,15 @@ int lguest_setup_irq(unsigned int irq) > if (err < 0 && err != -EEXIST) > return err; > > + /* > + * Tell the Linux infrastructure that the interrupt is > + * controlled by our level-based lguest interrupt controller. > + */ > irq_set_chip_and_handler_name(irq, &lguest_irq_controller, > handle_level_irq, "level"); > + > + /* Some systems map "vectors" to interrupts weirdly. Not us! */ > + __this_cpu_write(vector_irq[FIRST_EXTERNAL_VECTOR + irq, irq);
Missing ]. Then it doesn't work: [ 3.832028] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.832028] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.832028] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.839983] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.840026] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.840026] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.840026] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.848349] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.848349] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 3.848349] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 4.056027] brd: module loaded [ 4.156025] loop: module loaded <hit return> [ 17.712169] do_IRQ: 4 callbacks suppressed [ 17.712169] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.720462] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.720462] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.729129] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.729129] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.736523] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.736523] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.744288] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.744288] do_IRQ: 0.33 No irq handler for vector (irq -1) [ 17.751889] do_IRQ: 0.33 No irq handler for vector (irq -1) You broke interrupts :( Cheers, Rusty. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/