thomas schorpp wrote:
James Bottomley wrote:
On Sat, 2007-03-24 at 01:51 +0100, thomas schorpp wrote:
no. so the pci layer reports wrong start:
nonsense. it succeeds, confused function return with the error flag:
// u_long start;
// u_long start = 0xFFEFF000;
u_long start = 0x30000000;
int error;
struct resource* ret1;
error = 0;
// start = pci_resource_start(ahc->dev_softc, 1);
if (start != 0) {
*bus_addr = start;
if ((ret1 = request_mem_region(start, 0x1000,
"aic7xxx")) == 0)
You can't do this. The pci_resource_start is getting the address of
something called a Bus Address Register (BAR) it says in physical
address space where the card is responding ... you can't simply set that
to a random value.
The problem you seem to have is that your system is reporting a BAR
beyond 32 bits (4GB) which the card physically can't use. This could be
because of a BIOS misconfiguration or because there's a bug in the PCI
subsystem somewhere.
James
understood. waiting for LKML answers... meanwhile i found harder reason
for a possible bounds problem with the driver code on x86_64:
if i do:
static int
ahc_linux_pci_reserve_mem_region(struct ahc_softc *ahc,
u_long *bus_addr,
uint8_t __iomem **maddr)
{
// u_long start;
uint32_t start;
i get no free warning of "*nonexistant* resource" (it cant be
nonexistant, cause it was definitely something mapped):
tom1:/usr/src/linux# dmesg |grep -i free
Freeing unused kernel memory: 208k freed
with u_long type start i get it:
Mar 24 03:41:47 localhost kernel: Trying to free nonexistent resource
<00000000fffff000-00000000ffffffff>
investigating further...
-
hmm well i dont get the free warning cause
release_mem_region(ahc->platform_data->mem_busaddr,
0x1000);
isnt called, the hack fails
error = ahc_linux_pci_reserve_mem_region(ahc, &base, &maddr);
if (error == 0) {
ok, so no bounds issue in the driver.
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html