|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/sysctl: Clean up XEN_SYSCTL_cpu_hotplug
commit dbe55b5d6a03c72c80d9f6df502927c7dc8db03f
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Fri Mar 29 12:14:37 2019 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Apr 4 14:32:41 2019 +0100
x86/sysctl: Clean up XEN_SYSCTL_cpu_hotplug
A future change is going to introduce two more cases. Instead of opcoding
the
XSM checks and contine_hypercall logic, collect the data into local
variables.
Switch the default return value to -EOPNOTSUPP to distinguish a bad op from
a
bad cpu index.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/sysctl.c | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c
index 1916a3de1b..cff4415ded 100644
--- a/xen/arch/x86/sysctl.c
+++ b/xen/arch/x86/sysctl.c
@@ -137,27 +137,35 @@ long arch_do_sysctl(
case XEN_SYSCTL_cpu_hotplug:
{
unsigned int cpu = sysctl->u.cpu_hotplug.cpu;
+ bool plug;
+ long (*fn)(void *);
+ void *hcpu;
switch ( sysctl->u.cpu_hotplug.op )
{
case XEN_SYSCTL_CPU_HOTPLUG_ONLINE:
- ret = xsm_resource_plug_core(XSM_HOOK);
- if ( ret )
- break;
- ret = continue_hypercall_on_cpu(
- 0, cpu_up_helper, (void *)(unsigned long)cpu);
+ plug = true;
+ fn = cpu_up_helper;
+ hcpu = _p(cpu);
break;
+
case XEN_SYSCTL_CPU_HOTPLUG_OFFLINE:
- ret = xsm_resource_unplug_core(XSM_HOOK);
- if ( ret )
- break;
- ret = continue_hypercall_on_cpu(
- 0, cpu_down_helper, (void *)(unsigned long)cpu);
+ plug = false;
+ fn = cpu_down_helper;
+ hcpu = _p(cpu);
break;
+
default:
- ret = -EINVAL;
+ ret = -EOPNOTSUPP;
break;
}
+
+ if ( !ret )
+ ret = plug ? xsm_resource_plug_core(XSM_HOOK)
+ : xsm_resource_unplug_core(XSM_HOOK);
+
+ if ( !ret )
+ ret = continue_hypercall_on_cpu(0, fn, hcpu);
}
break;
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |