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

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
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -400,11 +400,13 @@ 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.
	 */
	if (written == -EAGAIN)
		opal_flush_console(vtermno);

	return written;
+5 −0
Original line number Diff line number Diff line
@@ -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);
}