Re: [PATCH 1/2] dmar: fix fault interrupt setup

From: Suresh Siddha
Date: Tue Nov 30 2010 - 15:18:26 EST


On Tue, 2010-11-30 at 00:30 -0800, Kenji Kaneshige wrote:
> Fix the problem dmar fault event is not notified in x2apic cluster mode.
>
> In the current code, dmar fault event is configured before setting up
> the x86_cpu_to_logical_apicid percpu variable in x2apic cluster
> mode. Because of this, invalid apic ID is used for dmar fault
> interrupt and this cuases the problem.
>
> To fix the problem, do dmar fault event configuration after local apic
> setup (after end_local_APIC_setup()).
>
> Signed-off-by: Kenji Kaneshige <kaneshige.kenji@xxxxxxxxxxxxxx>
>
>
> ---
> arch/x86/kernel/apic/apic.c | 9 +++++++++
> arch/x86/kernel/apic/probe_64.c | 7 -------
> 2 files changed, 9 insertions(+), 7 deletions(-)
>
> Index: linux-next-20101125/arch/x86/kernel/apic/apic.c
> ===================================================================
> --- linux-next-20101125.orig/arch/x86/kernel/apic/apic.c
> +++ linux-next-20101125/arch/x86/kernel/apic/apic.c
> @@ -1745,6 +1745,15 @@ int __init APIC_init_uniprocessor(void)
>
> end_local_APIC_setup();
>
> +#ifdef CONFIG_INTR_REMAP
> + /*
> + * Now that local APIC setup is completed, configure the fault
> + * handling for interrupt remapping.
> + */
> + if (intr_remapping_enabled)
> + enable_drhd_fault_handling();
> +#endif

BTW, this is wrong. APIC_init_uniprocessor() gets called only for UP
kernel. I will move it to the end_local_APIC_setup()

> +
> #ifdef CONFIG_X86_IO_APIC
> if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
> setup_IO_APIC();
> Index: linux-next-20101125/arch/x86/kernel/apic/probe_64.c
> ===================================================================
> --- linux-next-20101125.orig/arch/x86/kernel/apic/probe_64.c
> +++ linux-next-20101125/arch/x86/kernel/apic/probe_64.c
> @@ -79,13 +79,6 @@ void __init default_setup_apic_routing(v
> /* need to update phys_pkg_id */
> apic->phys_pkg_id = apicid_phys_pkg_id;
> }
> -
> - /*
> - * Now that apic routing model is selected, configure the
> - * fault handling for intr remapping.
> - */
> - if (intr_remapping_enabled)
> - enable_drhd_fault_handling();
> }
>
> /* Same for both flat and physical. */
>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/