Commit ac4ac788 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

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: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent b74d2807
......@@ -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);
}
......
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