Commit 745caf71 authored by Petr Vandrovec's avatar Petr Vandrovec Committed by James Bottomley

[SCSI] Pass proper device from BusLogic to SCSI layer

While trying to get SUSE's SLES9 working on system with more than 4GB we've
noticed that SCSI layer happilly passes addresses over 4GB to the buslogic
driver, which is quite a big problem as buslogic can generate only 32bit
busmastering cycles.

Fortunately in the current kernels this problem does not exist anymore as
SCSI layer now assumes 4GB capable device by default, but it is still good
idea to pass correct device structure to the SCSI layer.  If nothing else,
/sys/block/sda/device now points to
/sys/devices/pci0000:00/0000:00:10.0/host0/...  instead of
/sys/devices/platform/host0/...  like it did in the past.

Change does nothing for ISA based BusLogic adapters, they'll still end
under platform (and they are probably broken for long time as I do not see
anything forcing ISA 16MB limit for them).
Signed-off-by: default avatarPetr Vandrovec <petr@vmware.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent cd2f1e69
...@@ -2216,6 +2216,7 @@ static int __init BusLogic_init(void) ...@@ -2216,6 +2216,7 @@ static int __init BusLogic_init(void)
HostAdapter->PCI_Address = ProbeInfo->PCI_Address; HostAdapter->PCI_Address = ProbeInfo->PCI_Address;
HostAdapter->Bus = ProbeInfo->Bus; HostAdapter->Bus = ProbeInfo->Bus;
HostAdapter->Device = ProbeInfo->Device; HostAdapter->Device = ProbeInfo->Device;
HostAdapter->PCI_Device = ProbeInfo->PCI_Device;
HostAdapter->IRQ_Channel = ProbeInfo->IRQ_Channel; HostAdapter->IRQ_Channel = ProbeInfo->IRQ_Channel;
HostAdapter->AddressCount = BusLogic_HostAdapterAddressCount[HostAdapter->HostAdapterType]; HostAdapter->AddressCount = BusLogic_HostAdapterAddressCount[HostAdapter->HostAdapterType];
/* /*
...@@ -2296,7 +2297,7 @@ static int __init BusLogic_init(void) ...@@ -2296,7 +2297,7 @@ static int __init BusLogic_init(void)
scsi_host_put(Host); scsi_host_put(Host);
} else { } else {
BusLogic_InitializeHostStructure(HostAdapter, Host); BusLogic_InitializeHostStructure(HostAdapter, Host);
scsi_add_host(Host, NULL); scsi_add_host(Host, HostAdapter->PCI_Device ? &HostAdapter->PCI_Device->dev : NULL);
scsi_scan_host(Host); scsi_scan_host(Host);
BusLogicHostAdapterCount++; BusLogicHostAdapterCount++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment