Re: linux-next Regression: Unable to locate IOAPIC

From: Yinghai Lu
Date: Sat Jun 14 2008 - 04:26:55 EST


On Sat, Jun 14, 2008 at 12:07 AM, Alexey Starikovskiy
<aystarik@xxxxxxxxx> wrote:
> Hi Ingo, Yinghai,
>
> It looks like the code introduced by
> 2944e16b25e7fb8b5ee0dd9dc7197a0f9e523cfd
> is causing this problem. At least it is new between -rc5 (working) and
> linux-next (not working).
>
> Regards,
> Alex.
>
>
> Daniel Exner wrote:
>>
>> Hi all,
>>
>> Alexey Starikovskiy wrote:
>>
>>>
>>> Hi Daniel,
>>>
>>> Could you please provide full dmesg and acpidump outputs?
>>>
>>
>> I attached dmesg and config , both from working 2.6.26-rc5 with git-acpi
>> patch below and from linux-next snapshot 20080604.
>> I also attached acpidump that was done while using stock 2.6.25-fw5 from
>> my distro. (But I think that doesnt matter, at least it shouldn't ;)
>>
>>
>>>
>>> Daniel Exner wrote:
>>>
>>>>
>>>> Andrew Morton wrote:
>>>>
>>>>>
>>>>> On Fri, 6 Jun 2008 19:30:28 +0200 Daniel Exner <dex@xxxxxxxxxxxxxx>
>>>>>
>>
>> wrote:
>>
>>>>>>
>>>>>> Andrew Morton wrote:
>>>>>>
>>>>>>>
>>>>>>> (cc linux-acpi)
>>>>>>>
>>>>>>> On Thu, 5 Jun 2008 11:00:12 +0200 Daniel Exner <dex@xxxxxxxxxxxxxx>
>>>>>>>
>>>>
>>>> wrote:
>>>>
>>>>>>>>
>>>>>>>> Hi!
>>>>>>>>
>>>>>>>> (Added myself to CC, because I'm not subscribed)
>>>>>>>>
>>>>>>>> with linux-next snapshot 20080604 my Laptop morphes into sitting
>>>>>>>> duck
>>>>>>>> and I think this is due to this:
>>>>>>>>
>>>>>>>
>>>>>>> I assume 2.6.26-rc5 is OK?
>>>>>>>
>>>>>>
>>>>>> Indeed.. just tried it with (nearly) the same config: no unable to
>>>>>> locate IOAPIC
>>>>>>
>>>>>> Will try todays next snapshot above -rc5 now.
>>>>>>
>>>>>
>>>>> OK, thanks.
>>>>>
>>>>> It would be great if you could test 2.6.26-rc5 plus
>>>>> http://userweb.kernel.org/~akpm/git-acpi.patch. That'll allow us to
>>>>> confirm that the regression is due to changes in the acpi tree.
>>>>>
>>>>
>>>> Sorry for the delay.. real-life you know ;)
>>>>
>>>> I guess you'd expect me to confirm the behavior on rc5 with this patch
>>>> aplied, but .. well this Kernel works!
>>>>
>>
>> To clarify myself:
>> 2.6.25.5: --> relatively fast no IOAPIC Errors in dmesg
>> 2.6.26-rc5: --> relatively no IOAPIC Errors in dmesg
>> 2.6.26-rc5 + git-acpi Patch: --> relatively no IOAPIC Errors in dmesg
>> 2.6.26-rc5 + linux-next snapshot 20080604 --> even slower than before my
>> ide Patch many "unable to locate IOAPIC" Errors
>>
>>
>> So I think the problem lies not in the acpi tree but somewhre else.
>>
>> Is it possible to tell git to explicitly _exclude_ a specific tree while
>> bisecting?

can you check if the attached patch fix the problem?
it will not check entries before MP_intsrc_info...

YH
[PATCH] x86: keep MP_intsrc_info untouched if not update mptable

use enable_update_mptable to decide if need check before add mp_irqs array

Signed-off-by: Yinghai Lu <yhlu.kernel@xxxxxxxxx>

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index f1d24bd..d2a4768 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1170,6 +1170,9 @@ int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
struct mpc_config_intsrc intsrc;
int ioapic;

+ if (!enable_update_mptable)
+ return 0;
+
/* print the entry should happen on mptable identically */
intsrc.mpc_type = MP_INTSRC;
intsrc.mpc_irqtype = mp_INT;
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
index 7ac1b68..1b041a5 100644
--- a/arch/x86/kernel/mpparse.c
+++ b/arch/x86/kernel/mpparse.c
@@ -34,6 +34,8 @@
#include <mach_mpparse.h>
#endif

+int enable_update_mptable;
+
/*
* Checksum an MP configuration block.
*/
@@ -295,10 +297,11 @@ void MP_intsrc_info(struct mpc_config_intsrc *m)

print_MP_intsrc_info(m);

- for (i = 0; i < mp_irq_entries; i++) {
- if (!mp_irq_mpc_intsrc_cmp(&mp_irqs[i], m))
- return;
- }
+ if (enable_update_mptable)
+ for (i = 0; i < mp_irq_entries; i++) {
+ if (!mp_irq_mpc_intsrc_cmp(&mp_irqs[i], m))
+ return;
+ }

assign_to_mp_irq(m, &mp_irqs[mp_irq_entries]);
if (++mp_irq_entries == MAX_IRQ_SOURCES)
@@ -1116,8 +1119,6 @@ out:
return 0;
}

-int __initdata enable_update_mptable;
-
static int __init update_mptable_setup(char *str)
{
enable_update_mptable = 1;
diff --git a/include/asm-x86/mpspec.h b/include/asm-x86/mpspec.h
index b8ba374..f48dbca 100644
--- a/include/asm-x86/mpspec.h
+++ b/include/asm-x86/mpspec.h
@@ -61,6 +61,7 @@ extern void mp_config_acpi_legacy_irqs(void);
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
extern void MP_intsrc_info(struct mpc_config_intsrc *m);
#ifdef CONFIG_X86_IO_APIC
+extern int enable_update_mptable;
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
u32 gsi, int triggering, int polarity);
#else