forked from Minki/linux
powerpc/powernv: move opal console flushing to udbg
OPAL console writes do not have to synchronously flush firmware / hardware buffers unless they are going through the udbg path. Remove the unconditional flushing from opal_put_chars. Flush if there was no space in the buffer as an optimisation (callers loop waiting for success in that case). udbg flushing is moved to udbg_opal_putc. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
b74d2807ae
commit
ac4ac788fd
@ -400,12 +400,14 @@ int opal_put_chars(uint32_t vtermno, const char *data, int total_len)
|
||||
out:
|
||||
spin_unlock_irqrestore(&opal_write_lock, flags);
|
||||
|
||||
/* This is a bit nasty but we need that for the console to
|
||||
* flush when there aren't any interrupts. We will clean
|
||||
* things a bit later to limit that to synchronous path
|
||||
* such as the kernel console and xmon/udbg
|
||||
/* In the -EAGAIN case, callers loop, so we have to flush the console
|
||||
* here in case they have interrupts off (and we don't want to wait
|
||||
* for async flushing if we can make immediate progress here). If
|
||||
* necessary the API could be made entirely non-flushing if the
|
||||
* callers had a ->flush API to use.
|
||||
*/
|
||||
opal_flush_console(vtermno);
|
||||
if (written == -EAGAIN)
|
||||
opal_flush_console(vtermno);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
@ -275,6 +275,11 @@ static void udbg_opal_putc(char c)
|
||||
count = hvc_opal_hvsi_put_chars(termno, &c, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
/* This is needed for the cosole to flush
|
||||
* when there aren't any interrupts.
|
||||
*/
|
||||
opal_flush_console(termno);
|
||||
} while(count == 0 || count == -EAGAIN);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user