Hello, Komuro. Komuro wrote: > Hi, Tejun > > The patch below fixes the pata_pcmcia problem. > > I think the ap->lock points to bogus address. > > Any comment? > > --- linux-2.6.26-rc8/drivers/ata/libata-core.c.orig 2008-07-06 10:05:46.000000000 +0900 > +++ linux-2.6.26-rc8/drivers/ata/libata-core.c 2008-07-06 10:09:16.000000000 +0900 > @@ -5304,6 +5304,8 @@ struct ata_host *ata_host_alloc(struct d > goto err_out; > > ap->port_no = i; > + ap->lock = &ap->__lock; > + spin_lock_init(ap->lock); > host->ports[i] = ap; > } > > --- linux-2.6.26-rc8/include/linux/libata.h.orig 2008-07-06 10:03:54.000000000 +0900 > +++ linux-2.6.26-rc8/include/linux/libata.h 2008-07-06 10:04:35.000000000 +0900 > @@ -639,6 +639,7 @@ struct ata_port { > struct Scsi_Host *scsi_host; /* our co-allocated scsi host */ > struct ata_port_operations *ops; > spinlock_t *lock; > + spinlock_t __lock; > unsigned long flags; /* ATA_FLAG_xxx */ > unsigned int pflags; /* ATA_PFLAG_xxx */ > unsigned int print_id; /* user visible unique port ID */ Hmmm... Strange. From ata_port_alloc(), struct ata_port *ata_port_alloc(struct ata_host *host) { struct ata_port *ap; DPRINTK("ENTER\n"); ap = kzalloc(sizeof(*ap), GFP_KERNEL); if (!ap) return NULL; ap->pflags |= ATA_PFLAG_INITIALIZING; ap->lock = &host->lock; ^^^^^^^^^^^^^^^^^^^^^^^ 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? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html