[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/3] 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> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- 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 1916a3d..b3cc4b5 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 *) = NULL; + void *hcpu = NULL; 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 = (void *)(unsigned long)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 = (void *)(unsigned long)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; -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |