From: Stefano Stabellini Date: Wed, 8 May 2013 11:41:10 +0000 (+0100) Subject: xen/arm: support VCPUOP_register_vcpu_info. X-Git-Tag: 4.3.0-rc2~71 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=66410d1d18bca2feade55cb312ddf3be04407d57;p=people%2Fiwj%2Fxen.git xen/arm: support VCPUOP_register_vcpu_info. We don't want to support the full vcpu_op hypercall interface, just VCPUOP_register_vcpu_info: introduce an internal ARM-only do_arm_vcpu_op function to filter out the vcpu_op hypercalls that we don't want to support. Call do_arm_vcpu_op instead of do_vcpu_op from traps.c. Signed-off-by: Stefano Stabellini Acked-by: Keir Fraser Acked-by: Ian Campbell --- diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 141aa0b482..df42d82fe8 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -10,6 +10,7 @@ * GNU General Public License for more details. */ #include +#include #include #include #include @@ -629,6 +630,18 @@ void arch_dump_domain_info(struct domain *d) } } + +long do_arm_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg) +{ + switch ( cmd ) + { + case VCPUOP_register_vcpu_info: + return do_vcpu_op(cmd, vcpuid, arg); + default: + return -EINVAL; + } +} + long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg) { return -ENOSYS; diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index c743f2c62b..83a7fbc4b6 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -653,6 +653,11 @@ typedef struct { .nr_args = _nr_args, \ } +#define HYPERCALL_ARM(_name, _nr_args) \ + [ __HYPERVISOR_ ## _name ] = { \ + .fn = (arm_hypercall_fn_t) &do_arm_ ## _name, \ + .nr_args = _nr_args, \ + } static arm_hypercall_t arm_hypercall_table[] = { HYPERCALL(memory_op, 2), HYPERCALL(domctl, 1), @@ -665,6 +670,7 @@ static arm_hypercall_t arm_hypercall_table[] = { HYPERCALL(sysctl, 2), HYPERCALL(hvm_op, 2), HYPERCALL(grant_table_op, 3), + HYPERCALL_ARM(vcpu_op, 3), }; #define __PSCI_cpu_suspend 0 diff --git a/xen/include/asm-arm/hypercall.h b/xen/include/asm-arm/hypercall.h index 0833ec411b..3327a96897 100644 --- a/xen/include/asm-arm/hypercall.h +++ b/xen/include/asm-arm/hypercall.h @@ -4,6 +4,8 @@ #include /* for arch_do_domctl */ int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); +long do_arm_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg); + #endif /* __ASM_ARM_HYPERCALL_H__ */ /* * Local variables: