Hello,I tested Native CPUID with meowdiocre/devirtz-kernel-style AMD SVM changes on an Arch Linux KVM/VFIO host.Host:• AMD Ryzen 7 9800X3D, 8 cores / 16 threads• Arch Linux, Linux 7.1.3 Zen• Windows 11 guest, Q35 + OVMF, RTX 5080 VFIO passthrough• 24 GB HugePages, SATA disk, e1000e NICThe normal CPUID-intercept configuration is stable:• Windows boots to the physical RTX 5080 display.• host-passthrough, hypervisor=off, kvm hidden, aes=off• Guest topology: 6 cores / 12 threads, with 2 cores / 4 threads reserved for the host.For the Native CPUID test, I:• Cleared the AMD SVM INTERCEPT_CPUID.• Changed the guest to 8 cores / 16 threads.• Removed aes=off.• Pinned every guest vCPU to the host thread with the matching physical x2APIC ID:
0->0, 1->8, 2->1, 3->9, ... 14->7, 15->15.• Verified raw CPUID topology:◦ Leaf 0xB: 2 threads per core, 16 logical CPUs per package.◦ x2APIC IDs matched the QEMU topology and vCPU pinning.• Disabled AVIC/x2AVIC as an additional test. This did not change the result.Result:• OVMF now passes, unlike the earlier 6C/12T Native CPUID test.• Windows reaches 64-bit ntoskrnl, but remains on the boot screen.• All 16 vCPUs consume CPU continuously.• CPU0 remains in a small kernel loop; RIP changes only within the same nearby instructions.• Disk I/O stops progressing.• No QEMU errors, VFIO reset failures, AMD-Vi faults, or APIC pinning errors were found.Relevant raw CPUID features include:• 0xD: host XSAVE layout• 0x80000008: 48-bit physical/virtual address capability• 0x8000000A: AMD SVM capability• 0x8000001F: SME capability• 0x80000026: AMD extended topologyThe host/libvirt does not support SEV or launchSecurity, so the VM cannot fully provide every platform capability exposed by raw host CPUID.My conclusion is that Native CPUID bypasses QEMU/KVM’s filtered CPU contract. Even with matching core/thread count and APIC IDs, Windows sees CPUID features that are not fully consistent with the virtual XSAVE, MSR, memory-encryption, firmware, and ACPI platform state.Do you have a known stable approach for Native CPUID on AMD KVM with Windows, or guidance on which CPUID/MSR/platform capabilities must remain intercepted or emulated to avoid this Windows kernel spin?
Best regards,
Hello,I tested Native CPUID with meowdiocre/devirtz-kernel-style AMD SVM changes on an Arch Linux KVM/VFIO host.Host:• AMD Ryzen 7 9800X3D, 8 cores / 16 threads• Arch Linux, Linux 7.1.3 Zen• Windows 11 guest, Q35 + OVMF, RTX 5080 VFIO passthrough• 24 GB HugePages, SATA disk, e1000e NICThe normal CPUID-intercept configuration is stable:• Windows boots to the physical RTX 5080 display.• host-passthrough, hypervisor=off, kvm hidden, aes=off• Guest topology: 6 cores / 12 threads, with 2 cores / 4 threads reserved for the host.For the Native CPUID test, I:• Cleared the AMD SVM INTERCEPT_CPUID.• Changed the guest to 8 cores / 16 threads.• Removed aes=off.• Pinned every guest vCPU to the host thread with the matching physical x2APIC ID:
0->0, 1->8, 2->1, 3->9, ... 14->7, 15->15.• Verified raw CPUID topology:◦ Leaf 0xB: 2 threads per core, 16 logical CPUs per package.◦ x2APIC IDs matched the QEMU topology and vCPU pinning.• Disabled AVIC/x2AVIC as an additional test. This did not change the result.Result:• OVMF now passes, unlike the earlier 6C/12T Native CPUID test.• Windows reaches 64-bit ntoskrnl, but remains on the boot screen.• All 16 vCPUs consume CPU continuously.• CPU0 remains in a small kernel loop; RIP changes only within the same nearby instructions.• Disk I/O stops progressing.• No QEMU errors, VFIO reset failures, AMD-Vi faults, or APIC pinning errors were found.Relevant raw CPUID features include:• 0xD: host XSAVE layout• 0x80000008: 48-bit physical/virtual address capability• 0x8000000A: AMD SVM capability• 0x8000001F: SME capability• 0x80000026: AMD extended topologyThe host/libvirt does not support SEV or launchSecurity, so the VM cannot fully provide every platform capability exposed by raw host CPUID.My conclusion is that Native CPUID bypasses QEMU/KVM’s filtered CPU contract. Even with matching core/thread count and APIC IDs, Windows sees CPUID features that are not fully consistent with the virtual XSAVE, MSR, memory-encryption, firmware, and ACPI platform state.Do you have a known stable approach for Native CPUID on AMD KVM with Windows, or guidance on which CPUID/MSR/platform capabilities must remain intercepted or emulated to avoid this Windows kernel spin?
Best regards,