On Fri, Nov 20, 2020 at 12:46:26PM +0100, Juergen Gross wrote:
> +#define ____PVOP_CALL(rettype, op, clbr, call_clbr, extra_clbr, ...) \
>       ({                                                              \
>               PVOP_CALL_ARGS;                                         \
>               PVOP_TEST_NULL(op);                                     \
> +             BUILD_BUG_ON(sizeof(rettype) > sizeof(unsigned long));  \
> +             asm volatile(paravirt_alt(PARAVIRT_CALL)                \
> +                          : call_clbr, ASM_CALL_CONSTRAINT           \
> +                          : paravirt_type(op),                       \
> +                            paravirt_clobber(clbr),                  \
> +                            ##__VA_ARGS__                            \
> +                          : "memory", "cc" extra_clbr);              \
> +             (rettype)(__eax & PVOP_RETMASK(rettype));               \
>       })

This is now very similar to ____PVOP_VCALL() (note how PVOP_CALL_ARGS is
PVOP_VCALL_ARGS).

Could we get away with doing something horrible like:

#define ____PVOP_VCALL(X...) (void)____PVOP_CALL(long, X)

?

Reply via email to