Skip to content

Commit

Permalink
[PATCH] libata irq-pio: cleanup ata_qc_issue_prot()
Browse files Browse the repository at this point in the history
ata_qc_issue_prot():
    - cleanup and let the PIO data out case always go through the
ata_dataout_task() codepath.
      (Previously for PIO data out case, 2 code pathes were used
        - irq case goes through ata_data_out_task() codepath.
        - polling case jumps over the HSM_ST_FIRST state and goes to
HSM_ST and ata_pio_task() directly.)

  ata_dataout_task():
    - rearrange the queue_work() code to handle the PIO data out +
polling case.

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
  • Loading branch information
Albert Lee authored and Jeff Garzik committed Sep 30, 2005
1 parent 86a7397 commit 54f0038
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions drivers/scsi/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -3407,24 +3407,24 @@ int ata_qc_issue_prot(struct ata_queued_cmd *qc)

ata_tf_to_host_nolock(ap, &qc->tf);

if (qc->tf.flags & ATA_TFLAG_POLLING) {
/* polling PIO */
ap->hsm_task_state = HSM_ST;
queue_work(ata_wq, &ap->pio_task);
if (qc->tf.flags & ATA_TFLAG_WRITE) {
/* PIO data out protocol */
ap->hsm_task_state = HSM_ST_FIRST;
queue_work(ata_wq, &ap->dataout_task);

/* always send first data block using
* the ata_dataout_task() codepath.
*/
} else {
/* interrupt driven PIO */
if (qc->tf.flags & ATA_TFLAG_WRITE) {
/* PIO data out protocol */
ap->hsm_task_state = HSM_ST_FIRST;
queue_work(ata_wq, &ap->dataout_task);

/* send first data block by polling */
} else {
/* PIO data in protocol */
ap->hsm_task_state = HSM_ST;

/* interrupt handler takes over from here */
}
/* PIO data in protocol */
ap->hsm_task_state = HSM_ST;

if (qc->tf.flags & ATA_TFLAG_POLLING)
queue_work(ata_wq, &ap->pio_task);

/* if polling, ata_pio_task() handles the rest.
* otherwise, interrupt handler takes over from here.
*/
}

break;
Expand Down Expand Up @@ -4005,15 +4005,15 @@ static void ata_dataout_task(void *_data)
ap->hsm_task_state = HSM_ST;
ata_pio_sector(qc);
ata_altstatus(ap); /* flush */

/* interrupt handler takes over from here */
} else {
} else
/* send CDB */
atapi_send_cdb(ap, qc);

if (qc->tf.flags & ATA_TFLAG_POLLING)
queue_work(ata_wq, &ap->pio_task);
}
/* if polling, ata_pio_task() handles the rest.
* otherwise, interrupt handler takes over from here.
*/
if (qc->tf.flags & ATA_TFLAG_POLLING)
queue_work(ata_wq, &ap->pio_task);

spin_unlock_irqrestore(&ap->host_set->lock, flags);

Expand Down

0 comments on commit 54f0038

Please sign in to comment.