Skip to content

2.2.0

Choose a tag to compare

@github-actions github-actions released this 11 Mar 16:49
· 42 commits to main since this release
0f2b849

๐Ÿš€ Hyperion Kernel v2.2.0 โ€” "Persistent Beast" ยท Linux 6.19.6

The USB stability, low-latency input, and desktop responsiveness release.
Every change below was sourced, tested, and documented against real kernel behavior โ€” not cargo-culted from a forum post.


โšก Performance & Responsiveness

  • ๐Ÿงต Sub-millisecond scheduler ticks via SCHED_HRTICK โ€” The scheduler can now preempt at hrtimer resolution instead of coarse HZ=1000 tick boundaries. If you run PipeWire at a 64-frame quantum (โ‰ˆ1.3 ms at 48 kHz) or push above 120 FPS in games, this is the change that stops frame time jitter from a poorly-timed tick interrupt stealing your window.

  • ๐ŸŽญ PREEMPT_LAZY added alongside PREEMPT_DYNAMIC โ€” Linux 6.12's new fourth preemption mode. Switch at boot: preempt=lazy for compile-heavy dev sessions, preempt=full for gaming and audio. No recompile, no ceremony. The previous binary choice of "full or nothing" is gone.

  • ๐Ÿ“ฆ THP vmemmap optimization (HUGETLB_PAGE_OPTIMIZE_VMEMMAP) โ€” Frees 7 struct page entries (448 bytes) per 2 MB transparent huge page. When a game or JVM allocates hundreds of thousands of them, this is real RAM back in your pocket and fewer cache lines wasted on metadata nobody asked for.

  • ๐Ÿ”ซ Batched TLB shootdowns (ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) โ€” TLB invalidation IPIs are now coalesced before firing instead of being sent per-page. Vulkan multi-threaded command buffer submission stress-tests this path constantly. Less inter-core ping-pong, better frame consistency under GPU load.

  • โš™๏ธ CPPC frequency fast-switch (ACPI_CPPC_CPUFREQ_FAST_SWITCH) โ€” P-state transitions can now happen directly from IRQ/scheduler context without a context switch detour. Eliminates the latency spike you'd see in a busy gaming loop where the scheduler tried to boost a core and had to wait in line.

  • ๐Ÿญ AMD Platform Management Framework (AMD_PMF) โ€” Full SmartShift and eco/performance profile support for Zen 4+ laptops. If you're on a Rembrandt or Phoenix-class chip, amd_pstate=active in the cmdline now has the full firmware backing it deserves.

  • ๐Ÿ”’ Live kernel patching (LIVEPATCH) โ€” Apply security fixes to a running kernel without rebooting running VMs, compile jobs, or games. kpatch and distribution kernel-livepatch packages work out of the box.

  • ๐ŸŒ€ RCU lazy callbacks (RCU_LAZY) โ€” Coalesces RCU callbacks on nohz_full CPUs rather than forcing a tick to flush them. Meaningfully reduces interrupt noise on isolated cores running tight game loops or ML inference.


๐Ÿ–ฑ๏ธ USB โ€” The "Stop Killing My Keyboard" Pass

This is the big one. If you've ever had a keystroke dropped after a pause, a USB DAC click on resume, or a mouse stutter after 2 seconds of no movement โ€” this entire section exists for you.

  • ๐Ÿ”Œ CONFIG_USB_AUTOSUSPEND_DELAY=-1 โ€” Autosuspend killed at the kernel level โ€” The Linux USB stack's default 2-second idle timeout is now permanently -1 (disabled) as a compile-time default. Every USB device on every port boots with autosuspend off โ€” no race against udev, no initramfs ordering gotcha, no TLP config winning at the wrong moment. This is baked into the binary.

    Why this matters: The default 2 caused the kernel to suspend your keyboard if you paused typing for 2 seconds. The first keypress after that would trigger a 5โ€“50 ms USB resume, dropping the keystroke or producing a stuck Shift/Ctrl modifier. Completely silent, completely infuriating.

  • ๐Ÿ›ก๏ธ Five-layer autosuspend defence strategy documented inline โ€” Because "just set autosuspend=-1 on the cmdline" doesn't always work (dracut with early usbcore loading ignores it), the config now documents every failsafe:

    1. Kconfig compile-time default (-1 โ€” this file)
    2. Kernel boot param: usbcore.autosuspend=-1
    3. Udev rules: ATTR{power/control}="on" per USB class
    4. /etc/modprobe.d/usbcore.conf: options usbcore autosuspend=-1
    5. Sysfs verification commands to confirm it stuck at runtime
  • โŒจ๏ธ 1000 Hz input polling via usbhid.mousepoll=1 / kbpoll=1 / jspoll=1 โ€” All three HID poll intervals dropped to 1 ms in the boot parameter recommendations. At the default 8 ms (125 Hz), your USB keyboard's keydown event can take up to 8 ms just to reach the kernel โ€” before scheduling latency even enters the picture. At 1 ms, you see the event within one scheduler tick.

  • ๐Ÿ”Š USB audio (SND_USB_AUDIO) annotated with DAC stability fix โ€” Documents the implicit_fb=1 and ignore_ctl_error=1 modprobe options for async USB DACs that drop connection after silence. Combined with class-based udev power/control=on for bDeviceClass=="01", USB DACs no longer click, drop, or reconnect mid-session.

  • ๐ŸŽฎ xHCI autosuspend root-cause explanation added โ€” The USB_XHCI_PCI entry now explains why USB3 specifically is worse than USB2 for this: xHCI permits aggressive port power gating that EHCI never did, which is why RTL8153 USB-Ethernet, wireless dongles, and USB DACs started dropping more frequently post-2021.

  • ๐Ÿ’พ USB_DEFAULT_PERSIST=y annotated โ€” Suspend-to-RAM no longer tears down USB devices. Keyboard LEDs, audio sample rates, and hub topologies survive sleep/wake intact. Resume time for USB devices drops from 500 msโ€“2 s (full re-enumeration) to under 50 ms (state restore).


๐ŸŽฎ Gaming & Input

  • ๐ŸŽฏ Steam Controller & Steam Deck gamepad (HID_STEAM) โ€” Valve's controller is now properly recognised as an HID gamepad with gyro, trackpad, and haptic feedback, rather than falling back to raw mouse/keyboard. Steam Input picks it up cleanly.

  • ๐ŸŽฎ Nintendo Switch Pro / Joy-Con (HID_NINTENDO) โ€” Switch Pro Controller and Joy-Con (L/R) fully supported over both USB and Bluetooth, including the IMU (gyroscope + accelerometer) exposed through the IIO subsystem. Works with Steam and standalone udev mapping tools.

  • โฑ๏ธ Gamepad hrtimer polling (JOYSTICK_HRTIMER) โ€” The underlying polling timer for joysticks and gamepads is now backed by hrtimers, enabling true 1 kHz+ polling rates on DualSense and Xbox Series controllers. Previously the poll interval was limited by whatever HZ grain the timer landed on.

  • ๐Ÿงฉ SCHED_CORE retained โ€” SMT sibling starvation prevention stays on. Prevents a hyperthread on an occupied physical core from stealing execution budget from your game's main thread.

  • ๐ŸŽ๏ธ AMD P-State active mode + EPP โ€” amd_pstate=active documented in cmdline examples for both desktop and laptop profiles. The CPU hardware manages boost autonomously within the EPP hint โ€” faster single-core ramp-up than OS-controlled passive mode.


๐Ÿ–ฅ๏ธ Desktop & Wayland/Hyprland

  • ๐ŸŒŠ DRM fully built-in: Intel i915/Xe, AMD AMDGPU, Nouveau โ€” Zero module-load delay for GPU initialisation. The compositor (Hyprland, Sway, KWin) gets a fully-ready DRM device at the moment udev fires, not 50โ€“200 ms later after modprobe.

  • ๐Ÿ”ท Vulkan timeline semaphores (DRM_SYNCOBJ_TIMELINE) โ€” Required for Vulkan 1.2+ timeline semaphore support used by DXVK, vkd3d-proton, and modern Vulkan renderers. Without this, Proton games fall back to binary semaphore polling paths.

  • ๐Ÿ–ฑ๏ธ evdev built-in (INPUT_EVDEV) โ€” Wayland compositors, libinput, and XWayland all read from /dev/input/eventN. Built-in ensures these nodes exist before the compositor's systemd unit starts, avoiding the "no pointer device" race at login.

  • ๐Ÿ”‰ PipeWire low-latency audio path โ€” SND_HRTIMER built-in + SCHED_HRTICK now fully functional together. PipeWire's scheduler thread fires at true hrtimer resolution, allowing 64-sample quanta at 48 kHz (1.3 ms) without xruns under desktop load.

  • ๐Ÿ–ฑ๏ธ All drawing tablet drivers included โ€” Wacom (Intuos, Cintiq), XP-Pen, Huion, Gaomon, UGEE, Veikk via HID_WACOM + HID_UCLOGIC + HID_HUION. Pen pressure, tilt, and eraser axis are exposed correctly โ€” not as a plain mouse pointer.

  • ๐Ÿ“บ ROCm compute (HSA_AMD) + AMD Display Core FP (DRM_AMD_DC_FP) โ€” Hardware shader compilation, video encode offload, and full RDNA2+ display engine support (variable refresh rate, HDR metadata, DP 2.1) are all present without requiring out-of-tree patches.


๐Ÿ› ๏ธ Developer & Observability

  • ๐Ÿ” Dynamic kernel probes built-in (KPROBES, KRETPROBES, KPROBE_EVENTS, UPROBE_EVENTS) โ€” bcc tools (execsnoop, opensnoop, biolatency), bpftrace, and perf probe all work without additional configuration. Userspace probing via UPROBE_EVENTS enables tracing Java, Go, Rust, and C++ function calls at runtime with zero source changes.

  • ๐Ÿ—บ๏ธ BPF sockmap acceleration (NET_SOCK_MSG, SOCK_MAP) โ€” Zero-copy socket redirection between sockets, used by Cilium eBPF load balancing, Envoy proxy, and any eBPF-accelerated inter-process network path.

  • ๐ŸŒ Modern NIC page recycling (PAGE_POOL) โ€” NICs that support it (Intel igc/i225, Mellanox, AMD/Pensando) now reuse receive pages instead of allocating and freeing on every packet. Essential for XDP zero-copy receive and line-rate performance.

  • ๐Ÿ”ง Netlink-native ethtool (ETHTOOL_NETLINK) โ€” Required by ethtool 5.x+, NetworkManager, and iproute2 for ring size tuning, coalesce settings, and RSS configuration. The legacy ioctl path still works; the new path adds structured, race-free updates.

  • ๐Ÿ” BLAKE2b/BLAKE2s crypto (CRYPTO_BLAKE2B, CRYPTO_BLAKE2S) โ€” Available for BTRFS b2 checksums, restic backups, WireGuard PSK hashing, and systemd-homed. Faster than SHA-256 in software on x86_64 when AVX2 is available.

  • ๐Ÿ“ก Per-packet metadata slots (SKB_EXTENSIONS) โ€” Lightweight extension mechanism for per-packet timestamps, marks, and offload hints. Required by TC flower, XDP metadata passes, and WireGuard's cookie mechanism.


๐Ÿ—‚๏ธ I/O & Memory

  • ๐Ÿ—œ๏ธ ZSTD-compressed swap in RAM (ZSWAP + ZRAM) โ€” ZSTD at the ZSWAP layer, backed by ZSMALLOC. Pages that would hit disk swap are compressed and held in RAM at roughly 3โ€“5ร— compression ratio. On a 32 GB system under compile+game load, this effectively adds ~6โ€“8 GB of breathing room before the disk swap queue ever forms.

  • ๐Ÿ’ก MGLRU MMU-walk mode (LRU_GEN_WALKS_MMU) โ€” Multi-generational LRU uses hardware page table access bits rather than a software scan to identify cold pages. More accurate cold-page detection = fewer false evictions of game assets and shader caches under memory pressure.

  • โšก io_uring built-in โ€” Every async I/O path in modern storage apps, Proton/Wine file access, and database engines uses this. Built-in means zero module load latency and no missing-uring surprises in stripped initramfs environments.

  • ๐Ÿ”„ NVMe multipath + auth + TCP built-in โ€” NVMe-oF initiators and targets are available from first userspace call without any module loading. NVMe over TCP and RDMA are there for NAS/storage cluster scenarios.


๐Ÿ”’ Security (Hardened, Not Hobbled)

  • ๐Ÿ›ก๏ธ INIT_STACK_ALL_ZERO โ€” Every stack variable is zero-initialized on function entry. Kills entire classes of uninitialized-variable info leaks with one GCC flag. One compiler pass, zero runtime branches.

  • ๐ŸŽฒ RANDOMIZE_KSTACK_OFFSET โ€” Randomizes the kernel stack pointer offset on every syscall entry. One extra instruction per syscall. Makes stack-layout-dependent exploits significantly harder to reproduce reliably.

  • ๐Ÿ”‘ Strict usercopy boundaries (HARDENED_USERCOPY, fallback=n) โ€” Kernel-to-user copies that cross object boundaries are rejected outright, not silently truncated. The fallback was the escape hatch that made hardened usercopy somewhat theoretical in practice.


๐Ÿ“‹ Boot & Build

uname -r  โ†’  6.19.6-Hyperion-2.2.0
uname -v  โ†’  #1 SMP PREEMPT Linux 6.19.6-Hyperion-2.2.0 (2026)

make -j$(nproc) LOCALVERSION="-Hyperion-2.2.0"

Recommended cmdline additions (AMD):

preempt=full threadirqs usbcore.autosuspend=-1 usbcore.use_persist=1
usbhid.mousepoll=1 usbhid.kbpoll=1 usbhid.jspoll=1
amd_pstate=active amd_iommu=pt transparent_hugepage=madvise
nohz_full=1-N rcu_nocbs=1-N skew_tick=1

Required companion files (see inline config comments for full content):

  • /etc/udev/rules.d/99-usb-power.rules โ€” class-based power/control=on
  • /etc/modprobe.d/usbcore.conf โ€” options usbcore autosuspend=-1
  • /etc/modprobe.d/snd-usb-audio.conf โ€” options snd-usb-audio implicit_fb=1
  • /etc/sysctl.d/99-hyperion.conf โ€” vm/net tuning

All changes retain full DKMS compatibility. External modules (NVIDIA, v4l2loopback, xpadneo) continue to build and load normally against this tree.