This while loop was originally a goto loop:
1f2b79599ee8 ("firmware loader: always let firmware_buf own the pages
buffer")
I don't think the code doesn't do what it was indented to do. The reason
is that calling complete_all() the wait_for_completion() will not block
again until it has 'eaten up' the done counter. That is around UMAX/2
loops. So there is an reinit_completion() missing in this case.
Before the above commit, the completion was used to wait inside
_request_firmware_load() till the UML had done its job. The answer for
your question is probably in 1f2b79599ee8 ("firmware loader: always let
firmware_buf own the pages buffer").