sdhci: Try to complete the last transaction if dumping

If the kernel panics while a thread is in the middle of an SDHCI
transaction, trying to dump to a dump target on the MMC would result in
a hang.  Fix this by completing the transaction first.

Reviewed by:	imp
Obtained from:	Hewlett Packard Enterprise
Differential Revision:	https://reviews.freebsd.org/D54255
This commit is contained in:
Justin Hibbits
2025-12-17 09:15:40 -05:00
parent f892c97b61
commit 1fad49baf3
+12
View File
@@ -2183,6 +2183,18 @@ sdhci_generic_acquire_host(device_t brdev __unused, device_t reqdev)
int err = 0;
SDHCI_LOCK(slot);
/*
* If the bus is busy at dump time, it may have stopped in the middle of
* a transaction. Try to complete that transaction before continuing.
*/
if (slot->bus_busy && dumping) {
SDHCI_UNLOCK(slot);
while (slot->req != NULL) {
sdhci_generic_intr(slot);
DELAY(10);
}
return (0);
}
while (slot->bus_busy)
msleep(slot, &slot->mtx, 0, "sdhciah", 0);
slot->bus_busy++;