diff options
author | Christoph Hellwig <hch@lst.de> | 2007-05-15 23:10:34 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-05-17 21:11:13 +1000 |
commit | 39d207036c76ff16650772b83fb1a12ab788ca26 (patch) | |
tree | 4c9c5207b53b634fc14cf854cc6e069850bf2ddb /arch/powerpc/platforms | |
parent | 9d561ed46ea33c223def2eb8e2b09ea108a4d70b (diff) | |
download | linux-39d207036c76ff16650772b83fb1a12ab788ca26.tar.gz linux-39d207036c76ff16650772b83fb1a12ab788ca26.tar.bz2 linux-39d207036c76ff16650772b83fb1a12ab788ca26.zip |
[POWERPC] viopath: Use a completion in some more places
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/iseries/viopath.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c index 7f58e5929a2c..6a0060a5f2ec 100644 --- a/arch/powerpc/platforms/iseries/viopath.c +++ b/arch/powerpc/platforms/iseries/viopath.c @@ -82,7 +82,7 @@ static void handleMonitorEvent(struct HvLpEvent *event); * if system_state is not SYSTEM_RUNNING, then wait_atomic is used ... */ struct alloc_parms { - struct semaphore sem; + struct completion done; int number; atomic_t wait_atomic; int used_wait_atomic; @@ -465,7 +465,7 @@ static void viopath_donealloc(void *parm, int number) if (parmsp->used_wait_atomic) atomic_set(&parmsp->wait_atomic, 0); else - up(&parmsp->sem); + complete(&parmsp->done); } static int allocateEvents(HvLpIndex remoteLp, int numEvents) @@ -477,7 +477,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents) atomic_set(&parms.wait_atomic, 1); } else { parms.used_wait_atomic = 0; - init_MUTEX_LOCKED(&parms.sem); + init_completion(&parms.done); } mf_allocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo, 250, /* It would be nice to put a real number here! */ numEvents, &viopath_donealloc, &parms); @@ -485,7 +485,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents) while (atomic_read(&parms.wait_atomic)) mb(); } else - down(&parms.sem); + wait_for_completion(&parms.done); return parms.number; } @@ -586,10 +586,10 @@ int viopath_close(HvLpIndex remoteLp, int subtype, int numReq) spin_unlock_irqrestore(&statuslock, flags); parms.used_wait_atomic = 0; - init_MUTEX_LOCKED(&parms.sem); + init_completion(&parms.done); mf_deallocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo, numReq, &viopath_donealloc, &parms); - down(&parms.sem); + wait_for_completion(&parms.done); spin_lock_irqsave(&statuslock, flags); for (i = 0, numOpen = 0; i < VIO_MAX_SUBTYPES; i++) |