lkml.org 
[lkml]   [2003]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH][2.6] fix problems with pci=noacpi
    Date
    On Sunday 10 August 2003 01:24, Joonas Koivunen wrote:
    > On Saturday 09 August 2003 19:02, Thomas Schlichter wrote:
    ~~ snip ~~
    > > If you want to use ACPI while this BIOS bug is not fixed you may use the
    > > attached patch and boot with pci=noacpi. Without the patch this doesn't
    > > work for me here...
    >
    > Why isn't this patch in the mainstream kernel? There are many other
    > chipset/bios fixes in the kernel.. This would save many
    > reboot/recompilings/worries until or if ever epox does something with the
    > bios.

    Well, I didn't push it to Andrew or Linus yet, because it changes parts of the
    semantics of 'pci=noacpi'. But currently I do think the changed way is more
    correct, so perhaps Andrew may give it a try in the next -mm ??

    If so, people who had problems with 'pci=noacpi' and use 'acpi=off' instead
    should give it a try again...

    > The patch works nicely. Though I did apply it manually to -test3 :) But it
    > works.

    I attached the patch again, now it also changes the indentation correctly and
    simplifies the final setting of smp_found_config and the call of
    clustered_apic_check(). It applies to 2.6.0-test3-mm1.

    Best regards
    Thomas Schlichter
    --- linux-2.6.0-test3-mm1/arch/i386/kernel/acpi/boot.c.orig Sun Aug 10 14:16:32 2003
    +++ linux-2.6.0-test3-mm1/arch/i386/kernel/acpi/boot.c Sun Aug 10 17:11:13 2003
    @@ -39,6 +39,7 @@
    #define PREFIX "ACPI: "

    extern int acpi_disabled;
    +extern int acpi_ioapic_disabled;

    /* --------------------------------------------------------------------------
    Boot-time Configuration
    @@ -386,46 +387,51 @@
    * --------
    */

    + if (!acpi_ioapic_disabled) {
    +
    + result = acpi_table_parse_madt(ACPI_MADT_IOAPIC,
    + acpi_parse_ioapic);
    + if (!result) {
    + printk(KERN_ERR PREFIX "No IOAPIC entries present\n");
    + return -ENODEV;
    + }
    + else if (result < 0) {
    + printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n");
    + return result;
    + }
    - result = acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic);
    - if (!result) {
    - printk(KERN_ERR PREFIX "No IOAPIC entries present\n");
    - return -ENODEV;
    - }
    - else if (result < 0) {
    - printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n");
    - return result;
    - }

    + /* Build a default routing table for legacy (ISA) interrupts. */
    + mp_config_acpi_legacy_irqs();
    - /* Build a default routing table for legacy (ISA) interrupts. */
    - mp_config_acpi_legacy_irqs();

    + result = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR,
    + acpi_parse_int_src_ovr);
    + if (result < 0) {
    + printk(KERN_ERR PREFIX
    + "Error parsing interrupt source overrides entry\n");
    + /* TBD: Cleanup to allow fallback to MPS */
    + return result;
    + }
    - result = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr);
    - if (result < 0) {
    - printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n");
    - /* TBD: Cleanup to allow fallback to MPS */
    - return result;
    - }

    + result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC,
    + acpi_parse_nmi_src);
    + if (result < 0) {
    + printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
    + /* TBD: Cleanup to allow fallback to MPS */
    + return result;
    + }
    - result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src);
    - if (result < 0) {
    - printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
    - /* TBD: Cleanup to allow fallback to MPS */
    - return result;
    - }

    + acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
    + acpi_ioapic = 1;
    - acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
    -
    - acpi_ioapic = 1;
    -
    -#endif /*!CONFIG_ACPI_HT_ONLY*/
    -#endif /*CONFIG_X86_IO_APIC*/

    #ifdef CONFIG_X86_LOCAL_APIC
    - if (acpi_lapic && acpi_ioapic) {
    smp_found_config = 1;
    clustered_apic_check();
    - }
    #endif
    +
    + }
    +
    +#endif /*!CONFIG_ACPI_HT_ONLY*/
    +#endif /*CONFIG_X86_IO_APIC*/

    return 0;
    }
    --- linux-2.6.0-test3-mm1/arch/i386/kernel/setup.c.orig Sun Aug 10 14:17:08 2003
    +++ linux-2.6.0-test3-mm1/arch/i386/kernel/setup.c Sun Aug 10 17:00:04 2003
    @@ -69,6 +69,8 @@
    #endif
    EXPORT_SYMBOL(acpi_disabled);

    +int acpi_ioapic_disabled = 0;
    +
    int MCA_bus;
    /* for MCA, but anyone else can use it if they want */
    unsigned int machine_id;
    @@ -523,6 +525,10 @@
    /* "acpismp=force" turns on ACPI again */
    if (c == ' ' && !memcmp(from, "acpismp=force", 13))
    acpi_disabled = 0;
    +
    + /* "pci=noacpi" disables ACPI table parsing for interrupt routing */
    + if (c == ' ' && !memcmp(from, "pci=noacpi", 10))
    + acpi_ioapic_disabled = 1;

    /*
    * highmem=size forces highmem to be exactly 'size' bytes.
    \
     
     \ /
      Last update: 2005-03-22 13:47    [W:0.028 / U:120.440 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site