make all (native) hypercalls consistently have "long" return type for common and x86 ones at least, to address the problem of storing zero-extended values into the multicall result field otherwise. Reported-by: Daniel De Graaf Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2973,7 +2973,7 @@ static inline void fixunmap_domain_page( #define fixunmap_domain_page(ptr) ((void)(ptr)) #endif -int do_mmuext_op( +long do_mmuext_op( XEN_GUEST_HANDLE(mmuext_op_t) uops, unsigned int count, XEN_GUEST_HANDLE(uint) pdone, @@ -3437,7 +3437,7 @@ int do_mmuext_op( return rc; } -int do_mmu_update( +long do_mmu_update( XEN_GUEST_HANDLE(mmu_update_t) ureqs, unsigned int count, XEN_GUEST_HANDLE(uint) pdone, @@ -4285,15 +4285,15 @@ static int __do_update_va_mapping( return rc; } -int do_update_va_mapping(unsigned long va, u64 val64, - unsigned long flags) +long do_update_va_mapping(unsigned long va, u64 val64, + unsigned long flags) { return __do_update_va_mapping(va, val64, flags, current->domain); } -int do_update_va_mapping_otherdomain(unsigned long va, u64 val64, - unsigned long flags, - domid_t domid) +long do_update_va_mapping_otherdomain(unsigned long va, u64 val64, + unsigned long flags, + domid_t domid) { struct domain *pg_owner; int rc; --- a/xen/common/compat/xenoprof.c +++ b/xen/common/compat/xenoprof.c @@ -5,6 +5,7 @@ #include #define COMPAT +#define ret_t int #define do_xenoprof_op compat_xenoprof_op --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -845,8 +845,8 @@ static int kexec_exec(XEN_GUEST_HANDLE(v return -EINVAL; /* never reached */ } -int do_kexec_op_internal(unsigned long op, XEN_GUEST_HANDLE(void) uarg, - int compat) +static int do_kexec_op_internal(unsigned long op, XEN_GUEST_HANDLE(void) uarg, + bool_t compat) { unsigned long flags; int ret = -EINVAL; --- a/xen/common/xenoprof.c +++ b/xen/common/xenoprof.c @@ -607,6 +607,8 @@ static int xenoprof_op_init(XEN_GUEST_HA return (copy_to_guest(arg, &xenoprof_init, 1) ? -EFAULT : 0); } +#define ret_t long + #endif /* !COMPAT */ static int xenoprof_op_get_buffer(XEN_GUEST_HANDLE(void) arg) @@ -660,7 +662,7 @@ static int xenoprof_op_get_buffer(XEN_GU || (op == XENOPROF_disable_virq) \ || (op == XENOPROF_get_buffer)) -int do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg) +ret_t do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg) { int ret = 0; @@ -904,6 +906,7 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN } #if defined(CONFIG_COMPAT) && !defined(COMPAT) +#undef ret_t #include "compat/xenoprof.c" #endif --- a/xen/include/asm-x86/hypercall.h +++ b/xen/include/asm-x86/hypercall.h @@ -24,7 +24,7 @@ extern long do_set_trap_table( XEN_GUEST_HANDLE(const_trap_info_t) traps); -extern int +extern long do_mmu_update( XEN_GUEST_HANDLE(mmu_update_t) ureqs, unsigned int count, @@ -62,7 +62,7 @@ do_update_descriptor( extern long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u_xen_mc); -extern int +extern long do_update_va_mapping( unsigned long va, u64 val64, @@ -72,14 +72,14 @@ extern long do_physdev_op( int cmd, XEN_GUEST_HANDLE(void) arg); -extern int +extern long do_update_va_mapping_otherdomain( unsigned long va, u64 val64, unsigned long flags, domid_t domid); -extern int +extern long do_mmuext_op( XEN_GUEST_HANDLE(mmuext_op_t) uops, unsigned int count, @@ -90,10 +90,6 @@ extern unsigned long do_iret( void); -extern int -do_kexec( - unsigned long op, unsigned arg1, XEN_GUEST_HANDLE(void) uarg); - #ifdef __x86_64__ extern long --- a/xen/include/xen/hypercall.h +++ b/xen/include/xen/hypercall.h @@ -137,7 +137,7 @@ extern long do_tmem_op( XEN_GUEST_HANDLE(tmem_op_t) uops); -extern int +extern long do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg); #ifdef CONFIG_COMPAT