Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linux contribution topics: Fixes for large driver

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Linux contribution topics: Fixes for large driver

Linux Technical Jamboree Ep.II #9 (Lightning Talk)

Avatar for K. Hayashi

K. Hayashi

March 19, 2026

More Decks by K. Hayashi

Other Decks in Technology

Transcript

  1. Linux contribution topics: Fixes for large driver Embedded SW Engineer/OpenSource

    Contributer K.Hayashi ( khayash1) 2026/03/19 Japan Technical Jamboree Episode II ep.9 ~「正当な修正」vs「歴史の維持」~
  2. Linux stmmac driver (drivers/net/ethernet/stmicro/stmmac/) • STMicro の ethernet IP 向けドライバ

    • しかし実体は Synopsys dwmac IP + vendor glue • ARM / RISC-V SoC を含め、非常に多くの SoC ベンダが利用 結果として • IP 世代が混在 (10M~100G+) • capability を持つ IP / 持たない IP が混在 • devicetree 記述の癖もベンダごとに違う Overview 2026/03/19 vendor glue Synopsys dwmac pcs phy net ethernet stmmac stmmac は一見 vendor driver だが 実は巨大な共通基盤 pcs phy First commit から 15年以上
  3. What was wrong? 2026/03/19 FIFO サイズ を devicetree の property

    で指定 ⇒ HW に実装されたサイズ で制約 しかし実装では… • 無条件に devicetree で指定された値を サイズ値として使用 • 実際の HW 実装サイズ値を超えても 黙って動く(または不定動作) 設定ミスが ドライバでは検出されない gmac0: ethernet@e0800000 { compatible = "snps,dwxgmac-2.10", "snps,dwxgmac"; reg = <0xe0800000 0x8000>; interrupt-parent = <&vic1>; interrupts = <24 23 22>; interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; mac-address = [000000000000]; max-frame-size = <3800>; phy-mode = "gmii"; snps,multicast-filter-bins = <256>; snps,perfect-filter-entries = <128>; rx-fifo-depth = <16384>; tx-fifo-depth = <16384>; clocks = <&clock>; clock-names = "stmmaceth"; snps,axi-config = <&stmmac_axi_setup>; snps,mtl-rx-config = <&mtl_rx_setup>; snps,mtl-tx-config = <&mtl_tx_setup>; ... }; From: Documentation/devicetree/bindings/net/snps,dwmac.yaml rx-fifo-depth = <16384>; tx-fifo-depth = <16384>;
  4. Patch #1 – Clamp to HW capability 2026/03/19 パッチ内容 [devicetree

    指定値] > [HW 実装サイズ値] → 警告 + 上限に固定 対応コミット 044f2fba Limit FIFO size by hardware capability 受け入れられた理由 • 後方互換性を壊さない (動いていたものは動く) • 追加ログで異常を可視化 mainline 的に有用な修正 tx-fifo-size = 16384 cap = 8192 tx-fifo-size = 8192
  5. Patch #2 – Error if not specified 2026/03/19 課題 “FIFO

    サイズが未指定” かつ “HW 実装サイズ値も取れない” → 正しい初期化が不可能 対応内容 上記の課題であればエラー → 設計思想としては正しい 対応コミット 8865d226 Specify hardware capability value when FIFO size isn't specified 不定な状態のまま黙って動かすべきではないので修正 しかし… tx-fifo-size = N/A cap = ?? ERROR
  6. Issues – revert 2026/03/19 問題発覚 古い dwmac IP はそもそも HW

    実装サイズ値を持たない FIFO サイズは固定値で動作していた (devicetree 値は無視) 結果 今まで動いていた SoC がエラー終了で起動できなくなるとの報告 → 後方互換性の破壊 → すぐに Revert 発動 Revert 2a64c963 Revert "Specify hardware capability value when FIFO size isn’t specified" 「正しさ」より「壊さないこと」が優先される 誰もその問題仕様に気づいてなかったので、 のちに議論の種に
  7. Lessons learned 2026/03/19 評価 対応 パッチ ほぼ安全 警告 + 上限固定

    #1 互換性次第 エラー終了 #2 mainline kernel では • 「正しくないから止める」のではなく「既存のものは止めない」を優先 • 「知らない仕様」前提で動いているものは、未だに隠れている それをあぶり出して伝えるのも contriubution 特に SoC 共通ドライバ では顕著
  8. Summary 2026/03/19 stmmac は ”STmicro のドライバ” ではなくSoC 業界の共通基盤 ドライバ改善は三つ巴の構図 •

    設計:分からないならエラーにすべき • 歴史:分からない IP が普通にあった • 現実:それで動いている環境が存在する ⇒ どれも否定できない Mainline の判断は「正しさ」よりも「互換性重視」 ⇒ Revert は失敗ではなく、「隠れていた仕様」が見えた 巨大ドライバを直すということは 「仕様を直す」ことではなく「バランスを取る」こと