[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Bugfix] x86/apic: Fix xen IRQ allocation failure caused by commit b81975eade8c



On Wed, Jan 07, 2015 at 02:13:49PM +0800, Jiang Liu wrote:
> Commit b81975eade8c ("x86, irq: Clean up irqdomain transition code")
> breaks xen IRQ allocation because xen_smp_prepare_cpus() doesn't invoke
> setup_IO_APIC(), so no irqdomains created for IOAPICs and
> mp_map_pin_to_irq() fails at the very beginning.
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -2369,31 +2369,29 @@ static void ioapic_destroy_irqdomain(int idx)
>       ioapics[idx].pin_info = NULL;
>  }
>  
> -void __init setup_IO_APIC(void)
> +void __init setup_IO_APIC(bool xen_smp)
>  {
>       int ioapic;
>  
> -     /*
> -      * calling enable_IO_APIC() is moved to setup_local_APIC for BP
> -      */
> -     io_apic_irqs = nr_legacy_irqs() ? ~PIC_IRQS : ~0UL;
> +     if (!xen_smp) {
> +             apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n");
> +             io_apic_irqs = nr_legacy_irqs() ? ~PIC_IRQS : ~0UL;
> +
> +             /* Set up IO-APIC IRQ routing. */
> +             x86_init.mpparse.setup_ioapic_ids();
> +             sync_Arb_IDs();
> +     }


Is there a specific reason that this cannot run in all cases?

What I am asking is why are we doing a special case here? The description
at the top implied that we were just missing an call to
setup_IO_APIC.. 

>  
> -     apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n");
>       for_each_ioapic(ioapic)
>               BUG_ON(mp_irqdomain_create(ioapic));
> -
> -     /*
> -         * Set up IO-APIC IRQ routing.
> -         */
> -     x86_init.mpparse.setup_ioapic_ids();
> -
> -     sync_Arb_IDs();
>       setup_IO_APIC_irqs();
> -     init_IO_APIC_traps();
> -     if (nr_legacy_irqs())
> -             check_timer();
> -
>       ioapic_initialized = 1;
> +
> +     if (!xen_smp) {
> +             init_IO_APIC_traps();
> +             if (nr_legacy_irqs())
> +                     check_timer();
> +     }
>  }
>  
>  /*
> diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
> index 4c071aeb8417..7eb0283901fa 100644
> --- a/arch/x86/xen/smp.c
> +++ b/arch/x86/xen/smp.c
> @@ -326,7 +326,10 @@ static void __init xen_smp_prepare_cpus(unsigned int 
> max_cpus)
>  
>               xen_raw_printk(m);
>               panic(m);
> +     } else {
> +             setup_IO_APIC(true);
>       }
> +
>       xen_init_lock_cpu(0);
>  
>       smp_store_boot_cpu_info();
> -- 
> 1.7.10.4
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.