From: kfraser@localhost.localdomain Date: Mon, 13 Nov 2006 13:58:08 +0000 (+0000) Subject: [XEN] Return -ENOSYS for undefined sub-functions. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15551^2~6 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5d85a6d13c910055462b72896c5e82297f1074d7;p=xen.git [XEN] Return -ENOSYS for undefined sub-functions. Provides forward compatibility (allowing unambiguous detection of unimplemented functionality). Signed-off-by: Jan Beulich --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 8e2ad2c788..d812b2e484 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2134,13 +2134,14 @@ int do_mmuext_op( default: MEM_LOG("Invalid extended pt command 0x%x", op.cmd); + rc = -ENOSYS; okay = 0; break; } if ( unlikely(!okay) ) { - rc = -EINVAL; + rc = rc ? rc : -EINVAL; break; } @@ -2151,9 +2152,11 @@ int do_mmuext_op( process_deferred_ops(); /* Add incremental work we have done to the @done output parameter. */ - done += i; if ( unlikely(!guest_handle_is_null(pdone)) ) + { + done += i; copy_to_guest(pdone, &done, 1); + } UNLOCK_BIGLOCK(d); return rc; @@ -2351,12 +2354,14 @@ int do_mmu_update( default: MEM_LOG("Invalid page update command %x", cmd); + rc = -ENOSYS; + okay = 0; break; } if ( unlikely(!okay) ) { - rc = -EINVAL; + rc = rc ? rc : -EINVAL; break; } @@ -2370,9 +2375,11 @@ int do_mmu_update( process_deferred_ops(); /* Add incremental work we have done to the @done output parameter. */ - done += i; if ( unlikely(!guest_handle_is_null(pdone)) ) + { + done += i; copy_to_guest(pdone, &done, 1); + } UNLOCK_BIGLOCK(d); return rc; diff --git a/xen/arch/x86/oprofile/xenoprof.c b/xen/arch/x86/oprofile/xenoprof.c index 288e7b2f74..ad4c1db195 100644 --- a/xen/arch/x86/oprofile/xenoprof.c +++ b/xen/arch/x86/oprofile/xenoprof.c @@ -684,7 +684,7 @@ int do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg) break; default: - ret = -EINVAL; + ret = -ENOSYS; } spin_unlock(&xenoprof_lock); diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index 2d4841a039..cde604bffc 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -135,7 +135,7 @@ long do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg) } default: - ret = -EINVAL; + ret = -ENOSYS; break; } diff --git a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c index 409828bbae..d5d1e5e8f7 100644 --- a/xen/arch/x86/x86_32/traps.c +++ b/xen/arch/x86/x86_32/traps.c @@ -360,7 +360,7 @@ static long register_guest_callback(struct callback_register *reg) break; default: - ret = -EINVAL; + ret = -ENOSYS; break; } @@ -373,12 +373,20 @@ static long unregister_guest_callback(struct callback_unregister *unreg) switch ( unreg->type ) { + case CALLBACKTYPE_event: + case CALLBACKTYPE_failsafe: +#ifdef CONFIG_X86_SUPERVISOR_MODE_KERNEL + case CALLBACKTYPE_sysenter: +#endif + ret = -EINVAL; + break; + case CALLBACKTYPE_nmi: ret = unregister_guest_nmi_callback(); break; default: - ret = -EINVAL; + ret = -ENOSYS; break; } @@ -417,7 +425,7 @@ long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg) break; default: - ret = -EINVAL; + ret = -ENOSYS; break; } diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index 82e09402fd..5eb91130a5 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -374,7 +374,7 @@ static long register_guest_callback(struct callback_register *reg) break; default: - ret = -EINVAL; + ret = -ENOSYS; break; } @@ -387,12 +387,18 @@ static long unregister_guest_callback(struct callback_unregister *unreg) switch ( unreg->type ) { + case CALLBACKTYPE_event: + case CALLBACKTYPE_failsafe: + case CALLBACKTYPE_syscall: + ret = -EINVAL; + break; + case CALLBACKTYPE_nmi: ret = unregister_guest_nmi_callback(); break; default: - ret = -EINVAL; + ret = -ENOSYS; break; } @@ -431,7 +437,7 @@ long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg) break; default: - ret = -EINVAL; + ret = -ENOSYS; break; }