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 8/8] libata: ack more unsolicited INTRQ
Date: Wed, 16 May 2007 15:29:55 +0800 [thread overview]
Message-ID: <464AB2F3.7030103@tw.ibm.com> (raw)
In-Reply-To: <464AACDF.1030903@tw.ibm.com>
patch 8/8: ack more unsolicited irq
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Mark Lord <liml@rtr.ca>
Cc: Tejun Heo <htejun@gmail.com>
---
To address Alan's concern about the unsolicited irq (hopefully),
this patch tries to ack irq that happens after HSM accessing the port
but before the data transfer that actually triggers INTRQ.
For a typical transaction:
0. wait for irq or polling for device not busy
1. hsm starts accessing the port (ATA_PFLAG_HSM_WQ set)
2. hsm transfer the "head" part of the data
3. hsm acquires ap->lock
4. hsm transfer the "tail" part of the data (which may trigger INTRQ)
5. hsm clears ATA_PFLAG_HSM_WQ and release ap->lock
This patch allows the irq handler to ack irqs that occur during
1 and 2. (Another patch 5/8 acks irq before 1 and when polling.)
As previously discussed, the possible issue with this patch is:
Some ATA/ATAPI devices might be unhappy if the STATUS register
is read during data transfer (not sure if this is true or not).
(Patch 5/8 doesn't have such issue.)
diff -Nrup 07_irq_wq_fix/drivers/ata/libata-core.c 08_possible_ack/drivers/ata/libata-core.c
--- 07_irq_wq_fix/drivers/ata/libata-core.c 2007-05-16 13:53:37.000000000 +0800
+++ 08_possible_ack/drivers/ata/libata-core.c 2007-05-16 13:53:45.000000000 +0800
@@ -5723,8 +5723,14 @@ inline unsigned int ata_host_intr (struc
ap->print_id, qc->tf.protocol, ap->hsm_task_state);
/* HSM accessing the port from the workqueue */
- if (ap->pflags & ATA_PFLAG_HSM_WQ)
+ if (ap->pflags & ATA_PFLAG_HSM_WQ) {
+ /* HSM is not transfering the last piece
+ * of data that triggers INTRQ yet.
+ * ack unsolicited irq.
+ */
+ ata_chk_status(ap);
goto idle_irq;
+ }
/* polling, while HSM not yet active in wq */
if (qc->tf.flags & ATA_TFLAG_POLLING) {
next prev parent reply other threads:[~2007-05-16 7:30 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 ` [PATCH 5/8] libata: ack unsolicited INTRQ when polling Albert Lee
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 ` Albert Lee [this message]
2007-05-16 13:02 ` [PATCH 8/8] libata: ack more unsolicited INTRQ 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=464AB2F3.7030103@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).