From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
To: albertl@mail.com
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
Linux IDE <linux-ide@vger.kernel.org>,
"Adam W. Hawks" <awhawks@us.ibm.com>
Subject: Re: [PATCH 2/2] ide: clear bmdma status in ide_intr()
Date: Wed, 24 Jan 2007 16:04:47 +0300 [thread overview]
Message-ID: <45B7596F.6080504@ru.mvista.com> (raw)
In-Reply-To: <45B6D5A7.6080700@tw.ibm.com>
Hello.
Albert Lee wrote:
> patch 2/2:
> Do the dma status clearing in ide_intr() and add a new hwif->ide_dma_clear_irq such that LLDD could override it.
> Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
> ---
> Tested ok on ICH4 and pdc20275. Not sure if this would have bad effect for other adapters.
> Patch against 2.6.20-rc5, for your review, thanks.
> diff -Nrup 01_remove_from_ide_cd/drivers/ide/ide-dma.c 02_add_to_ide_intr/drivers/ide/ide-dma.c
> --- 01_remove_from_ide_cd/drivers/ide/ide-dma.c 2006-11-30 05:57:37.000000000 +0800
> +++ 02_add_to_ide_intr/drivers/ide/ide-dma.c 2007-01-24 11:07:58.000000000 +0800
> @@ -650,6 +650,22 @@ static int __ide_dma_test_irq(ide_drive_
> drive->name, __FUNCTION__);
> return 0;
> }
> +
> +/* returns 1 on error, 0 otherwise */
Why? Do you check the result?
> +int __ide_dma_clear_irq(ide_drive_t *drive)
> +{
> + ide_hwif_t *hwif = HWIF(drive);
> + u8 dma_stat;
> +
> + /* clear the INTR & ERROR bits */
> + if (hwif->dma_status) {
hwif->dma_status should always be set, else ide-dma.c just won't work. The
check seems superfluous.
> + dma_stat = hwif->INB(hwif->dma_status);
> + /* Should we force the bit as well ? */
Good idea.
> + hwif->OUTB(dma_stat, hwif->dma_status);
I'm afraid this would break __ide_dma_end() function which tests the error
conditions and returns failure if (dma_stat & 7) != 4...
> + }
> +
> + return 0;
> +}
> #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
>
> int __ide_dma_bad_drive (ide_drive_t *drive)
> diff -Nrup 01_remove_from_ide_cd/drivers/ide/ide-io.c 02_add_to_ide_intr/drivers/ide/ide-io.c
> --- 01_remove_from_ide_cd/drivers/ide/ide-io.c 2006-11-30 05:57:37.000000000 +0800
> +++ 02_add_to_ide_intr/drivers/ide/ide-io.c 2007-01-24 11:21:41.000000000 +0800
> @@ -1644,6 +1644,18 @@ irqreturn_t ide_intr (int irq, void *dev
> }
> hwgroup->handler = NULL;
> del_timer(&hwgroup->timer);
> +
> + /* Some controllers might set DMA INTR no matter DMA or PIO;
> + * bmdma status might need to be cleared even for
> + * PIO interrupts to prevent spurious irq or irq lost.
> + */
Either "being lost" or "loss". Sorry for grammar nitpicking. :-)
> + if (hwif->ide_dma_clear_irq && !(hwif->dma))
> + /* ide_dma_end() needs bmdma status for error checking.
> + * So, skip clearing bmdma status here and leave it
> + * to ide_dma_end() if this is dma interrupt.
> + */
> + hwif->ide_dma_clear_irq(drive);
> +
> spin_unlock(&ide_lock);
Ah, you're only calling this when hwif->dma == 0... Well, that's probably
fine. Although, once introduced, this method asks for more use...
> if (drive->unmask)
MBR, Sergei
next prev parent reply other threads:[~2007-01-24 13:04 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-18 11:19 [PATCH] ide: Fix ATAPI DMA lost irq problem with CDB intr devices Albert Lee
[not found] ` <58cb370e0701191133m3dd584ffna5b231b00392c13d@mail.gmail.com>
2007-01-19 19:59 ` Bartlomiej Zolnierkiewicz
2007-01-22 7:28 ` Albert Lee
2007-01-22 8:45 ` Albert Lee
2007-01-22 16:05 ` Bartlomiej Zolnierkiewicz
2007-01-24 3:33 ` [PATCH 0/2] ide: clear bmdma status in ide_intr for all commands Albert Lee
2007-01-24 3:36 ` [PATCH 1/2] ide: remove clearing bmdma status from cdrom_decode_status() Albert Lee
2007-01-24 3:42 ` [PATCH 2/2] ide: clear bmdma status in ide_intr() Albert Lee
2007-01-24 13:04 ` Sergei Shtylyov [this message]
2007-01-25 9:31 ` [PATCH 2/2] ide: clear bmdma status in ide_intr() (revised) Albert Lee
2007-01-25 15:17 ` Sergei Shtylyov
2007-01-25 16:40 ` Sergei Shtylyov
2007-01-30 2:49 ` [PATCH 0/2] ide: clear bmdma status in ide_intr for Intel controllers (revised #3) Albert Lee
2007-01-30 2:52 ` [PATCH 1/2] ide: remove clearing bmdma status from cdrom_decode_status() (rev #3) Albert Lee
2007-01-30 3:02 ` [PATCH 2/2] ide: clear bmdma status in ide_intr() for Intel controllers (revised #3) Albert Lee
2007-01-30 14:13 ` Sergei Shtylyov
2007-01-30 14:27 ` Alan
[not found] ` <58cb370e0701301117n316a9efax1e0b6299a8f8594a@mail.gmail.com>
2007-01-30 20:21 ` Bartlomiej Zolnierkiewicz
2007-01-31 5:49 ` [PATCH 0/2] ide: clear bmdma status in ide_intr for Intel controllers (revised #4) Albert Lee
2007-01-31 5:54 ` [PATCH 1/2] ide: clear bmdma status in ide_intr() for ICHx " Albert Lee
2007-01-31 5:57 ` [PATCH 2/2] ide: remove clearing bmdma status from cdrom_decode_status() (rev #4) Albert Lee
[not found] ` <58cb370e0702021307i3d275e84qbeb3b44f58ad6b51@mail.gmail.com>
2007-02-02 21:14 ` [PATCH 0/2] ide: clear bmdma status in ide_intr for Intel controllers (revised #4) Bartlomiej Zolnierkiewicz
2007-01-22 14:47 ` [PATCH] ide: Fix ATAPI DMA lost irq problem with CDB intr devices Alan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45B7596F.6080504@ru.mvista.com \
--to=sshtylyov@ru.mvista.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=albertl@mail.com \
--cc=awhawks@us.ibm.com \
--cc=bzolnier@gmail.com \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.