Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2233749imu; Fri, 14 Dec 2018 07:51:52 -0800 (PST) X-Google-Smtp-Source: AFSGD/WtenWm2ymXDyfJ2D6MFoOfxJDKgPtbeKFe2dqeb3ppvnh3u7vMrRIA0CCyPa3feUv7qmoL X-Received: by 2002:aa7:87ce:: with SMTP id i14mr3324309pfo.20.1544802712871; Fri, 14 Dec 2018 07:51:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544802712; cv=none; d=google.com; s=arc-20160816; b=KIPdvbLA1Sg7g5oIaLi17Nk04d06JqqGD8/yRDPKJHCXHSzIFVdqx0HEw7JLgKa3OZ 1oHx0xyEIO4WWcGsEnp7PKgOagR0YbM0MAUk3jrkFVTpuhttg0OVgADa3kpMSE3i19g4 hgP0Fa/47aUo6di7y/BZrvImGPC/vL/uMvOrPSZs030YwjEeCjmFyqrjT+LfV/VlRX16 tYly5VtLzFReniDOZ8YiRJLglB4geCATu6X7vc4V1nSZyjMmMAO/GltWlKHk43BWzquB a5nAGS9OiPhU4bwaiBuZMcJIckQiuem9JanjLz8U19jk+nHAWCVZO4sqUIlav0hAk7Pf GA7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=7cekYVd3SwgVZKOJxvkj2wuPGUq4WC8lvYFWoAFmoCU=; b=BlbhfaDyi8HfWxQ3ZBsZEWsVuPNcLYzZnoJERISuaHy36uTrk4bX5oVZX15XpXtQQk 3RwFnJSMlPeTn3ChjjAeT+H+/QO3XeOqLmvL9bOM1lIRfsz6HU9zNtcTsbPqg8X1DYrg hjg6v0YbOHgaomQrX7oJZqAU+tVu76dHWMjzQzlDV1vKIUfF0XxmgdX0D1oYODf1GjPs OXPbbXp25HE7zXBCaSthHyg7qmxXT4O3ZHqa79cmRd37pZlieTy74oy0ocdZ9C4uHSq2 Lylm6AzCCthp1cYygMQff4bSi0oqSiUXFAvcYUZ0KWyZvS8WjzNUlApPlFO133M2QyiA yFgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eTZPd2JM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 12si4481592pfx.102.2018.12.14.07.51.32; Fri, 14 Dec 2018 07:51:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eTZPd2JM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729277AbeLNPtn (ORCPT + 99 others); Fri, 14 Dec 2018 10:49:43 -0500 Received: from mail-it1-f195.google.com ([209.85.166.195]:54909 "EHLO mail-it1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726298AbeLNPtm (ORCPT ); Fri, 14 Dec 2018 10:49:42 -0500 Received: by mail-it1-f195.google.com with SMTP id i145so9471276ita.4 for ; Fri, 14 Dec 2018 07:49:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7cekYVd3SwgVZKOJxvkj2wuPGUq4WC8lvYFWoAFmoCU=; b=eTZPd2JMjSHMLcCNHw4/kkYGXqIc8JBdrdlZTF192rvGF3F/5lmbHGdPPpDKeDIuhz 0Um7HkpPlB7lhzQmuFH5hA63g7LKU7aXB8qDworyJrFS4cychcsOYKUCJR1SF1eZD+Pv +yeoe9FgJB6AsWHdlz2IV4Iyj6mlPAH97iVgA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7cekYVd3SwgVZKOJxvkj2wuPGUq4WC8lvYFWoAFmoCU=; b=gYdcZf7xfyolMbLrjNoFwYgEY2e3xwBg1/33cEVUphGv35YkHCkt0UzOaJNCG+X7ZV QdUJcLcIB1FgY8CmH3imuTHUDDhtL9pT9+jFQvSvlQtJGwm5lgP57hglbDNtmJK6kZOu FmZfs87VAMwr7AeF6e0rDejU6duR3qGDxehExI3FXjILzuPhYhUchrbFveJqWG7fIykz qUeoFSEylTgp1HCGoFUNbw9sovb7ai68n/Xcl9UzNO6A/SwsOZjhZqHjrloVlOtxmfyJ czmKnobAER9aO1/lZZF/dJsMqTV6xt8gz4awvN6ykUXe7/tXayc+B2fpSH45BXoB+rB0 b6jg== X-Gm-Message-State: AA+aEWaXAd32gKWkXJiHw0IvQiil1Jzse544iBkgfC6+4yBd7tMY7k2I GQYNksNYoEQvQuzNx53+70X2B+WBrdwh8+XotJHg0Q== X-Received: by 2002:a02:734b:: with SMTP id a11mr2957325jae.62.1544802581039; Fri, 14 Dec 2018 07:49:41 -0800 (PST) MIME-Version: 1.0 References: <1544633245-6036-1-git-send-email-julien.thierry@arm.com> <1544633245-6036-12-git-send-email-julien.thierry@arm.com> <19500d6b-62a3-21cb-9ac0-a4e5d4714a63@arm.com> <31e41461-763f-aa7d-91ea-b493ede81eed@arm.com> <7d42f570-541a-59a3-79fc-f00dc0b51689@arm.com> In-Reply-To: <7d42f570-541a-59a3-79fc-f00dc0b51689@arm.com> From: Ard Biesheuvel Date: Fri, 14 Dec 2018 16:49:29 +0100 Message-ID: Subject: Re: [PATCH v7 11/25] arm64: irqflags: Use ICC_PMR_EL1 for interrupt masking To: Julien Thierry Cc: linux-arm-kernel , Linux Kernel Mailing List , Daniel Thompson , joel@joelfernandes.org, Marc Zyngier , Christoffer Dall , James Morse , Catalin Marinas , Will Deacon , Mark Rutland , oleg@redhat.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 14 Dec 2018 at 16:23, Julien Thierry wrote: > > Hi, > > On 13/12/2018 15:03, Julien Thierry wrote: > > > > Argh, not as simple as I had expected. > > > > Turns out include/linux/efi.h does not include asm/efi.h (including it > > at the beginning of the file breaks the build because asm/efi.h misses > > the efi type definitions. > > > > So a thing like: > > > > #ifndef efi_get_irqflags > > #define efi_get_irqflags(flags) local_save_flags(flags) > > #endif > > > > in include/linux/efi.h cannot be overridden. > > > > Either I would need to introduce the definitions arm, arm64 and x86 (I > > don't think there are other arch supporting EFI right now) or I'll need > > to come up with another solution. > > > It might be a bit nasty, but can we put the #ifndef above in runtime-wrappers.c directly? The only reference in linux/efi.h is a macro, so that shouldn't matter afaict. > Would the following patch be acceptable for the EFI generic side? > > If it is, I'll add it to the next iteration of this series. > > Thanks, > > Julien > > --> > > From 7acaa8e17142263addafb18ae10bd5d2d49cfb39 Mon Sep 17 00:00:00 2001 > From: Julien Thierry > Date: Fri, 14 Dec 2018 14:20:13 +0000 > Subject: [RFC] efi: Let architectures decide the flags that should be > saved/restored > > Currently, irqflags are saved before calling runtime services and > checked for mismatch on return. > > Add a config option to let architectures define a set of flags to be > checked and (if needed) restored when coming back from runtime services. > This allows to use check flags that are not necesarly related to > irqflags. > > Signed-off-by: Julien Thierry > --- > arch/Kconfig | 8 ++++++++ > drivers/firmware/efi/runtime-wrappers.c | 4 ++-- > include/linux/efi.h | 12 ++++++++++-- > 3 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/arch/Kconfig b/arch/Kconfig > index e1e540f..cbec325 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -695,6 +695,14 @@ config HAVE_ARCH_HASH > file which provides platform-specific implementations of some > functions in or fs/namei.c. > > +config HAVE_GENERIC_EFI_FLAGS > + bool > + default n > + help > + Architecture defines a set of flags that EFI runtime services > + should take care to restore when returning to the OS. > + If this is not set, the set of flags defaults to the arch irqflags. > + > config ISA_BUS_API > def_bool ISA > > diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c > index 8903b9c..6dafa04 100644 > --- a/drivers/firmware/efi/runtime-wrappers.c > +++ b/drivers/firmware/efi/runtime-wrappers.c > @@ -93,7 +93,7 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call) > { > unsigned long cur_flags, mismatch; > > - local_save_flags(cur_flags); > + efi_save_flags(cur_flags); > > mismatch = flags ^ cur_flags; > if (!WARN_ON_ONCE(mismatch & ARCH_EFI_IRQ_FLAGS_MASK)) > @@ -102,7 +102,7 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call) > add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_NOW_UNRELIABLE); > pr_err_ratelimited(FW_BUG "IRQ flags corrupted (0x%08lx=>0x%08lx) by EFI %s\n", > flags, cur_flags, call); > - local_irq_restore(flags); > + efi_restore_flags(flags); > } > > /* > diff --git a/include/linux/efi.h b/include/linux/efi.h > index 100ce4a..41c110a 100644 > --- a/include/linux/efi.h > +++ b/include/linux/efi.h > @@ -1594,6 +1594,14 @@ enum efi_secureboot_mode { > > void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table); > > +#ifdef CONFIG_HAVE_GENERIC_EFI_FLAGS > +#define efi_save_flags(state_flags) arch_efi_save_flags(state_flags) > +#define efi_restore_flags(state_flags) arch_efi_restore_flags(state_flags) > +#else > +#define efi_save_flags(state_flags) local_save_flags(state_flags) > +#define efi_restore_flags(state_flags) local_irq_restore(state_flags) > +#endif > + > /* > * Arch code can implement the following three template macros, avoiding > * reptition for the void/non-void return cases of {__,}efi_call_virt(): > @@ -1621,7 +1629,7 @@ enum efi_secureboot_mode { > \ > arch_efi_call_virt_setup(); \ > \ > - local_save_flags(__flags); \ > + efi_save_flags(__flags); \ > __s = arch_efi_call_virt(p, f, args); \ > efi_call_virt_check_flags(__flags, __stringify(f)); \ > \ > @@ -1636,7 +1644,7 @@ enum efi_secureboot_mode { > \ > arch_efi_call_virt_setup(); \ > \ > - local_save_flags(__flags); \ > + efi_save_flags(__flags); \ > arch_efi_call_virt(p, f, args); \ > efi_call_virt_check_flags(__flags, __stringify(f)); \ > \ > -- > 1.9.1 > > > > > -- > Julien Thierry