Commit 796cdefd authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Linus Torvalds

[PATCH] ppc64: don't use in_atomic()

in_atomic() in viopath.c was just used to determine if we had initialised
enough to be able to wait in a semaphore (i.e.  schedule).  Thus it can be
replaced now with checking system_state for SYSTEM_RUNNING.

Test booted on iSeries (which is the only place it is used).
Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d9f1c6de
......@@ -79,7 +79,7 @@ static void handleMonitorEvent(struct HvLpEvent *event);
/*
* We use this structure to handle asynchronous responses. The caller
* blocks on the semaphore and the handler posts the semaphore. However,
* if in_atomic() is true in the caller, then wait_atomic is used ...
* if system_state is not SYSTEM_RUNNING, then wait_atomic is used ...
*/
struct doneAllocParms_t {
struct semaphore *sem;
......@@ -465,7 +465,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents)
DECLARE_MUTEX_LOCKED(Semaphore);
atomic_t wait_atomic;
if (in_atomic()) {
if (system_state != SYSTEM_RUNNING) {
parms.used_wait_atomic = 1;
atomic_set(&wait_atomic, 1);
parms.wait_atomic = &wait_atomic;
......@@ -475,7 +475,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents)
}
mf_allocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo, 250, /* It would be nice to put a real number here! */
numEvents, &viopath_donealloc, &parms);
if (in_atomic()) {
if (system_state != SYSTEM_RUNNING) {
while (atomic_read(&wait_atomic))
mb();
} else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment