fleet/ohm: import Patch I (5GHz scan filter, closes besser#1) + arm64 SCS build-fix #25

Merged
marfrit merged 1 commits from noether/import-scan-filter-5ghz-and-scs-fix into main 2026-05-18 13:34:55 +00:00
Owner

Summary

Imports Patch I (5 GHz scan filter, closes besser#1) and the arm64 SCS+arm_neon build-environment workaround into the kernel-agent patch tree, and updates fleet/ohm.yaml to include both.

Patch I — bes2600 5 GHz scan filter

  • patches/driver/bes2600/scan-filter-5ghz/0001-...patch (vanilla)
  • patches/driver/bes2600/scan-filter-5ghz-danctnix/0001-...patch (danctnix flavor, byte-identical for now — code path doesn't touch the timer APIs that normally differ)

One-line guard at the top of bes2600_hw_scan():

if (req->n_channels > 0 && req->channels[0]->band == NL80211_BAND_5GHZ)
    return -EOPNOTSUPP;

Catches mac80211's per-band hw_scan loop on the 5 GHz iteration (driver doesn't set SINGLE_SCAN_ON_ALL_BANDS, so each per-band call has channels from one band only). Firmware never sees the WSM SCAN_REQ that would otherwise be rejected with status 2 → -EINVAL cascade documented in besser#1.

Phase 7 verified 2026-05-18 on ohm with pkgrel=2 (srcversion 2B29904248):

Pattern Pre-patch baseline Post-patch (30 min)
A (wsm_generic_confirm failed for request 0x0007) 14.3 / h 0 / h
B/C/D 0 0
SCAN failed:completed 9:5 (64% fail) 0:12 (0% fail)
WARN/BUG none none

iw scan freq 5180Operation not supported (-95). iw scan freq 2462 → 5 BSSes for newton SSID. Multi-band iw scan still aborts (mac80211 marks whole scan aborted when any per-band leg returns negative — known mac80211 behavior, same userspace outcome as pre-patch but without the dmesg storm).

Source-of-truth commit: marfrit/bes2600-dkms branch bes2600/scan-filter-5ghz sha 093a503. PKGBUILD-side (deployed): marfrit/besser branch claude-noether-14 sha ae175f9.

arm64 SCS+arm_neon build-fix

patches/arch/arm64/scs-arm-neon-build-fix/ — Makefile tweak that re-adds -ffixed-x18 explicitly to CFLAGS_xor-neon.o when CONFIG_SHADOW_CALL_STACK=y. Workaround for GCC 15.2.1's strict validator tripping inside arm_neon.h #pragma GCC pop_options blocks. No-op when SCS is off (current pkgrel=2 config), unblocks SCS=y when GCC is fixed.

The patch alone is not sufficient to build with SCS=y on GCC 15.2.1 — see besser#20 for the full re-enable plan and the additional workarounds explored. ohm.yaml's config.overrides.CONFIG_SHADOW_CALL_STACK: n is what actually disables SCS for pkgrel=2.

ohm.yaml changes

  • Two new includes: entries for the two patch series
  • New config.overrides block with CONFIG_SHADOW_CALL_STACK: n and a pointer to besser#20

When ka-promote / kconfig-by-manifest land, these overrides should be honored at PKGBUILD-template render time.

Refs

  • Closes besser#1 (Pattern A storm), confirmed by Phase 7 measurement
  • Tracks besser#20 (re-enable SCS once GCC upstream fixed)
  • Companion to kernel-agent#5 (PKGBUILD migration into kernel-agent flow — not blocking this PR; the patches and manifest entries can be staged independently of the full build pipeline being operational)
## Summary Imports Patch I (5 GHz scan filter, closes besser#1) and the arm64 SCS+arm_neon build-environment workaround into the kernel-agent patch tree, and updates `fleet/ohm.yaml` to include both. ## Patch I — bes2600 5 GHz scan filter - `patches/driver/bes2600/scan-filter-5ghz/0001-...patch` (vanilla) - `patches/driver/bes2600/scan-filter-5ghz-danctnix/0001-...patch` (danctnix flavor, byte-identical for now — code path doesn't touch the timer APIs that normally differ) One-line guard at the top of `bes2600_hw_scan()`: ```c if (req->n_channels > 0 && req->channels[0]->band == NL80211_BAND_5GHZ) return -EOPNOTSUPP; ``` Catches mac80211's per-band hw_scan loop on the 5 GHz iteration (driver doesn't set `SINGLE_SCAN_ON_ALL_BANDS`, so each per-band call has channels from one band only). Firmware never sees the WSM SCAN_REQ that would otherwise be rejected with status 2 → `-EINVAL` cascade documented in besser#1. **Phase 7 verified 2026-05-18** on ohm with pkgrel=2 (srcversion `2B29904248`): | Pattern | Pre-patch baseline | Post-patch (30 min) | |---|---|---| | A (`wsm_generic_confirm failed for request 0x0007`) | 14.3 / h | **0 / h** | | B/C/D | 0 | 0 | | SCAN failed:completed | 9:5 (64% fail) | 0:12 (0% fail) | | WARN/BUG | none | none | `iw scan freq 5180` → `Operation not supported (-95)`. `iw scan freq 2462` → 5 BSSes for `newton` SSID. Multi-band `iw scan` still aborts (mac80211 marks whole scan aborted when any per-band leg returns negative — known mac80211 behavior, same userspace outcome as pre-patch but without the dmesg storm). Source-of-truth commit: `marfrit/bes2600-dkms` branch `bes2600/scan-filter-5ghz` sha `093a503`. PKGBUILD-side (deployed): `marfrit/besser` branch `claude-noether-14` sha `ae175f9`. ## arm64 SCS+arm_neon build-fix `patches/arch/arm64/scs-arm-neon-build-fix/` — Makefile tweak that re-adds `-ffixed-x18` explicitly to `CFLAGS_xor-neon.o` when `CONFIG_SHADOW_CALL_STACK=y`. Workaround for GCC 15.2.1's strict validator tripping inside `arm_neon.h` `#pragma GCC pop_options` blocks. No-op when SCS is off (current pkgrel=2 config), unblocks SCS=y when GCC is fixed. The patch alone is **not sufficient** to build with SCS=y on GCC 15.2.1 — see besser#20 for the full re-enable plan and the additional workarounds explored. ohm.yaml's `config.overrides.CONFIG_SHADOW_CALL_STACK: n` is what actually disables SCS for pkgrel=2. ## ohm.yaml changes - Two new `includes:` entries for the two patch series - New `config.overrides` block with `CONFIG_SHADOW_CALL_STACK: n` and a pointer to besser#20 When `ka-promote` / kconfig-by-manifest land, these overrides should be honored at PKGBUILD-template render time. ## Refs - Closes besser#1 (Pattern A storm), confirmed by Phase 7 measurement - Tracks besser#20 (re-enable SCS once GCC upstream fixed) - Companion to kernel-agent#5 (PKGBUILD migration into kernel-agent flow — not blocking this PR; the patches and manifest entries can be staged independently of the full build pipeline being operational)
marfrit added 1 commit 2026-05-18 13:25:54 +00:00
Patch I closes besser#1 — the wsm_generic_confirm 0x0007 dmesg storm.
One-line guard in bes2600_hw_scan() refuses the 5 GHz iteration of
mac80211's per-band hw_scan loop with -EOPNOTSUPP, so the firmware
never sees the scan request that would be rejected with status 2 →
-EINVAL cascade.  Phase 7 verified 2026-05-18 on ohm running pkgrel=2:
Pattern A 14.3/h → 0/h over 30-min window, no WARN/BUG, single-band
2.4 GHz scans still return BSSes cleanly.

Two flavors imported (scan-filter-5ghz and scan-filter-5ghz-danctnix)
matching the convention of other bes2600 series — the code path
doesn't touch timer APIs so the two are byte-identical for now;
flavor separation is kept to preserve consistency in ohm.yaml.

The arm64 scs-arm-neon-build-fix series is a build-environment
workaround: GCC 15.2.1 strictly validates that -fsanitize=shadow-
call-stack requires -ffixed-x18, and arm_neon.h's #pragma target/
push/pop blocks lose x18 fixing inside the wrapped section.  The
Makefile tweak re-adds -ffixed-x18 explicitly for xor-neon.o.  It's
a no-op when SCS is off (current pkgrel=2 ohm config) and unblocks
SCS=y once GCC upstream is fixed.

ohm.yaml gains a CONFIG_SHADOW_CALL_STACK=n config override with a
pointer to besser#20 (the re-enable tracking issue) so future
manifest-driven kconfig generation honors the workaround without
silently dropping it.

Source-of-truth commit for Patch I:
  marfrit/bes2600-dkms branch bes2600/scan-filter-5ghz sha 093a503
PKGBUILD-side (already deployed to ohm via pkgrel=2):
  marfrit/besser branch claude-noether-14 sha ae175f9

Refs: besser#1 (closed), besser#20, kernel-agent#5
marfrit merged commit 42b0c5042a into main 2026-05-18 13:34:55 +00:00
Sign in to join this conversation.