Skip to content

chore(bindgen): upgrade to linux 6.12 headers and use single kernel tree #5352

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Aug 13, 2025

Conversation

Manciukic
Copy link
Contributor

Reason

I was looking into adding bindings for virtio-mem in the feature branch and realized we were using bindgen from 3 different sources:

  • installed headers in the system
  • linux-5.10.y branch from amazonlinux repo
  • linux-next branch from torvalds repo

This is overcomplicated and unnecessary as Linux doesn't break the UAPI.

Changes

This patch updates it to use a single stable branch (6.12), from which the user headers are generated using make headers_install and regenerates all the headers, fixing some minor incompatibilities in the syntax.

While I was at it I also improved the generation for C enums to use constified-enum-module style which is less verbose.

I had to fix an issue with the io_uring auto-generated structs not implementing Copy due to FAM introduced in the latest kernels. I have put a bindgen-patch to drop the FAM and derive Copy and Clone where required to implement ByteValued. If we ever need to use those fields, we'll need to find a different solution.

License Acceptance

By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache 2.0 license. For more information on following Developer
Certificate of Origin and signing off your commits, please check
CONTRIBUTING.md.

PR Checklist

  • I have read and understand CONTRIBUTING.md.
  • I have run tools/devtool checkbuild --all to verify that the PR passes
    build checks on all supported architectures.
  • I have run tools/devtool checkstyle to verify that the PR passes the
    automated style checks.
  • I have described what is done in these changes, why they are needed, and
    how they are solving the problem in a clear and encompassing way.
  • I have updated any relevant documentation (both in code and in the docs)
    in the PR.
  • I have mentioned all user-facing changes in CHANGELOG.md.
  • If a specific issue led to this PR, this PR closes the issue.
  • When making API changes, I have followed the
    Runbook for Firecracker API changes.
  • I have tested all new and changed functionalities in unit tests and/or
    integration tests.
  • I have linked an issue to every new TODO.

  • This functionality cannot be added in rust-vmm.

@Manciukic Manciukic force-pushed the bindgen/use-linux-6.12 branch from 2874de2 to 4d13dc8 Compare August 8, 2025 14:02
Copy link

codecov bot commented Aug 8, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.35%. Comparing base (5c36658) to head (ff85091).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5352      +/-   ##
==========================================
+ Coverage   82.30%   82.35%   +0.04%     
==========================================
  Files         265      265              
  Lines       30640    30645       +5     
==========================================
+ Hits        25219    25238      +19     
+ Misses       5421     5407      -14     
Flag Coverage Δ
5.10-c5n.metal 82.32% <100.00%> (+<0.01%) ⬆️
5.10-m5n.metal 82.32% <100.00%> (+0.01%) ⬆️
5.10-m6a.metal 81.61% <100.00%> (+<0.01%) ⬆️
5.10-m6g.metal 78.92% <100.00%> (+<0.01%) ⬆️
5.10-m6i.metal 82.32% <100.00%> (+<0.01%) ⬆️
5.10-m7a.metal-48xl 81.59% <100.00%> (?)
5.10-m7g.metal 78.92% <100.00%> (+<0.01%) ⬆️
5.10-m7i.metal-24xl 82.29% <100.00%> (?)
5.10-m7i.metal-48xl 82.29% <100.00%> (?)
5.10-m8g.metal-24xl 78.92% <100.00%> (?)
5.10-m8g.metal-48xl 78.92% <100.00%> (?)
6.1-c5n.metal 82.36% <100.00%> (-0.01%) ⬇️
6.1-m5n.metal 82.37% <100.00%> (+<0.01%) ⬆️
6.1-m6a.metal 81.65% <100.00%> (+0.01%) ⬆️
6.1-m6g.metal 78.91% <100.00%> (-0.01%) ⬇️
6.1-m6i.metal 82.36% <100.00%> (-0.01%) ⬇️
6.1-m7a.metal-48xl 81.64% <100.00%> (?)
6.1-m7g.metal 78.92% <100.00%> (+<0.01%) ⬆️
6.1-m7i.metal-24xl 82.38% <100.00%> (?)
6.1-m7i.metal-48xl 82.37% <100.00%> (?)
6.1-m8g.metal-24xl 78.92% <100.00%> (?)
6.1-m8g.metal-48xl 78.92% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

We were using bindgen from 3 different sources:
 - installed headers in the system
 - linux-5.10.y branch from amazonlinux repo
 - linux-next branch from torvalds repo

This is overcomplicated and unnecessary as Linux doesn't break the UAPI.

This patch updates it to use a single stable branch (6.12), from which
the user headers are generated using `make headers_install` and
regenerates all the headers, fixing some minor incompatibilities in the
syntax.

While I was at it I also improved the generation for C enums to use
constified-enum-module style which is less verbose.

I had to fix an issue with the io_uring auto-generated structs not
implementing Copy due to FAM introduced in the latest kernels. I have
put a bindgen-patch to drop the FAM and derive Copy and Clone where
required to implement ByteValued. If we ever need to use those fields,
we'll need to find a different solution.

Signed-off-by: Riccardo Mancini <[email protected]>
@Manciukic Manciukic force-pushed the bindgen/use-linux-6.12 branch from 4d13dc8 to 7c8f7c6 Compare August 8, 2025 14:52
@Manciukic Manciukic changed the title chore(bindgen): upgrade to linux 6.12 and use single kernel tree chore(bindgen): upgrade to linux 6.12 headers and use single kernel tree Aug 8, 2025
@Manciukic Manciukic marked this pull request as ready for review August 8, 2025 15:58
@Manciukic Manciukic added the Status: Awaiting review Indicates that a pull request is ready to be reviewed label Aug 8, 2025
Copy link
Contributor

@roypat roypat left a comment

Choose a reason for hiding this comment

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

ran it locally, and everything worked!

@Manciukic Manciukic enabled auto-merge (rebase) August 13, 2025 14:22
@Manciukic Manciukic merged commit bd0617a into firecracker-microvm:main Aug 13, 2025
6 of 7 checks passed
@Manciukic Manciukic deleted the bindgen/use-linux-6.12 branch August 13, 2025 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Awaiting review Indicates that a pull request is ready to be reviewed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants