From: Albert Lee <albertcc@tw.ibm.com>
To: Jeff Garzik <jeff@garzik.org>
Cc: Tejun Heo <htejun@gmail.com>, Alan Cox <alan@lxorguk.ukuu.org.uk>,
Linux IDE <linux-ide@vger.kernel.org>,
Doug Maxey <dwm@maxeymade.com>,
Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
Mark Lord <liml@rtr.ca>
Subject: [PATCH 5/8] libata: ack unsolicited INTRQ when polling
Date: Wed, 16 May 2007 15:20:23 +0800 [thread overview]
Message-ID: <464AB0B7.4000803@tw.ibm.com> (raw)
In-Reply-To: <464AACDF.1030903@tw.ibm.com>
patch 5/8:
- Move the ATA_TFLAG_POLLING check from ata_interrupt to ata_host_intr
- Ack unsolicited INTRQ if polling and before the HSM accessing the port.
(e.g. some device asserts INTRQ even if polling and nIEN = 1.)
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Tejun Heo <htejun@gmail.com>
---
1.
This fixes the Benq "irq nobody cared" problem.
(Some device asserts INTRQ even if nIEN = 1 and polling.
http://bugzilla.kernel.org/show_bug.cgi?id=8441)
Other unsolicited irqs that Alan concerned about will be address in patch 8/8.
2. Per Tejun's advice, I have checked the LLDDs.
The following LLDDs checks ATA_TFLAG_POLLING in their interrupt handler:
pdc_adma, sata_inic162x, sata_mv, sata_nv, sata_promise,
sata_qstor, sata_sil, sata_sx4 and sata_vsc.
After review, it seems non of them requires change due to this patch.
BTW, sata_sil and some other LLDDs already have such workaround in it.
diff -Nrup 04_move_narrow_lock/drivers/ata/libata-core.c 05_polling_ack/drivers/ata/libata-core.c
--- 04_move_narrow_lock/drivers/ata/libata-core.c 2007-05-16 13:53:16.000000000 +0800
+++ 05_polling_ack/drivers/ata/libata-core.c 2007-05-16 13:53:20.000000000 +0800
@@ -5694,6 +5694,13 @@ inline unsigned int ata_host_intr (struc
if (ap->pflags & ATA_PFLAG_HSM_WQ)
goto idle_irq;
+ /* polling, while HSM not yet active in wq */
+ if (qc->tf.flags & ATA_TFLAG_POLLING) {
+ /* ack unsolicited irq */
+ ata_chk_status(ap);
+ goto idle_irq;
+ }
+
/* Check whether we are expecting interrupt in this state */
switch (ap->hsm_task_state) {
case HSM_ST_FIRST:
@@ -5804,8 +5811,7 @@ irqreturn_t ata_interrupt (int irq, void
struct ata_queued_cmd *qc;
qc = ata_qc_from_tag(ap, ap->active_tag);
- if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)) &&
- (qc->flags & ATA_QCFLAG_ACTIVE))
+ if (qc && (qc->flags & ATA_QCFLAG_ACTIVE))
handled |= ata_host_intr(ap, qc);
}
}
next prev parent reply other threads:[~2007-05-16 7:20 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-16 7:03 [PATCH/RFC 0/8] libata: delegate irq driven pio to workqueue (take 2) Albert Lee
2007-05-16 7:09 ` [PATCH 1/8] libata: fix the ata_altstatus() in ata_hsm_qc_complete() Albert Lee
2007-05-16 7:11 ` [PATCH 2/8] libata: move ata_altstatus() out from ata_hsm_move() to the pio data xfer functions Albert Lee
2007-05-16 7:13 ` [PATCH 3/8] libata: change the state after "PIO data-in" to HSM_ST_IDLE instead of HSM_ST_LAST Albert Lee
2007-05-16 7:18 ` [PATCH 4/8] libata: move and reduce locking to the pio data xfer functions Albert Lee
2007-05-16 7:20 ` Albert Lee [this message]
2007-05-16 7:23 ` [PATCH 6/8] libata: delegate irq driven pio to workqueue Albert Lee
2007-05-16 7:24 ` [PATCH 7/8] libata: fix ata_port_flush_task() for irq pio delegation Albert Lee
2007-05-16 7:29 ` [PATCH 8/8] libata: ack more unsolicited INTRQ Albert Lee
2007-05-16 13:02 ` Alan Cox
2007-05-17 8:59 ` Albert Lee
2007-05-17 9:25 ` Tejun Heo
2007-05-17 15:42 ` Mark Lord
2007-05-17 15:50 ` Tejun Heo
2007-05-17 16:00 ` Alan Cox
2007-05-17 9:28 ` Alan Cox
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=464AB0B7.4000803@tw.ibm.com \
--to=albertcc@tw.ibm.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=albertl@mail.com \
--cc=bzolnier@gmail.com \
--cc=dwm@maxeymade.com \
--cc=htejun@gmail.com \
--cc=jeff@garzik.org \
--cc=liml@rtr.ca \
--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.