···8282 * if system_state is not SYSTEM_RUNNING, then wait_atomic is used ...8383 */8484struct alloc_parms {8585- struct semaphore sem;8585+ struct completion done;8686 int number;8787 atomic_t wait_atomic;8888 int used_wait_atomic;···465465 if (parmsp->used_wait_atomic)466466 atomic_set(&parmsp->wait_atomic, 0);467467 else468468- up(&parmsp->sem);468468+ complete(&parmsp->done);469469}470470471471static int allocateEvents(HvLpIndex remoteLp, int numEvents)···477477 atomic_set(&parms.wait_atomic, 1);478478 } else {479479 parms.used_wait_atomic = 0;480480- init_MUTEX_LOCKED(&parms.sem);480480+ init_completion(&parms.done);481481 }482482 mf_allocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo, 250, /* It would be nice to put a real number here! */483483 numEvents, &viopath_donealloc, &parms);···485485 while (atomic_read(&parms.wait_atomic))486486 mb();487487 } else488488- down(&parms.sem);488488+ wait_for_completion(&parms.done);489489 return parms.number;490490}491491···586586 spin_unlock_irqrestore(&statuslock, flags);587587588588 parms.used_wait_atomic = 0;589589- init_MUTEX_LOCKED(&parms.sem);589589+ init_completion(&parms.done);590590 mf_deallocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo,591591 numReq, &viopath_donealloc, &parms);592592- down(&parms.sem);592592+ wait_for_completion(&parms.done);593593594594 spin_lock_irqsave(&statuslock, flags);595595 for (i = 0, numOpen = 0; i < VIO_MAX_SUBTYPES; i++)