All of lore.kernel.org
 help / color / mirror / Atom feed
From: Albert Lee <albertcc@tw.ibm.com>
To: Linux IDE <linux-ide@vger.kernel.org>
Cc: Doug Maxey <dwm@enoyolf.org>, Tejun Heo <htejun@gmail.com>
Subject: [PATCH/RFC 5/9] libata: use freeze()/thaw() for polling
Date: Fri, 15 Jun 2007 11:24:43 +0800	[thread overview]
Message-ID: <4672067B.5070609@tw.ibm.com> (raw)
In-Reply-To: <46720353.90209@tw.ibm.com>

Patch 5/9:

  This patch changes polling codes to use freeze()/thaw() for irq off/on.
ata_qc_set_polling() is also removed since now unused.

The reason for freeze()/thaw(): some ATAPI devices raises INTRQ even if nIEN = 1.
Using the host adapter irq mask mechanism, if available, is more reliable than using the device nIEN bit.

Considerations:
 1. the semantic of freeze()/thaw() maybe more than irq off/on?
 2. HSM, the new user of freeze()/thaw(), will call freeze()/thaw() more frequently than EH.
    Can current implemention of freeze()/thaw() handle it?

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
---

diff -Nrup 04_convert_freeze/drivers/ata/libata-core.c 05_convert_hsm_to_freeze/drivers/ata/libata-core.c
--- 04_convert_freeze/drivers/ata/libata-core.c	2007-06-11 17:37:24.000000000 +0800
+++ 05_convert_hsm_to_freeze/drivers/ata/libata-core.c	2007-06-12 13:33:03.000000000 +0800
@@ -4753,7 +4753,7 @@ static void ata_hsm_qc_complete(struct a
 			qc = ata_qc_from_tag(ap, qc->tag);
 			if (qc) {
 				if (likely(!(qc->err_mask & AC_ERR_HSM))) {
-					ap->ops->irq_on(ap);
+					ap->ops->thaw(ap);
 					ata_qc_complete(qc);
 				} else
 					ata_port_freeze(ap);
@@ -4769,7 +4769,7 @@ static void ata_hsm_qc_complete(struct a
 	} else {
 		if (in_wq) {
 			spin_lock_irqsave(ap->lock, flags);
-			ap->ops->irq_on(ap);
+			ap->ops->thaw(ap);
 			ata_qc_complete(qc);
 			spin_unlock_irqrestore(ap->lock, flags);
 		} else
@@ -5421,7 +5421,7 @@ unsigned int ata_qc_issue_prot(struct at
 	switch (qc->tf.protocol) {
 	case ATA_PROT_NODATA:
 		if (qc->tf.flags & ATA_TFLAG_POLLING)
-			ata_qc_set_polling(qc);
+			ap->ops->freeze(ap);
 
 		ata_tf_to_host(ap, &qc->tf);
 		ap->hsm_task_state = HSM_ST_LAST;
@@ -5442,7 +5442,7 @@ unsigned int ata_qc_issue_prot(struct at
 
 	case ATA_PROT_PIO:
 		if (qc->tf.flags & ATA_TFLAG_POLLING)
-			ata_qc_set_polling(qc);
+			ap->ops->freeze(ap);
 
 		ata_tf_to_host(ap, &qc->tf);
 
@@ -5471,7 +5471,7 @@ unsigned int ata_qc_issue_prot(struct at
 	case ATA_PROT_ATAPI:
 	case ATA_PROT_ATAPI_NODATA:
 		if (qc->tf.flags & ATA_TFLAG_POLLING)
-			ata_qc_set_polling(qc);
+			ap->ops->freeze(ap);
 
 		ata_tf_to_host(ap, &qc->tf);
 
diff -Nrup 04_convert_freeze/include/linux/libata.h 05_convert_hsm_to_freeze/include/linux/libata.h
--- 04_convert_freeze/include/linux/libata.h	2007-06-11 17:37:24.000000000 +0800
+++ 05_convert_hsm_to_freeze/include/linux/libata.h	2007-06-12 13:40:14.000000000 +0800
@@ -1100,11 +1100,6 @@ static inline u8 ata_wait_idle(struct at
 	return status;
 }
 
-static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
-{
-	qc->tf.ctl |= ATA_NIEN;
-}
-
 static inline struct ata_queued_cmd *__ata_qc_from_tag(struct ata_port *ap,
 						       unsigned int tag)
 {



  parent reply	other threads:[~2007-06-15  3:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-15  3:11 [PATCH/RFC 0/9] libata: irq_on/off restructuring Albert Lee
2007-06-15  3:15 ` [PATCH/RFC 1/9] libata: remove irq_on from ata_bus_reset() and ata_std_postreset() Albert Lee
2007-06-15  3:17 ` [PATCH/RFC 2/9] libata: add irq_off() for symmetry Albert Lee
2007-06-15  3:19 ` [PATCH/RFC 3/9] libata: add ->irq_off() to LLDDs Albert Lee
2007-06-15  3:21 ` [PATCH/RFC 4/9] libata: call irq_off from bmdma_freeze() Albert Lee
2007-06-15  3:24 ` Albert Lee [this message]
2007-06-18  5:13   ` [PATCH/RFC 5/9] libata: use freeze()/thaw() for polling Tejun Heo
2007-06-15  3:26 ` [PATCH/RFC 6/9] libata: add freeze()/thaw() to old EH LLDDs Albert Lee
2007-06-15  3:30 ` [PATCH/RFC 7/9] libata: pdc_freeze() semantic change Albert Lee
2007-06-18  5:14   ` Tejun Heo
2007-06-15  3:34 ` [PATCH/RFC 8/9] libata: remove writing of tf->ctl from ata_tf_load() Albert Lee
2007-06-15  3:44 ` [PATCH/RFC 9/9] libata: remove irq_on/off and rename freeze()/thaw() to irq_on/off Albert Lee

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=4672067B.5070609@tw.ibm.com \
    --to=albertcc@tw.ibm.com \
    --cc=albertl@mail.com \
    --cc=dwm@enoyolf.org \
    --cc=htejun@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.