[RFC 3/4] libata: Remove excess command issue delays

From: Alan Cox
Date: Wed Feb 17 2010 - 08:37:23 EST


We don't need to pause before a command issue for PIO (it's posted) or for
most MMIO devices (internally managed delay) so provide a routine for the
normal "sane" hardware

As a side effect it also means that those devices using PIO don't end up
generating ATA bus cycles in strange places which confuses some hardware.

Saves us about 1mS on a dumb controller, a fair bit less (uSecs on smarter
ones). ata_pause() is very very slow on controllers where it goes all the way

[For those counting thats another mS saved once we turn this stuff on]

Signed-off-by: Alan Cox <alan@xxxxxxxxxxxxxxx>
---

drivers/ata/ata_generic.c | 7 +++---
drivers/ata/ata_piix.c | 1 +
drivers/ata/libata-sff.c | 25 ++++++++++++++++++++
drivers/ata/pata_acpi.c | 1 +
drivers/ata/pata_ali.c | 16 +++++++------
drivers/ata/pata_amd.c | 48 ++++++++++++++++++++-------------------
drivers/ata/pata_artop.c | 2 ++
drivers/ata/pata_atiixp.c | 15 +++++++-----
drivers/ata/pata_atp867x.c | 1 +
drivers/ata/pata_cmd640.c | 13 ++++++-----
drivers/ata/pata_cmd64x.c | 23 ++++++++++---------
drivers/ata/pata_cs5520.c | 1 +
drivers/ata/pata_cs5530.c | 13 ++++++-----
drivers/ata/pata_cs5535.c | 9 ++++---
drivers/ata/pata_cs5536.c | 1 +
drivers/ata/pata_efar.c | 1 +
drivers/ata/pata_hpt366.c | 11 +++++----
drivers/ata/pata_hpt37x.c | 36 +++++++++++++++--------------
drivers/ata/pata_hpt3x2n.c | 17 +++++++-------
drivers/ata/pata_isapnp.c | 5 ++--
drivers/ata/pata_it8213.c | 1 +
drivers/ata/pata_it821x.c | 42 ++++++++++++++++++----------------
drivers/ata/pata_jmicron.c | 1 +
drivers/ata/pata_legacy.c | 5 ++--
drivers/ata/pata_marvell.c | 1 +
drivers/ata/pata_mpiix.c | 13 ++++++-----
drivers/ata/pata_netcell.c | 7 +++---
drivers/ata/pata_ns87410.c | 11 +++++----
drivers/ata/pata_ns87415.c | 1 +
drivers/ata/pata_oldpiix.c | 1 +
drivers/ata/pata_opti.c | 9 ++++---
drivers/ata/pata_optidma.c | 19 ++++++++-------
drivers/ata/pata_pcmcia.c | 19 ++++++++-------
drivers/ata/pata_pdc202xx_old.c | 1 +
drivers/ata/pata_piccolo.c | 9 ++++---
drivers/ata/pata_qdi.c | 15 +++++++-----
drivers/ata/pata_radisys.c | 1 +
drivers/ata/pata_rdc.c | 1 +
drivers/ata/pata_rz1000.c | 7 +++---
drivers/ata/pata_sc1200.c | 15 +++++++-----
drivers/ata/pata_sch.c | 1 +
drivers/ata/pata_serverworks.c | 11 +++++----
drivers/ata/pata_sis.c | 2 ++
drivers/ata/pata_triflex.c | 13 ++++++-----
drivers/ata/pata_via.c | 17 +++++++-------
drivers/ata/pata_winbond.c | 9 ++++---
include/linux/libata.h | 2 ++
47 files changed, 278 insertions(+), 202 deletions(-)


diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index 12e26c3..abae7d5 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -96,9 +96,10 @@ static struct scsi_host_template generic_sht = {
};

static struct ata_port_operations generic_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = ata_cable_unknown,
- .set_mode = generic_set_mode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_unknown,
+ .set_mode = generic_set_mode,
};

static int all_generic_ide; /* Set to claim all devices */
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index c338066..c5b1378 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -320,6 +320,7 @@ static struct scsi_host_template piix_sht = {

static struct ata_port_operations piix_sata_ops = {
.inherits = &ata_bmdma32_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.sff_irq_check = piix_irq_check,
};

diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 3558ca8..fa18482 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -674,11 +674,34 @@ void ata_sff_exec_command(struct ata_port *ap, const struct ata_taskfile *tf)
DPRINTK("ata%u: cmd 0x%X\n", ap->print_id, tf->command);

iowrite8(tf->command, ap->ioaddr.command_addr);
- ata_sff_pause(ap);
+ /* Slow */
+ ata_sff_pause(ap);
}
EXPORT_SYMBOL_GPL(ata_sff_exec_command);

/**
+ * ata_sff_exec_command_nopost - issue ATA command to host controller
+ * @ap: port to which command is being issued
+ * @tf: ATA taskfile register set
+ *
+ * Issues ATA command, with proper synchronization with interrupt
+ * handler / other threads. This version of the helper does not protect
+ * against any delayed writes done by the underlying fabric, it must
+ * therefore not be used for MMIO devices unless the device handles
+ * the 400nS command delay stall internally.
+ *
+ * LOCKING:
+ * spin_lock_irqsave(host lock)
+ */
+void ata_sff_exec_command_nopost(struct ata_port *ap,
+ const struct ata_taskfile *tf)
+{
+ DPRINTK("ata%u: cmd 0x%X\n", ap->print_id, tf->command);
+ iowrite8(tf->command, ap->ioaddr.command_addr);
+}
+EXPORT_SYMBOL_GPL(ata_sff_exec_command_nopost);
+
+/**
* ata_tf_to_host - issue ATA taskfile to host controller
* @ap: port to which command is being issued
* @tf: ATA taskfile register set
diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c
index 9e33da9..6c5765b 100644
--- a/drivers/ata/pata_acpi.c
+++ b/drivers/ata/pata_acpi.c
@@ -217,6 +217,7 @@ static struct scsi_host_template pacpi_sht = {

static struct ata_port_operations pacpi_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.qc_issue = pacpi_qc_issue,
.cable_detect = pacpi_cable_detect,
.mode_filter = pacpi_mode_filter,
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
index 63ba48c..940bead 100644
--- a/drivers/ata/pata_ali.c
+++ b/drivers/ata/pata_ali.c
@@ -364,16 +364,18 @@ static struct scsi_host_template ali_sht = {
*/

static struct ata_port_operations ali_early_port_ops = {
- .inherits = &ata_sff_port_ops,
- .cable_detect = ata_cable_40wire,
- .set_piomode = ali_set_piomode,
- .sff_data_xfer = ata_sff_data_xfer32,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = ali_set_piomode,
+ .sff_data_xfer = ata_sff_data_xfer32,
};

static const struct ata_port_operations ali_dma_base_ops = {
- .inherits = &ata_bmdma32_port_ops,
- .set_piomode = ali_set_piomode,
- .set_dmamode = ali_set_dmamode,
+ .inherits = &ata_bmdma32_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .set_piomode = ali_set_piomode,
+ .set_dmamode = ali_set_dmamode,
};

/*
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
index 567f3f7..15faa9b 100644
--- a/drivers/ata/pata_amd.c
+++ b/drivers/ata/pata_amd.c
@@ -393,44 +393,46 @@ static struct scsi_host_template amd_sht = {
};

static const struct ata_port_operations amd_base_port_ops = {
- .inherits = &ata_bmdma32_port_ops,
- .prereset = amd_pre_reset,
+ .inherits = &ata_bmdma32_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .prereset = amd_pre_reset,
};

static struct ata_port_operations amd33_port_ops = {
- .inherits = &amd_base_port_ops,
- .cable_detect = ata_cable_40wire,
- .set_piomode = amd33_set_piomode,
- .set_dmamode = amd33_set_dmamode,
+ .inherits = &amd_base_port_ops,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = amd33_set_piomode,
+ .set_dmamode = amd33_set_dmamode,
};

static struct ata_port_operations amd66_port_ops = {
- .inherits = &amd_base_port_ops,
- .cable_detect = ata_cable_unknown,
- .set_piomode = amd66_set_piomode,
- .set_dmamode = amd66_set_dmamode,
+ .inherits = &amd_base_port_ops,
+ .cable_detect = ata_cable_unknown,
+ .set_piomode = amd66_set_piomode,
+ .set_dmamode = amd66_set_dmamode,
};

static struct ata_port_operations amd100_port_ops = {
- .inherits = &amd_base_port_ops,
- .cable_detect = ata_cable_unknown,
- .set_piomode = amd100_set_piomode,
- .set_dmamode = amd100_set_dmamode,
+ .inherits = &amd_base_port_ops,
+ .cable_detect = ata_cable_unknown,
+ .set_piomode = amd100_set_piomode,
+ .set_dmamode = amd100_set_dmamode,
};

static struct ata_port_operations amd133_port_ops = {
- .inherits = &amd_base_port_ops,
- .cable_detect = amd_cable_detect,
- .set_piomode = amd133_set_piomode,
- .set_dmamode = amd133_set_dmamode,
+ .inherits = &amd_base_port_ops,
+ .cable_detect = amd_cable_detect,
+ .set_piomode = amd133_set_piomode,
+ .set_dmamode = amd133_set_dmamode,
};

static const struct ata_port_operations nv_base_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = ata_cable_ignore,
- .mode_filter = nv_mode_filter,
- .prereset = nv_pre_reset,
- .host_stop = nv_host_stop,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_ignore,
+ .mode_filter = nv_mode_filter,
+ .prereset = nv_pre_reset,
+ .host_stop = nv_host_stop,
};

static struct ata_port_operations nv100_port_ops = {
diff --git a/drivers/ata/pata_artop.c b/drivers/ata/pata_artop.c
index d332cfd..31a28f1 100644
--- a/drivers/ata/pata_artop.c
+++ b/drivers/ata/pata_artop.c
@@ -313,6 +313,7 @@ static struct scsi_host_template artop_sht = {

static struct ata_port_operations artop6210_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = ata_cable_40wire,
.set_piomode = artop6210_set_piomode,
.set_dmamode = artop6210_set_dmamode,
@@ -322,6 +323,7 @@ static struct ata_port_operations artop6210_ops = {

static struct ata_port_operations artop6260_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = artop6260_cable_detect,
.set_piomode = artop6260_set_piomode,
.set_dmamode = artop6260_set_dmamode,
diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
index ae4454d..3ded0e8 100644
--- a/drivers/ata/pata_atiixp.c
+++ b/drivers/ata/pata_atiixp.c
@@ -206,15 +206,16 @@ static struct scsi_host_template atiixp_sht = {
};

static struct ata_port_operations atiixp_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .qc_prep = ata_sff_dumb_qc_prep,
- .bmdma_start = atiixp_bmdma_start,
- .bmdma_stop = atiixp_bmdma_stop,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_prep = ata_sff_dumb_qc_prep,
+ .bmdma_start = atiixp_bmdma_start,
+ .bmdma_stop = atiixp_bmdma_stop,

- .cable_detect = atiixp_cable_detect,
- .set_piomode = atiixp_set_piomode,
- .set_dmamode = atiixp_set_dmamode,
+ .cable_detect = atiixp_cable_detect,
+ .set_piomode = atiixp_set_piomode,
+ .set_dmamode = atiixp_set_dmamode,
};

static int atiixp_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_atp867x.c b/drivers/ata/pata_atp867x.c
index 6fe7ded..4376581 100644
--- a/drivers/ata/pata_atp867x.c
+++ b/drivers/ata/pata_atp867x.c
@@ -276,6 +276,7 @@ static struct scsi_host_template atp867x_sht = {

static struct ata_port_operations atp867x_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = atp867x_cable_detect,
.set_piomode = atp867x_set_piomode,
.set_dmamode = atp867x_set_dmamode,
diff --git a/drivers/ata/pata_cmd640.c b/drivers/ata/pata_cmd640.c
index 5acf9fa..8a4b990 100644
--- a/drivers/ata/pata_cmd640.c
+++ b/drivers/ata/pata_cmd640.c
@@ -169,13 +169,14 @@ static struct scsi_host_template cmd640_sht = {
};

static struct ata_port_operations cmd640_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,
/* In theory xfer_noirq is not needed once we kill the prefetcher */
- .sff_data_xfer = ata_sff_data_xfer_noirq,
- .qc_issue = cmd640_qc_issue,
- .cable_detect = ata_cable_40wire,
- .set_piomode = cmd640_set_piomode,
- .port_start = cmd640_port_start,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .sff_data_xfer = ata_sff_data_xfer_noirq,
+ .qc_issue = cmd640_qc_issue,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = cmd640_set_piomode,
+ .port_start = cmd640_port_start,
};

static void cmd640_hardware_init(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c
index b40bf0f..305a473 100644
--- a/drivers/ata/pata_cmd64x.c
+++ b/drivers/ata/pata_cmd64x.c
@@ -269,26 +269,27 @@ static struct scsi_host_template cmd64x_sht = {
};

static const struct ata_port_operations cmd64x_base_ops = {
- .inherits = &ata_bmdma_port_ops,
- .set_piomode = cmd64x_set_piomode,
- .set_dmamode = cmd64x_set_dmamode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .set_piomode = cmd64x_set_piomode,
+ .set_dmamode = cmd64x_set_dmamode,
};

static struct ata_port_operations cmd64x_port_ops = {
- .inherits = &cmd64x_base_ops,
- .cable_detect = ata_cable_40wire,
+ .inherits = &cmd64x_base_ops,
+ .cable_detect = ata_cable_40wire,
};

static struct ata_port_operations cmd646r1_port_ops = {
- .inherits = &cmd64x_base_ops,
- .bmdma_stop = cmd646r1_bmdma_stop,
- .cable_detect = ata_cable_40wire,
+ .inherits = &cmd64x_base_ops,
+ .bmdma_stop = cmd646r1_bmdma_stop,
+ .cable_detect = ata_cable_40wire,
};

static struct ata_port_operations cmd648_port_ops = {
- .inherits = &cmd64x_base_ops,
- .bmdma_stop = cmd648_bmdma_stop,
- .cable_detect = cmd648_cable_detect,
+ .inherits = &cmd64x_base_ops,
+ .bmdma_stop = cmd648_bmdma_stop,
+ .cable_detect = cmd648_cable_detect,
};

static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c
index 95ebdac..dab33ce 100644
--- a/drivers/ata/pata_cs5520.c
+++ b/drivers/ata/pata_cs5520.c
@@ -110,6 +110,7 @@ static struct scsi_host_template cs5520_sht = {

static struct ata_port_operations cs5520_port_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.qc_prep = ata_sff_dumb_qc_prep,
.cable_detect = ata_cable_40wire,
.set_piomode = cs5520_set_piomode,
diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c
index c974b05..a299607 100644
--- a/drivers/ata/pata_cs5530.c
+++ b/drivers/ata/pata_cs5530.c
@@ -165,14 +165,15 @@ static struct scsi_host_template cs5530_sht = {
};

static struct ata_port_operations cs5530_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .qc_prep = ata_sff_dumb_qc_prep,
- .qc_issue = cs5530_qc_issue,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_prep = ata_sff_dumb_qc_prep,
+ .qc_issue = cs5530_qc_issue,

- .cable_detect = ata_cable_40wire,
- .set_piomode = cs5530_set_piomode,
- .set_dmamode = cs5530_set_dmamode,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = cs5530_set_piomode,
+ .set_dmamode = cs5530_set_dmamode,
};

static const struct dmi_system_id palmax_dmi_table[] = {
diff --git a/drivers/ata/pata_cs5535.c b/drivers/ata/pata_cs5535.c
index c50c3a4..fe10ffd 100644
--- a/drivers/ata/pata_cs5535.c
+++ b/drivers/ata/pata_cs5535.c
@@ -161,10 +161,11 @@ static struct scsi_host_template cs5535_sht = {
};

static struct ata_port_operations cs5535_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = cs5535_cable_detect,
- .set_piomode = cs5535_set_piomode,
- .set_dmamode = cs5535_set_dmamode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = cs5535_cable_detect,
+ .set_piomode = cs5535_set_piomode,
+ .set_dmamode = cs5535_set_dmamode,
};

/**
diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c
index ffee397..c90a033 100644
--- a/drivers/ata/pata_cs5536.c
+++ b/drivers/ata/pata_cs5536.c
@@ -225,6 +225,7 @@ static struct scsi_host_template cs5536_sht = {

static struct ata_port_operations cs5536_port_ops = {
.inherits = &ata_bmdma32_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = cs5536_cable_detect,
.set_piomode = cs5536_set_piomode,
.set_dmamode = cs5536_set_dmamode,
diff --git a/drivers/ata/pata_efar.c b/drivers/ata/pata_efar.c
index 89076d5..fedc121 100644
--- a/drivers/ata/pata_efar.c
+++ b/drivers/ata/pata_efar.c
@@ -225,6 +225,7 @@ static struct scsi_host_template efar_sht = {

static struct ata_port_operations efar_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = efar_cable_detect,
.set_piomode = efar_set_piomode,
.set_dmamode = efar_set_dmamode,
diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c
index 3ec88f2..6bb4b52 100644
--- a/drivers/ata/pata_hpt366.c
+++ b/drivers/ata/pata_hpt366.c
@@ -270,11 +270,12 @@ static struct scsi_host_template hpt36x_sht = {
*/

static struct ata_port_operations hpt366_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = hpt36x_cable_detect,
- .mode_filter = hpt366_filter,
- .set_piomode = hpt366_set_piomode,
- .set_dmamode = hpt366_set_dmamode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = hpt36x_cable_detect,
+ .mode_filter = hpt366_filter,
+ .set_piomode = hpt366_set_piomode,
+ .set_dmamode = hpt366_set_dmamode,
};

/**
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 228dc1a..ba398bd 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -565,15 +565,16 @@ static struct scsi_host_template hpt37x_sht = {
*/

static struct ata_port_operations hpt370_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .bmdma_stop = hpt370_bmdma_stop,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .bmdma_stop = hpt370_bmdma_stop,

- .mode_filter = hpt370_filter,
- .cable_detect = hpt37x_cable_detect,
- .set_piomode = hpt370_set_piomode,
- .set_dmamode = hpt370_set_dmamode,
- .prereset = hpt37x_pre_reset,
+ .mode_filter = hpt370_filter,
+ .cable_detect = hpt37x_cable_detect,
+ .set_piomode = hpt370_set_piomode,
+ .set_dmamode = hpt370_set_dmamode,
+ .prereset = hpt37x_pre_reset,
};

/*
@@ -581,8 +582,8 @@ static struct ata_port_operations hpt370_port_ops = {
*/

static struct ata_port_operations hpt370a_port_ops = {
- .inherits = &hpt370_port_ops,
- .mode_filter = hpt370a_filter,
+ .inherits = &hpt370_port_ops,
+ .mode_filter = hpt370a_filter,
};

/*
@@ -593,12 +594,13 @@ static struct ata_port_operations hpt370a_port_ops = {
static struct ata_port_operations hpt372_port_ops = {
.inherits = &ata_bmdma_port_ops,

- .bmdma_stop = hpt37x_bmdma_stop,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .bmdma_stop = hpt37x_bmdma_stop,

- .cable_detect = hpt37x_cable_detect,
- .set_piomode = hpt372_set_piomode,
- .set_dmamode = hpt372_set_dmamode,
- .prereset = hpt37x_pre_reset,
+ .cable_detect = hpt37x_cable_detect,
+ .set_piomode = hpt372_set_piomode,
+ .set_dmamode = hpt372_set_dmamode,
+ .prereset = hpt37x_pre_reset,
};

/*
@@ -607,9 +609,9 @@ static struct ata_port_operations hpt372_port_ops = {
*/

static struct ata_port_operations hpt374_fn1_port_ops = {
- .inherits = &hpt372_port_ops,
- .cable_detect = hpt374_fn1_cable_detect,
- .prereset = hpt37x_pre_reset,
+ .inherits = &hpt372_port_ops,
+ .cable_detect = hpt374_fn1_cable_detect,
+ .prereset = hpt37x_pre_reset,
};

/**
diff --git a/drivers/ata/pata_hpt3x2n.c b/drivers/ata/pata_hpt3x2n.c
index 4a29122..c396a94 100644
--- a/drivers/ata/pata_hpt3x2n.c
+++ b/drivers/ata/pata_hpt3x2n.c
@@ -332,17 +332,18 @@ static struct scsi_host_template hpt3x2n_sht = {
*/

static struct ata_port_operations hpt3x2n_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .bmdma_stop = hpt3x2n_bmdma_stop,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .bmdma_stop = hpt3x2n_bmdma_stop,

- .qc_defer = hpt3x2n_qc_defer,
- .qc_issue = hpt3x2n_qc_issue,
+ .qc_defer = hpt3x2n_qc_defer,
+ .qc_issue = hpt3x2n_qc_issue,

- .cable_detect = hpt3x2n_cable_detect,
- .set_piomode = hpt3x2n_set_piomode,
- .set_dmamode = hpt3x2n_set_dmamode,
- .prereset = hpt3x2n_pre_reset,
+ .cable_detect = hpt3x2n_cable_detect,
+ .set_piomode = hpt3x2n_set_piomode,
+ .set_dmamode = hpt3x2n_set_dmamode,
+ .prereset = hpt3x2n_pre_reset,
};

/**
diff --git a/drivers/ata/pata_isapnp.c b/drivers/ata/pata_isapnp.c
index 4bceb88..35df122 100644
--- a/drivers/ata/pata_isapnp.c
+++ b/drivers/ata/pata_isapnp.c
@@ -24,8 +24,9 @@ static struct scsi_host_template isapnp_sht = {
};

static struct ata_port_operations isapnp_port_ops = {
- .inherits = &ata_sff_port_ops,
- .cable_detect = ata_cable_40wire,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_40wire,
};

static struct ata_port_operations isapnp_noalt_port_ops = {
diff --git a/drivers/ata/pata_it8213.c b/drivers/ata/pata_it8213.c
index 8f3325a..378be4f 100644
--- a/drivers/ata/pata_it8213.c
+++ b/drivers/ata/pata_it8213.c
@@ -235,6 +235,7 @@ static struct scsi_host_template it8213_sht = {

static struct ata_port_operations it8213_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = it8213_cable_detect,
.set_piomode = it8213_set_piomode,
.set_dmamode = it8213_set_dmamode,
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
index edc5c1f..bc5801d 100644
--- a/drivers/ata/pata_it821x.c
+++ b/drivers/ata/pata_it821x.c
@@ -815,35 +815,37 @@ static struct ata_port_operations it821x_smart_port_ops = {
};

static struct ata_port_operations it821x_passthru_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .check_atapi_dma= it821x_check_atapi_dma,
- .sff_dev_select = it821x_passthru_dev_select,
- .bmdma_start = it821x_passthru_bmdma_start,
- .bmdma_stop = it821x_passthru_bmdma_stop,
- .qc_issue = it821x_passthru_qc_issue,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .check_atapi_dma = it821x_check_atapi_dma,
+ .sff_dev_select = it821x_passthru_dev_select,
+ .bmdma_start = it821x_passthru_bmdma_start,
+ .bmdma_stop = it821x_passthru_bmdma_stop,
+ .qc_issue = it821x_passthru_qc_issue,

- .cable_detect = ata_cable_unknown,
- .set_piomode = it821x_passthru_set_piomode,
- .set_dmamode = it821x_passthru_set_dmamode,
+ .cable_detect = ata_cable_unknown,
+ .set_piomode = it821x_passthru_set_piomode,
+ .set_dmamode = it821x_passthru_set_dmamode,

- .port_start = it821x_port_start,
+ .port_start = it821x_port_start,
};

static struct ata_port_operations it821x_rdc_port_ops = {
- .inherits = &ata_bmdma_port_ops,
+ .inherits = &ata_bmdma_port_ops,

- .check_atapi_dma= it821x_check_atapi_dma,
- .sff_dev_select = it821x_passthru_dev_select,
- .bmdma_start = it821x_passthru_bmdma_start,
- .bmdma_stop = it821x_passthru_bmdma_stop,
- .qc_issue = it821x_passthru_qc_issue,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .check_atapi_dma = it821x_check_atapi_dma,
+ .sff_dev_select = it821x_passthru_dev_select,
+ .bmdma_start = it821x_passthru_bmdma_start,
+ .bmdma_stop = it821x_passthru_bmdma_stop,
+ .qc_issue = it821x_passthru_qc_issue,

- .cable_detect = it821x_rdc_cable,
- .set_piomode = it821x_passthru_set_piomode,
- .set_dmamode = it821x_passthru_set_dmamode,
+ .cable_detect = it821x_rdc_cable,
+ .set_piomode = it821x_passthru_set_piomode,
+ .set_dmamode = it821x_passthru_set_dmamode,

- .port_start = it821x_port_start,
+ .port_start = it821x_port_start,
};

static void it821x_disable_raid(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c
index 3a1474a..ba43bd3 100644
--- a/drivers/ata/pata_jmicron.c
+++ b/drivers/ata/pata_jmicron.c
@@ -113,6 +113,7 @@ static struct scsi_host_template jmicron_sht = {

static struct ata_port_operations jmicron_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.prereset = jmicron_pre_reset,
};

diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index 9df1ff7..76b31c7 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -218,8 +218,9 @@ static struct scsi_host_template legacy_sht = {
};

static const struct ata_port_operations legacy_base_port_ops = {
- .inherits = &ata_sff_port_ops,
- .cable_detect = ata_cable_40wire,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_40wire,
};

/*
diff --git a/drivers/ata/pata_marvell.c b/drivers/ata/pata_marvell.c
index b351d81..4031bfd 100644
--- a/drivers/ata/pata_marvell.c
+++ b/drivers/ata/pata_marvell.c
@@ -102,6 +102,7 @@ static struct scsi_host_template marvell_sht = {

static struct ata_port_operations marvell_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = marvell_cable_detect,
.prereset = marvell_pre_reset,
};
diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c
index b21f002..2be0ccd 100644
--- a/drivers/ata/pata_mpiix.c
+++ b/drivers/ata/pata_mpiix.c
@@ -141,12 +141,13 @@ static struct scsi_host_template mpiix_sht = {
};

static struct ata_port_operations mpiix_port_ops = {
- .inherits = &ata_sff_port_ops,
- .qc_issue = mpiix_qc_issue,
- .cable_detect = ata_cable_40wire,
- .set_piomode = mpiix_set_piomode,
- .prereset = mpiix_pre_reset,
- .sff_data_xfer = ata_sff_data_xfer32,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_issue = mpiix_qc_issue,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = mpiix_set_piomode,
+ .prereset = mpiix_pre_reset,
+ .sff_data_xfer = ata_sff_data_xfer32,
};

static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_netcell.c b/drivers/ata/pata_netcell.c
index f0d52f7..7472fad 100644
--- a/drivers/ata/pata_netcell.c
+++ b/drivers/ata/pata_netcell.c
@@ -35,9 +35,10 @@ static struct scsi_host_template netcell_sht = {
};

static struct ata_port_operations netcell_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = ata_cable_80wire,
- .read_id = netcell_read_id,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_80wire,
+ .read_id = netcell_read_id,
};


diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c
index ca53fac..7d2a866 100644
--- a/drivers/ata/pata_ns87410.c
+++ b/drivers/ata/pata_ns87410.c
@@ -133,11 +133,12 @@ static struct scsi_host_template ns87410_sht = {
};

static struct ata_port_operations ns87410_port_ops = {
- .inherits = &ata_sff_port_ops,
- .qc_issue = ns87410_qc_issue,
- .cable_detect = ata_cable_40wire,
- .set_piomode = ns87410_set_piomode,
- .prereset = ns87410_pre_reset,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_issue = ns87410_qc_issue,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = ns87410_set_piomode,
+ .prereset = ns87410_pre_reset,
};

static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_ns87415.c b/drivers/ata/pata_ns87415.c
index 061aa1c..6f7c647 100644
--- a/drivers/ata/pata_ns87415.c
+++ b/drivers/ata/pata_ns87415.c
@@ -302,6 +302,7 @@ static u8 ns87560_bmdma_status(struct ata_port *ap)
static struct ata_port_operations ns87415_pata_ops = {
.inherits = &ata_bmdma_port_ops,

+ .sff_exec_command = ata_sff_exec_command_nopost,
.check_atapi_dma = ns87415_check_atapi_dma,
.bmdma_setup = ns87415_bmdma_setup,
.bmdma_start = ns87415_bmdma_start,
diff --git a/drivers/ata/pata_oldpiix.c b/drivers/ata/pata_oldpiix.c
index 9a8687d..f49c60f 100644
--- a/drivers/ata/pata_oldpiix.c
+++ b/drivers/ata/pata_oldpiix.c
@@ -210,6 +210,7 @@ static struct scsi_host_template oldpiix_sht = {

static struct ata_port_operations oldpiix_pata_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.qc_issue = oldpiix_qc_issue,
.cable_detect = ata_cable_40wire,
.set_piomode = oldpiix_set_piomode,
diff --git a/drivers/ata/pata_opti.c b/drivers/ata/pata_opti.c
index 99eddda..c4f436a 100644
--- a/drivers/ata/pata_opti.c
+++ b/drivers/ata/pata_opti.c
@@ -153,10 +153,11 @@ static struct scsi_host_template opti_sht = {
};

static struct ata_port_operations opti_port_ops = {
- .inherits = &ata_sff_port_ops,
- .cable_detect = ata_cable_40wire,
- .set_piomode = opti_set_piomode,
- .prereset = opti_pre_reset,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = opti_set_piomode,
+ .prereset = opti_pre_reset,
};

static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_optidma.c b/drivers/ata/pata_optidma.c
index 86885a4..ab36c1b 100644
--- a/drivers/ata/pata_optidma.c
+++ b/drivers/ata/pata_optidma.c
@@ -338,18 +338,19 @@ static struct scsi_host_template optidma_sht = {
};

static struct ata_port_operations optidma_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = ata_cable_40wire,
- .set_piomode = optidma_set_pio_mode,
- .set_dmamode = optidma_set_dma_mode,
- .set_mode = optidma_set_mode,
- .prereset = optidma_pre_reset,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = optidma_set_pio_mode,
+ .set_dmamode = optidma_set_dma_mode,
+ .set_mode = optidma_set_mode,
+ .prereset = optidma_pre_reset,
};

static struct ata_port_operations optiplus_port_ops = {
- .inherits = &optidma_port_ops,
- .set_piomode = optiplus_set_pio_mode,
- .set_dmamode = optiplus_set_dma_mode,
+ .inherits = &optidma_port_ops,
+ .set_piomode = optiplus_set_pio_mode,
+ .set_dmamode = optiplus_set_dma_mode,
};

/**
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c
index 147de2f..67a2964 100644
--- a/drivers/ata/pata_pcmcia.c
+++ b/drivers/ata/pata_pcmcia.c
@@ -163,18 +163,19 @@ static struct scsi_host_template pcmcia_sht = {
};

static struct ata_port_operations pcmcia_port_ops = {
- .inherits = &ata_sff_port_ops,
- .sff_data_xfer = ata_sff_data_xfer_noirq,
- .cable_detect = ata_cable_40wire,
- .set_mode = pcmcia_set_mode,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .sff_data_xfer = ata_sff_data_xfer_noirq,
+ .cable_detect = ata_cable_40wire,
+ .set_mode = pcmcia_set_mode,
};

static struct ata_port_operations pcmcia_8bit_port_ops = {
- .inherits = &ata_sff_port_ops,
- .sff_data_xfer = ata_data_xfer_8bit,
- .cable_detect = ata_cable_40wire,
- .set_mode = pcmcia_set_mode_8bit,
- .drain_fifo = pcmcia_8bit_drain_fifo,
+ .inherits = &ata_sff_port_ops,
+ .sff_data_xfer = ata_data_xfer_8bit,
+ .cable_detect = ata_cable_40wire,
+ .set_mode = pcmcia_set_mode_8bit,
+ .drain_fifo = pcmcia_8bit_drain_fifo,
};


diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c
index 2911120..28e42eb 100644
--- a/drivers/ata/pata_pdc202xx_old.c
+++ b/drivers/ata/pata_pdc202xx_old.c
@@ -277,6 +277,7 @@ static struct scsi_host_template pdc202xx_sht = {
static struct ata_port_operations pdc2024x_port_ops = {
.inherits = &ata_bmdma_port_ops,

+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = ata_cable_40wire,
.set_piomode = pdc202xx_set_piomode,
.set_dmamode = pdc202xx_set_dmamode,
diff --git a/drivers/ata/pata_piccolo.c b/drivers/ata/pata_piccolo.c
index bfe0180..38bd4f1 100644
--- a/drivers/ata/pata_piccolo.c
+++ b/drivers/ata/pata_piccolo.c
@@ -68,10 +68,11 @@ static struct scsi_host_template tosh_sht = {
};

static struct ata_port_operations tosh_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = ata_cable_unknown,
- .set_piomode = tosh_set_piomode,
- .set_dmamode = tosh_set_dmamode
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = ata_cable_unknown,
+ .set_piomode = tosh_set_piomode,
+ .set_dmamode = tosh_set_dmamode
};

/**
diff --git a/drivers/ata/pata_qdi.c b/drivers/ata/pata_qdi.c
index 45879dc..c9a468c 100644
--- a/drivers/ata/pata_qdi.c
+++ b/drivers/ata/pata_qdi.c
@@ -158,16 +158,17 @@ static struct scsi_host_template qdi_sht = {
};

static struct ata_port_operations qdi6500_port_ops = {
- .inherits = &ata_sff_port_ops,
- .qc_issue = qdi_qc_issue,
- .sff_data_xfer = qdi_data_xfer,
- .cable_detect = ata_cable_40wire,
- .set_piomode = qdi6500_set_piomode,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_issue = qdi_qc_issue,
+ .sff_data_xfer = qdi_data_xfer,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = qdi6500_set_piomode,
};

static struct ata_port_operations qdi6580_port_ops = {
- .inherits = &qdi6500_port_ops,
- .set_piomode = qdi6580_set_piomode,
+ .inherits = &qdi6500_port_ops,
+ .set_piomode = qdi6580_set_piomode,
};

/**
diff --git a/drivers/ata/pata_radisys.c b/drivers/ata/pata_radisys.c
index 4fd25e7..7390e2d 100644
--- a/drivers/ata/pata_radisys.c
+++ b/drivers/ata/pata_radisys.c
@@ -189,6 +189,7 @@ static struct scsi_host_template radisys_sht = {

static struct ata_port_operations radisys_pata_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.qc_issue = radisys_qc_issue,
.cable_detect = ata_cable_unknown,
.set_piomode = radisys_set_piomode,
diff --git a/drivers/ata/pata_rdc.c b/drivers/ata/pata_rdc.c
index 237a24d..7a76bde 100644
--- a/drivers/ata/pata_rdc.c
+++ b/drivers/ata/pata_rdc.c
@@ -274,6 +274,7 @@ static void rdc_set_dmamode(struct ata_port *ap, struct ata_device *adev)

static struct ata_port_operations rdc_pata_ops = {
.inherits = &ata_bmdma32_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = rdc_pata_cable_detect,
.set_piomode = rdc_set_piomode,
.set_dmamode = rdc_set_dmamode,
diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.c
index 2932998..ab4e6cc 100644
--- a/drivers/ata/pata_rz1000.c
+++ b/drivers/ata/pata_rz1000.c
@@ -55,9 +55,10 @@ static struct scsi_host_template rz1000_sht = {
};

static struct ata_port_operations rz1000_port_ops = {
- .inherits = &ata_sff_port_ops,
- .cable_detect = ata_cable_40wire,
- .set_mode = rz1000_set_mode,
+ .inherits = &ata_sff_port_ops,
+ .cable_detect = ata_cable_40wire,
+ .set_mode = rz1000_set_mode,
+ .sff_exec_command = ata_sff_exec_command_nopost,
};

static int rz1000_fifo_disable(struct pci_dev *pdev)
diff --git a/drivers/ata/pata_sc1200.c b/drivers/ata/pata_sc1200.c
index 3bbed83..8739ccc 100644
--- a/drivers/ata/pata_sc1200.c
+++ b/drivers/ata/pata_sc1200.c
@@ -208,13 +208,14 @@ static struct scsi_host_template sc1200_sht = {
};

static struct ata_port_operations sc1200_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .qc_prep = ata_sff_dumb_qc_prep,
- .qc_issue = sc1200_qc_issue,
- .qc_defer = sc1200_qc_defer,
- .cable_detect = ata_cable_40wire,
- .set_piomode = sc1200_set_piomode,
- .set_dmamode = sc1200_set_dmamode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .qc_prep = ata_sff_dumb_qc_prep,
+ .qc_issue = sc1200_qc_issue,
+ .qc_defer = sc1200_qc_defer,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = sc1200_set_piomode,
+ .set_dmamode = sc1200_set_dmamode,
};

/**
diff --git a/drivers/ata/pata_sch.c b/drivers/ata/pata_sch.c
index 99cceb4..9a0c0e3 100644
--- a/drivers/ata/pata_sch.c
+++ b/drivers/ata/pata_sch.c
@@ -77,6 +77,7 @@ static struct scsi_host_template sch_sht = {

static struct ata_port_operations sch_pata_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.cable_detect = ata_cable_unknown,
.set_piomode = sch_set_piomode,
.set_dmamode = sch_set_dmamode,
diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c
index c859767..6714adf 100644
--- a/drivers/ata/pata_serverworks.c
+++ b/drivers/ata/pata_serverworks.c
@@ -301,11 +301,12 @@ static struct scsi_host_template serverworks_sht = {
};

static struct ata_port_operations serverworks_osb4_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = serverworks_cable_detect,
- .mode_filter = serverworks_osb4_filter,
- .set_piomode = serverworks_set_piomode,
- .set_dmamode = serverworks_set_dmamode,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = serverworks_cable_detect,
+ .mode_filter = serverworks_osb4_filter,
+ .set_piomode = serverworks_set_piomode,
+ .set_dmamode = serverworks_set_dmamode,
};

static struct ata_port_operations serverworks_csb_port_ops = {
diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c
index 5c30d56..3d9a940 100644
--- a/drivers/ata/pata_sis.c
+++ b/drivers/ata/pata_sis.c
@@ -505,6 +505,7 @@ static struct scsi_host_template sis_sht = {

static struct ata_port_operations sis_133_for_sata_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.set_piomode = sis_133_set_piomode,
.set_dmamode = sis_133_set_dmamode,
.cable_detect = sis_133_cable_detect,
@@ -512,6 +513,7 @@ static struct ata_port_operations sis_133_for_sata_ops = {

static struct ata_port_operations sis_base_ops = {
.inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
.prereset = sis_pre_reset,
};

diff --git a/drivers/ata/pata_triflex.c b/drivers/ata/pata_triflex.c
index f1f13ff..1a40ded 100644
--- a/drivers/ata/pata_triflex.c
+++ b/drivers/ata/pata_triflex.c
@@ -179,12 +179,13 @@ static struct scsi_host_template triflex_sht = {
};

static struct ata_port_operations triflex_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .bmdma_start = triflex_bmdma_start,
- .bmdma_stop = triflex_bmdma_stop,
- .cable_detect = ata_cable_40wire,
- .set_piomode = triflex_set_piomode,
- .prereset = triflex_prereset,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .bmdma_start = triflex_bmdma_start,
+ .bmdma_stop = triflex_bmdma_stop,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = triflex_set_piomode,
+ .prereset = triflex_prereset,
};

static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index eccfed2..671e0cb 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -439,14 +439,15 @@ static struct scsi_host_template via_sht = {
};

static struct ata_port_operations via_port_ops = {
- .inherits = &ata_bmdma_port_ops,
- .cable_detect = via_cable_detect,
- .set_piomode = via_set_piomode,
- .set_dmamode = via_set_dmamode,
- .prereset = via_pre_reset,
- .sff_tf_load = via_tf_load,
- .port_start = via_port_start,
- .mode_filter = via_mode_filter,
+ .inherits = &ata_bmdma_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .cable_detect = via_cable_detect,
+ .set_piomode = via_set_piomode,
+ .set_dmamode = via_set_dmamode,
+ .prereset = via_pre_reset,
+ .sff_tf_load = via_tf_load,
+ .port_start = via_port_start,
+ .mode_filter = via_mode_filter,
};

static struct ata_port_operations via_port_ops_noirq = {
diff --git a/drivers/ata/pata_winbond.c b/drivers/ata/pata_winbond.c
index 6d8619b..066deea 100644
--- a/drivers/ata/pata_winbond.c
+++ b/drivers/ata/pata_winbond.c
@@ -126,10 +126,11 @@ static struct scsi_host_template winbond_sht = {
};

static struct ata_port_operations winbond_port_ops = {
- .inherits = &ata_sff_port_ops,
- .sff_data_xfer = winbond_data_xfer,
- .cable_detect = ata_cable_40wire,
- .set_piomode = winbond_set_piomode,
+ .inherits = &ata_sff_port_ops,
+ .sff_exec_command = ata_sff_exec_command_nopost,
+ .sff_data_xfer = winbond_data_xfer,
+ .cable_detect = ata_cable_40wire,
+ .set_piomode = winbond_set_piomode,
};

/**
diff --git a/include/linux/libata.h b/include/linux/libata.h
index a85adc2..ac70e4d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1591,6 +1591,8 @@ extern void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
extern void ata_sff_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
extern void ata_sff_exec_command(struct ata_port *ap,
const struct ata_taskfile *tf);
+extern void ata_sff_exec_command_nopost(struct ata_port *ap,
+ const struct ata_taskfile *tf);
extern unsigned int ata_sff_data_xfer(struct ata_device *dev,
unsigned char *buf, unsigned int buflen, int rw);
extern unsigned int ata_sff_data_xfer32(struct ata_device *dev,

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/