• Yinghai Lu's avatar
    EISA/PCI: Fix bus res reference · 2cfda637
    Yinghai Lu authored
    Matthew found that 3.8.3 is having problems with an old (ancient)
    PCI-to-EISA bridge, the Intel 82375. It worked with the 3.2 kernel.
    He identified the 82375, but doesn't assign the struct resource *res
    pointer inside the struct eisa_root_device, and panics.
    
    pci_eisa_init() was using bus->resource[] directly instead of
    pci_bus_resource_n().  The bus->resource[] array is a PCI-internal
    implementation detail, and after commit 45ca9e97 (PCI: add helpers for
    building PCI bus resource lists) and commit 0efd5aab (PCI: add struct
    pci_host_bridge_window with CPU/bus address offset), bus->resource[] is not
    used for PCI root buses any more.
    
    The 82375 is a subtractive-decode PCI device, so handle it the same
    way we handle PCI-PCI bridges in subtractive-decode mode in
    pci_read_bridge_bases().
    
    [bhelgaas: changelog]
    Reported-by: default avatarMatthew Whitehead <mwhitehe@redhat.com>
    Tested-by: default avatarMatthew Whitehead <mwhitehe@redhat.com>
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org	# v3.3+
    2cfda637
pci_eisa.c 2.33 KB