Subject: Re: [PATCH]: [MPC5200] (v2) Add ATA DMA support

From: Grant Likely <[email-masked]>
Date: Thu, 3 Jul 2008 21:20:28 -0600

On Fri, Jul 04, 2008 at 09:47:03AM +1000, Benjamin Herrenschmidt wrote:
> On Thu, 2008-07-03 at 16:35 +0100, Tim Yamin wrote:
> > >> +static void
> > >> +mpc52xx_bmdma_start(struct ata_queued_cmd *qc)
> > >> +{
> > >> +     struct ata_port *ap = qc->ap;
> > >> +     struct mpc52xx_ata_priv *priv = ap->host->private_data;
> > >> +
> > >> +     /* LocalBus lock */
> > >> +     while (test_and_set_bit(0, &pata_mpc52xx_ata_dma_lock) != 0)
> > >> +             ;
> > >
> > > Need to be able to bail on timeout.
> > 
> > A deadlock can't occur within the PATA driver because you won't have
> > two DMA requests happening at once, so there is no point in adding a
> > timeout. And even if you do have a timeout, you'd have to drop the I/O
> > request somehow, so it's not really a good idea. If anything else
> > needs to touch the DMA lock, it should do so in a sensible fashion...
> 
> But why a hand-coded lock with bitops ? Why not a real spinlock then ?
> The later is more efficient anyway.

Umm, yeah.... (don't know why I didn't clue into that).  This definitely
should be a spinlock.

g.