[PATCH] virNetDevOpenvswitchUpdateVlan: fix vlan tag update error
by Yi Wang
From: tuqiang <tu.qiang35(a)zte.com.cn>
We try to update vlan tag by running virsh update-device command,
libvirtd will report ovs-vsctl arguments error. Vlan tag update
funtion does't consider the xml with no vlan configured circumstances.
The steps to reproduce the problem:
1 define and start domain with its vlan configured as:
<interface type='bridge'>
<mac address='52:54:00:9e:bb:ac'/>
<source bridge='ovs-br0'/>
<vlan>
<tag id='10'/>
</vlan>
<virtualport type='openvswitch'>
</virtualport>
<target dev='vnet4.0'/>
<model type='virtio'/>
<driver name='vhost'/>
</interface>
2 define and run virsh update-device command with no vlan configured as:
<interface type='bridge'>
<mac address='52:54:00:9e:bb:ac'/>
<source bridge='ovs-br0'/>
<virtualport type='openvswitch'>
</virtualport>
<target dev='vnet4.0'/>
<model type='virtio'/>
<driver name='vhost'/>
</interface>
#virsh update-device dom-id novlan.xml
3 virsh command returned error, and we got an error in libvirtd.log:
error : virCommandWait:2584 : internal error: exit status 1: ovs-vsctl: 'set' command requires at least 3 arguments
. Child process (ovs-vsctl --timeout=5 -- --if-exists clear Port vnet4.0 tag -- --if-exists clear Port vnet4.0 trunk
-- --if-exists clear Port vnet4.0 vlan_mode -- --if-exists set Port vnet4.0) unexpected
error : virNetDevOpenvswitchUpdateVlan:540 : internal error: Unable to set vlan configuration on port vnet4.0
Signed-off-by: Tu Qiang <tu.qiang35(a)zte.com.cn>
Signed-off-by: Yi Wang <wang.yi59(a)zte.com.cn>
---
src/util/virnetdevopenvswitch.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
index bcdb7c4..227c040 100644
--- a/src/util/virnetdevopenvswitch.c
+++ b/src/util/virnetdevopenvswitch.c
@@ -605,8 +605,10 @@ int virNetDevOpenvswitchUpdateVlan(const char *ifname,
virCommandAddArgList(cmd,
"--", "--if-exists", "clear", "Port", ifname, "tag",
"--", "--if-exists", "clear", "Port", ifname, "trunk",
- "--", "--if-exists", "clear", "Port", ifname, "vlan_mode",
- "--", "--if-exists", "set", "Port", ifname, NULL);
+ "--", "--if-exists", "clear", "Port", ifname, "vlan_mode", NULL);
+
+ if (virtVlan && virtVlan->nTags > 0)
+ virCommandAddArgList(cmd, "--", "--if-exists", "set", "Port", ifname, NULL);
virNetDevOpenvswitchConstructVlans(cmd, virtVlan);
--
1.8.3.1
2 years, 10 months
[PATCH] Fix the dupliacated cpus used in different cells issue
by Jing Qi
Signed-off-by: Jing Qi <jinqi(a)redhat.com>
---
docs/formatdomain.rst | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 24611f0f09..f69957d8c3 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -1662,14 +1662,13 @@ ACPI Heterogeneous Memory Attribute Table
<cpu>
...
<numa>
- <cell id='0' cpus='0-3' memory='512000' unit='KiB' discard='yes'/>
- <cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/>
- <cell id='3' cpus='0-3' memory='2097152' unit='KiB'>
+ <cell id='0' cpus='0-3' memory='2097152' unit='KiB'>
<cache level='1' associativity='direct' policy='writeback'>
<size value='10' unit='KiB'/>
<line value='8' unit='B'/>
</cache>
</cell>
+ <cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/>
<interconnects>
<latency initiator='0' target='0' type='access' value='5'/>
<latency initiator='0' target='0' cache='1' type='access' value='10'/>
--
2.32.0
2 years, 10 months
[PATCH 0/2] qemu: monitor opening cleanups
by Peter Krempa
Two drive-by fixes from when I was working on a different topic.
Peter Krempa (2):
qemuMonitorOpenUnix: Refactor cleanup
qemuMonitorOpen: Refactor cleanup
src/qemu/qemu_monitor.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
--
2.34.1
2 years, 10 months
Re: [PATCH] virhostcpu: fix getting CPU freq for Apple Silicon
by Andrea Bolognani
[re-added libvir-list]
On Thu, Feb 10, 2022 at 05:44:10AM +0800, Menci wrote:
> Since it's fine to report "unknown" cpu frequency on ARM. I strongly agree
> to let it be "unknown". M1 have different frequency ranges for performance
> cores and efficiency cores so it's not well-defined in practice to have a
> single value for "cpu frequency". My code is just to get "the value Apple
> prepared to show for legacy applications for compatibility".
>
> So could you please close this patch and commit your changes in the bottom
> instead? Thanks.
Sure, I'll post them as a proper patch. I'll CC you so you can test
it and confirm things work as expected :)
--
Andrea Bolognani / Red Hat / Virtualization
2 years, 10 months
[PATCH] Fix the dupliacated cpus used in different cells issue
by Jing Qi
Signed-off-by: Jing Qi <jinqi(a)redhat.com>
---
docs/formatdomain.rst | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index f69957d8c3..47b41d257e 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -1669,6 +1669,7 @@ ACPI Heterogeneous Memory Attribute Table
</cache>
</cell>
<cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/>
+
<interconnects>
<latency initiator='0' target='0' type='access' value='5'/>
<latency initiator='0' target='0' cache='1' type='access' value='10'/>
--
2.32.0
2 years, 10 months
[PATCH] virhostcpu: fix getting CPU freq for Apple Silicon
by Menci
The current implementation of virHostCPUGetInfo for macOS (__APPLE__)
reads "hw.cpufrequency" from sysctl, which is available only on x86_64
architecture.
On Apple Silicon ARM Macs, it's not available:
$ sysctl hw.cpufrequency # No output
$ arch -x86_64 sysctl hw.cpufrequency # Run with Rosetta 2
hw.cpufrequency: 2400000000
When running libvirtd on Apple Silicon, I got the error:
cannot obtain CPU freq: No such file or directory.
To fix it, we can calculate it with "hw.tbfrequency" and
"kern.clockrate" instead:
$ sysctl hw.tbfrequency
hw.tbfrequency: 24000000
$ sysctl kern.clockrate
kern.clockrate: { hz = 100, tick = 10000, tickadj = 0, profhz = 100, stathz = 100 }
The result value would be hw.tbfrequency * kern.clockrate.hz.
Signed-off-by: Menci <huanghaorui301(a)gmail.com>
---
src/util/virhostcpu.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index a07c00a0e9..72983c91f3 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -927,9 +927,18 @@ virHostCPUGetInfo(virArch hostarch G_GNUC_UNUSED,
*mhz = cpu_freq;
# else
+ /* This works for Intel Macs */
if (sysctlbyname("hw.cpufrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) {
- virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
- return -1;
+ /* On Apple Silicon fallback to hw.tbfrequency and kern.clockrate.hz */
+ struct clockinfo clockrate;
+ size_t clockrate_len = sizeof(clockrate);
+ if (sysctlbyname("hw.tbfrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0 ||
+ sysctlbyname("kern.clockrate", &clockrate, &clockrate_len, NULL, 0) < 0) {
+ virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
+ return -1;
+ }
+
+ cpu_freq *= clockrate.hz;
}
*mhz = cpu_freq / 1000000;
--
2.34.1
2 years, 10 months
[PULL 27/28] linux-user: Remove the deprecated ppc64abi32 target
by Alex Bennée
From: Thomas Huth <thuth(a)redhat.com>
It's likely broken, and nobody cared for picking it up again
during the deprecation phase, so let's remove this now.
Since this is the last entry in deprecated_targets_list, remove
the related code in the configure script, too.
Signed-off-by: Thomas Huth <thuth(a)redhat.com>
Reviewed-by: Richard Henderson <richard.henderson(a)linaro.org>
Acked-by: Cédric Le Goater <clg(a)kaod.org>
Acked-by: Alex Bennée <alex.bennee(a)linaro.org>
Message-Id: <20211215084958.185214-1-thuth(a)redhat.com>
Signed-off-by: Alex Bennée <alex.bennee(a)linaro.org>
Message-Id: <20220112112722.3641051-32-alex.bennee(a)linaro.org>
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index 47a594a3b6..25b1fb8677 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -403,13 +403,6 @@ The above, converted to the current supported format::
linux-user mode CPUs
--------------------
-``ppc64abi32`` CPUs (since 5.2)
-'''''''''''''''''''''''''''''''
-
-The ``ppc64abi32`` architecture has a number of issues which regularly
-trip up our CI testing and is suspected to be quite broken. For that
-reason the maintainers strongly suspect no one actually uses it.
-
MIPS ``I7200`` CPU (since 5.2)
''''''''''''''''''''''''''''''
diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst
index b0156e0f25..cb0575fd49 100644
--- a/docs/about/removed-features.rst
+++ b/docs/about/removed-features.rst
@@ -601,6 +601,14 @@ the upstream Linux kernel in 2018, and it has also been dropped from glibc, so
there is no new Linux development taking place with this architecture. For
running the old binaries, you can use older versions of QEMU.
+``ppc64abi32`` CPUs (removed in 7.0)
+''''''''''''''''''''''''''''''''''''
+
+The ``ppc64abi32`` architecture has a number of issues which regularly
+tripped up the CI testing and was suspected to be quite broken. For that
+reason the maintainers strongly suspected no one actually used it.
+
+
TCG introspection features
--------------------------
diff --git a/docs/user/main.rst b/docs/user/main.rst
index e08d4be63b..6f2ffa080f 100644
--- a/docs/user/main.rst
+++ b/docs/user/main.rst
@@ -166,7 +166,6 @@ Other binaries
- user mode (PowerPC)
- * ``qemu-ppc64abi32`` TODO.
* ``qemu-ppc64`` TODO.
* ``qemu-ppc`` TODO.
diff --git a/configure b/configure
index dfb9019b24..3a29eff5cc 100755
--- a/configure
+++ b/configure
@@ -1252,8 +1252,6 @@ if eval test -z "\${cross_cc_$cpu}"; then
fi
default_target_list=""
-deprecated_targets_list=ppc64abi32-linux-user
-deprecated_features=""
mak_wilds=""
if [ "$linux_user" != no ]; then
@@ -1281,16 +1279,6 @@ if [ "$bsd_user" = "yes" ]; then
mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
fi
-# If the user doesn't explicitly specify a deprecated target we will
-# skip it.
-if test -z "$target_list"; then
- if test -z "$target_list_exclude"; then
- target_list_exclude="$deprecated_targets_list"
- else
- target_list_exclude="$target_list_exclude,$deprecated_targets_list"
- fi
-fi
-
for config in $mak_wilds; do
target="$(basename "$config" .mak)"
if echo "$target_list_exclude" | grep -vq "$target"; then
@@ -1309,11 +1297,9 @@ Standard options:
--prefix=PREFIX install in PREFIX [$prefix]
--interp-prefix=PREFIX where to find shared libraries, etc.
use %M for cpu name [$interp_prefix]
- --target-list=LIST set target list (default: build all non-deprecated)
+ --target-list=LIST set target list (default: build all)
$(echo Available targets: $default_target_list | \
fold -s -w 53 | sed -e 's/^/ /')
-$(echo Deprecated targets: $deprecated_targets_list | \
- fold -s -w 53 | sed -e 's/^/ /')
--target-list-exclude=LIST exclude a set of targets from the default target-list
Advanced options (experts only):
@@ -1797,13 +1783,6 @@ else
done
fi
-for target in $target_list; do
- # if a deprecated target is enabled we note it here
- if echo "$deprecated_targets_list" | grep -q "$target"; then
- add_to deprecated_features $target
- fi
-done
-
# see if system emulation was really requested
case " $target_list " in
*"-softmmu "*) softmmu=yes
@@ -3830,12 +3809,6 @@ else
fi
fi
-if test -n "${deprecated_features}"; then
- echo "Warning, deprecated features enabled."
- echo "Please see docs/about/deprecated.rst"
- echo " features: ${deprecated_features}"
-fi
-
# Save the configure command line for later reuse.
cat <<EOD >config.status
#!/bin/sh
diff --git a/configs/targets/ppc64abi32-linux-user.mak b/configs/targets/ppc64abi32-linux-user.mak
deleted file mode 100644
index 0945451081..0000000000
--- a/configs/targets/ppc64abi32-linux-user.mak
+++ /dev/null
@@ -1,8 +0,0 @@
-TARGET_ARCH=ppc64
-TARGET_ABI32=y
-TARGET_BASE_ARCH=ppc
-TARGET_ABI_DIR=ppc
-TARGET_SYSTBL_ABI=common,nospu,32
-TARGET_SYSTBL=syscall.tbl
-TARGET_WORDS_BIGENDIAN=y
-TARGET_XML_FILES= gdb-xml/power64-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml gdb-xml/power-vsx.xml
diff --git a/linux-user/ppc/target_syscall.h b/linux-user/ppc/target_syscall.h
index 8b364697d4..7df9118937 100644
--- a/linux-user/ppc/target_syscall.h
+++ b/linux-user/ppc/target_syscall.h
@@ -36,7 +36,7 @@ struct target_pt_regs {
abi_ulong link;
abi_ulong xer;
abi_ulong ccr;
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
abi_ulong softe;
#else
abi_ulong mq; /* 601 only (not used at present) */
@@ -58,7 +58,7 @@ struct target_revectored_struct {
* flags masks
*/
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
#ifdef TARGET_WORDS_BIGENDIAN
#define UNAME_MACHINE "ppc64"
#else
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 78607effe8..4587b62ac9 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -1558,7 +1558,7 @@ struct target_stat64 {
struct target_stat {
abi_ulong st_dev;
abi_ulong st_ino;
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
abi_ulong st_nlink;
unsigned int st_mode;
#else
@@ -1579,12 +1579,12 @@ struct target_stat {
abi_ulong target_st_ctime_nsec;
abi_ulong __unused4;
abi_ulong __unused5;
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
abi_ulong __unused6;
#endif
};
-#if !defined(TARGET_PPC64) || defined(TARGET_ABI32)
+#if !defined(TARGET_PPC64)
#define TARGET_HAS_STRUCT_STAT64
struct QEMU_PACKED target_stat64 {
unsigned long long st_dev;
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 99829faf89..9628a38361 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -718,7 +718,7 @@ static inline void init_thread(struct target_pt_regs *regs,
#define ELF_MACHINE PPC_ELF_MACHINE
#define ELF_START_MMAP 0x80000000
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
#define elf_check_arch(x) ( (x) == EM_PPC64 )
@@ -870,7 +870,7 @@ static uint32_t get_elf_hwcap2(void)
static inline void init_thread(struct target_pt_regs *_regs, struct image_info *infop)
{
_regs->gpr[1] = infop->start_stack;
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
if (get_ppc64_abi(infop) < 2) {
uint64_t val;
get_user_u64(val, infop->entry + 8);
diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c
index 176c9d8503..ec0b9c0df3 100644
--- a/linux-user/ppc/signal.c
+++ b/linux-user/ppc/signal.c
@@ -477,9 +477,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
int i, err = 0;
#if defined(TARGET_PPC64)
struct target_sigcontext *sc = 0;
-#if !defined(TARGET_ABI32)
struct image_info *image = ((TaskState *)thread_cpu->opaque)->info;
-#endif
#endif
rt_sf_addr = get_sigframe(ka, env, sizeof(*rt_sf));
@@ -530,7 +528,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
env->gpr[5] = (target_ulong) h2g(&rt_sf->uc);
env->gpr[6] = (target_ulong) h2g(rt_sf);
-#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
+#if defined(TARGET_PPC64)
if (get_ppc64_abi(image) < 2) {
/* ELFv1 PPC64 function pointers are pointers to OPD entries. */
struct target_func_ptr *handler =
@@ -562,7 +560,7 @@ sigsegv:
}
-#if !defined(TARGET_PPC64) || defined(TARGET_ABI32)
+#if !defined(TARGET_PPC64)
long do_sigreturn(CPUPPCState *env)
{
struct target_sigcontext *sc = NULL;
@@ -575,12 +573,9 @@ long do_sigreturn(CPUPPCState *env)
if (!lock_user_struct(VERIFY_READ, sc, sc_addr, 1))
goto sigsegv;
-#if defined(TARGET_PPC64)
- set.sig[0] = sc->oldmask + ((uint64_t)(sc->_unused[3]) << 32);
-#else
__get_user(set.sig[0], &sc->oldmask);
__get_user(set.sig[1], &sc->_unused[3]);
-#endif
+
target_to_host_sigset_internal(&blocked, &set);
set_sigmask(&blocked);
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 8f2a3c8f5b..0aa70213fb 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -473,33 +473,6 @@ tsan-build:
TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
MAKE_CHECK_ARGS: bench V=1
-# These targets are on the way out
-build-deprecated:
- extends: .native_build_job_template
- needs:
- job: amd64-debian-user-cross-container
- variables:
- IMAGE: debian-all-test-cross
- CONFIGURE_ARGS: --disable-tools
- MAKE_CHECK_ARGS: build-tcg
- TARGETS: ppc64abi32-linux-user
- artifacts:
- expire_in: 2 days
- paths:
- - build
-
-# We split the check-tcg step as test failures are expected but we still
-# want to catch the build breaking.
-check-deprecated:
- extends: .native_test_job_template
- needs:
- - job: build-deprecated
- artifacts: true
- variables:
- IMAGE: debian-all-test-cross
- MAKE_CHECK_ARGS: check-tcg
- allow_failure: true
-
# gprof/gcov are GCC features
build-gprof-gcov:
extends: .native_build_job_template
diff --git a/tests/docker/dockerfiles/debian-ppc64el-cross.docker b/tests/docker/dockerfiles/debian-ppc64el-cross.docker
index 1146a06be6..5de12b01cd 100644
--- a/tests/docker/dockerfiles/debian-ppc64el-cross.docker
+++ b/tests/docker/dockerfiles/debian-ppc64el-cross.docker
@@ -16,7 +16,7 @@ RUN apt update && \
# Specify the cross prefix for this image (see tests/docker/common.rc)
ENV QEMU_CONFIGURE_OPTS --cross-prefix=powerpc64le-linux-gnu-
-ENV DEF_TARGET_LIST ppc64-softmmu,ppc64-linux-user,ppc64abi32-linux-user
+ENV DEF_TARGET_LIST ppc64-softmmu,ppc64-linux-user
# Install extra libraries to increase code coverage
RUN apt update && \
diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh
index 309335a2bd..763e9b6ad8 100755
--- a/tests/tcg/configure.sh
+++ b/tests/tcg/configure.sh
@@ -167,7 +167,7 @@ for target in $target_list; do
container_image=debian-nios2-cross
container_cross_cc=nios2-linux-gnu-gcc
;;
- ppc-*|ppc64abi32-*)
+ ppc-*)
container_hosts=x86_64
container_image=debian-powerpc-test-cross
container_cross_cc=powerpc-linux-gnu-gcc-10
--
2.30.2
2 years, 10 months
[PATCH] cpu_conf: unbreak XPath in virCPUDefParseXML()
by Michal Privoznik
In one of my previous commits, I've changed an XPath in
virCPUDefParseXML() from "boolean(./counter...)" to
"./counter...)". Notice the dangling closing bracket? Well, I
didn't back then.
Fixes: 0fe2d8dd335054fae38b46bbbac58a4662e1a1d0
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/conf/cpu_conf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index da83e99371..819efcea8c 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -441,7 +441,7 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
return -1;
}
- if ((counter_node = virXPathNode("./counter[@name='tsc'])", ctxt))) {
+ if ((counter_node = virXPathNode("./counter[@name='tsc']", ctxt))) {
tsc = g_new0(virHostCPUTscInfo, 1);
if (virXMLPropULongLong(counter_node, "frequency", 10,
--
2.34.1
2 years, 10 months
[libvirt PATCH] qemu: Ignore missing vm.unprivileged_userfaultfd sysctl
by Jiri Denemark
Older kernels did not support this sysctl, but did not restrict
userfaultfd in any way so everything worked as if
vm.unprivileged_userfaultfd was set to 1. Thus we can safely ignore
errors when setting the value.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/postcopy-migration.sysctl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/postcopy-migration.sysctl b/src/qemu/postcopy-migration.sysctl
index aa8f015ae0..db3f11e49f 100644
--- a/src/qemu/postcopy-migration.sysctl
+++ b/src/qemu/postcopy-migration.sysctl
@@ -3,4 +3,4 @@
# privileged processes.
# It can be safely overridden by a file in /etc/sysctl.d/ in case post-copy
# migration is not used on the host.
-vm.unprivileged_userfaultfd = 1
+-vm.unprivileged_userfaultfd = 1
--
2.35.1
2 years, 10 months