Fix NCQ TRIM emulation.
When this code was written, there was no guests using it to test.
This commit is contained in:
parent
74312a0e2f
commit
2e12a25c19
@ -837,7 +837,15 @@ ahci_handle_dsm_trim(struct ahci_port *p, int slot, uint8_t *cfis, uint32_t done
|
||||
done += 8;
|
||||
if (elen == 0) {
|
||||
if (done >= len) {
|
||||
ahci_write_fis_d2h(p, slot, cfis, ATA_S_READY | ATA_S_DSC);
|
||||
if (ncq) {
|
||||
if (first)
|
||||
ahci_write_fis_d2h_ncq(p, slot);
|
||||
ahci_write_fis_sdb(p, slot, cfis,
|
||||
ATA_S_READY | ATA_S_DSC);
|
||||
} else {
|
||||
ahci_write_fis_d2h(p, slot, cfis,
|
||||
ATA_S_READY | ATA_S_DSC);
|
||||
}
|
||||
p->pending &= ~(1 << slot);
|
||||
ahci_check_stopped(p);
|
||||
if (!first)
|
||||
@ -1718,7 +1726,7 @@ ahci_handle_cmd(struct ahci_port *p, int slot, uint8_t *cfis)
|
||||
case ATA_SEND_FPDMA_QUEUED:
|
||||
if ((cfis[13] & 0x1f) == ATA_SFPDMA_DSM &&
|
||||
cfis[17] == 0 && cfis[16] == ATA_DSM_TRIM &&
|
||||
cfis[11] == 0 && cfis[13] == 1) {
|
||||
cfis[11] == 0 && cfis[3] == 1) {
|
||||
ahci_handle_dsm_trim(p, slot, cfis, 0);
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user