Hi,

> How come ap->lock can get set to bogus address?  Can you please printk
> &host->lock and ap->lock after ata_host_alloc() without the patch?

Here is the output of printk.
Strangely, without the patch, the pata_pcmcia problem happens again.


ata_piix 0000:00:1f.1: version 2.12
ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11
ACPI: PCI Interrupt 0000:00:1f.1[A] -> Link [LNKC] -> GSI 11 (level, low) -> 
IRQ 11
&host->lock = d6c288b4
ap->lock = d6c288b4
ap->lock = d6c288b4
PCI: Setting latency timer of device 0000:00:1f.1 to 64
scsi0 : ata_piix
scsi1 : ata_piix
....

pcmcia: registering new device pcmcia1.0
&host->lock = d70ee534
ap->lock = d70ee534
scsi2 : pata_pcmcia


        host = devres_alloc(ata_host_release, sz, GFP_KERNEL);
        if (!host)
                goto err_out;

        devres_add(dev, host);
        dev_set_drvdata(dev, host);

        spin_lock_init(&host->lock);
        printk("&host->lock = %x\n", &host->lock);
        host->dev = dev;
        host->n_ports = max_ports;

        /* allocate ports bound to this host */
        for (i = 0; i < max_ports; i++) {
                struct ata_port *ap;

                ap = ata_port_alloc(host);
                if (!ap)
                        goto err_out;

                ap->port_no = i;
                /*
                ap->lock = &ap->__lock;
                spin_lock_init(ap->lock);
                */
                printk("ap->lock = %x\n", ap->lock);
                host->ports[i] = ap;
        }

Best Regards
Komuro


_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia

Reply via email to