Conversation
Linux 7.0 unified deadline.c into build_policy.c and debug.c into build_utility.c, deleting the historical CONFIG_SCHED_DEADLINE and CONFIG_SCHED_DEBUG knobs. On a NOMMU image with no /proc/<pid>/sched reader, no debugfs sched-domain consumer, no sysrq input device, and no SCHED_DEADLINE userspace, the two files are ~14.8KB of dead .text that no Kconfig flip can reach. Reintroduce the gates as out-of-tree patches: SCHED_DEBUG_OUTPUT and SCHED_DEADLINE_CLASS, both default y. When n, each file's body is wrapped in #ifdef and a stub block at the same path provides empty implementations of every externally-called symbol. Stub dl_sched_class is registered via DEFINE_SCHED_CLASS(dl) so it lands in the __dl_sched_class linker section between stop and rt; the C99 sparse initializer still reserves the full 116-byte struct, zero-filling every callback except .pick_task (which returns NULL so the chain walk falls through to fair). __checkparam_dl returns false so sched_setattr with policy=6 fails admission and no task ever joins the class. Build.sh disables the new symbols and a small cluster of dependent knobs (CGROUPS, PSI, SCHED_AUTOGROUP) that share the same audience on a single-rootfs UP target. The post-olddefconfig verifier covers both new symbols positively and the cgroup/SMP-dependent siblings negatively, so a future Kconfig drift that flips any of them back to =y aborts the build loudly instead of silently regressing the image. Measured: vmlinux .text -18,240 (-2.4%), .rodata -1,920 (-1.6%), linux.axf 1,229,344 -> 1,212,960 (-16,384 / -1.33%). QEMU MPS2-AN386 boots clean to BusyBox shell, dmesg has no warn/bug/oops/null. The canonical mirror at downloads.uclibc-ng.org has been returning HTTP 522 (Cloudflare-to-origin failure) for extended windows, breaking CI on a fresh downloads cache (wget exits 8, no useful diagnostic under QUIET=1). GitHub's tag-based source archive is permanent for a fixed (repo, tag) pair and contains the same 5,527-file tree as the upstream release tarball -- verified by extracting both and comparing the concat-and-hash of all file contents.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linux 7.0 unified deadline.c into build_policy.c and debug.c into build_utility.c, deleting the historical CONFIG_SCHED_DEADLINE and CONFIG_SCHED_DEBUG knobs. On a NOMMU image with no /proc//sched reader, no debugfs sched-domain consumer, no sysrq input device, and no SCHED_DEADLINE userspace, the two files are ~14.8KB of dead .text that no Kconfig flip can reach.
Reintroduce the gates as out-of-tree patches: SCHED_DEBUG_OUTPUT and SCHED_DEADLINE_CLASS, both default y. When n, each file's body is wrapped in #ifdef and a stub block at the same path provides empty implementations of every externally-called symbol. Stub dl_sched_class is registered via DEFINE_SCHED_CLASS(dl) so it lands in the __dl_sched_class linker section between stop and rt; the C99 sparse initializer still reserves the full 116-byte struct, zero-filling every callback except .pick_task (which returns NULL so the chain walk falls through to fair). __checkparam_dl returns false so sched_setattr with policy=6 fails admission and no task ever joins the class.
Build.sh disables the new symbols and a small cluster of dependent knobs (CGROUPS, PSI, SCHED_AUTOGROUP) that share the same audience on a single-rootfs UP target. The post-olddefconfig verifier covers both new symbols positively and the cgroup/SMP-dependent siblings negatively, so a future Kconfig drift that flips any of them back to =y aborts the build loudly instead of silently regressing the image.
Measured: vmlinux .text -18,240 (-2.4%), .rodata -1,920 (-1.6%), linux.axf 1,229,344 -> 1,212,960 (-16,384 / -1.33%). QEMU MPS2-AN386 boots clean to BusyBox shell, dmesg has no warn/bug/oops/null.