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>
This commit is contained in:
parent
53dce332db
commit
8c6f803fd6
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue