RTKit is currently non-functional on Gentoo with musl libc, since musl does not implement sched_getscheduler and sched_setscheduler. Alpine patches musl directly to provide an implementation, whilst void applies a patch specifically to RTKit to use the underlying syscall. The reason why musl does not implement these functions is because the underlying Linux syscall is technically not POSIX-compliant (see man 2 sched_setscheduler). Reproducible: Always Steps to Reproduce: 1. Emerge sys-auth/rtkit 2. Attempt to use PipeWire with RTKit 3. Observe that RTKit fails to grant realtime capabilities to PipeWire (/usr/libexec/rtkit-daemon --stderr as root for maximum details). Actual Results: RTKit emitted a "Function not implemented" error whilst trying to run sched_getscheduler and sched_setscheduler. PipeWire reported an I/O error. Expected Results: RTKit should produce a message indicating that realtime priorities were granted, and PipeWire should produce a message indicating that it acquired priority -11 (or whatever was configured). Portage 3.0.30 (python 3.10.5-final-0, default/linux/amd64/17.0/musl/hardened/selinux, gcc-11.3.0, musl-1.2.3, 5.19.1-gentoo x86_64) ================================================================= System uname: Linux-5.19.1-gentoo-x86_64-12th_Gen_Intel-R-_Core-TM-_i7-1260P-with-libc KiB Mem: 32577600 total, 28384788 free KiB Swap: 8388288 total, 8388288 free Timestamp of repository gentoo: Wed, 17 Aug 2022 20:30:01 +0000 Head commit of repository gentoo: 043dde86df5da70a3a4b52818252c5c14bfd34f5 Timestamp of repository guru: Mon, 15 Aug 2022 14:16:50 +0000 Head commit of repository guru: 73b556a845480d71d9e0fe123c9c246c83cae0e5 Timestamp of repository musl: Sun, 14 Aug 2022 22:31:51 +0000 Head commit of repository musl: 417832e0e07376f5d485c035e464acedf87b1d39 sh bash 5.1_p16-r1 ld GNU ld (Gentoo 2.38 p4) 2.38 app-misc/pax-utils: 1.3.4::gentoo app-shells/bash: 5.1_p16-r1::gentoo dev-lang/perl: 5.34.1-r3::gentoo dev-lang/python: 3.10.5::gentoo dev-lang/rust: 1.62.1::musl dev-util/cmake: 3.22.4::gentoo dev-util/meson: 0.62.2::gentoo sec-policy/selinux-base: 2.20220106-r3::gentoo sys-apps/baselayout: 2.8::gentoo sys-apps/openrc: 0.44.10::gentoo sys-apps/sandbox: 2.29::gentoo sys-devel/autoconf: 2.13-r2::gentoo, 2.71-r1::gentoo sys-devel/automake: 1.16.5::gentoo sys-devel/binutils: 2.38-r2::gentoo sys-devel/binutils-config: 5.4.1::gentoo sys-devel/clang: 14.0.6-r1::gentoo sys-devel/gcc: 11.3.0::gentoo sys-devel/gcc-config: 2.5-r1::gentoo sys-devel/libtool: 2.4.7::gentoo sys-devel/lld: 14.0.6::gentoo sys-devel/llvm: 14.0.6-r2::gentoo sys-devel/make: 4.3::gentoo sys-kernel/linux-headers: 5.15-r3::gentoo (virtual/os-headers) sys-libs/libselinux: 3.4::gentoo sys-libs/musl: 1.2.3::gentoo Repositories: gentoo location: /var/db/repos/gentoo sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 sync-rsync-extra-opts: sync-rsync-verify-jobs: 1 sync-rsync-verify-metamanifest: yes sync-rsync-verify-max-age: 24 guru location: /var/db/repos/guru sync-type: git sync-uri: https://github.com/gentoo-mirror/guru.git masters: gentoo musl location: /var/db/repos/musl sync-type: git sync-uri: https://github.com/gentoo-mirror/musl.git masters: gentoo ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="@FREE @BINARY-REDISTRIBUTABLE" CBUILD="x86_64-gentoo-linux-musl" CFLAGS="-march=native -O2 -pipe" CHOST="x86_64-gentoo-linux-musl" CONFIG_PROTECT="/etc /usr/lib/libreoffice/program/sofficerc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-march=native -O2 -pipe" DISTDIR="/var/cache/distfiles" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR" FCFLAGS="-march=native -O2 -pipe" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync network-sandbox news parallel-fetch preserve-libs protect-owned qa-unresolved-soname-deps sandbox selinux sesandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-march=native -O2 -pipe" GENTOO_MIRRORS="rsync://mirror.bytemark.co.uk/gentoo/ rsync://rsync.mirrorservice.org/distfiles.gentoo.org/ rsync://rsync.gtlib.gatech.edu/gentoo rsync://mirrors.rit.edu/gentoo/" INSTALL_MASK="charset.alias /usr/share/locale/locale.alias" LANG="ru.UTF-8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j4" PKGDIR="/var/cache/binpkgs" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp" SHELL="/bin/fish" USE="X acl ada alsa amd64 audit bluetooth branding bzip2 cairo caps crypt cups dbus dvd egl elogind flac gif gles2 gnome-keyring gtk gtk3 hardened iconv icu ipv6 jack jpeg kms lcms libglvnd libnotify libtirpc mp3 mpeg ncurses nls nptl nvdec ogg opengl openmp opus pam pcre pdf peer_perms pie pipewire png policykit readline sdl seccomp selinux spell split-usr ssl ssp svg text tiff truetype ubac udisks unicode usb v4l vaapi vorbis vulkan wayland x264 xattr xml xtpax xvid zlib zstd" ABI_X86="64" ADA_TARGET="gnat_2020" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="musl" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64" INPUT_DEVICES="libinput" KERNEL="linux" L10N="ru ru-RU fr fr-FRE en en-US" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-4 php8-0" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_10" PYTHON_TARGETS="python3_10" RUBY_TARGETS="ruby27" USERLAND="GNU" VIDEO_CARDS="amdgpu fbdev intel nouveau radeon radeonsi vesa dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EMERGE_DEFAULT_OPTS, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS
Created attachment 800083 [details, diff] Adds a syscall-based implementation of the functions directly to RTKit This patch is from Void Linux, based on a similar patch from Alpine Linux, which was applied to musl as a whole. According to Rich Felker, musl's behaviour at the moment is correct, so I am unsure whether it would be acceptable to Gentoo to maintain a patch indefinitely against musl.
I'd much rather we either got musl to budge or convinced rtkit upstream to inline these for musl.
@marecki, if you don't like the patch, please retitle & reassign to sys-libs/musl maintainers, thanks!
(In reply to Sam James from comment #2) > I'd much rather we either got musl to budge or convinced rtkit upstream to > inline these for musl. I am with you on this. At the very least the patch should only switch to inlined implementations when building against musl, and frankly speaking I'd rather let upstream handle such low-level changes. Andrew, have you tried getting in touch with them? In the meantime, retitling and reassigning as suggested.
I opened an issue with RTKit, however my understanding from what I've read is that Rich Felker will not implement these functions on musl, since the Linux system calls that back it can't be made POSIX-compliant without causing a race condition.