Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Help with GPU passthrough of AMD GPU in Windows 11 VM?

Featured Replies

  • Author

I tried 3 things.

Removed VNC from the XML so only the AMD GPU is assigned.

Added the additional info to the syslinux config. (see the attached screenshot)

Ran the script which seemed to mostly run.

Still no change sadly.

Screenshot 2025-12-24 at 9.34.56 PM.png

Screenshot 2025-12-24 at 9.35.17 PM.png

A couple of settings might be conflicting with one another. I'd recommend starting from scratch and trying one thing at a time.
I would undo the "PCIe ACS override" or "VFIO allow unsafe interrupts" changes and the system devices/modprobe changes you made. For one, if your VM was working without them before, I can't think of a reason why you would suddenly need them. For another, it might be the reason the script isn't working. There's just too many variables so let's address them one at a time.

Also, remove the sysconfig settings I mentioned. I haven't actually tried those settings myself so I can't be certain they will work. In my situation, the script did fix my issue but it may return once I reboot, I don't know. I usually have to schedule a time to reboot. So basically, the sysconfig should prevent the conflict from happening on boot (though I cannot attest to that), and the script should fix the conflict after the fact. Of course, this is still assuming the issue is what I think it is.

So, undo all those settings, reboot, and we'll take things one step at a time. After you reboot try this:
1. Check the system devices page. The GPU and GPU audio should still be showing as bound to VFIO.
2. Open a terminal and run echo 0000:0c:00.0 > /sys/bus/pci/devices/0000:0c:00.0/driver/unbind
3. Then run echo 0000:0c:00.1 > /sys/bus/pci/devices/0000:0c:00.1/driver/unbind
4. Check the system devices page again. The GPU and GPU audio should not be bound to VFIO now.
5. Go back to the terminal and run echo 1 > /sys/bus/pci/devices/0000:0c:00.0/reset
6. Then run echo 0000:0c:00.0 > /sys/bus/pci/drivers/vfio-pci/bind
7. Then run echo 0000:0c:00.1 > /sys/bus/pci/drivers/vfio-pci/bind

Check the devices page again to see if the GPU is not bound to VFIO again and start the VM. If you encounter any issues, post a screenshot of the device in the system devices page along with the output of lspci -vv -s 0c:00 and we'll go from there.

  • Author

I went through and reset everything back to factory settings that I could think of. I then bound the GPU Video and GPU Audio and rebooted.

Ran the first two commands with no issues, but on the third I get an error. I'll attached a screenshot.

Also here is the output of lspci -vv -s 0c:00

root@LMB-UR01:~# lspci -vv -s 0c:00

0c:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (rev c0) (prog-if 00 [VGA controller])

Subsystem: ASUSTeK Computer Inc. Device 061a

Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-

Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

Latency: 0, Cache Line Size: 64 bytes

Interrupt: pin A routed to IRQ 15

IOMMU group: 27

Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]

Region 2: Memory at e0000000 (64-bit, prefetchable) [size=2M]

Region 4: I/O ports at e000 [size=256]

Region 5: Memory at fce00000 (32-bit, non-prefetchable) [size=512K]

Expansion ROM at 000c0000 [disabled] [size=128K]

Capabilities: [48] Vendor Specific Information: Len=08 <?>

Capabilities: [50] Power Management version 3

Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)

Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-

Capabilities: [64] Express (v2) Legacy Endpoint, IntMsgNum 0

DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited

ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- TEE-IO-

DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+

RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+

MaxPayload 256 bytes, MaxReadReq 512 bytes

DevSta: CorrErr+ NonFatalErr+ FatalErr- UnsupReq+ AuxPwr- TransPend-

LnkCap: Port #0, Speed 32GT/s, Width x16, ASPM L1, Exit Latency L1 <1us

ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+

LnkCtl: ASPM Disabled; RCB 64 bytes, LnkDisable- CommClk+

ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- FltModeDis-

LnkSta: Speed 32GT/s, Width x16

TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+

10BitTagComp+ 10BitTagReq+ OBFF Not Supported, ExtFmt+ EETLPPrefix+, MaxEETLPPrefixes 1

EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-

FRS-

AtomicOpsCap: 32bit+ 64bit+ 128bitCAS-

DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-

AtomicOpsCtl: ReqEn-

IDOReq- IDOCompl- LTR+ EmergencyPowerReductionReq-

10BitTagReq- OBFF Disabled, EETLPPrefixBlk-

LnkCap2: Supported Link Speeds: 2.5-32GT/s, Crosslink- Retimer+ 2Retimers+ DRS-

LnkCtl2: Target Link Speed: 32GT/s, EnterCompliance- SpeedDis-

Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-

Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot

LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete- EqualizationPhase1-

EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-

Retimer- 2Retimers- CrosslinkRes: unsupported, FltMode-

Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+

Address: 0000000000000000 Data: 0000

Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>

Capabilities: [150 v2] Advanced Error Reporting

UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-

ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-

ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+

ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr- CorrIntErr- HeaderOF-

CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ CorrIntErr- HeaderOF-

AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-

MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-

HeaderLog: 40001001 00000001 000a0000 00000000

Capabilities: [200 v1] Physical Resizable BAR

BAR 0: current size: 256MB, supported: 256MB 512MB 1GB 2GB 4GB 8GB 16GB

BAR 2: current size: 2MB, supported: 2MB 4MB 8MB 16MB 32MB 64MB 128MB 256MB

Capabilities: [240 v1] Power Budgeting <?>

Capabilities: [270 v1] Secondary PCI Express

LnkCtl3: LnkEquIntrruptEn- PerformEqu-

LaneErrStat: 0

Capabilities: [2a0 v1] Access Control Services

ACSCap: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

Capabilities: [2d0 v1] Process Address Space ID (PASID)

PASIDCap: Exec+ Priv+, Max PASID Width: 10

PASIDCtl: Enable+ Exec- Priv-

Capabilities: [320 v1] Latency Tolerance Reporting

Max snoop latency: 1048576ns

Max no snoop latency: 1048576ns

Capabilities: [410 v1] Physical Layer 16.0 GT/s

Phy16Sta: EquComplete- EquPhase1- EquPhase2- EquPhase3- LinkEquRequest-

Capabilities: [450 v1] Lane Margining at the Receiver

PortCap: Uses Driver-

PortSta: MargReady+ MargSoftReady-

Capabilities: [500 v1] Physical Layer 32.0 GT/s

Phy32Cap: EqualizationBypass+ NoEqualizationNeeded-

ModTsMode0+ ModTsMode1- ModTsMode2-

Phy32Ctl: EqualizationBypassDis- NoEqualizationNeededDis-

Modified TS Usage Mode: PCI Express

Phy32Sta: EquComplete+ EquPhase1+ EquPhase2+ EquPhase3+ LinkEquRequest-

Received Enhanced Link Behavior Control: Equalization bypass to highest rate support

ModTsRecv- TxPrecodeOn- TxPrecodeReq- NoEqualizationNeededRecv-

Kernel modules: amdgpu

0c:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Navi 48 HDMI/DP Audio Controller (prog-if 00 [HDA compatible])

Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Navi 48 HDMI/DP Audio Controller

Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-

Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

Latency: 0, Cache Line Size: 64 bytes

Interrupt: pin B routed to IRQ 5

IOMMU group: 28

Region 0: Memory at fcea0000 (32-bit, non-prefetchable) [size=16K]

Capabilities: [48] Vendor Specific Information: Len=08 <?>

Capabilities: [50] Power Management version 3

Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)

Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-

Capabilities: [64] Express (v2) Legacy Endpoint, IntMsgNum 0

DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited

ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- TEE-IO-

DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+

RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+

MaxPayload 256 bytes, MaxReadReq 512 bytes

DevSta: CorrErr+ NonFatalErr+ FatalErr- UnsupReq+ AuxPwr- TransPend-

LnkCap: Port #0, Speed 32GT/s, Width x16, ASPM L1, Exit Latency L1 <1us

ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+

LnkCtl: ASPM Disabled; RCB 64 bytes, LnkDisable- CommClk+

ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- FltModeDis-

LnkSta: Speed 32GT/s, Width x16

TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+

10BitTagComp+ 10BitTagReq+ OBFF Not Supported, ExtFmt+ EETLPPrefix+, MaxEETLPPrefixes 1

EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-

FRS-

AtomicOpsCap: 32bit- 64bit- 128bitCAS-

DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-

AtomicOpsCtl: ReqEn-

IDOReq- IDOCompl- LTR- EmergencyPowerReductionReq-

10BitTagReq- OBFF Disabled, EETLPPrefixBlk-

LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete- EqualizationPhase1-

EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-

Retimer- 2Retimers- CrosslinkRes: unsupported, FltMode-

Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+

Address: 0000000000000000 Data: 0000

Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>

Capabilities: [150 v2] Advanced Error Reporting

UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-

ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-

ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+

ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr-

PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-

CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr- CorrIntErr- HeaderOF-

CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ CorrIntErr- HeaderOF-

AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-

MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-

HeaderLog: 40001001 00000001 000a0000 00000000

Capabilities: [2a0 v1] Access Control Services

ACSCap: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-

root@LMB-UR01:~#

Screenshot 2025-12-27 at 12.47.59 PM.png

  • Author

Well I may have figured it out. I was walking through my XML for the VM and trying every setting one at a time and when I switched the Hyper-V setting to yes everything started working perfect. What exactly is that sending to the VM?

11 minutes ago, Elembemedia said:

Well I may have figured it out. I was walking through my XML for the VM and trying every setting one at a time and when I switched the Hyper-V setting to yes everything started working perfect. What exactly is that sending to the VM?


I believe you are refering to

<cpu mode='host-passthrough' check='none' migratable='on'> <topology sockets='1' dies='1' clusters='1' cores='6' threads='2'/> <cache mode='passthrough'/> <!-- Explicit feature policy (non-conflicting, defensive) --> <feature policy='disable' name='hypervisor'/> <feature policy='require' name='pcid'/> <feature policy='require' name='pdpe1gb'/> <feature policy='require' name='aes'/> <feature policy='require' name='topoext'/> </cpu>


https://www.reddit.com/r/VFIO/comments/cpf96e/feature_policydisable_namehypervisor_greatly/

It is used to asist in telling windows and games that the system in not running in a VM.


again you would have to read and find the info in the docs:
https://libvirt.org/formatdomaincaps.html

Really wished libvirt would add search and better info...

Review docs:

https://libvirt.org/formatdomain.html#id25

hyperv

Enable various features improving behavior of guests running Microsoft Windows. Since 11.3.0 some of these flags are also available for Xen domains running Microsoft Windows.

  • 4 months later...
On 12/18/2025 at 3:15 PM, Elembemedia said:

Alright, I've followed all of that and still not working all the way. I do at least get something on the display now but not actual video.

IMG_0519.jpeg

I am having this exact green issue after swapping from a 3060 ti over to a 9070 xt.

It's driving my nuts, I had it on 7.1.4, and even after upgrading 7.3.0.
I have tried binding to VFIO on start (which doesn't work because the GPU gets stuck in D3), i've tried leaving it unbound and running the script below.


It displays an output before the AMD drivers are installed, also displays an output when turning on (Unraid Splash screen), then immedately this.

I'm fully out of ideas, not sure where it's going wrong and have tried everything in here to fix it.

Any ideas?

#!/bin/bash
GPU="0000:03:00.0"
GPU_AUDIO="0000:03:00.1"
BAR_INDEX=8    # 8 = 256MB, 3 = 8MB

log() { echo "[gpu-prep $(date '+%H:%M:%S')] $*"; }

unbind() {
    local dev="$1"
    local drvlink="/sys/bus/pci/devices/$dev/driver"
    if [ -L "$drvlink" ]; then
        local drv
        drv=$(basename "$(readlink "$drvlink")")
        log "Unbinding $dev from $drv"
        echo "$dev" > "$drvlink/unbind"
    else
        log "$dev already unbound"
    fi
}

log "Starting"
log "Available reset methods: $(cat /sys/bus/pci/devices/$GPU/reset_method)"

# Unbind both functions from whatever currently has them
unbind "$GPU"
unbind "$GPU_AUDIO"
sleep 2

# Bus reset to clear any leftover state from amdgpu / framebuffer
log "Triggering bus reset on $GPU"
if echo 1 > "/sys/bus/pci/devices/$GPU/reset" 2>/dev/null; then
    log "  reset succeeded"
else
    log "  reset failed (check dmesg)"
fi
sleep 2

# Resize BAR2 (only meaningful with CAM/ReBAR enabled in BIOS)
log "Resizing BAR2 (index $BAR_INDEX = 256MB)"
if echo "$BAR_INDEX" > "/sys/bus/pci/devices/$GPU/resource2_resize" 2>/dev/null; then
    log "  BAR2 resize accepted"
else
    log "  BAR2 resize failed (check dmesg)"
fi
sleep 2

# Force vfio-pci as the only driver allowed to bind to these devices
log "Setting driver_override to vfio-pci"
echo "vfio-pci" > "/sys/bus/pci/devices/$GPU/driver_override"
echo "vfio-pci" > "/sys/bus/pci/devices/$GPU_AUDIO/driver_override"

log "Verification:"
log "  $GPU       driver: $(basename "$(readlink /sys/bus/pci/devices/$GPU/driver 2>/dev/null)" 2>/dev/null || echo none)"
log "  $GPU_AUDIO driver: $(basename "$(readlink /sys/bus/pci/devices/$GPU_AUDIO/driver 2>/dev/null)" 2>/dev/null || echo none)"

log "Done. libvirt managed='yes' will bind to vfio-pci when the VM starts."

adam-htpc-diagnostics-20260516-2251.zip

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.