From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E433C43387 for ; Fri, 14 Dec 2018 15:49:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 624C62075B for ; Fri, 14 Dec 2018 15:49:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=linaro.org header.i=@linaro.org header.b="eTZPd2JM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729322AbeLNPtn (ORCPT ); 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-Google-Smtp-Source: AFSGD/ULtprtqgzDwwQNmlXOuolZrpVNGBadkKnv3oBZRusgwQLf32XWhneMMl29X2Rd29Ue4qMCd4n1SbDFk9k/PFE= 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7B5CC43387 for ; Fri, 14 Dec 2018 15:50:09 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DBD142070B for ; Fri, 14 Dec 2018 15:50:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pmQVlB8r"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=linaro.org header.i=@linaro.org header.b="eTZPd2JM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DBD142070B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ucp1LhfQ/GZc1u2SDIC3cZ4hkxD3PcBZC6tFjhXJJ0o=; b=pmQVlB8raR2oKV p9VrgAgwYEOMg/gDSbx0QoxmC58O9+OG1IZWsO8ayRLOOwq//IrPvMgTPo7N6FxJdggerrGKpZK5L a9jeTcnoO/5/EmljIglmMt8Ij+ZtOkE/mCtQPo3AMjkK1M4riEzrSu3lP0IOwb/2AOmlc7IxX4mnp Awt40YmMxITuYvYS+DZBp6IZGZmfXXmUB2v11UmFf22EvcrhkQeqLN0MWc8YqUJC0XdUEI9DtsZQi 4yu1g0Y1+Rg75dB4wUfDhwMp+cswa/I0+ow+ifrqv65wqOxuUUT19MIegzKNcRkPxMnqtOb5+ulEu qxeKE7yvXEMcY9r3LvaA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gXpj4-0001c6-7o; Fri, 14 Dec 2018 15:50:06 +0000 Received: from mail-it1-x142.google.com ([2607:f8b0:4864:20::142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gXpiq-00015k-JM for linux-arm-kernel@lists.infradead.org; Fri, 14 Dec 2018 15:49:58 +0000 Received: by mail-it1-x142.google.com with SMTP id x124so19252012itd.1 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=qLetpUOXNiVP6xFEoK60f/USrd7/0BBPqibNbF2aiXkR722E/elDFPMNHDoBmt70yZ IFbPxyCGLF3d4l97m1xHgHKqXydBHPZZeuFDApJhzMrils6BvWA7ou+Wl44oCi5ADJKl ujJOIgXhAnG/cZ04YQVP3gUbxqAOqtwz6L9Kr2AfzX0NRuzXepmjdtcbvFof01U6O2Cp pxQYYbarIglOWGFUWw/VPuT+ESoW1k3xotOHHgGgfVhMI1BJd5JyVwG07NtWU8GWsYsd 0tZrrnRY8AMRaTlLOljYLEzDvsqGw0JRLb1p7jJBiqJMKoOGshg/hu2vku6H2Ls6/3/7 1+JQ== X-Gm-Message-State: AA+aEWaKIJAT+jt2VWunYfJf/vJllG+j0WjzvkEOWt4WnXyYMZgmxU/V E5glPlCTAuFVAP+LMfvxd7HHVqLMwSyfWIoQnhm1MA== X-Google-Smtp-Source: AFSGD/ULtprtqgzDwwQNmlXOuolZrpVNGBadkKnv3oBZRusgwQLf32XWhneMMl29X2Rd29Ue4qMCd4n1SbDFk9k/PFE= 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181214_074952_964065_6A8B0766 X-CRM114-Status: GOOD ( 28.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Daniel Thompson , Marc Zyngier , Catalin Marinas , Will Deacon , Linux Kernel Mailing List , Christoffer Dall , James Morse , oleg@redhat.com, joel@joelfernandes.org, linux-arm-kernel Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel