* [PATCH 0/2] libata: minor pio fixes (resend) @ 2007-07-04 8:24 Albert Lee 2007-07-04 8:28 ` [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions Albert Lee 2007-07-04 8:33 ` [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE Albert Lee 0 siblings, 2 replies; 7+ messages in thread From: Albert Lee @ 2007-07-04 8:24 UTC (permalink / raw) To: Jeff Garzik; +Cc: Linux IDE Minor pio fixes: 1/2: move ata_altstatus() to pio data xfer functions 2/2: change the last state of pio read to HSM_ST_IDLE (The previous "remove unneeded ata_altstatus() from ata_hsm_qc_complete()" has been accepted.) Patch against the libata-dev tree for your review. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions 2007-07-04 8:24 [PATCH 0/2] libata: minor pio fixes (resend) Albert Lee @ 2007-07-04 8:28 ` Albert Lee 2007-08-15 7:19 ` Jeff Garzik 2007-07-04 8:33 ` [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE Albert Lee 1 sibling, 1 reply; 7+ messages in thread From: Albert Lee @ 2007-07-04 8:28 UTC (permalink / raw) To: Jeff Garzik; +Cc: Linux IDE Patch 1/2: Move ata_altstatus() out from ata_hsm_move() to the pio data xfer functions like ata_pio_sectors() and atapi_pio_bytes() where it makes more sense. Signed-off-by: Albert Lee <albertcc@tw.ibm.com> --- atapi_send_cdb() already calls ata_altstatus() inside. This patch makes ata_pio_sectors() and atapi_pio_bytes() do the same. diff -Nrup 00_libata-dev/drivers/ata/libata-core.c 01_move_altstatus/drivers/ata/libata-core.c --- 00_libata-dev/drivers/ata/libata-core.c 2007-07-04 11:26:30.000000000 +0800 +++ 01_move_altstatus/drivers/ata/libata-core.c 2007-07-04 11:32:36.000000000 +0800 @@ -4524,6 +4524,8 @@ static void ata_pio_sectors(struct ata_q ata_pio_sector(qc); } else ata_pio_sector(qc); + + ata_altstatus(ap); /* flush */ } /** @@ -4698,6 +4700,7 @@ static void atapi_pio_bytes(struct ata_q VPRINTK("ata%u: xfering %d bytes\n", ap->print_id, bytes); __atapi_pio_bytes(qc, bytes); + ata_altstatus(ap); /* flush */ return; @@ -4869,7 +4872,6 @@ fsm_start: */ ap->hsm_task_state = HSM_ST; ata_pio_sectors(qc); - ata_altstatus(ap); /* flush */ } else /* send CDB */ atapi_send_cdb(ap, qc); @@ -4950,7 +4952,6 @@ fsm_start: if (!(qc->tf.flags & ATA_TFLAG_WRITE)) { ata_pio_sectors(qc); - ata_altstatus(ap); status = ata_wait_idle(ap); } @@ -4970,13 +4971,11 @@ fsm_start: if (ap->hsm_task_state == HSM_ST_LAST && (!(qc->tf.flags & ATA_TFLAG_WRITE))) { /* all data read */ - ata_altstatus(ap); status = ata_wait_idle(ap); goto fsm_start; } } - ata_altstatus(ap); /* flush */ poll_next = 1; break; ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions 2007-07-04 8:28 ` [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions Albert Lee @ 2007-08-15 7:19 ` Jeff Garzik 0 siblings, 0 replies; 7+ messages in thread From: Jeff Garzik @ 2007-08-15 7:19 UTC (permalink / raw) To: albertl; +Cc: Linux IDE Albert Lee wrote: > Patch 1/2: > Move ata_altstatus() out from ata_hsm_move() to the pio data xfer functions > like ata_pio_sectors() and atapi_pio_bytes() where it makes more sense. > > Signed-off-by: Albert Lee <albertcc@tw.ibm.com> > --- > atapi_send_cdb() already calls ata_altstatus() inside. > This patch makes ata_pio_sectors() and atapi_pio_bytes() do the same. applied ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE 2007-07-04 8:24 [PATCH 0/2] libata: minor pio fixes (resend) Albert Lee 2007-07-04 8:28 ` [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions Albert Lee @ 2007-07-04 8:33 ` Albert Lee 2007-10-02 15:19 ` Jeff Garzik 1 sibling, 1 reply; 7+ messages in thread From: Albert Lee @ 2007-07-04 8:33 UTC (permalink / raw) To: Jeff Garzik; +Cc: Linux IDE Patch 2/2: After reading the last pio data block, the HSM is waiting for device to be idle, not waiting for the last interrupt. This patch changes the state after "PIO data-in" to HSM_ST_IDLE instead of HSM_ST_LAST for accuracy. Signed-off-by: Albert Lee <albertcc@tw.ibm.com> --- diff -Nrup 01_move_altstatus/drivers/ata/libata-core.c 02_pio_read_state/drivers/ata/libata-core.c --- 01_move_altstatus/drivers/ata/libata-core.c 2007-07-04 11:32:36.000000000 +0800 +++ 02_pio_read_state/drivers/ata/libata-core.c 2007-07-04 11:33:53.000000000 +0800 @@ -4462,7 +4462,7 @@ static void ata_pio_sector(struct ata_qu unsigned char *buf; if (qc->curbytes == qc->nbytes - qc->sect_size) - ap->hsm_task_state = HSM_ST_LAST; + ap->hsm_task_state = do_write ? HSM_ST_LAST : HSM_ST_IDLE; page = sg[qc->cursg].page; offset = sg[qc->cursg].offset + qc->cursg_ofs; @@ -4811,6 +4811,8 @@ int ata_hsm_move(struct ata_port *ap, st */ WARN_ON(in_wq != ata_hsm_ok_in_wq(ap, qc)); + WARN_ON(ap->hsm_task_state == HSM_ST_IDLE); + fsm_start: DPRINTK("ata%u: protocol %d task_state %d (dev_stat 0x%X)\n", ap->print_id, qc->tf.protocol, ap->hsm_task_state, status); @@ -4968,8 +4970,7 @@ fsm_start: ata_pio_sectors(qc); - if (ap->hsm_task_state == HSM_ST_LAST && - (!(qc->tf.flags & ATA_TFLAG_WRITE))) { + if (ap->hsm_task_state == HSM_ST_IDLE) { /* all data read */ status = ata_wait_idle(ap); goto fsm_start; @@ -4980,6 +4981,7 @@ fsm_start: break; case HSM_ST_LAST: + case HSM_ST_IDLE: if (unlikely(!ata_ok(status))) { qc->err_mask |= __ac_err_mask(status); ap->hsm_task_state = HSM_ST_ERR; ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE 2007-07-04 8:33 ` [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE Albert Lee @ 2007-10-02 15:19 ` Jeff Garzik 2007-10-03 4:13 ` Albert Lee 0 siblings, 1 reply; 7+ messages in thread From: Jeff Garzik @ 2007-10-02 15:19 UTC (permalink / raw) To: albertl; +Cc: Linux IDE Albert Lee wrote: > Patch 2/2: > After reading the last pio data block, the HSM is waiting for device > to be idle, not waiting for the last interrupt. > > This patch changes the state after "PIO data-in" to HSM_ST_IDLE instead > of HSM_ST_LAST for accuracy. > > Signed-off-by: Albert Lee <albertcc@tw.ibm.com> Is this still needed? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE 2007-10-02 15:19 ` Jeff Garzik @ 2007-10-03 4:13 ` Albert Lee 2007-10-03 18:16 ` Jeff Garzik 0 siblings, 1 reply; 7+ messages in thread From: Albert Lee @ 2007-10-03 4:13 UTC (permalink / raw) To: Jeff Garzik; +Cc: albertl, Linux IDE Jeff Garzik wrote: > Albert Lee wrote: > >> Patch 2/2: >> After reading the last pio data block, the HSM is waiting for device >> to be idle, not waiting for the last interrupt. >> >> This patch changes the state after "PIO data-in" to HSM_ST_IDLE instead >> of HSM_ST_LAST for accuracy. >> >> Signed-off-by: Albert Lee <albertcc@tw.ibm.com> > > > Is this still needed? > Not quite needed; it only makes the state transition after reading the last PIO block more accurate. However, if we want to do part of the irq PIO in the workqueue sometime in the future, this patch will be needed (otherwise the HSM might think it expecting another irq). For the time being, maybe we can just skip this patch until sometime it's really needed. -- albert ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE 2007-10-03 4:13 ` Albert Lee @ 2007-10-03 18:16 ` Jeff Garzik 0 siblings, 0 replies; 7+ messages in thread From: Jeff Garzik @ 2007-10-03 18:16 UTC (permalink / raw) To: albertl; +Cc: Linux IDE Albert Lee wrote: > Jeff Garzik wrote: >> Albert Lee wrote: >> >>> Patch 2/2: >>> After reading the last pio data block, the HSM is waiting for device >>> to be idle, not waiting for the last interrupt. >>> >>> This patch changes the state after "PIO data-in" to HSM_ST_IDLE instead >>> of HSM_ST_LAST for accuracy. >>> >>> Signed-off-by: Albert Lee <albertcc@tw.ibm.com> >> >> Is this still needed? >> > > Not quite needed; it only makes the state transition after reading the > last PIO block more accurate. > > However, if we want to do part of the irq PIO in the workqueue sometime > in the future, this patch will be needed (otherwise the HSM might think > it expecting another irq). For the time being, maybe we can just skip > this patch until sometime it's really needed. OK, thanks. Jeff ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-10-03 18:16 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-07-04 8:24 [PATCH 0/2] libata: minor pio fixes (resend) Albert Lee 2007-07-04 8:28 ` [PATCH 1/2] libata: move ata_altstatus() to pio data xfer functions Albert Lee 2007-08-15 7:19 ` Jeff Garzik 2007-07-04 8:33 ` [PATCH 2/2] libata: change the last state of pio read to HSM_ST_IDLE Albert Lee 2007-10-02 15:19 ` Jeff Garzik 2007-10-03 4:13 ` Albert Lee 2007-10-03 18:16 ` 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).