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 <mark.rutland@xxxxxxx> > Reviewed-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > Cc: Matt Fleming <matt@xxxxxxxxxxxxxxxxxxx> > Cc: linux-efi@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > --- > 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. -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html