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...
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to