efi/libstub/arm/arm64: Disable debug prints on 'quiet' cmdline arg
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 4 Apr 2017 16:09:09 +0000 (17:09 +0100)
committerIngo Molnar <mingo@kernel.org>
Wed, 5 Apr 2017 10:27:28 +0000 (12:27 +0200)
The EFI stub currently prints a number of diagnostic messages that do
not carry a lot of information. Since these prints are not controlled
by 'loglevel' or other command line parameters, and since they appear on
the EFI framebuffer as well (if enabled), it would be nice if we could
turn them off.

So let's add support for the 'quiet' command line parameter in the stub,
and disable the non-error prints if it is passed.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: bhe@redhat.com
Cc: bhsharma@redhat.com
Cc: bp@alien8.de
Cc: eugene@hp.com
Cc: evgeny.kalugin@intel.com
Cc: jhugo@codeaurora.org
Cc: leif.lindholm@linaro.org
Cc: linux-efi@vger.kernel.org
Cc: roy.franz@cavium.com
Cc: rruigrok@codeaurora.org
Link: http://lkml.kernel.org/r/20170404160910.28115-2-ard.biesheuvel@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
drivers/firmware/efi/libstub/arm-stub.c
drivers/firmware/efi/libstub/arm32-stub.c
drivers/firmware/efi/libstub/efi-stub-helper.c
drivers/firmware/efi/libstub/efistub.h
drivers/firmware/efi/libstub/secureboot.c
include/linux/efi.h

index ac3222f6f805340e4bfc0b395caf4f53a3dfbead..657bb72c9e0be8b65225ad9f0d90d78fb8b40bbb 100644 (file)
@@ -116,8 +116,6 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
        if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE)
                goto fail;
 
-       pr_efi(sys_table, "Booting Linux Kernel...\n");
-
        status = check_platform_features(sys_table);
        if (status != EFI_SUCCESS)
                goto fail;
@@ -151,6 +149,16 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
                goto fail;
        }
 
+       if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
+           IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
+           cmdline_size == 0)
+               efi_parse_options(CONFIG_CMDLINE);
+
+       if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && cmdline_size > 0)
+               efi_parse_options(cmdline_ptr);
+
+       pr_efi(sys_table, "Booting Linux Kernel...\n");
+
        si = setup_graphics(sys_table);
 
        status = handle_kernel_image(sys_table, image_addr, &image_size,
@@ -162,14 +170,6 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
                goto fail_free_cmdline;
        }
 
-       if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
-           IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
-           cmdline_size == 0)
-               efi_parse_options(CONFIG_CMDLINE);
-
-       if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && cmdline_size > 0)
-               efi_parse_options(cmdline_ptr);
-
        secure_boot = efi_get_secureboot(sys_table);
 
        /*
index 18a8b5eb55e7d7fcc79cd219b81fc59cfe17d3a3..becbda44591355bf5c43c4ead2ccc54cc64a2adc 100644 (file)
@@ -9,6 +9,8 @@
 #include <linux/efi.h>
 #include <asm/efi.h>
 
+#include "efistub.h"
+
 efi_status_t check_platform_features(efi_system_table_t *sys_table_arg)
 {
        int block;
index 2e17d2b8787cacef3f837da572795904bfe22cef..b0184360efc65553ba26a1d0fecc4e483dd2c462 100644 (file)
 static unsigned long __chunk_size = EFI_READ_CHUNK_SIZE;
 
 static int __section(.data) __nokaslr;
+static int __section(.data) __quiet;
 
 int __pure nokaslr(void)
 {
        return __nokaslr;
 }
+int __pure is_quiet(void)
+{
+       return __quiet;
+}
 
 #define EFI_MMAP_NR_SLACK_SLOTS        8
 
@@ -424,6 +429,10 @@ efi_status_t efi_parse_options(char const *cmdline)
        if (str == cmdline || (str && str > cmdline && *(str - 1) == ' '))
                __nokaslr = 1;
 
+       str = strstr(cmdline, "quiet");
+       if (str == cmdline || (str && str > cmdline && *(str - 1) == ' '))
+               __quiet = 1;
+
        /*
         * If no EFI parameters were specified on the cmdline we've got
         * nothing to do.
index a7a2a2c3f1991f2eb234a9d49be9be0118039847..83f268c050071c658609e8040a5fad98bf68c378 100644 (file)
 #endif
 
 extern int __pure nokaslr(void);
+extern int __pure is_quiet(void);
+
+#define pr_efi(sys_table, msg)         do {                            \
+       if (!is_quiet()) efi_printk(sys_table, "EFI stub: "msg);        \
+} while (0)
+
+#define pr_efi_err(sys_table, msg) efi_printk(sys_table, "EFI stub: ERROR: "msg)
 
 void efi_char16_printk(efi_system_table_t *, efi_char16_t *);
 
index 5da36e56b36a1cc29c971934559e5852bed0e7bc..8c34d50a4d8032bbaba3322b3dee4ff22826a923 100644 (file)
@@ -12,6 +12,8 @@
 #include <linux/efi.h>
 #include <asm/efi.h>
 
+#include "efistub.h"
+
 /* BIOS variables */
 static const efi_guid_t efi_variable_guid = EFI_GLOBAL_VARIABLE_GUID;
 static const efi_char16_t const efi_SecureBoot_name[] = {
index e485e87615d1d51b25ce18fb053ca77b9e5ae0d0..ec36f42a2adde07cd9ca9b37ddaaf9442dccee31 100644 (file)
@@ -1435,9 +1435,6 @@ static inline int efi_runtime_map_copy(void *buf, size_t bufsz)
 
 /* prototypes shared between arch specific and generic stub code */
 
-#define pr_efi(sys_table, msg)     efi_printk(sys_table, "EFI stub: "msg)
-#define pr_efi_err(sys_table, msg) efi_printk(sys_table, "EFI stub: ERROR: "msg)
-
 void efi_printk(efi_system_table_t *sys_table_arg, char *str);
 
 void efi_free(efi_system_table_t *sys_table_arg, unsigned long size,