Skip to content

fix(rockchip): default to CUBIC congestion control, not Reno - #10315

Merged
EvilOlaf merged 1 commit into
armbian:mainfrom
yisding:fix/rockchip-default-tcp-cubic
Aug 5, 2026
Merged

fix(rockchip): default to CUBIC congestion control, not Reno#10315
EvilOlaf merged 1 commit into
armbian:mainfrom
yisding:fix/rockchip-default-tcp-cubic

Conversation

@yisding

@yisding yisding commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Description

Switch Rockchip kernels to CUBIC TCP congestion kernel code which is the default for mainline and pretty much all distros.

How Has This Been Tested?

  • Ran kernel build config check to confirm that CUBIC is selected.

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings

Summary by CodeRabbit

  • Enhancements
    • Updated the default TCP congestion-control algorithm to CUBIC across supported Rockchip kernel configurations.
    • Network connections may benefit from improved throughput and performance compared with the previous default.

The four rockchip64 and rockchip-rk3588 kernel configs pin
CONFIG_DEFAULT_RENO=y, so kernels built from them default to TCP Reno rather
than CUBIC, which has been the kernel default since 2.6.19 and is what every
mainstream distribution ships.

This looks like config-regeneration drift rather than a decision.
linux-rockchip64-current.config was created with CONFIG_DEFAULT_CUBIC=y in
150ac0c (2019-11-19); fea2ecb (2020-04-27, "WIP: Merge kernel features
from upstream") flipped it to Reno in 2 of that commit's 13 config files
without touching CONFIG_TCP_CONG_CUBIC or mentioning networking in its
subject. linux-rockchip-rk3588-*.config was branched from that lineage in
48e45d0 (2023-01-01) and has never had CONFIG_DEFAULT_CUBIC=y. Nothing in
the tracker or forum argues for Reno; issue armbian#609 only asked for BBR, which is
why CONFIG_TCP_CONG_BBR=m.

The mechanism is Kconfig's fallback. In net/ipv4/Kconfig the choice reads:

    choice
            prompt "Default TCP congestion control"
            default DEFAULT_CUBIC
            config DEFAULT_CUBIC
                    bool "Cubic" if TCP_CONG_CUBIC=y
            config DEFAULT_RENO
                    bool "Reno"
    endchoice

DEFAULT_RENO is the only unconditional entry, so any regeneration where CUBIC
is not =y when the choice resolves collapses to Reno, and olddefconfig then
preserves that answer indefinitely.

Reno is not broken, but it recovers linearly after loss and cannot tell
congestion from reordering, so it underperforms on high bandwidth-delay paths
and on wireless links. CUBIC subsumes it: its Reno-friendly region (RFC 9438)
tracks Reno's window and uses max(W_cubic, W_est), so where Reno would be
faster CUBIC matches it.

Resolving every config in config/kernel/ through the kernel's own Kconfig
parser puts 97 of them on cubic already and 12 on reno, plus two sm8550
configs that deliberately select bbr. This change covers the four rockchip
configs among those 12. The other reno configs are left alone: four meson64
and linux-virtual-current carry the same CONFIG_DEFAULT_RENO=y line and want
their maintainers' call, while the three mvebu64 configs reach reno by a
different route -- they set CONFIG_TCP_CONG_CUBIC=m, which makes DEFAULT_CUBIC
unselectable -- and fixing those means building cubic in, a larger change.

Note that deleting the CONFIG_DEFAULT_RENO=y line alone is not sufficient:
linux-rockchip-rk3588-edge.config also carries
"# CONFIG_DEFAULT_CUBIC is not set", which leaves Reno as the only selectable
entry and survives olddefconfig.

Verified with scripts/kconfig/conf --olddefconfig against a 6.18 arm64 Kconfig
tree: all four resolve to CONFIG_DEFAULT_CUBIC=y and
CONFIG_DEFAULT_TCP_CONG="cubic" with no CONFIG_DEFAULT_RENO, where the
unpatched configs reproduce CONFIG_DEFAULT_RENO=y. Not boot-tested.

linux-rockchip-rk3588-current.config is a symlink to the -edge config and is
covered by that file's change.

Signed-off-by: Yi Ding <yi.s.ding@gmail.com>
Assisted-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The Rockchip RK3588 Edge and Rockchip64 kernel configurations now select CUBIC instead of Reno as the default TCP congestion-control algorithm.

Changes

Rockchip TCP congestion-control defaults

Layer / File(s) Summary
Configure CUBIC defaults
config/kernel/linux-rockchip-rk3588-edge.config, config/kernel/linux-rockchip64-bleedingedge.config, config/kernel/linux-rockchip64-current.config, config/kernel/linux-rockchip64-edge.config
The configurations replace the default Reno selection with CUBIC. The RK3588 Edge configuration also updates the default algorithm string from "reno" to "cubic".

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested labels: Patches

Suggested reviewers: amazingfate, ahoneybun

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change from Reno to CUBIC in the Rockchip kernel configurations.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added 08 Milestone: Third quarter release Needs review Seeking for review Hardware Hardware related like kernel, U-Boot, ... size/small PR with less then 50 lines and removed 08 Milestone: Third quarter release labels Aug 2, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@config/kernel/linux-rockchip-rk3588-edge.config`:
- Around line 1205-1206: Replace the full generated kernel configuration in
linux-rockchip-rk3588-edge.config with a minimal overlay containing
CONFIG_DEFAULT_CUBIC=y and CONFIG_DEFAULT_TCP_CONG="cubic"; retain only
necessary # CONFIG_*=m exclusions for TCP congestion modules that must not
become built-in defaults.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 86b9bf5a-963e-44fe-97dd-34ba028a1eb2

📥 Commits

Reviewing files that changed from the base of the PR and between 587b6f2 and 3edb654.

📒 Files selected for processing (4)
  • config/kernel/linux-rockchip-rk3588-edge.config
  • config/kernel/linux-rockchip64-bleedingedge.config
  • config/kernel/linux-rockchip64-current.config
  • config/kernel/linux-rockchip64-edge.config

Comment thread config/kernel/linux-rockchip-rk3588-edge.config
@EvilOlaf

EvilOlaf commented Aug 3, 2026

Copy link
Copy Markdown
Member

have you checked kernel configs of other families by chance?

@yisding

yisding commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

have you checked kernel configs of other families by chance?

Yes, 97 on Cubic right now vs. 12 including the rockchip ones on Reno and 2 on BBR: https://github.com/yisding/rock-5b-ysp/blob/81e832e6d01f1a3567116a4bca93a0e77a99507f/findings/2026-08-01-armbian-rockchip64-defaults-tcp-reno.md

@EvilOlaf EvilOlaf left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@github-actions github-actions Bot added the Ready to merge Reviewed, tested and ready for merge label Aug 4, 2026
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

✅ This PR has been reviewed and approved — all set for merge!

@github-actions github-actions Bot removed the Needs review Seeking for review label Aug 4, 2026
@EvilOlaf
EvilOlaf merged commit 7c132d3 into armbian:main Aug 5, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Hardware Hardware related like kernel, U-Boot, ... Ready to merge Reviewed, tested and ready for merge size/small PR with less then 50 lines

Development

Successfully merging this pull request may close these issues.

2 participants