mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen: move do_vcpu_op() to arch specific code
The entry point used for the vcpu_op hypercall on Arm is different
from the one on x86 today, as some of the common sub-ops are not
supported on Arm. The Arm specific handler filters out the not
supported sub-ops and then calls the common handler. This leads to the
weird call hierarchy:
do_arm_vcpu_op()
do_vcpu_op()
arch_do_vcpu_op()
Clean this up by renaming do_vcpu_op() to common_vcpu_op() and
arch_do_vcpu_op() in each architecture to do_vcpu_op(). This way one
of above calls can be avoided without restricting any potential
future use of common sub-ops for Arm.
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
Acked-by: Roger Pau Monné <roger.pau@cirtrix.com>
This commit is contained in:
1 parent
026007376e
commit
8a96c0ea79
9 files changed
+42
-38
No files matched your search
@@ -1079,23 +1079,24 @@ void arch_dump_domain_info(struct domain *d)
|
||||
}
|
||||
|
||||
|
||||
long do_arm_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
struct domain *d = current->domain;
|
||||
struct vcpu *v;
|
||||
|
||||
if ( (v = domain_vcpu(d, vcpuid)) == NULL )
|
||||
return -ENOENT;
|
||||
|
||||
switch ( cmd )
|
||||
{
|
||||
case VCPUOP_register_vcpu_info:
|
||||
case VCPUOP_register_runstate_memory_area:
|
||||
return do_vcpu_op(cmd, vcpuid, arg);
|
||||
return common_vcpu_op(cmd, v, arg);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
void arch_dump_vcpu_info(struct vcpu *v)
|
||||
{
|
||||
gic_dump_info(v);
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
#include <public/domctl.h> /* for arch_do_domctl */
|
||||
int do_arm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
|
||||
|
||||
long do_arm_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg);
|
||||
|
||||
long subarch_do_domctl(struct xen_domctl *domctl, struct domain *d,
|
||||
XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl);
|
||||
|
||||
|
||||
@@ -1380,7 +1380,7 @@ static arm_hypercall_t arm_hypercall_table[] = {
|
||||
#endif
|
||||
HYPERCALL(multicall, 2),
|
||||
HYPERCALL(platform_op, 1),
|
||||
HYPERCALL_ARM(vcpu_op, 3),
|
||||
HYPERCALL(vcpu_op, 3),
|
||||
HYPERCALL(vm_assist, 2),
|
||||
#ifdef CONFIG_ARGO
|
||||
HYPERCALL(argo_op, 5),
|
||||
|
||||
@@ -1491,11 +1491,15 @@ int arch_vcpu_reset(struct vcpu *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
arch_do_vcpu_op(
|
||||
int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
long cf_check do_vcpu_op(int cmd, unsigned int vcpuid,
|
||||
XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
long rc = 0;
|
||||
struct domain *d = current->domain;
|
||||
struct vcpu *v;
|
||||
|
||||
if ( (v = domain_vcpu(d, vcpuid)) == NULL )
|
||||
return -ENOENT;
|
||||
|
||||
switch ( cmd )
|
||||
{
|
||||
@@ -1547,7 +1551,7 @@ arch_do_vcpu_op(
|
||||
}
|
||||
|
||||
default:
|
||||
rc = -ENOSYS;
|
||||
rc = common_vcpu_op(cmd, v, arg);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ compat_physdev_op(
|
||||
XEN_GUEST_HANDLE_PARAM(void) arg);
|
||||
|
||||
extern int
|
||||
arch_compat_vcpu_op(
|
||||
compat_common_vcpu_op(
|
||||
int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg);
|
||||
|
||||
extern int cf_check compat_mmuext_op(
|
||||
|
||||
@@ -12,11 +12,15 @@
|
||||
CHECK_vcpu_get_physid;
|
||||
#undef xen_vcpu_get_physid
|
||||
|
||||
int
|
||||
arch_compat_vcpu_op(
|
||||
int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
int cf_check
|
||||
compat_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
int rc = -ENOSYS;
|
||||
int rc;
|
||||
struct domain *d = current->domain;
|
||||
struct vcpu *v;
|
||||
|
||||
if ( (v = domain_vcpu(d, vcpuid)) == NULL )
|
||||
return -ENOENT;
|
||||
|
||||
switch ( cmd )
|
||||
{
|
||||
@@ -55,7 +59,11 @@ arch_compat_vcpu_op(
|
||||
}
|
||||
|
||||
case VCPUOP_get_physid:
|
||||
rc = arch_do_vcpu_op(cmd, v, arg);
|
||||
rc = do_vcpu_op(cmd, vcpuid, arg);
|
||||
break;
|
||||
|
||||
default:
|
||||
rc = compat_common_vcpu_op(cmd, v, arg);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,15 +38,12 @@ CHECK_vcpu_hvm_context;
|
||||
|
||||
#endif
|
||||
|
||||
int cf_check compat_vcpu_op(
|
||||
int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
int compat_common_vcpu_op(int cmd, struct vcpu *v,
|
||||
XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
struct domain *d = current->domain;
|
||||
struct vcpu *v;
|
||||
int rc = 0;
|
||||
|
||||
if ( (v = domain_vcpu(d, vcpuid)) == NULL )
|
||||
return -ENOENT;
|
||||
struct domain *d = current->domain;
|
||||
unsigned int vcpuid = v->vcpu_id;
|
||||
|
||||
switch ( cmd )
|
||||
{
|
||||
@@ -103,7 +100,7 @@ int cf_check compat_vcpu_op(
|
||||
case VCPUOP_stop_singleshot_timer:
|
||||
case VCPUOP_register_vcpu_info:
|
||||
case VCPUOP_send_nmi:
|
||||
rc = do_vcpu_op(cmd, vcpuid, arg);
|
||||
rc = common_vcpu_op(cmd, v, arg);
|
||||
break;
|
||||
|
||||
case VCPUOP_get_runstate_info:
|
||||
@@ -134,7 +131,7 @@ int cf_check compat_vcpu_op(
|
||||
}
|
||||
|
||||
default:
|
||||
rc = arch_compat_vcpu_op(cmd, v, arg);
|
||||
rc = -ENOSYS;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -1569,15 +1569,11 @@ int default_initialise_vcpu(struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
return rc;
|
||||
}
|
||||
|
||||
long cf_check do_vcpu_op(
|
||||
int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
long common_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
struct domain *d = current->domain;
|
||||
struct vcpu *v;
|
||||
long rc = 0;
|
||||
|
||||
if ( (v = domain_vcpu(d, vcpuid)) == NULL )
|
||||
return -ENOENT;
|
||||
struct domain *d = v->domain;
|
||||
unsigned int vcpuid = v->vcpu_id;
|
||||
|
||||
switch ( cmd )
|
||||
{
|
||||
@@ -1749,7 +1745,7 @@ long cf_check do_vcpu_op(
|
||||
}
|
||||
|
||||
default:
|
||||
rc = arch_do_vcpu_op(cmd, v, arg);
|
||||
rc = -ENOSYS;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ do_vcpu_op(
|
||||
|
||||
struct vcpu;
|
||||
extern long
|
||||
arch_do_vcpu_op(int cmd,
|
||||
common_vcpu_op(int cmd,
|
||||
struct vcpu *v,
|
||||
XEN_GUEST_HANDLE_PARAM(void) arg);
|
||||
|
||||
|
||||