Skip to main content

🧩 PCIe Fix

When a VM fails with “QEMU exited with code 1” during PCIe passthrough, it is often tied to RMRR/DMAR restrictions, legacy BIOS boot mode, or missing kernel flags. This guide provides a structured path to resolve passthrough failures on Proxmox VE using supported kernel settings and (when necessary) the relaxable‑RMRR kernel workflow.

info

Modern Proxmox kernels already include the relaxable‑RMRR patch (6.2.16-13-pve and newer). You still must enable the kernel option to activate it.

Prerequisites

  • ✅ Proxmox VE 7.4+ (Debian 12 / 11)
  • ✅ BIOS/UEFI access (prefer UEFI over Legacy)
  • ✅ VT-d (Intel) or AMD‑Vi enabled
  • ✅ PCIe device that supports passthrough
  • ✅ Root shell access on the node
warning

Legacy BIOS and poorly isolated IOMMU groups can block PCIe passthrough. Always plan downtime and validate changes after each step.

Configuration Steps

1) Confirm firmware mode

If possible, switch the host to UEFI. Legacy BIOS often complicates passthrough behavior.

2) Verify IOMMU is active

dmesg | grep -e DMAR -e IOMMU

Expected examples:

  • DMAR: IOMMU enabled
  • AMD-Vi: Interrupt remapping enabled

3) Enable relaxable‑RMRR (Intel only)

Edit GRUB:

nano /etc/default/grub

Update the kernel line:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on,relax_rmrr iommu=pt intremap=no_x2apic_optout"

Apply and reboot:

update-grub
reboot

Verify the option is active:

dmesg | grep 'Intel-IOMMU'

Expected output similar to:

DMAR: Intel-IOMMU: assuming all RMRRs are relaxable

4) (Proxmox 7.4 / Kernel 5.15 only) Use patched kernel

If you are on kernel 5.15 and need relaxable‑RMRR, install a patched kernel release and reboot into it.

General steps:

  1. Download the appropriate kernel .deb packages from the releases page.
  2. Install them with:
    dpkg -i *.deb
  3. Reboot and confirm your kernel ends with pve-relaxablermrr:
    uname -r
  4. Enable relax_rmrr in GRUB as shown above.

5) Confirm PCI devices and IOMMU groups

pvesh get /nodes/<your-node>/hardware/pci --pci-class-blacklist ""

6) Retry VM passthrough

After the above changes, attach the PCIe device to the VM and boot again.

Option B: Proxmox Web UI

  1. Enable VT‑d/AMD‑Vi and UEFI in BIOS/UEFI.
  2. Reboot the host.
  3. Use Node → System → PCI Devices to confirm the device appears.
  4. Add PCI device to VM hardware and boot.
  5. If it still fails, return to Option A and enable relax_rmrr for Intel.

Understanding the Configuration

Flow Diagram

[UEFI + VT-d/AMD-Vi]

[IOMMU Enabled in Kernel]

[relax_rmrr (Intel only)]

[Clean IOMMU Groups]

[VM PCIe Passthrough]

Components Table

ComponentPurposeNotes
UEFI BootStable firmware pathPreferred over Legacy BIOS
IOMMUEnables device isolationRequired for passthrough
relax_rmrrAllows restricted PCI devicesIntel platforms only
Patched kernelNeeded for 5.15 seriesNot required on 6.2.16+
IOMMU groupsIsolation boundaryBetter split = safer

Verification

  1. Kernel flags active
    cat /proc/cmdline
  2. IOMMU enabled
    dmesg | grep -e DMAR -e IOMMU
  3. Relaxable RMRR active (Intel)
    dmesg | grep 'Intel-IOMMU'
  4. VM boots with PCI device attached

Troubleshooting

IssueCauseSolution
QEMU exited with code 1RMRR restrictionEnable relax_rmrr or use patched kernel on 5.15
Device invisible in VMIOMMU offEnable VT‑d/AMD‑Vi and GRUB args
Passthrough fails on Legacy BIOSFirmware mismatchSwitch host to UEFI
Device in shared IOMMU groupPoor isolationEnable ACS or change hardware
No Intel-IOMMU messageFlag missingRecheck GRUB + update-grub
Kernel doesn’t include patchOld kernelUpgrade Proxmox kernel or use patched 5.15
VM boots but device not functionalDriver issuesInstall guest drivers for the device
Host uses device driverNot unboundBlacklist driver and rebuild initramfs
ACS override ignoredKernel args not appliedReboot after update-grub
Passthrough unstablePlatform limitationUse supported hardware/NICs
VM won’t start after changesGRUB typoFix /etc/default/grub and re-run update-grub
IOMMU groups unchangedBIOS limitsToggle ACS in BIOS or adjust hardware

Advanced Options

  1. Enable ACS override only if you understand the risk
  2. Pin vCPUs to reduce latency jitter
  3. Use iommu=pt for performance
  4. Isolate host devices from passthrough NICs
  5. Use separate management NICs
  6. Keep kernel and firmware updated
  7. Test with a small VM before production
  8. Document IOMMU groups after every change
  9. Use vfio-pci.ids to bind by device ID
  10. Maintain rollback kernel in GRUB

References

Completion

PCIe passthrough failure resolved!

Next steps:

  • Attach PCI devices and validate in the guest OS
  • Monitor stability after changes
  • Document kernel versions and boot args