| From c88c5d43732a0356f99e5e4d1ad62ab1ea516b81 Mon Sep 17 00:00:00 2001 |
| From: Russell Currey <ruscur@russell.cc> |
| Date: Wed, 13 Jan 2016 12:04:32 +1100 |
| Subject: powerpc/powernv: Fix OPAL_CONSOLE_FLUSH prototype and usages |
| |
| From: Russell Currey <ruscur@russell.cc> |
| |
| commit c88c5d43732a0356f99e5e4d1ad62ab1ea516b81 upstream. |
| |
| The recently added OPAL API call, OPAL_CONSOLE_FLUSH, originally took no |
| parameters and returned nothing. The call was updated to accept the |
| terminal number to flush, and returned various values depending on the |
| state of the output buffer. |
| |
| The prototype has been updated and its usage in the OPAL kmsg dumper has |
| been modified to support its new behaviour as an incremental flush. |
| |
| Signed-off-by: Russell Currey <ruscur@russell.cc> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/include/asm/opal.h | 2 +- |
| arch/powerpc/platforms/powernv/opal-kmsg.c | 9 ++++++++- |
| 2 files changed, 9 insertions(+), 2 deletions(-) |
| |
| --- a/arch/powerpc/include/asm/opal.h |
| +++ b/arch/powerpc/include/asm/opal.h |
| @@ -35,7 +35,7 @@ int64_t opal_console_read(int64_t term_n |
| uint8_t *buffer); |
| int64_t opal_console_write_buffer_space(int64_t term_number, |
| __be64 *length); |
| -void opal_console_flush(void); |
| +int64_t opal_console_flush(int64_t term_number); |
| int64_t opal_rtc_read(__be32 *year_month_day, |
| __be64 *hour_minute_second_millisecond); |
| int64_t opal_rtc_write(uint32_t year_month_day, |
| --- a/arch/powerpc/platforms/powernv/opal-kmsg.c |
| +++ b/arch/powerpc/platforms/powernv/opal-kmsg.c |
| @@ -27,6 +27,7 @@ static void force_opal_console_flush(str |
| enum kmsg_dump_reason reason) |
| { |
| int i; |
| + int64_t ret; |
| |
| /* |
| * Outside of a panic context the pollers will continue to run, |
| @@ -36,7 +37,13 @@ static void force_opal_console_flush(str |
| return; |
| |
| if (opal_check_token(OPAL_CONSOLE_FLUSH)) { |
| - opal_console_flush(); |
| + ret = opal_console_flush(0); |
| + |
| + if (ret == OPAL_UNSUPPORTED || ret == OPAL_PARAMETER) |
| + return; |
| + |
| + /* Incrementally flush until there's nothing left */ |
| + while (opal_console_flush(0) != OPAL_SUCCESS); |
| } else { |
| /* |
| * If OPAL_CONSOLE_FLUSH is not implemented in the firmware, |