[РЕШЕНО] Крах qemu при пробросе

Модератор: Модераторы разделов

Ответить
Mooglaar
Сообщения: 32
ОС: Linux Mint

[РЕШЕНО] Крах qemu при пробросе

Сообщение Mooglaar »

При запуске Qemu происходит крах:
Spoiler

BUG: unable to handle kernel NULL pointer dereference at 00000000000000b8
IP: [<ffffffff813311e1>] 0xffffffff813311e1
PGD 0
Oops: 0002 [#1] SMP
Modules linked in:
CPU: 1 PID: 329 Comm: qemu-system-x86 Not tainted 4.2.9-clfs #14
Hardware name: System manufacturer System Product Name/F2A85-M, BIOS 5104 09/28/2012
task: ffff880098384700 ti: ffff880234284000 task.ti: ffff880234284000
RIP: 0010:[<ffffffff813311e1>] [<ffffffff813311e1>] 0xffffffff813311e1
RSP: 0018:ffff880234287c98 EFLAGS: 00010002
RAX: 0000000000000000 RBX: ffff8802364db840 RCX: 00000000000000a4
RDX: 0000000000000000 RSI: ffff88023dad7098 RDI: ffff8802364db840
RBP: ffff8802364dbcc0 R08: 0000000000000000 R09: ffffffff81946799
R10: ffffffff819467aa R11: 0000000000000000 R12: ffff8802364dc658
R13: 0000000000000082 R14: ffff880234354020 R15: ffff8802364a3800
FS: 00007ff91d241a80(0000) GS:ffff88023ec80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000000000b8 CR3: 00000002342ef000 CR4: 00000000000406e0
Stack:
ffff8802364db840 ffffffff813312a4 00000000000000ff ffff88023dad7098
ffff8802364dbcc0 ffff8802364dc600 0000000000000296 ffffffff813313e1
ffff880236600000 ffff88023d971448 ffff88023dad7098 ffff880234354020
Call Trace:
[<ffffffff813312a4>] ? 0xffffffff813312a4
[<ffffffff813313e1>] ? 0xffffffff813313e1
[<ffffffff813314e6>] ? 0xffffffff813314e6
[<ffffffff8132da45>] ? 0xffffffff8132da45
[<ffffffff8132d93a>] ? 0xffffffff8132d93a
[<ffffffff8132da21>] ? 0xffffffff8132da21
[<ffffffff8132daf8>] ? 0xffffffff8132daf8
[<ffffffff81497836>] ? 0xffffffff81497836
[<ffffffff8149520d>] ? 0xffffffff8149520d
[<ffffffff8114f525>] ? 0xffffffff8114f525
[<ffffffff8113921a>] ? 0xffffffff8113921a
[<ffffffff81141e5a>] ? 0xffffffff81141e5a
[<ffffffff8114f5dc>] ? 0xffffffff8114f5dc
[<ffffffff8168e0ae>] ? 0xffffffff8168e0ae
Code: 00 5b ff 86 b4 00 00 00 5d 41 5c e9 39 fc ff ff 53 0f b7 57 40 48 89 fb 48 8b 05 9b ba b0 00 48 8b 04 d0 48 63 50 10 48 8b 47 38 <ff> 8c 90 b8 00 00 00 48 8b 47 38 ff 88 b4 00 00 00 48 8b 17 48
RIP [<ffffffff813311e1>] 0xffffffff813311e1
RSP <ffff880234287c98>
CR2: 00000000000000b8
---[ end trace a97b2ddb0f339dd7 ]---
br0: port 1(tap0) entered forwarding state




Хостовая система - LFS сборка(linux from the sources).
Гостевая система - windows 10.

Запуск хостовой системы:

Код: Выделить всё

iommu=pt iommu=1 amd_iommu=1 amd_iommu=fullflush vfio-pci.ids=10ec:8169,1022:780d


Запуск qemu:
Spoiler

Код: Выделить всё

# VM name
VM_NAME=WIN10-x86_64

# Number of VM
VM_NUM=0

# Path to HDD image
VM_HDD_IMG=/mnt/win10-x86_64.img

# VM memory count
VM_MEM=4096

# VM network device MAC
VM_NET_MAC=$(printf 'D4:AD:BE:EF:%02X:%02X\n' $((RANDOM%255)) $((RANDOM%255)))

# CPU
# Cores count:
VM_CPU_CORES=2
# Threads (hiperthreading)
VM_CPU_THREADS=1

# Path to CDROM image
VM_CDROM_IMG=/media/dev_root/virtio-win-0.1.126.iso

# Path to network scripts {up|down}
#
VM_NET_SPATH=/media/dev_root/
VM_NET_SUP=${VM_NET_SPATH}/qemu-ifup
VM_NET_SDOWN=${VM_NET_SPATH}/qemu-ifdown

#
#   Qemu run:
#
qemu-system-x86_64\
  -nodefaults\
  -nodefconfig\
  -no-user-config\
  -name ${VM_NAME} \
  -enable-kvm\
  -machine type=q35,accel=kvm,kernel_irqchip=on,mem-merge=off\
  -hda ${VM_HDD_IMG}\
  -m ${VM_MEM}M\
  -cpu host,kvm=off,hv_vapic,hv_time,hv_relaxed,hv_spinlocks=0x1fff,hv_vendor_id=sugoidesu\
  -smp $(expr $VM_CPU_CORES \* $VM_CPU_THREADS),cores=${VM_CPU_CORES},threads=${VM_CPU_THREADS},sockets=1\
  -mem-path /dev/hugepages\
  -mem-prealloc\
  -device ich9-usb-uhci3,id=uhci\
  -device usb-ehci,id=ehci\
  -device nec-usb-xhci,id=xhci\
  -usb\
  -vga std\
  -vnc :${VM_NUM}\
  -usbdevice tablet\
  -device e1000,netdev=net0,mac=${VM_NET_MAC} -netdev tap,script=${VM_NET_SUP},downscript=${VM_NET_SDOWN},id=net0\
  -chardev stdio,mux=on,id=terminal\
  -monitor chardev:terminal \
  -realtime mlock=off \
  -rtc base=localtime,clock=host,driftfix=none \
  -cdrom ${VM_CDROM_IMG}\
  -bios /media/dev_root/OVMF_R.fd\
  -device vfio-pci,host=0000:01:05.0



lspci
01:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)
...
Kernel modules: vfio-pc


При попытке пробросить через pci-stub, так-же возникает вылет, но уже не с NULL pointer, а с ошибкой чтения устройства.
Спасибо сказали:
Mooglaar
Сообщения: 32
ОС: Linux Mint

Re: [РЕШЕНО] Крах qemu при пробросе

Сообщение Mooglaar »

Помог неофициальный патч ядра (съелся перевод строки в последней строке, лучше брать из источника ниже):
Spoiler

Код: Выделить всё

diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c
index de1d2d8..757f951 100644
--- a/arch/x86/kvm/mtrr.c
+++ b/arch/x86/kvm/mtrr.c
@@ -609,6 +609,9 @@ u8 kvm_mtrr_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn)
     start = gfn_to_gpa(gfn);
     end = start + PAGE_SIZE;

+    if (!mtrr_is_enabled(mtrr_state))
+        return MTRR_TYPE_WRBACK;
+
     mtrr_for_each_mem_type(&iter, mtrr_state, start, end) {
         int curr_type = iter.mem_type;

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index e856dd5..af71e34 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -8653,12 +8653,6 @@ static u64 vmx_get_mt_mask(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio)
         goto exit;
     }

-    if (kvm_read_cr0(vcpu) & X86_CR0_CD) {
-        ipat = VMX_EPT_IPAT_BIT;
-        cache = MTRR_TYPE_UNCACHABLE;
-        goto exit;
-    }
-
     cache = kvm_mtrr_get_guest_memory_type(vcpu, gfn);

Патч взял из этого треда.
Может кому поможет.
Спасибо сказали:
Ответить