Let iwm(4) and iwx(4) sleep for 1 second while loading firmware.
authorstsp <stsp@openbsd.org>
Wed, 8 Sep 2021 11:35:08 +0000 (11:35 +0000)
committerstsp <stsp@openbsd.org>
Wed, 8 Sep 2021 11:35:08 +0000 (11:35 +0000)
commit9e8160305739fc9dbb648c10ba3382911a7d3379
treec58761e922b2492e80461dd765111d36924def17
parentff7f58eb8da9d497fddb306aecce8c190bd18c57
Let iwm(4) and iwx(4) sleep for 1 second while loading firmware.

Sleeping for 1 second matches what iwn(4) does. Fixes issues where loading
firmware failed for bogus reasons. I could trigger this failure on AX200
with suspend/resume but it was not inherently specific to suspend/resume.

The previous code was looping over tsleep(9) in steps of 100msec.
This could lead to a race where the firmware's alive interrupt fired between
the endtsleep() timeout handler, which marks the sleep timeout as expired,
and sleep_finish(), which reschedules the sleeping thread. The driver would
see EWOULDBLOCK and report an error even though loading firmware did succeed.

ok mpi@
sys/dev/pci/if_iwm.c
sys/dev/pci/if_iwx.c