17.12.24 15:00, Jan Beulich:
On 16.12.2024 12:43, Sergiy Kibrik wrote:
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -516,4 +516,31 @@ config TRACEBUFFER
to be collected at run time for debugging or performance analysis.
Memory and execution overhead when not active is minimal.
+menu "Supported hypercall interfaces"
+ visible if DOM0LESS_BOOT && EXPERT
+
+config SYSCTL
+ bool "Enable sysctl hypercall"
+ default y
+
+config DOMCTL
+ bool "Enable domctl hypercalls"
+ default y
+
+config HVM_OP
+ bool "Enable HVM hypercalls"
+ depends on HVM
+ default y
+
+config PLATFORM_HYP
+ bool "Enable platform hypercalls"
+ depends on !PV_SHIM_EXCLUSIVE
Any reason you don't do the shim related conversion also for domctl and
sysctl?
you're right, I'll do it in v2
Much like you have HVM_OP, may I suggest PLATFORM_OP here and ...
+ default y
+
+config PHYSDEVOP
+ bool "Enable physdev hypercall"
+ default y
... PHYSDEV_OP here?
yes, sure
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -1053,7 +1053,9 @@ int domain_kill(struct domain *d)
d->is_dying = DOMDYING_dying;
rspin_barrier(&d->domain_lock);
argo_destroy(d);
+#ifdef CONFIG_DOMCTL
vnuma_destroy(d->vnuma);
+#endif
There is a stub already for this, just that right now it's shim-specific.
>> --- a/xen/include/hypercall-defs.c
+++ b/xen/include/hypercall-defs.c
@@ -234,7 +234,7 @@ stack_switch do:2 do:2 -
- -
set_callbacks compat do - - -
fpu_taskswitch do do - - -
sched_op_compat do do - - dep
-#ifndef CONFIG_PV_SHIM_EXCLUSIVE
+#if defined(CONFIG_PLATFORM_HYP)
Nit: Why not #ifdef, like it was, and like you have it ...
@@ -247,7 +247,9 @@ set_timer_op compat do compat
do -
event_channel_op_compat do do - - dep
xen_version do do do do do
console_io do do do do do
+#ifdef CONFIG_PHYSDEV
physdev_op_compat compat do - - dep
+#endif
#if defined(CONFIG_GRANT_TABLE)
grant_table_op compat do hvm hvm do
#elif defined(CONFIG_PV_SHIM)
@@ -269,14 +271,20 @@ callback_op compat do -
- -
xenoprof_op compat do - - -
#endif
event_channel_op do do do:1 do:1 do:1
+#ifdef CONFIG_PHYSDEVOP
physdev_op compat do hvm hvm do_arm
-#ifdef CONFIG_HVM
+#endif
+#ifdef CONFIG_HVM_OP
hvm_op do do do do do
#endif
#ifndef CONFIG_PV_SHIM_EXCLUSIVE
+#ifdef CONFIG_SYSCTL
sysctl do do do do do
+#endif
+#ifdef CONFIG_DOMCTL
domctl do do do do do
#endif
+#endif
#ifdef CONFIG_KEXEC
kexec_op compat do - - -
#endif
@@ -293,7 +301,9 @@ hypfs_op do do do
do do
#endif
mca do do - - -
#ifndef CONFIG_PV_SHIM_EXCLUSIVE
+#ifdef CONFIG_DOMCTL
paging_domctl_cont do do do do -
#endif
+#endif
... everywhere else?
yes, will fix that
--- a/xen/include/xen/hypercall.h
+++ b/xen/include/xen/hypercall.h
@@ -24,6 +24,18 @@
/* Needs to be after asm/hypercall.h. */
#include <xen/hypercall-defs.h>
+#if !defined(CONFIG_DOMCTL) && !defined(CONFIG_DOM0LESS_BOOT)
+#error "domctl and dom0less can't be disabled simultaneously"
+#endif
+
+#if !defined(CONFIG_PHYSDEVOP) && !defined(CONFIG_DOM0LESS_BOOT)
+#error "physdevop and dom0less can't be disabled simultaneously"
+#endif
+
+#if !defined(CONFIG_SYSCTL) && !defined(CONFIG_DOM0LESS_BOOT)
+#error "sysctl and dom0less can't be disabled simultaneously"
+#endif
I'm puzzled by this: It covers only 3 of the 5, and it really only
re-checks what Kconfig already enforces.
At some point I wasn't sure that kconfig will enforce this, because
somehow I made kconfig produce configuration with both DOMCTL &
DOM0LESS_BOOT being off. Anyway I can't reproduce it now, so will drop
these checks in v2.
-Sergiy