Re: [PATCH 1/2] Create UV efi_call macros

Ingo Molnar
2016-05-12T06:46:06Z

* Alex Thorlton <athorlton-sJ/iWh9BUns@public.gmane.org> wrote:

> +#define efi_call_virt(f, args...) \
> +({ \
> + efi_status_t __s; \
> + unsigned long flags; \
> + arch_efi_call_virt_setup(); \
> + local_save_flags(flags); \
> + __s = arch_efi_call_virt(f, args); \
> + efi_call_virt_check_flags(flags, __stringify(f)); \
> + arch_efi_call_virt_teardown(); \
> + __s; \
> +})
> +
> +#define __efi_call_virt(f, args...) \
> +({ \
> + unsigned long flags; \
> + arch_efi_call_virt_setup(); \
> + local_save_flags(flags); \
> + arch_efi_call_virt(f, args); \
> + efi_call_virt_check_flags(flags, __stringify(f)); \
> + arch_efi_call_virt_teardown(); \
> +})
> +
> +#define uv_call_virt(f, args...) \
> +({ \
> + efi_status_t __s; \
> + unsigned long flags; \
> + arch_efi_call_virt_setup(); \
> + local_save_flags(flags); \
> + __s = uv_efi_call_virt(f, args); \
> + efi_call_virt_check_flags(flags, __stringify(f)); \
> + arch_efi_call_virt_teardown(); \
> + __s; \
> +})

Btw., a very (very!) small stylistic nit that caught my eyes, and I realize that
you just moved code, but could you please improve these macros a bit and make it
look like regular kernel code? I.e. something like:

#define efi_call_virt(f, args...) \
({ \
efi_status_t __s; \
unsigned long flags; \
\
arch_efi_call_virt_setup(); \
\
local_save_flags(flags); \
__s = arch_efi_call_virt(f, args); \
efi_call_virt_check_flags(flags, __stringify(f)); \
arch_efi_call_virt_teardown(); \
\
__s; \
})

This delineates the various blocks of code: variables, setup, the saving/calling
block plus the return code.

(Assuming the EFI folks like the whole approach.)

Thanks,

Ingo