On 9/10/26 00:48, Fabiano Rosas wrote: > "Denis V. Lunev" <[email protected]> writes: > >> From: Denis V. Lunev <[email protected]> >> >> test_write_engine_stop_in_flight() resumes the suspended backend write >> and goes straight on to restart the command engine and read the second >> sector back. Whether the write has retired by then is a race. While it >> is still outstanding the drive is busy, and handle_cmd() drops a >> command that arrives in that state instead of queueing it. Nothing >> retries the drop, so the PxCI slot stays set and no D2H FIS is posted. >> ahci_command_wait() polls both with no timeout, so the test deadlocks >> until the harness kills it. >> >> Drain the port before issuing the read, so the abandoned write has >> retired and the engine is idle. Host load stretches the gap between the >> resume and the write completing, which is why the deadlock only shows >> up on a loaded machine. >> >> Fixes: d05ae87e7a6a ("tests/qtest/ahci: regression test for a PIO write vs. >> engine stop") >> Signed-off-by: Denis V. Lunev <[email protected]> >> --- >> tests/qtest/ahci-test.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c >> index b143862ce7..2552fa39f1 100644 >> --- a/tests/qtest/ahci-test.c >> +++ b/tests/qtest/ahci-test.c >> @@ -1914,6 +1914,12 @@ static void test_write_engine_stop_in_flight(void) >> >> g_free(qtest_hmp(ahci->parent->qts, "qemu-io drive0 \"resume wr\"")); >> >> + /* >> + * Retire the abandoned write. handle_cmd() drops a command that arrives >> + * while the drive is still busy and nothing retries it. >> + */ >> + g_free(qtest_hmp(ahci->parent->qts, "qemu-io drive0 \"aio_flush\"")); >> + >> /* Round-trip through the device to confirm qemu is still alive. */ >> ahci_px_rreg(ahci, port, AHCI_PX_TFD); > Reviewed-by: Fabiano Rosas <[email protected]> Hi, Fabiano!
Would you mind to get this patch through test tree? I do not have enough IDE material except this patch for now. Thank you in advance, Den
