summaryrefslogtreecommitdiff
path: root/drivers/scsi/esp_scsi.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2018-10-16 16:31:25 +1100
committerMartin K. Petersen <martin.petersen@oracle.com>2018-10-17 21:38:29 -0400
commit8c6f803fd66e28dfe01f51d1c0b5b9188980ba58 (patch)
treeabb72e835290ec88877dcab7f5ee79a6b14d9919 /drivers/scsi/esp_scsi.c
parent53dce332db507a2bd9797adc938fa293d1f1acc6 (diff)
scsi: esp_scsi: Optimize PIO loops
Avoid function calls in the inner PIO loops. On a Centris 660av this improves throughput for sequential read transfers by about 40% and sequential write by about 10%. Unfortunately it is not possible to have methods like .esp_write8 placed inline so this is always going to be slow, even with LTO. Tested-by: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Tested-by: Michael Schmitz <schmitzmic@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/esp_scsi.c')
-rw-r--r--drivers/scsi/esp_scsi.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index a167f70e76c3..ac7da9db7317 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -2794,7 +2794,7 @@ static inline unsigned int esp_wait_for_fifo(struct esp *esp)
if (fbytes)
return fbytes;
- udelay(2);
+ udelay(1);
} while (--i);
shost_printk(KERN_ERR, esp->host, "FIFO is empty. sreg [%02x]\n",
@@ -2811,7 +2811,7 @@ static inline int esp_wait_for_intr(struct esp *esp)
if (esp->sreg & ESP_STAT_INTR)
return 0;
- udelay(2);
+ udelay(1);
} while (--i);
shost_printk(KERN_ERR, esp->host, "IRQ timeout. sreg [%02x]\n",
@@ -2839,7 +2839,7 @@ void esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count,
if (!esp_wait_for_fifo(esp))
break;
- *dst++ = esp_read8(ESP_FDATA);
+ *dst++ = readb(esp->fifo_reg);
--esp_count;
if (!esp_count)
@@ -2860,9 +2860,9 @@ void esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count,
}
if (phase == ESP_MIP)
- scsi_esp_cmd(esp, ESP_CMD_MOK);
+ esp_write8(ESP_CMD_MOK, ESP_CMD);
- scsi_esp_cmd(esp, ESP_CMD_TI);
+ esp_write8(ESP_CMD_TI, ESP_CMD);
}
} else {
unsigned int n = ESP_FIFO_SIZE;
@@ -2902,7 +2902,7 @@ void esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count,
src += n;
esp_count -= n;
- scsi_esp_cmd(esp, ESP_CMD_TI);
+ esp_write8(ESP_CMD_TI, ESP_CMD);
}
}