• Kochi Takayoshi's avatar
    [PATCH] ia64: Interrupt polarity fix · 9072b37e
    Kochi Takayoshi authored
    It seems that acpi_register_intr (in arch/ia64/kernel/acpi.c)
    takes an interrupt polarity/trigger in opposite way.
    Attached patch fixes this.  Please apply.
    
    drivers/acpi/resource/rsirq.c decodes ACPI extended irq
    resource and stores in edge_level and active_high_low members
    of a structure (BTW, I think the names of these members
    are source of confusion ;).
    
    And this logic in acpi.c inverts both polarity and trigger.
    
    vector = iosapic_register_intr(gsi,
            polarity ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
            mode ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
    
           ACPI -> rsirq.c -> serial.c -> acpi.c            -> iosapic.c
    High      0         0           0      IOSAPIC_POL_LOW
    Low       1         1           1      IOSAPIC_POL_HIGH
    Edge      1         0           0      IOSAPIC_LEVEL
    Level     0         1           1      IOSAPIC_EDGE
    
    As ACPI_ACTIVE_{HIGH,LOW} and ACPI_{LEVEL,EDGE}_SENSITIVE are
    defined in acpi subsystem, it should be safer to use these symbols.
    9072b37e
acpi.c 18.4 KB