Skip to content

grub: disable PCIe ACS override for EVE-K boot#5969

Merged
eriknordmark merged 2 commits into
lf-edge:masterfrom
rucoder:rucoder/no-acs-for-k
May 21, 2026
Merged

grub: disable PCIe ACS override for EVE-K boot#5969
eriknordmark merged 2 commits into
lf-edge:masterfrom
rucoder:rucoder/no-acs-for-k

Conversation

@rucoder
Copy link
Copy Markdown
Contributor

@rucoder rucoder commented May 18, 2026

Description

EVE-K's grub config has been booting the kernel with pcie_acs_override=downstream,multifunction on the dom0_flavor_tweaks command line. The ACS override patch forces the kernel to treat PCIe downstream ports as if they implement Access Control Services, artificially splitting IOMMU groups. While useful for some passthrough scenarios on consumer hardware, it weakens isolation guarantees between devices and is not appropriate as a default for EVE-K nodes — IOMMU groups should reflect the platform's actual ACS topology.

This change removes that flag from pkg/grub/rootfs.cfg so EVE-K boots with upstream kernel behavior. Devices that genuinely share an IOMMU group continue to do so, and passthrough on such hardware must be configured deliberately rather than implicitly enabled by the ACS override.

NOTE: device model must be regenerated and update to EVE-k after this commit will break current installations but eve-k is not in production yet so this is not a problem

How to test and validate this PR

  1. Build an EVE-K image from this branch and install on a test node.
  2. Inspect /proc/cmdline on the running node — the pcie_acs_override=… token must be absent.
  3. Inspect /sys/kernel/iommu_groups/ — IOMMU group membership should match the platform's actual ACS topology (groups with multiple devices that lack ACS should no longer be artificially split).
  4. Sanity-check that EVE-K still boots and applications launch on platforms that previously relied on default isolation (i.e. weren't depending on the override to split a group).

Changelog notes

EVE-K nodes no longer boot with the pcie_acs_override kernel option. IOMMU groups now reflect the platform's real ACS topology; PCI passthrough configurations that implicitly relied on the override to split a shared IOMMU group will need to be revisited.

PR Backports

  • 16.0-stable: No
  • 14.5-stable: No
  • 13.4-stable: No

Checklist

  • I've provided a proper description

  • I've added the proper documentation

  • I've tested my PR on amd64 device

  • I've tested my PR on arm64 device

  • I've written the test verification instructions

  • I've set the proper labels to this PR

  • I've checked the boxes above, or I've provided a good reason why I didn't check them.

Drop the dom0_flavor_tweaks line that sets
pcie_acs_override=downstream,multifunction on the EVE-K boot path.

The ACS override patch forces the kernel to treat PCIe downstream ports
as if they implement Access Control Services, artificially splitting
IOMMU groups. That weakens isolation guarantees between devices and is
not appropriate as a default for EVE-K nodes — IOMMU groups should
reflect the platform's actual ACS topology.

With this change EVE-K boots with upstream kernel behavior: devices that
genuinely share an IOMMU group continue to do so, and passthrough on
such hardware must be configured deliberately rather than implicitly
enabled by the ACS override.

Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com>
@rucoder rucoder requested a review from rene as a code owner May 18, 2026 18:03
@github-actions github-actions Bot requested a review from eriknordmark May 18, 2026 18:04
@codecov
Copy link
Copy Markdown

codecov Bot commented May 19, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 21.05%. Comparing base (2caf795) to head (3e4a690).
⚠️ Report is 25 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5969      +/-   ##
==========================================
+ Coverage   20.64%   21.05%   +0.41%     
==========================================
  Files         489      499      +10     
  Lines       90431    92129    +1698     
==========================================
+ Hits        18667    19399     +732     
- Misses      70187    70974     +787     
- Partials     1577     1756     +179     

☔ 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.

Copy link
Copy Markdown
Contributor

@eriknordmark eriknordmark left a comment

Choose a reason for hiding this comment

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

Shouldn't we add some docs/.md about how to re-enable this for some specific device that needs it? And/or provide an example in the conf/grub file?

@rucoder
Copy link
Copy Markdown
Contributor Author

rucoder commented May 20, 2026

@eriknordmark @rene I tested and ACS is disabled on eve-k

@rene
Copy link
Copy Markdown
Contributor

rene commented May 20, 2026

Shouldn't we add some docs/.md about how to re-enable this for some specific device that needs it? And/or provide an example in the conf/grub file?

makes sense to me as well....

Add a subsection under the IOMMU support discussion in HYPERVISORS.md
that explains the historical use of the out-of-tree ACS override patch
via pcie_acs_override=downstream,multifunction on the kernel command
line, and notes that EVE-K boots without it so IOMMU groups reflect the
platform's actual ACS topology.

Cross-reference the new subsection from EVE-K.md so readers looking at
the Kubernetes flavor specifically can find the rationale and its
implications for PCI passthrough.

Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com>
@github-actions github-actions Bot requested a review from eriknordmark May 21, 2026 09:26
Comment thread docs/HYPERVISORS.md

Historically EVE booted with `pcie_acs_override=downstream,multifunction` on the kernel command line. This option comes from the out-of-tree "ACS override" patch and forces the kernel to treat PCIe downstream and multifunction ports as if they implemented ACS, artificially splitting IOMMU groups so that devices which actually share isolation can still be assigned independently. It is useful for passthrough on consumer hardware where the platform does not implement ACS correctly, but it weakens the isolation guarantees that IOMMU groups are meant to express.

EVE-K (the Kubernetes flavor) boots without `pcie_acs_override` — see `set_k_boot` in [`pkg/grub/rootfs.cfg`](../pkg/grub/rootfs.cfg). IOMMU groups on EVE-K therefore reflect the platform's actual ACS topology: devices that genuinely share a group remain grouped, and passthrough on such hardware must be configured deliberately rather than relying on the override to split a shared group.
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.

Can we add a reference to using /config/grub.cfg for the case when folks want to enable the ACS patch.

Copy link
Copy Markdown
Contributor

@eriknordmark eriknordmark left a comment

Choose a reason for hiding this comment

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

Kick off tests

@eriknordmark eriknordmark merged commit 0aa8e0b into lf-edge:master May 21, 2026
37 of 40 checks passed
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.

3 participants