util: Introduce qemu_thread_set_affinity() and qemu_thread_get_affinity()
commit7730f32c281f6005b5d35e0ba4b537a47d2dbf32
authorDavid Hildenbrand <david@redhat.com>
Fri, 14 Oct 2022 13:47:15 +0000 (14 15:47 +0200)
committerDavid Hildenbrand <david@redhat.com>
Thu, 27 Oct 2022 09:00:36 +0000 (27 11:00 +0200)
tree62fddec16ce613751820744b83fff623d3cfd5ce
parent6556aadc18c560e493b29dd99cae2cbf86d214cb
util: Introduce qemu_thread_set_affinity() and qemu_thread_get_affinity()

Usually, we let upper layers handle CPU pinning, because
pthread_setaffinity_np() (-> sched_setaffinity()) is blocked via
seccomp when starting QEMU with
    -sandbox enable=on,resourcecontrol=deny

However, we want to configure and observe the CPU affinity of threads
from QEMU directly in some cases when the sandbox option is either not
enabled or not active yet.

So let's add a way to configure CPU pinning via
qemu_thread_set_affinity() and obtain CPU affinity via
qemu_thread_get_affinity() and implement them under POSIX using
pthread_setaffinity_np() + pthread_getaffinity_np().

Implementation under Windows is possible using SetProcessAffinityMask()
+ GetProcessAffinityMask(), however, that is left as future work.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Message-Id: <20221014134720.168738-3-david@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
include/qemu/thread.h
meson.build
util/qemu-thread-posix.c
util/qemu-thread-win32.c