Skip to content

Kernel 7.3.0-26: the Omarchy 7.3 recipe at a pin, plus the P16 delta - #18

Open
seankd3 wants to merge 5 commits into
mainfrom
t3/omarchy-7.3-rebase
Open

seankd3 wants to merge 5 commits into
mainfrom
t3/omarchy-7.3-rebase

Conversation

@seankd3

@seankd3 seankd3 commented Nov 6, 2026

Copy link
Copy Markdown
Owner

Problem

The P16 kernel was a 446-file copy of the 7.2.8 Omarchy recipe plus 20,791 lines of local patches. Each Omarchy release was a hand port. Fixes that Omarchy and another P16 owner already carry were missing here: 1105 (USB4 tunnel ports stay awake, #4), 1111 (the Modern Standby call, #8), 1112 and 1113.

Fix

This builds shape card v2 on #15, with amendments v2a and v2b.

  • The repo keeps only the delta: kernel/PKGBUILD.patch and six patches. scripts/build-kernel.sh fetches pkgbuilds/linux-omarchy-aarch64 at the omarchy-pkgs commit in sources.json (b4e7d40, 7.3-20) into build/kernel/. It copies the patches, applies PKGBUILD.patch at --fuzz=0 and runs makepkg there. The packages land in build/kernel/.
  • 9100, 9101, 9103 and 9104 are byte-identical copies of omarchy-pkgs#1958 at f9a172da. They replace asus-arm64-combined.patch, p16-virtual-gpio.patch and the asus-nb-wmi: install no i8042 key filter on a kernel built without i8042 #12 gate. 9102 is not carried, because the 7.3 spi_probe() already does the ACPI GPIO IRQ lookup. p16-thermal.patch and arm64-acpi-allocation.patch stay. The CVE patch goes, because the fix is in v7.3.
  • PKGBUILD.patch sets package linux-p16-asus-$pkgrel with pkgrel=26, the release suffix -omarchy-p16-asus, the ASUS WMI and SPI-HID config lines, and no NVIDIA package. --disable RUST goes, because 7.3 has Rust off.
  • One release reader: scripts/p16_release.py reads build/kernel/PKGBUILD and names pkgver=7.3 as the kernel does, 7.3.0. common.sh reads no release. The installer, check-system.sh and check-issue-9.sh read it with --shell, in two lines, so a missing recipe stops them.
  • check-issue-9.sh drops the asus_i8042_filter kallsyms check. The boot-log check for "Unable to install key filter" stays.
  • The P16 UKI drops power_wrap_drv.usb4_release=0 and mem_sleep_default=s2idle. 1112 and 1113 make them defaults. Both names stay blocked, so the new entry carries neither.
  • install_state.py verify_preserved also requires every entry of the saved limine.conf to be present and unchanged.
  • The ACPI hook, mkinitcpio drop-in, both ASUS units, boot-menu hook and policy accept 7.3.0-26 beside 24 and 25.
  • scripts/usb4-pcie-hotplug-check comes from the USB4: a PCIe device connected after boot gets its PCIe tunnel #4 branch. Review found that it passed with no NVMe controller below the port. It now fails then.
  • SHA256SUMS loses the 446 vendored entries.

Kept, as the card says: the DSDT override and the touchpad quirk, until 7.2.8-24 leaves the menu, and the stock-kernel drop-ins.

Proof

Proven on this laptop without the full kernel build. Every CPU step ran at nice -n 19 ionice -c3.

  • scripts/build-kernel.sh --nobuild from this branch fetched the pin, applied PKGBUILD.patch at fuzz 0, verified every source and PGP signature, and applied all 442 patches at --fuzz=0. It printed Prepared linux-p16-asus-26 version 7.3.0-26-omarchy-p16-asus and exited 0. The six delta patches applied with no fuzz. Only arm64-acpi-allocation.patch landed at line offsets (34 and 1 lines).
  • The .config after olddefconfig has CONFIG_SPI_HID_ACPI=m, CONFIG_ACPI_WMI=m, CONFIG_ASUS_WMI=m, CONFIG_ASUS_NB_WMI=m, ASUS_ARMOURY, ASUS_WMI_DEPRECATED_ATTRS and DELL_ARM64_HOTKEYS not set, CONFIG_RUST not set, CONFIG_ACPI_THERMAL=y, CONFIG_PINCTRL_MT8901=y. SERIO_I8042 is not set, so 9103 skips the i8042 filter on this kernel.
  • python3 -m unittest discover -s tests: 49 tests pass on a checkout with no build/. The new tests failed on their bugs: the 7.3 release read as 7.3-26, a dropped Limine entry, and the one-line eval form that ran past a missing recipe.
  • The hotplug fix: an offline fixture with one bridge and no NVMe controller gave PASS, exit 0 before the fix, and FAIL, exit 1 after it.
  • The four #1958 patches match f9a172da byte for byte.

NVIDIA 620.70.06 on 7.3. Omarchy packages only 615.78.08 for 7.3, and no upstream source shows 620.70.06 on 7.3. So I compiled the installed DKMS source, /usr/src/nvidia-620.70.06, two ways:

  • Against the installed stock linux-omarchy 7.3.0-13 headers, all five modules built and linked, and modpost resolved every symbol: nvidia, nvidia-uvm, nvidia-modeset, nvidia-drm and nvidia-peermem.
  • Against this branch's patched 7.3 tree after make modules_prepare, conftest ran. 301 of its 330 results match the stock 7.3 headers exactly. The other 29 are export-symbol probes, which read Module.symvers. Only the full build makes that file. With them false, the build stops on del_timer_sync, so that tree cannot finish the module build until the full build exists.

The patched tree therefore has the same 7.3 API that 620.70.06 builds and links against. The link against this kernel's own Module.symvers is not proven yet. Acceptance step 3 below proves it.

Not proven yet, waiting for the full build and the reboot: the kernel and headers packages, NVIDIA linked against this kernel, DKMS in the installer, boot, and every live check below. That includes IRQ 190 on spi-MSFW1111 without 9102, sensor-hub enumeration on BIOS 300, and the 80% charge limit under 9100.

Owner steps: one build, one install, one reboot

Work in the main checkout. It already holds build/acpi/ and build/speaker-firmware/, which the installer needs.

Before the install. Nothing reboots in this part.

  1. Start the build only when df -h /home shows at least 60 GB free. Today 38 GB is free. The old 7.2.8 build tree in kernel/src of the main checkout uses 34 GB.
  2. git fetch fork && git switch t3/omarchy-7.3-rebase. Use main after merge.
  3. nice -n 19 ionice -c3 ./scripts/build-kernel.sh. It makes build/kernel/linux-p16-asus-26-7.3-26-aarch64.pkg.tar.zst and the -headers package. Do this while the renders are idle.
  4. NVIDIA 620.70.06 against the built tree. If this fails, stop before the install.
    cp -a /usr/src/nvidia-620.70.06 /tmp/nv620
    nice -n 19 make -C /tmp/nv620 -j6 IGNORE_PREEMPT_RT_PRESENCE=1 NV_EXCLUDE_BUILD_MODULES='' \
      SYSSRC="$PWD/build/kernel/src/linux-7.3" SYSOUT="$PWD/build/kernel/src/linux-7.3" modules
    rm -rf /tmp/nv620
    
  5. python3 -m unittest discover -s tests passes.
  6. Preflight:
    • Boot the @nv620 entry with RMSkipACPIBattCap=1. The installer builds the new command line from /proc/cmdline. Check with grep -o 'rootflags=subvol=@nv620' /proc/cmdline and grep RMSkipACPIBattCap /proc/driver/nvidia/params.
    • Remove the stale DKMS entry, which has no source: sudo rm -rf /var/lib/dkms/nvidia/615.78.08 /var/lib/dkms/nvidia/kernel-7.3.0-13-omarchy-aarch64. Then dkms status must list no broken entry.

Install. sudo ./scripts/install-kernel.sh. It builds DKMS 620.70.06 for 7.3.0-26, checks that UPower reports PowerOff (#16), and adds the Limine entry. Then it checks that every earlier entry, every earlier image and the default are unchanged. It does not change the default.

The one reboot, while the GPU lab is idle. Select linux-p16-asus-26 in the Limine menu. Press Esc if the menu is hidden. Record the #9 key results in ~/p16-issue9.txt, in the format in the header of scripts/check-issue-9.sh. Then this command must pass. Connect the NVMe enclosure when the hotplug check asks.

scripts/check-system.sh && scripts/check-issue-9.sh ~/p16-issue9.txt && scripts/usb4-pcie-hotplug-check && scripts/check-cuda.sh \
&& [ "$(busctl --system call org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower GetCriticalAction)" = 's "PowerOff"' ] \
&& [ "$(cat /sys/class/power_supply/BAT0/charge_control_end_threshold)" = 80 ] \
&& grep -q 'rootflags=subvol=@nv620' /proc/cmdline \
&& grep -q 'RegistryDwords: "RMSkipACPIBattCap=1"' /proc/driver/nvidia/params \
&& grep -q ' 620\.70\.06 ' /proc/driver/nvidia/version \
&& grep -q 'spi-MSFW1111' /proc/interrupts \
&& ls /sys/bus/hid/devices | grep -q '^001C:' \
&& [ "$(cat /sys/power/mem_sleep)" = '[s2idle] deep' ] \
&& ! grep -qE 'PSYS|PSOC' /sys/class/thermal/thermal_zone*/device/path

What each part proves:

Record, not required: the touchpad properties value (85 means 1108 marked it a pressure pad), an IIO device from the sensor hub, and cpufreq/boost for #7.

Rollback. The 7.2.8-24 package, images and Limine entries stay, including @nv620. If 7.3.0-26 does not boot or fails the check, select a 7.2.8-24 entry in Limine. To remove 26, run sudo scripts/restore-install.sh from this branch's checkout.

Review

One read-only reviewer, GPT-6.1 Sol at high effort, ran both passes.

  • Round 1 on 8d54c27: elegance PASS. Bugs FAIL with one blocker, B1: the hotplug check passed with no NVMe controller. It also noted that an entry moved between Limine folders passes the menu check.
  • Round 2 on fed2348: elegance PASS, bugs PASS. B1 is closed. The folder note does not block, because an entry still boots from either folder and the card does not ask for folder placement.

Token change (about 4 characters a token)

  • Code (scripts/, config/, sources.json): 20,136 to 21,782, +1,646. Of that, +1,071 is the hotplug check, which moves in from the USB4: a PCIe device connected after boot gets its PCIe tunnel #4 branch. The fetch step, the menu check and the release reader make the rest.
  • Kernel delta (kernel/): 1,788,117 to 7,271, -1,780,846.
  • Tests: 6,471 to 7,120, +648.
  • Docs (README.md): 8,505 to 8,672, +167.
  • SHA256SUMS: 14,719 to 1,354, -13,365.

The code and test growth got no separate ruling. The elegance pass judged the full diff and passed it.

Part of #15
Part of #8
Part of #9
Part of #4

🤖 Generated with Claude Code

seankd3 and others added 2 commits November 6, 2026 00:10
The repo kept a 446-file copy of the 7.2.8 Omarchy recipe and 20,791 lines
of local patches. It now keeps only the delta: kernel/PKGBUILD.patch and six
patches. scripts/build-kernel.sh fetches pkgbuilds/linux-omarchy-aarch64 at
the omarchy-pkgs commit in sources.json (b4e7d40, 7.3-20) into build/kernel/,
copies the patches, applies PKGBUILD.patch at fuzz 0 and runs makepkg there.

- 9100, 9101, 9103 and 9104 are unchanged copies of omarchy-pkgs#1958 at
  f9a172da. They replace asus-arm64-combined.patch, p16-virtual-gpio.patch
  and #12's gate. 9102 is not carried: 7.3 spi_probe() already does the
  ACPI GPIO IRQ lookup. The CVE patch goes; the fix is in v7.3.
- PKGBUILD.patch: package linux-p16-asus-$pkgrel, pkgrel 26, release suffix
  -omarchy-p16-asus, the ASUS WMI and SPI-HID config lines, no NVIDIA
  package. --disable RUST goes; 7.3's config has Rust off.
- p16_release.py reads pkgver and pkgrel from build/kernel/PKGBUILD and
  names 7.3 as the kernel does, 7.3.0. common.sh reads no release. The
  installer and the two check scripts take it with --shell, in two lines,
  so a missing recipe stops them.
- check-issue-9.sh drops the kallsyms check; the boot-log check stays.
- The P16 UKI drops power_wrap_drv.usb4_release=0 and
  mem_sleep_default=s2idle. Omarchy 1112 and 1113 make them defaults.
- verify_preserved also requires every entry of the saved limine.conf.
- The five kernel lists accept 7.3.0-26 beside 24 and 25.
- scripts/usb4-pcie-hotplug-check comes from the #4 branch unchanged.

Part of #15. Part of #8, #9 and #4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A dock that showed a PCIe bridge but no NVMe controller passed, so the
check never proved that an NVMe enclosure gets PCIe (#4). It now needs at
least one NVMe controller below the tunnel port, each with a block device.

Part of #15. Part of #4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seankd3 and others added 3 commits November 6, 2026 15:50
With Secure Boot off, the cmdline line in limine.conf overrides the one in
the UKI. limine-entry-tool wrote the default one for linux-p16-asus-26:
root @ instead of the booted subvolume, no RMSkipACPIBattCap, the
usb4_release and mem_sleep options that 7.3 drops, and acpi_osi in literal
single quotes. That entry would boot a root without the 7.3 modules.

The installer now writes KERNEL_CMDLINE[<package>] from build/p16.cmdline
into one drop-in, so limine-entry-tool writes the same line on install and
on every later rebuild. verify-boot.py requires the P16 entry's cmdline to
equal the UKI's, and the checkpoint covers the new drop-in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… path

limine-entry-tool keeps only the first of equal words when it writes an
entry's cmdline. kernel_cmdline.build() now does the same, so the UKI and the
menu entry hold the same line and a repeated word no longer fails the menu
check and rolls the install back.

verify_menu found the P16 entry by any text that named its image, comments
included, so a stock entry with such a comment was checked against the P16
command line. It now selects the entry by its path line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
limine-entry-tool reads ' and " as quotes and drops empty words when it
splits the entry's line. kernel_cmdline.build() now drops empty words and
refuses ', as it already refuses ". A test runs the built line through the
tool's split and requires it unchanged.

verify_menu now finds the P16 entry only by an active path line, so a
comment field that holds the image's pinned path no longer counts as the
entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seankd3

seankd3 commented Nov 6, 2026

Copy link
Copy Markdown
Owner Author

Owner steps 4 to 6 and the install are done on the P16. The reboot is next.

  • Step 4: NVIDIA 620.70.06 builds against build/kernel/src/linux-7.3 with rc=0. All five modules link, and the vermagic is 7.3.0-26-omarchy-p16-asus.
  • Step 5: the unit tests pass, 52 of 52.
  • Step 6: the preflight is done. The two stale DKMS entries are removed.
  • Install: install-kernel.sh completed and backed up to /root/p16-install.l1vpQUZe. UPower reports PowerOff. The default entry is unchanged, and every older entry and image is preserved.

Found during the install, and fixed in 3 commits (ef62624, 94dbe1e, 8a846bc). With Secure Boot off, the cmdline: line in limine.conf overrides the UKI's built-in command line. A 7.2.8-23 boot shows this: its /proc/cmdline had the drop-in's literal single quotes. limine-entry-tool gave linux-p16-asus-26 the default command line, which has these faults:

  • It boots root @, which holds no 7.3 modules.
  • It does not set RMSkipACPIBattCap.
  • It keeps usb4_release=0 and mem_sleep_default.
  • It puts acpi_osi in literal single quotes.

The fix:

  • The installer writes KERNEL_CMDLINE[<package>] from build/p16.cmdline into /etc/limine-entry-tool.d/zz-p16-cmdline-<package>.conf. The tool then writes the same line on the install and on every later menu rebuild. A probe showed that limine-entry-tool --get-cmdline returns the line byte for byte.
  • kernel_cmdline.build() now writes words as limine-entry-tool 1.40.0 does (BootOptions.cleanKernelParameters). It keeps the first of equal words, removes empty words, and refuses ' as it already refused ". A test runs the built line through a port of the tool's split and requires the same line.
  • verify-boot.py finds the P16 entry by its active path: line, and requires that entry's cmdline: to equal the UKI's.
  • The checkpoint covers the new drop-in.

Review: gpt-6.1-sol did three rounds. Rounds 1 and 2 passed elegance and found 4 bugs, all fixed with tests that fail on the old code. Round 3 passed both elegance and bugs, including 2,744 generated inputs through both split implementations.

The live entry is regenerated through the drop-in. sudo scripts/verify-boot.py passes on the real /boot/limine.conf, and install_state.verify_preserved passes against the checkpoint.

DKMS note, local to the lab. dkms autoinstall -k 7.3.0-26 built nothing and returned rc=0. The lab's 620.70.06nopsr source has no AUTOINSTALL line, and DKMS 3.4.4 treats it as the newest version. The image check stopped the install with Modul fehlt: nvidia.ko and restored the boot files. After dkms install nvidia/620.70.06 -k 7.3.0-26-omarchy-p16-asus, --resume completed. A normal user has no second NVIDIA source, so the installer stays unchanged.

Left: one reboot into linux-p16-asus-26, then the live acceptance chain. That boot comes after the GPU test boot (GPU test nopsr, #3).

@seankd3

seankd3 commented Nov 7, 2026

Copy link
Copy Markdown
Owner Author

Follow-up after #19 merged. This PR conflicts with main, and it must carry the following before it merges:

  • Rebase onto Keep the firmware DSDT to avoid stale GNVS addresses #19. The 7.3 recipe must install the SSDT-only ACPI hook. The hook on main allows only 7.2.8 kernels. The live hook allows 7.3.0-26 because it was edited by hand.
  • Replace the hand-added default. The default entry Omarchy/linux-p16-asus-26-fresh-acpi was added to limine.conf by hand, and it is not in a limine-entry-tool drop-in. If a package hook regenerates the menu, the entry can be lost. Limine then waits at the menu instead of booting. The installer must create that entry (or the linux-p16-asus-26 entry with the firmware DSDT) through the drop-in from ef62624, and must set it as the default.
  • Prove the default on a boot. The new default is not yet seen on a boot. The current boot adcbe679 was started by hand, before the default changed.
  • Run the acceptance chain on the rebased build. It needs the NVMe enclosure.

The GPU work is done: issue #3 is closed. I removed the 620.70.06nopsr DKMS source, so dkms autoinstall now builds 620.70.06 for new kernels.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant