Process port interrupt even is PxIS register is zero.
ASMedia ASM1062 AHCI chips with some fancy firmware handling PMP inside seems sometimes forgeting to set bits in PxIS, causing command timeouts. Removal of this check fixes the issue by the theoretical cost of slightly higher CPU usage in some odd cases, but this is what Linux does too. MFC after: 1 month
This commit is contained in:
parent
0451d4e97b
commit
6ddb10bd0c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=309251
@ -1169,8 +1169,6 @@ ahci_ch_intr(void *arg)
|
|||||||
|
|
||||||
/* Read interrupt statuses. */
|
/* Read interrupt statuses. */
|
||||||
istatus = ATA_INL(ch->r_mem, AHCI_P_IS);
|
istatus = ATA_INL(ch->r_mem, AHCI_P_IS);
|
||||||
if (istatus == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mtx_lock(&ch->mtx);
|
mtx_lock(&ch->mtx);
|
||||||
ahci_ch_intr_main(ch, istatus);
|
ahci_ch_intr_main(ch, istatus);
|
||||||
@ -1187,8 +1185,6 @@ ahci_ch_intr_direct(void *arg)
|
|||||||
|
|
||||||
/* Read interrupt statuses. */
|
/* Read interrupt statuses. */
|
||||||
istatus = ATA_INL(ch->r_mem, AHCI_P_IS);
|
istatus = ATA_INL(ch->r_mem, AHCI_P_IS);
|
||||||
if (istatus == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mtx_lock(&ch->mtx);
|
mtx_lock(&ch->mtx);
|
||||||
ch->batch = 1;
|
ch->batch = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user