Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 865731

Summary: sys-libs/musl: add sched_(get/set)scheduler implementations
Product: Gentoo Linux Reporter: Andrew Athalye <andrewathalye>
Component: Current packagesAssignee: Anthony Basile <blueness>
Status: UNCONFIRMED ---    
Severity: normal CC: andrewathalye, lu_zero, marecki, musl, toolchain
Priority: Normal Keywords: PATCH
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Attachments: Adds a syscall-based implementation of the functions directly to RTKit

Description Andrew Athalye 2022-08-19 02:30:40 UTC
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
Comment 1 Andrew Athalye 2022-08-19 02:33:10 UTC
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.
Comment 2 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2022-08-19 02:39:56 UTC
I'd much rather we either got musl to budge or convinced rtkit upstream to inline these for musl.
Comment 3 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2022-08-19 02:41:22 UTC
@marecki, if you don't like the patch, please retitle & reassign to sys-libs/musl maintainers, thanks!
Comment 4 Marek Szuba archtester gentoo-dev 2022-08-20 22:16:11 UTC
(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.
Comment 5 Andrew Athalye 2022-08-21 15:28:10 UTC
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.