linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* irq-pio branch updated with Tejun's patches
@ 2006-01-27 14:23 Jeff Garzik
  2006-02-08  8:25 ` Albert Lee
  0 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2006-01-27 14:23 UTC (permalink / raw)
  To: Albert Lee; +Cc: linux-ide@vger.kernel.org

Albert,

I updated the libata irq-pio branch with Tejun's patches.  I would 
appreciate it if you could check my work, and make sure that everything 
continues to function properly.

	Jeff



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-01-27 14:23 irq-pio branch updated with Tejun's patches Jeff Garzik
@ 2006-02-08  8:25 ` Albert Lee
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
  2006-02-08  8:46   ` irq-pio branch updated with Tejun's patches Tejun Heo
  0 siblings, 2 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:25 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Jeff Garzik wrote:
> 
> I updated the libata irq-pio branch with Tejun's patches.  I would
> appreciate it if you could check my work, and make sure that everything
> continues to function properly.
> 

Sorry for the late reply.
Still checking Tejun's patches, especially the EH vs polling PIO racing fix.

Fixed minor compiliation problem in the irq-pio branch with Tejun and your patches.
Will submit those minor patches first.

Albert



^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches
  2006-02-08  8:25 ` Albert Lee
@ 2006-02-08  8:34   ` Albert Lee
  2006-02-08  8:37     ` [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol() Albert Lee
                       ` (3 more replies)
  2006-02-08  8:46   ` irq-pio branch updated with Tejun's patches Tejun Heo
  1 sibling, 4 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:34 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Dear all,

Minor fix for the irq-pio branch with Tejun's EH patches.

1/4: Fix array index value in ata_rwcmd_protocol()
2/4: Use new ata_queue_pio_task() for PIO polling task.
3/4: Use new AC_ERR_* flags
4/4: Minor comment fix

Patch against the irq-pio branch of libata-dev tree
(f6ef65e6d004b77d516037424c7ccc209d0d3509).

For your review, thanks.

Albert




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol()
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
@ 2006-02-08  8:37     ` Albert Lee
  2006-02-09  9:26       ` Jeff Garzik
  2006-02-08  8:48     ` [PATCH 2/4] libata-dev: Use new ata_queue_pio_task() for PIO polling task Albert Lee
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:37 UTC (permalink / raw)
  Cc: Jeff Garzik, linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Patch 1/4:

  - Fix the array index value in ata_rwcmd_protocol() for the added FUA commands.

For your review, thanks.

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

===

--- irq-pio/drivers/scsi/libata-core.c	2006-02-07 16:59:14.000000000 +0800
+++ rwcmd/drivers/scsi/libata-core.c	2006-02-08 13:39:34.000000000 +0800
@@ -611,7 +611,7 @@ int ata_rwcmd_protocol(struct ata_queued
 	} else if (lba48 && (qc->ap->flags & ATA_FLAG_PIO_LBA48)) {
 		/* Unable to use DMA due to host limitation */
 		tf->protocol = ATA_PROT_PIO;
-		index = dev->multi_count ? 0 : 4;
+		index = dev->multi_count ? 0 : 8;
 	} else {
 		tf->protocol = ATA_PROT_DMA;
 		index = 16;



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-08  8:25 ` Albert Lee
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
@ 2006-02-08  8:46   ` Tejun Heo
  2006-02-09  3:23     ` Albert Lee
  1 sibling, 1 reply; 14+ messages in thread
From: Tejun Heo @ 2006-02-08  8:46 UTC (permalink / raw)
  To: Albert Lee; +Cc: Jeff Garzik, linux-ide@vger.kernel.org, Doug Maxey

Albert Lee wrote:
> Jeff Garzik wrote:
> 
>>I updated the libata irq-pio branch with Tejun's patches.  I would
>>appreciate it if you could check my work, and make sure that everything
>>continues to function properly.
>>
> 
> 
> Sorry for the late reply.
> Still checking Tejun's patches, especially the EH vs polling PIO racing fix.
> 
> Fixed minor compiliation problem in the irq-pio branch with Tejun and your patches.
> Will submit those minor patches first.
> 

Hello, Albert.

This is sort of OT, but would it be possible to separate PIO 
issuing/interrupt handling from ata_qc_issue_prot and ata_host_intr?

As PIO implementation currently stands, a lldd must use those standard 
methods to use PIO, but some controllers need PIO handling but the stock 
issue and interrupt routines don't really fit. e.g. not-yet-working 
sata_inic162x.  Something like ata_qc_issue_pio and ata_qc_pio_intr maybe?

-- 
tejun

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 2/4] libata-dev: Use new ata_queue_pio_task() for PIO polling task
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
  2006-02-08  8:37     ` [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol() Albert Lee
@ 2006-02-08  8:48     ` Albert Lee
  2006-02-08  8:50     ` [PATCH 3/4] libata-dev: Use new AC_ERR_* flags Albert Lee
  2006-02-08  8:51     ` [PATCH 4/4] libata-dev: Minor comment fix Albert Lee
  3 siblings, 0 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:48 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Patch 2/4:

Changes:
  - Use new ata_queue_pio_task() for PIO polling task.
  - Remove the unused ata_queue_packet_task() function.
    (irq-pio had merged the 2 queues into one.)

For your review, thanks.

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

===

--- rwcmd/drivers/scsi/libata-core.c	2006-02-08 13:39:34.000000000 +0800
+++ queuework/drivers/scsi/libata-core.c	2006-02-08 14:06:41.000000000 +0800
@@ -1073,12 +1073,6 @@ static unsigned int ata_pio_modes(const 
 }
 
 static inline void
-ata_queue_packet_task(struct ata_port *ap)
-{
-	queue_work(ata_wq, &ap->packet_task);
-}
-
-static inline void
 ata_queue_pio_task(struct ata_port *ap)
 {
 	queue_work(ata_wq, &ap->pio_task);
@@ -3971,7 +3965,7 @@ unsigned int ata_qc_issue_prot(struct at
 		ap->hsm_task_state = HSM_ST_LAST;
 
 		if (qc->tf.flags & ATA_TFLAG_POLLING)
-			queue_work(ata_wq, &ap->pio_task);
+			ata_queue_pio_task(ap);
 
 		break;
 
@@ -4024,7 +4018,7 @@ unsigned int ata_qc_issue_prot(struct at
 		/* send cdb by polling if no cdb interrupt */
 		if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) ||
 		    (qc->tf.flags & ATA_TFLAG_POLLING))
-			ata_queue_packet_task(ap);
+			ata_queue_pio_task(ap);
 		break;
 
 	case ATA_PROT_ATAPI_DMA:
@@ -4036,7 +4030,7 @@ unsigned int ata_qc_issue_prot(struct at
 
 		/* send cdb by polling if no cdb interrupt */
 		if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
-			ata_queue_packet_task(ap);
+			ata_queue_pio_task(ap);
 		break;
 
 	default:




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 3/4] libata-dev: Use new AC_ERR_* flags
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
  2006-02-08  8:37     ` [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol() Albert Lee
  2006-02-08  8:48     ` [PATCH 2/4] libata-dev: Use new ata_queue_pio_task() for PIO polling task Albert Lee
@ 2006-02-08  8:50     ` Albert Lee
  2006-02-08  8:51     ` [PATCH 4/4] libata-dev: Minor comment fix Albert Lee
  3 siblings, 0 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:50 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Patch 3/4:

Changes:
  - Use new AC_ERR_* flags as done in Tejun's patches
  - In ata_qc_timeout(), replace ac_err_mask(drv_stat) with AC_ERR_TIMEOUT.
    This makes time out handler always report error to upper layer.
    Otherwise if the drv_stat looks good, libata might falsely report OK to the upper layer.

For your review, thanks.

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

===

--- queuework/drivers/scsi/libata-core.c	2006-02-08 14:06:41.000000000 +0800
+++ errmask/drivers/scsi/libata-core.c	2006-02-08 14:42:34.000000000 +0800
@@ -3315,7 +3315,7 @@ static int ata_pio_first_block(struct at
 	/* sleep-wait for BSY to clear */
 	DPRINTK("busy wait\n");
 	if (ata_busy_sleep(ap, ATA_TMOUT_DATAOUT_QUICK, ATA_TMOUT_DATAOUT)) {
-		qc->err_mask |= AC_ERR_ATA_BUS;
+		qc->err_mask |= AC_ERR_TIMEOUT;
 		ap->hsm_task_state = HSM_ST_TMOUT;
 		goto err_out;
 	}
@@ -3324,7 +3324,7 @@ static int ata_pio_first_block(struct at
 	status = ata_chk_status(ap);
 	if ((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ) {
 		/* device status error */
-		qc->err_mask |= AC_ERR_ATA_BUS;
+		qc->err_mask |= AC_ERR_HSM;
 		ap->hsm_task_state = HSM_ST_ERR;
 		goto err_out;
 	}
@@ -3684,7 +3684,7 @@ static void ata_qc_timeout(struct ata_qu
 		ap->hsm_task_state = HSM_ST_IDLE;
 
 		/* complete taskfile transaction */
-		qc->err_mask |= ac_err_mask(drv_stat);
+		qc->err_mask |= AC_ERR_TIMEOUT;
 		break;
 	}
 
@@ -4365,7 +4365,7 @@ fsm_start:
 		/* check device status */
 		if (unlikely((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ)) {
 			/* Wrong status. Let EH handle this */
-			qc->err_mask |= AC_ERR_ATA_BUS;
+			qc->err_mask |= AC_ERR_HSM;
 			ap->hsm_task_state = HSM_ST_ERR;
 			goto fsm_start;
 		}
@@ -4394,7 +4394,7 @@ fsm_start:
 			/* ATA PIO protocol */
 			if (unlikely((status & ATA_DRQ) == 0)) {
 				/* handle BSY=0, DRQ=0 as error */
-				qc->err_mask |= AC_ERR_ATA_BUS;
+				qc->err_mask |= AC_ERR_HSM;
 				ap->hsm_task_state = HSM_ST_ERR;
 				goto fsm_start;
 			}
@@ -4416,7 +4416,7 @@ fsm_start:
 	case HSM_ST_LAST:
 		if (unlikely(status & ATA_DRQ)) {
 			/* handle DRQ=1 as error */
-			qc->err_mask |= AC_ERR_ATA_BUS;
+			qc->err_mask |= AC_ERR_HSM;
 			ap->hsm_task_state = HSM_ST_ERR;
 			goto fsm_start;
 		}




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/4] libata-dev: Minor comment fix
  2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
                       ` (2 preceding siblings ...)
  2006-02-08  8:50     ` [PATCH 3/4] libata-dev: Use new AC_ERR_* flags Albert Lee
@ 2006-02-08  8:51     ` Albert Lee
  3 siblings, 0 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-08  8:51 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Patch 4/4:

  - Minor comment movement

For your review, thanks.

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

===

--- errmask/drivers/scsi/libata-core.c	2006-02-08 14:42:34.000000000 +0800
+++ comments/drivers/scsi/libata-core.c	2006-02-08 14:44:31.000000000 +0800
@@ -4510,19 +4510,6 @@ irqreturn_t ata_interrupt (int irq, void
 	return IRQ_RETVAL(handled);
 }
 
-/**
- *	ata_port_start - Set port up for dma.
- *	@ap: Port to initialize
- *
- *	Called just after data structures for each port are
- *	initialized.  Allocates space for PRD table.
- *
- *	May be used as the port_start() entry in ata_port_operations.
- *
- *	LOCKING:
- *	Inherited from caller.
- */
-
 /*
  * Execute a 'simple' command, that only consists of the opcode 'cmd' itself,
  * without filling any other registers
@@ -4613,6 +4600,19 @@ int ata_device_suspend(struct ata_port *
 	return 0;
 }
 
+/**
+ *	ata_port_start - Set port up for dma.
+ *	@ap: Port to initialize
+ *
+ *	Called just after data structures for each port are
+ *	initialized.  Allocates space for PRD table.
+ *
+ *	May be used as the port_start() entry in ata_port_operations.
+ *
+ *	LOCKING:
+ *	Inherited from caller.
+ */
+
 int ata_port_start (struct ata_port *ap)
 {
 	struct device *dev = ap->host_set->dev;




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-08  8:46   ` irq-pio branch updated with Tejun's patches Tejun Heo
@ 2006-02-09  3:23     ` Albert Lee
  2006-02-09  3:58       ` Tejun Heo
  2006-02-09  9:17       ` Jeff Garzik
  0 siblings, 2 replies; 14+ messages in thread
From: Albert Lee @ 2006-02-09  3:23 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Jeff Garzik, linux-ide@vger.kernel.org, Doug Maxey, Brian King

Hi Tejun,

> 
> 
> This is sort of OT, but would it be possible to separate PIO
> issuing/interrupt handling from ata_qc_issue_prot and ata_host_intr?
> 

Isn't overriding the ->qc_issue() and ->irq_handle() in LLDD good enough?

> As PIO implementation currently stands, a lldd must use those standard
> methods to use PIO, but some controllers need PIO handling but the stock
> issue and interrupt routines don't really fit. e.g. not-yet-working
> sata_inic162x.  Something like ata_qc_issue_pio and ata_qc_pio_intr maybe?
> 

How about refactoring the PCI-IDE specific logic from libata-core to a 
seperate source file, say, ata_pciide.c?

Currently we have many PCI-IDE specific driving logic in libata-core.c.
Maybe we can seperate the different driving logic required by different
hardware interface into different source files?
This could make libata-core.c to be more abstract and generic from the underlying
hardware: libata-core only knows about the ata_port_operations interface.
(ata_port_operations should be generic enough to cover all the hardware types.)
LLDDs can either select default implementation for its hardware interface type
(such as ata_bmdma_setup() from ata_pciide.c) or override harddware specfic functions.

Ex. hardware interface types:
  - PCI IDE (bmdma + PRD tables)
    (covers legacy taskfile registers interface) => ata_pciide.c
  - ADMA     => pdc_adma.c
  - AHCI     => ahci.c
  - Initio   => sata_initio.c (ata_qc_issue_pio and ata_qc_pio_intr implementation here)
  - SAS/SATA => sata_sas.c (ata_sas_port_start/stop implementation here)
  - etc.     


Albert



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-09  3:23     ` Albert Lee
@ 2006-02-09  3:58       ` Tejun Heo
  2006-02-09  9:21         ` Jeff Garzik
  2006-02-09  9:17       ` Jeff Garzik
  1 sibling, 1 reply; 14+ messages in thread
From: Tejun Heo @ 2006-02-09  3:58 UTC (permalink / raw)
  To: Albert Lee; +Cc: Jeff Garzik, linux-ide@vger.kernel.org, Doug Maxey, Brian King

Hello, Albert.

Albert Lee wrote:
>>
>>This is sort of OT, but would it be possible to separate PIO
>>issuing/interrupt handling from ata_qc_issue_prot and ata_host_intr?
>>
> 
> Isn't overriding the ->qc_issue() and ->irq_handle() in LLDD good enough?

The driver needs its own ->qc_issue() and ->irq_handler() but it also 
needs PIO support.  AFAICS, the current PIO implementation is rather 
strongly tied into ata_qc_issue_prot() and ata_host_intr() making it 
difficult to use PIO support in drivers which use private ->qc_issue() 
and ->irq_handler().  So, what I was asking was to separate out PIO 
handling from ata_qc_issue_prot() and ata_host_intr() such that other 
issue and intr routines can use PIO.
> 
> How about refactoring the PCI-IDE specific logic from libata-core to a 
> seperate source file, say, ata_pciide.c?
> 
> Currently we have many PCI-IDE specific driving logic in libata-core.c.
> Maybe we can seperate the different driving logic required by different
> hardware interface into different source files?
> This could make libata-core.c to be more abstract and generic from the underlying
> hardware: libata-core only knows about the ata_port_operations interface.
> (ata_port_operations should be generic enough to cover all the hardware types.)
> LLDDs can either select default implementation for its hardware interface type
> (such as ata_bmdma_setup() from ata_pciide.c) or override harddware specfic functions.

I agree.  If for nothing else, the size of libata-core.c is getting too 
large.  Also, we currently have multiple levels of methods in 
ata_port_operations, some operations are only used by other operations, 
which is a bit confusing I think.

Separating out traditional driving logic from libata-core.c would 
require another level of indirection such that traditional low level 
drivers still can mix & match different legacy operations.  I thought 
about it and wasn't really sure whether the added abstraction was worth 
the clean up.  We currently don't have too many controllers which are 
legacy-free, it seems.

> Ex. hardware interface types:
>   - PCI IDE (bmdma + PRD tables)
>     (covers legacy taskfile registers interface) => ata_pciide.c
>   - ADMA     => pdc_adma.c
>   - AHCI     => ahci.c
>   - Initio   => sata_initio.c (ata_qc_issue_pio and ata_qc_pio_intr implementation here)

ata_qc_issue_pio was bad naming probably.  As I wrote before, I was 
asking for a PIO helper which inic_qc_issue() can call to drive PIO 
logic and the same for ata_qc_pio_intr().

>   - SAS/SATA => sata_sas.c (ata_sas_port_start/stop implementation here)
>   - etc.     

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-09  3:23     ` Albert Lee
  2006-02-09  3:58       ` Tejun Heo
@ 2006-02-09  9:17       ` Jeff Garzik
  1 sibling, 0 replies; 14+ messages in thread
From: Jeff Garzik @ 2006-02-09  9:17 UTC (permalink / raw)
  To: Albert Lee; +Cc: Tejun Heo, linux-ide@vger.kernel.org, Doug Maxey, Brian King

Albert Lee wrote:
> How about refactoring the PCI-IDE specific logic from libata-core to a 
> seperate source file, say, ata_pciide.c?

This is OK with me.


> Currently we have many PCI-IDE specific driving logic in libata-core.c.
> Maybe we can seperate the different driving logic required by different
> hardware interface into different source files?
> This could make libata-core.c to be more abstract and generic from the underlying

> Ex. hardware interface types:
>   - PCI IDE (bmdma + PRD tables)
>     (covers legacy taskfile registers interface) => ata_pciide.c
>   - ADMA     => pdc_adma.c
>   - AHCI     => ahci.c
>   - Initio   => sata_initio.c (ata_qc_issue_pio and ata_qc_pio_intr implementation here)
>   - SAS/SATA => sata_sas.c (ata_sas_port_start/stop implementation here)
>   - etc.     

We don't need abstraction, we just need to keep individual libata*.c 
file size / LOC under control.  A libata-bmdma.c would certainly be fine 
with me.

	Jeff



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-09  3:58       ` Tejun Heo
@ 2006-02-09  9:21         ` Jeff Garzik
  2006-02-09  9:31           ` Tejun
  0 siblings, 1 reply; 14+ messages in thread
From: Jeff Garzik @ 2006-02-09  9:21 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Albert Lee, linux-ide@vger.kernel.org, Doug Maxey, Brian King

Tejun Heo wrote:
> Hello, Albert.
> 
> Albert Lee wrote:
> 
>>>
>>> This is sort of OT, but would it be possible to separate PIO
>>> issuing/interrupt handling from ata_qc_issue_prot and ata_host_intr?
>>>
>>
>> Isn't overriding the ->qc_issue() and ->irq_handle() in LLDD good enough?
> 
> 
> The driver needs its own ->qc_issue() and ->irq_handler() but it also 
> needs PIO support.  AFAICS, the current PIO implementation is rather 
> strongly tied into ata_qc_issue_prot() and ata_host_intr() making it 
> difficult to use PIO support in drivers which use private ->qc_issue() 
> and ->irq_handler().  So, what I was asking was to separate out PIO 
> handling from ata_qc_issue_prot() and ata_host_intr() such that other 
> issue and intr routines can use PIO.

What needs this separation?  initio?


> Separating out traditional driving logic from libata-core.c would 
> require another level of indirection such that traditional low level 
> drivers still can mix & match different legacy operations.  I thought 
> about it and wasn't really sure whether the added abstraction was worth 
> the clean up.  We currently don't have too many controllers which are 
> legacy-free, it seems.

IMO the solution is time.  Time and evolution will determine what's 
best.  When a particular section of code get particularly large (PCI IDE 
driver helper code), it certainly makes sense to split it out.  "Do what 
you must, and no more" is the Linux maxim :)

	Jeff



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol()
  2006-02-08  8:37     ` [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol() Albert Lee
@ 2006-02-09  9:26       ` Jeff Garzik
  0 siblings, 0 replies; 14+ messages in thread
From: Jeff Garzik @ 2006-02-09  9:26 UTC (permalink / raw)
  To: Albert Lee; +Cc: linux-ide@vger.kernel.org, Tejun Heo, Doug Maxey

Albert Lee wrote:
> Patch 1/4:
> 
>   - Fix the array index value in ata_rwcmd_protocol() for the added FUA commands.
> 
> For your review, thanks.
> 
> Albert
> Signed-off-by: Albert Lee <albertcc@tw.ibm.com> 

applied 1-4



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: irq-pio branch updated with Tejun's patches
  2006-02-09  9:21         ` Jeff Garzik
@ 2006-02-09  9:31           ` Tejun
  0 siblings, 0 replies; 14+ messages in thread
From: Tejun @ 2006-02-09  9:31 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Albert Lee, linux-ide@vger.kernel.org, Doug Maxey, Brian King

Jeff Garzik wrote:
> Tejun Heo wrote:
> 
>> Hello, Albert.
>>
>> Albert Lee wrote:
>>
>>>>
>>>> This is sort of OT, but would it be possible to separate PIO
>>>> issuing/interrupt handling from ata_qc_issue_prot and ata_host_intr?
>>>>
>>>
>>> Isn't overriding the ->qc_issue() and ->irq_handle() in LLDD good 
>>> enough?
>>
>>
>>
>> The driver needs its own ->qc_issue() and ->irq_handler() but it also 
>> needs PIO support.  AFAICS, the current PIO implementation is rather 
>> strongly tied into ata_qc_issue_prot() and ata_host_intr() making it 
>> difficult to use PIO support in drivers which use private ->qc_issue() 
>> and ->irq_handler().  So, what I was asking was to separate out PIO 
>> handling from ata_qc_issue_prot() and ata_host_intr() such that other 
>> issue and intr routines can use PIO.
> 
> 
> What needs this separation?  initio?
> 

Yeah, it seems.  Its broken driver currently emulates BMDMA status to 
work with standard issue/intr functions, but it seems fragile.  In 
addition, for NCQ commands, the controller operates in different mode 
and the code will have to be distorted more than now.  So, I think it's 
better to use separate issue/intr handler and calling PIO helpers when 
needed.  Well, if that driver ever works, that is.  I'll contact Initio 
support again.  Hmmm.. I might even call them.  Heh heh. :-)

> 
>> Separating out traditional driving logic from libata-core.c would 
>> require another level of indirection such that traditional low level 
>> drivers still can mix & match different legacy operations.  I thought 
>> about it and wasn't really sure whether the added abstraction was 
>> worth the clean up.  We currently don't have too many controllers 
>> which are legacy-free, it seems.
> 
> IMO the solution is time.  Time and evolution will determine what's 
> best.  When a particular section of code get particularly large (PCI IDE 
> driver helper code), it certainly makes sense to split it out.  "Do what 
> you must, and no more" is the Linux maxim :)

Being a stupid over-designer, I'm sometimes a bit unconformtable with 
the approach but I guess I'll finally adapt.  I'll talk about this more 
in the thread regarding probe_reset component operatons.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2006-02-09  9:32 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-27 14:23 irq-pio branch updated with Tejun's patches Jeff Garzik
2006-02-08  8:25 ` Albert Lee
2006-02-08  8:34   ` [PATCH 0/4] libata-dev: minor fix for irq-pio with Tejun's EH patches Albert Lee
2006-02-08  8:37     ` [PATCH 1/4] libata-dev: Fix array index value in ata_rwcmd_protocol() Albert Lee
2006-02-09  9:26       ` Jeff Garzik
2006-02-08  8:48     ` [PATCH 2/4] libata-dev: Use new ata_queue_pio_task() for PIO polling task Albert Lee
2006-02-08  8:50     ` [PATCH 3/4] libata-dev: Use new AC_ERR_* flags Albert Lee
2006-02-08  8:51     ` [PATCH 4/4] libata-dev: Minor comment fix Albert Lee
2006-02-08  8:46   ` irq-pio branch updated with Tejun's patches Tejun Heo
2006-02-09  3:23     ` Albert Lee
2006-02-09  3:58       ` Tejun Heo
2006-02-09  9:21         ` Jeff Garzik
2006-02-09  9:31           ` Tejun
2006-02-09  9:17       ` Jeff Garzik

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).