powerpc/powernv: Fix OPAL_CONSOLE_FLUSH prototype and usages
authorRussell Currey <ruscur@russell.cc>
Wed, 13 Jan 2016 01:04:32 +0000 (12:04 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Mar 2016 15:43:01 +0000 (08:43 -0700)
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
arch/powerpc/platforms/powernv/opal-kmsg.c

index a5fd407213b6e590b35b874dc7b03c486e2fbe0a..07a99e638449acdbbcb9817919d3ce62f0d2b0a9 100644 (file)
@@ -35,7 +35,7 @@ int64_t opal_console_read(int64_t term_number, __be64 *length,
                          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,
index bd3b2ee1ba1d6f1bb0eb235bba64e841caf639d2..6f1214d4de926ade09460b989383337a034225d6 100644 (file)
@@ -27,6 +27,7 @@ static void force_opal_console_flush(struct kmsg_dumper *dumper,
                                     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(struct kmsg_dumper *dumper,
                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,