On Monday 11 December 2006 20:26, Shaohua Li wrote:
> In Stian's system, if link device is enabled in IOAPIC mode, pci device
> will connect to link device and link device connect to IOAPIC pin. That
> is the device's interrupt is decided by link's irq. If link device is
> disabled, pci device is connected to IOAPIC pin.
> There are two devices who share one link device in pic mode, but in
> IOAPIC mode, _PRT table reported one device connected to IOAPIC pin and
> the other connected to the link device. If the link device is enabled,
> the device connected to IOAPIC pin directly will break as _PRT reported
> interrupt for the device doesn't reflect the case link device is
> enabled. If we leave the link device disabled, the device which
> connected to the link device doesn't break. It appears the link device
> is just used to get an interrupt number instead of for real interrupt
> routing. So in this patch, if current irq model is IOAPIC, we will leave
> link device disabled and just use its active irq number.
>
> Signed-off-by: Shaohua Li<[EMAIL PROTECTED]>
>
> diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> index d53bd98..655bb49 100644
> --- a/drivers/acpi/pci_link.c
> +++ b/drivers/acpi/pci_link.c
> @@ -527,6 +527,10 @@ static int acpi_pci_link_allocate(struct
> int i;
>
>
> + if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC && link->irq.active) {
> + link->irq.initialized = 1;
> + return 0;
> + }
> if (link->irq.initialized) {
> if (link->refcnt == 0)
> /* This means the link is disabled but initialized */
Earlier I NAK'd this on the assertion that it would cause some devices to
not get interrupts.
I've now confirmed that assertion was correct.
Annforce2 board uses Link APC3 to connect
int-A of its PCI slot to the IOAPIC, and the link
is disabled by default:
ACPI: PCI Interrupt Link [APC3] (IRQs *18), disabled.
Before this patch, an e100 in that slot works:
ACPI: PCI Interrupt Link [APC3] enabled at IRQ 18
(and eth1 interface works properly)
And after this patch an e100 in that slot does not work:
(APC3 is not enabled, and interface does not come up)
Bringing up interface eth1:
Determining IP information for eth1...PING 192.168.0.1 (192.168.0.1) from
192.168.0.17 eth1: 56(84) bytes of data.
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2010ms
, pipe 3
failed.
[FAILED]
thanks,
-Len
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html