Skip to content

Instantly share code, notes, and snippets.

@kekneus373
Created February 10, 2026 16:47
Show Gist options
  • Select an option

  • Save kekneus373/2aab685ad0c7df5de7f50db5164b275c to your computer and use it in GitHub Desktop.

Select an option

Save kekneus373/2aab685ad0c7df5de7f50db5164b275c to your computer and use it in GitHub Desktop.
[PROXMOX] PCIe Passthrough on Asus P9X79-WS

Step 1. RTFM

https://pve.proxmox.com/wiki/PCI_Passthrough


Step 2. IRQ Remapping X2APIC

The message "x2apic: IRQ remapping doesn't support X2APIC mode" indicates that the system's IOMMU (Intel VT-d or AMD-Vi) is not properly enabled or configured, which is required for X2APIC mode to function, especially for PCI passthrough.

Key Causes and Solutions:

  • IOMMU not enabled in BIOS: Ensure Intel VT-d (for Intel CPUs) or AMD-Vi (for AMD CPUs) is enabled in the UEFI/BIOS settings.
    • VT-d Support: The ASUS P9X79 WS motherboard supports Intel VT-d, particularly when using Intel Xeon E5 v2 or Core i7-3930K (C2 stepping) processors. This support was added via BIOS updates. Source
    • BIOS Location: In UEFI BIOS (version 4802 or newer), VT-d is located under Advanced Mode > System Agent Configuration > Intel(R) VT-d, not under CPU Configuration. Source
  • Missing or incorrect kernel parameters: Add the following to your kernel boot parameters:
    • intel_iommu=on (Intel)
    • amd_iommu=on (AMD)
    • iommu=pt (to enable IOMMU for PCI passthrough)
    • intremap=no_x2apic_optout (if your system has incomplete BIOS support for x2apic opt-out bit)
  • IRQ remapping not supported: The kernel error occurs when IRQ remapping is not active, even if IOMMU is enabled. This can happen if:
    • The IOMMU driver fails to initialize.
    • The system has an older or buggy BIOS that doesn't fully support x2apic mode.
  • Check dmesg output: Look for lines like:
    • DMAR-IR: Enabled IRQ remapping in x2apic mode
    • x2apic enabled
    • If these are missing, IOMMU/IRQ remapping is not active.

Additional Notes:

  • x2APIC requires IRQ remapping for systems with more than 255 APIC IDs (common in multi-core CPUs).
  • Some systems (e.g., older ASUS X99) require intremap=no_x2apic_optout to bypass BIOS-level x2apic opt-out bits.
  • If using Proxmox or KVM, ensure the host kernel has CONFIG_IRQ_REMAP=y and CONFIG_X86_X2APIC=y.

Summary: Enable IOMMU in BIOS, add intel_iommu=on or amd_iommu=on, and verify dmesg shows "Enabled IRQ remapping in x2apic mode".


Step 3. Check in Proxmox

  1. dmesg | grep -e DMAR -e IOMMU

Example output:

root@pve:~# dmesg | grep -ie iommu
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.17.9-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on
[    0.037980] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.17.9-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on
[    0.038047] DMAR: IOMMU enabled
[    0.152836] DMAR-IR: IOAPIC id 0 under DRHD base  0xfbffc000 IOMMU 0
[    0.152838] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 0
[    0.449207] iommu: Default domain type: Translated
[    0.449207] iommu: DMA domain TLB invalidation policy: lazy mode
[    0.522545] pci 0000:00:00.0: Adding to iommu group 0
[    0.522571] pci 0000:00:01.0: Adding to iommu group 1
[    0.522593] pci 0000:00:01.1: Adding to iommu group 2
[    0.522616] pci 0000:00:02.0: Adding to iommu group 3
[    0.522641] pci 0000:00:03.0: Adding to iommu group 4
(...)
  1. dmesg | grep 'remapping'

Example output:

root@pve:~# dmesg | grep 'remapping'
[    0.152841] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.153190] DMAR-IR: Enabled IRQ remapping in x2apic mode
  1. pvesh get /nodes/{nodename}/hardware/pci --pci-class-blacklist "" (Replace {nodename} with the name of your node)

Example output:

root@pve:~# pvesh get /nodes/pve/hardware/pci --pci-class-blacklist ""
┌──────────┬────────┬──────────────┬────────────┬────────┬────────────────
│ class    │ device │ id           │ iommugroup │ vendor │ device_name    
╞══════════╪════════╪══════════════╪════════════╪════════╪════════════════
│ 0x010601 │ 0x1d02 │ 0000:00:1f.2 │         19 │ 0x8086 │ C600/X79 series
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x010601 │ 0x9130 │ 0000:07:00.0 │         22 │ 0x1b4b │ 88SE9128 PCIe S
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x010802 │ 0x22f1 │ 0000:02:00.0 │         21 │ 0x14a4 │ M8Pe Series NVM
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x020000 │ 0x1503 │ 0000:00:19.0 │         10 │ 0x8086 │ 82579V Gigabit 
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x020000 │ 0x10d3 │ 0000:0a:00.0 │         25 │ 0x8086 │ 82574L Gigabit 
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x030000 │ 0x0a65 │ 0000:01:00.0 │         20 │ 0x10de │ GT218 [GeForce 
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x040300 │ 0x0be3 │ 0000:01:00.1 │         20 │ 0x10de │ High Definition
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x060000 │ 0x3c00 │ 0000:00:00.0 │          0 │ 0x8086 │ Xeon E5/Core i7
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
│ 0x060100 │ 0x1d41 │ 0000:00:1f.0 │         19 │ 0x8086 │ C600/X79 series
├──────────┼────────┼──────────────┼────────────┼────────┼────────────────
(...)

HTH

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment