Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752424AbcD2KaR (ORCPT ); Fri, 29 Apr 2016 06:30:17 -0400 Received: from mail-wm0-f52.google.com ([74.125.82.52]:38280 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751291AbcD2KaO (ORCPT ); Fri, 29 Apr 2016 06:30:14 -0400 Date: Fri, 29 Apr 2016 11:30:11 +0100 From: Matt Fleming To: Ingo Molnar Cc: jeremy.compostella@intel.com, stefan.stanacar@intel.com, peterz@infradead.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, hpa@zytor.com, bp@alien8.de, ard.biesheuvel@linaro.org, linux-tip-commits@vger.kernel.org Subject: Re: [tip:efi/core] efibc: Add EFI Bootloader Control module Message-ID: <20160429103011.GE2839@codeblueprint.co.uk> References: <1461614832-17633-26-git-send-email-matt@codeblueprint.co.uk> <20160429095356.GA29957@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160429095356.GA29957@gmail.com> User-Agent: Mutt/1.5.24+41 (02bc14ed1569) (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2044 Lines: 46 On Fri, 29 Apr, at 11:53:56AM, Ingo Molnar wrote: > > * tip-bot for Compostella, Jeremy wrote: > > > Commit-ID: 06f7d4a1618dbb086e738c93cd1ef416ab01027d > > Gitweb: http://git.kernel.org/tip/06f7d4a1618dbb086e738c93cd1ef416ab01027d > > Author: Compostella, Jeremy > > AuthorDate: Mon, 25 Apr 2016 21:06:57 +0100 > > Committer: Ingo Molnar > > CommitDate: Thu, 28 Apr 2016 11:34:02 +0200 > > > > efibc: Add EFI Bootloader Control module > > > > This module installs a reboot callback, such that if reboot() is invoked > > with a string argument NNN, "NNN" is copied to the "LoaderEntryOneShot" > > EFI variable, to be read by the bootloader. > > > drivers/firmware/efi/Kconfig | 15 +++++++ > > drivers/firmware/efi/Makefile | 1 + > > drivers/firmware/efi/efibc.c | 101 ++++++++++++++++++++++++++++++++++++++++++ > > include/linux/efi.h | 4 ++ > > 4 files changed, 121 insertions(+) > > So this bloated things a bit on 32-bit x86 allyesconfig kernels, we now have this > new warning: > > drivers/firmware/efi/efibc.c:53:1: warning: the frame size of 2256 bytes is larger than 1024 bytes [-Wframe-larger-than=] > > 2K of stack use for a function is quite excessive, can we improve the stack > footprint of this code? I'm waiting to hear from Jeremy on whether we can simply move the struct efivar_entry (which is the cause of the stack bloat) off the stack and into the .bss, because it only gets used from the reboot notifier call chain. But upon reading kernel_restart() I'm no longer sure it's guaranteed to be called only once, or even non-concurrently. It seems that if the user executes the reboot command and either the sysrq reboot code is invoked, or an error is encountered dm-verify-target driver or any other kernel_restart() caller is invoked we could race. Perhaps we should guard efi_reboot_notifier_call() with an atomic_t and exit if we've already invoked it? Alternatively, we could just kmalloc() the object ;)