Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752689AbbHCCum (ORCPT ); Sun, 2 Aug 2015 22:50:42 -0400 Received: from ozlabs.org ([103.22.144.67]:48421 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752252AbbHCCuk (ORCPT ); Sun, 2 Aug 2015 22:50:40 -0400 From: Rusty Russell To: Thomas Gleixner , LKML Cc: x86@kernel.org, Jiang Liu , Peter Zijlstra , Bjorn Helgaas Subject: Re: [patch 2/7] x86/lguest: Do not setup unused irq vectors In-Reply-To: <20150802203609.302168886@linutronix.de> References: <20150802203427.110728870@linutronix.de> <20150802203609.302168886@linutronix.de> User-Agent: Notmuch/0.17 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu) Date: Mon, 03 Aug 2015 12:17:48 +0930 Message-ID: <87pp356qaz.fsf@rustcorp.com.au> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3578 Lines: 87 Thomas Gleixner 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 > Cc: Rusty Russell > --- > 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 [ 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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/