From: ddugger@redhat.com <ddugger@redhat.com> Date: Fri, 26 Jun 2009 12:43:18 -0600 Subject: [xen] x86: fix IRQ problem on legacy hardware Message-id: 20090626184318.GA31054@sobek.n0ano.com O-Subject: Re: [RHEL5.4 PATCH V2] BZ 505491: Fix IRQ problem on legacy hardware Bugzilla: 505491 RH-Acked-by: Rik van Riel <riel@redhat.com> RH-Acked-by: Don Dutile <ddutile@redhat.com> RH-Acked-by: Prarit Bhargava <prarit@redhat.com> RH-Acked-by: Chris Lalancette <clalance@redhat.com> RH-Acked-by: Justin M. Forbes <jforbes@redhat.com> (Version 2 updated to fix booting problems on older platforms.) Fix a problem when booting on legacy hardware. When initializing the irq->vector relationship during boot, do not try to auto-assign a vector for legacy IRQ's, which have a fixed IRQ<->vector relationship. Upstream status: Being submitted Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=1864352 Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com> Signed-off-by: Don Dugger <donald.d.dugger@intel.com> Tested-by: Chris Lalancette <clalance@redhat.com> diff --git a/arch/x86/io_apic.c b/arch/x86/io_apic.c index 87ca431..d625aeb 100644 --- a/arch/x86/io_apic.c +++ b/arch/x86/io_apic.c @@ -692,6 +692,10 @@ int assign_irq_vector(int irq) spin_lock(&vector_lock); + if ((irq != AUTO_ASSIGN) && (irq_to_vector(irq) > 0)) { + spin_unlock(&vector_lock); + return irq_to_vector(irq); + } if ((irq != AUTO_ASSIGN) && (IO_APIC_VECTOR(irq) > 0)) { spin_unlock(&vector_lock); return IO_APIC_VECTOR(irq);