struct doneAllocParms_t {
struct semaphore *sem;
int number;
- volatile unsigned long *wait_atomic;
+ atomic_t *wait_atomic;
int used_wait_atomic;
};
parmsp->number = number;
if (parmsp->used_wait_atomic)
- *(parmsp->wait_atomic) = 0;
+ atomic_set(parmsp->wait_atomic, 0);
else
up(parmsp->sem);
}
{
struct doneAllocParms_t parms;
DECLARE_MUTEX_LOCKED(Semaphore);
- volatile unsigned long wait_atomic = 1;
+ atomic_t wait_atomic;
if (in_atomic()) {
parms.used_wait_atomic = 1;
+ atomic_set(&wait_atomic, 1);
parms.wait_atomic = &wait_atomic;
} else {
parms.used_wait_atomic = 0;
mf_allocateLpEvents(remoteLp, HvLpEvent_Type_VirtualIo, 250, /* It would be nice to put a real number here! */
numEvents, &viopath_donealloc, &parms);
if (in_atomic()) {
- while (wait_atomic)
+ while (atomic_read(&wait_atomic))
mb();
} else
down(&Semaphore);
spin_unlock_irqrestore(&statuslock, flags);
+ doneAllocParms.used_wait_atomic = 0;
doneAllocParms.sem = &Semaphore;
mf_deallocateLpEvents(remoteLp, HvLpEvent_Type_VirtualIo,
numReq, &viopath_donealloc, &doneAllocParms);