Re: [PATCH 2.6.25-rc6] sata_promise: fix hardreset hotplug quirk

From: Tejun Heo
Date: Sun Mar 23 2008 - 08:07:47 EST


Mikael Pettersson wrote:
> > Actually, this is common to many SATA controllers. Lots of them raise
> > PHY event or hotplug interrupt during COMRESET and they all plug PHY
> > events from ->freeze.
>
> Hmm, no I didn't know that. It's still undocumented, but perhaps
> shouldn't be called a "quirk" if it's as common as you say.

Yeap, it's common behavior. "quirk" would be a bit unfair to promise. :-)

> > > Although SATA hotplug status and control is per-port, it resides in
> > > a single register shared by all ports. Therefore accesses to it must
> > > be serialised: the controller's host->lock is used for that. The
> > > interrupt handler is also adjusted so its hotplug register accesses
> > > are inside the region protected by host->lock.
> >
> > Hmmm... This is supposed to be handled by setting ap->lock appropriately
> > and ap->lock already is initialized to &host->lock, so sticking with
> > ap->lock is the right thing to do.
>
> I'll check this. The code relies on the lock being shared by all ports,
> so at a minimum it will need a comment stating that requirement.

That's the default assumption all other LLDs depend on. I agree it
needs documentation.

> > ->freeze() is called with ap->lock held, trying to lock host->lock
> > inside pdc_sata_enable/disable_hotplug() will result in deadlock. Have
> > you tested w/ SMP configuration or spinlock debugging turned on?
>
> No, I'll do that and fix whatever damage occurs.

Thanks.

--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/