Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753409AbcDXVMQ (ORCPT ); Sun, 24 Apr 2016 17:12:16 -0400 Received: from mail-wm0-f42.google.com ([74.125.82.42]:37809 "EHLO mail-wm0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753176AbcDXVMP (ORCPT ); Sun, 24 Apr 2016 17:12:15 -0400 Date: Sun, 24 Apr 2016 22:12:12 +0100 From: Matt Fleming To: Mark Rutland Cc: linux-efi@vger.kernel.org, ard.biesheuvel@linaro.org, catalin.marinas@arm.com, hpa@zytor.com, leif.lindholm@linaro.org, linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk, linux-kernel@vger.kernel.org, mingo@redhat.com, tglx@linutronix.de, will.deacon@arm.com Subject: Re: [PATCHv2 1/6] efi/runtime-wrappers: add {__,}efi_call_virt templates Message-ID: <20160424211212.GM2829@codeblueprint.co.uk> References: <1461333083-15529-1-git-send-email-mark.rutland@arm.com> <1461333083-15529-2-git-send-email-mark.rutland@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1461333083-15529-2-git-send-email-mark.rutland@arm.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: 1787 Lines: 44 On Fri, 22 Apr, at 02:51:18PM, Mark Rutland wrote: > Currently each architecture must implement two macros, efi_call_virt and > __efi_call_virt, which only differ by the presence or absence of a > return type. Otherwise, the logic surrounding the call is identical. > > As each architecture must define the entire body of each, we can't place > any generic manipulation (e.g. irq flag validation) in the middle. > > This patch adds template implementations of these macros. With these, > arch code can implement three template macros, avoiding reptition for > the void/non-void return cases: > > * arch_efi_call_virt_setup > > Sets up the environment for the call (e.g. switching page tables, > allowing kernel-mode use of floating point, if required). > > * arch_efi_call_virt > > Performs the call. The last expression in the macro must be the call > itself, allowing the logic to be shared by the void and non-void > cases. > > * arch_efi_call_virt_teardown > > Restores the usual kernel environment once the call has returned. > > While the savings from repition are minimal, we additionally gain the > ability to add common code around the call with the call environment set > up. This can be used to detect common firmware issues (e.g. bad irq mask > management). > > Signed-off-by: Mark Rutland > Reviewed-by: Ard Biesheuvel > Cc: Matt Fleming > Cc: linux-efi@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > --- > drivers/firmware/efi/runtime-wrappers.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) Applied. I incorporated the explanation of the 3 template macros next to the code because it is too useful to only have it exist in the git commit history.