tenclass / mvisor-win-vgpu-driver

Implementation of OpenGL on windows guest virtual machine using Mesa/Virgl protocol.
GNU General Public License v3.0
109 stars 21 forks source link

Trouble to install driver from release #5

Open Nikoos opened 7 months ago

Nikoos commented 7 months ago

Hello Team,

I try to install the provided driver from release pages, the following error occured :

mvisor_gpu_00

Please find the VM Yaml configuration :

name: VGPU Test
base: q35.yaml

machine:
  memory: 4G
  vcpu: 4
  # Set vcpu thread priority value [-20, 19]
  # A higher value means a lower priority
  priority: 1
  # Turn on BIOS output and performance measurement
  debug: yes
  # Turn on hypervisor to lower CPU usage (Hyper-V is used for Windows)
  hypervisor: yes

objects:
  - name: cmos
    # gmtime for linux, localtime for windows
    rtc: localtime

  - class: qxl
  - class: spice-agent
  - class: qemu-guest-agent
  - class: usb-tablet

  - class: virtio-network
    backend: uip
    mac: 00:50:00:11:22:33
    map: tcp:0.0.0.0:8022-:22

  - class: ata-cdrom 
    image: /home/nikos/NAS/Not_to_be_archived/ISO/Win10_1809_EnglishInternational_x64.iso

  - class: ata-cdrom
    image: /home/nikos/NAS/Not_to_be_archived/ISO/virtio-win-0.1.240.iso

  - class: ata-disk
    image: /home/nikos/VirtualBox_Lun/test/test-vgpu.qcow2
    snapshot: No

  - class: virtio-vgpu
    memory: 1G
    staging: yes
    blob: No
    node: /dev/dri/renderD128

  # - class: floppy
  #   image: /data/images/floppy.img

  # - class: virtio-block
  #   image: /data/empty.qcow2
  #   snapshot: No

  # - class: virtio-fs
  #   path: /tmp/fuse
  #   disk_name: mvisor-fs
  #   disk_size: 2G
  #   inode_count: 200

  # - class: vfio-pci
  #   sysfs: /sys/bus/mdev/devices/c2e088ba-954f-11ec-8584-525400666f2b
  #   debug: Yes

  # - class: virtio-vgpu
  #   memory: 1G
  #   staging: No
  #   blob: No
  #   node: /dev/dri/renderD131

Windows version : Windows 10 Pro (1809 OS Build 17763.1)

To be noted, I was not able to install Windows 10 via Mvisor due to BSOD on installation, I had to create a VM on Qemu and then use the qcow2 file with mvisor.

Here are the steps I followed, to install the provided driver :

  1. Download archive from release page.
  2. Enable driver installation without signature (bcdedit.exe /set testsigning on) with elevated privileges.
  3. Copy kernelmode and usermode folder to c:\windows\system32.
  4. Launch the install.bat script with elevated privileges.

I also tried to compile driver, usermode does not seem to compile via Visual Studio 2022 (an issue with target architecture not set), and with kernelmode, it compiles up to file/step 583 then freeze.

Best regards,

Nikos

Nikoos commented 7 months ago

Update,

I was able to compile kernelmode and usermode,

For usermode:

need to perform some move to use a more recent version of flex and bison (use win-bison and win-flex, add a new environment variable path to this installation, rename winbison and winflex to bison and flex). Compilation completes

For kernelmode:

I found my issues, Certificate issue (as I do not know the password for the provided pfx file) I created via VS2022 my personal certificate by opening vgpu properties then Configuration properties>Driver signing>General : for the option Test certificate it will be written Tenclass.com [......], change this value to "Create test certificate", VS2022 will create a test certificate for you.

Then update the file digest algorithm to SHA256 (as requested by VS 2022).

Now you can compile the solution.

I have all the required file, but, same behavior, Windows can not load my driver.

Best regards,

Nikos

nooodles2023 commented 7 months ago

Oh, if you have compiled them successfully, the problem may be the OS environment. 17763 kernel seems to be too old...try to use 21H2(19044) version which we have tested it in our production. By the way, could you please post some information about BOSD when you used Mvisor to install windows os?

Nikoos commented 7 months ago

for the BSOD, I will try to reproduce it with the 21H2 version

Nikoos commented 7 months ago

I tested the 22H2 and got BSOD just before entering installation program, am not sure it's related to vgpu driver but more on mvisor itself :

[0.000] ../core/memory_manager.cc:299 Map() debug: map region EPT+TSS gpa=0xfeffc000 size=0x4000 type=0x0
[0.022] ../core/memory_manager.cc:88 InitializeSystemRam() debug: RAM size: 4096 MB
[0.033] ../core/memory_manager.cc:299 Map() debug: map region System gpa=0x0 size=0x80000000 type=0x1
[0.215] ../core/memory_manager.cc:299 Map() debug: map region System gpa=0x100000000 size=0x80000000 type=0x1
[0.604] ../core/memory_manager.cc:299 Map() debug: map region SeaBIOS gpa=0xc0000 size=0x40000 type=0x1
[0.767] ../core/memory_manager.cc:299 Map() debug: map region SeaBIOS gpa=0xfffc0000 size=0x40000 type=0x1
[0.942] ../core/device.cc:62 Connect() debug: ich9-hda <= hda-duplex
[0.949] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI ich9-hda at 0:1b.0
[0.951] ../core/device.cc:62 Connect() debug: q35-host <= ich9-hda
[0.959] ../core/device.cc:62 Connect() debug: ich9-lpc <= cmos
[0.964] ../core/device.cc:62 Connect() debug: ich9-lpc <= debug-console
[0.971] ../core/memory_manager.cc:299 Map() debug: map region HPET gpa=0xfed00000 size=0x400 type=0x2
[0.977] ../core/device.cc:62 Connect() debug: ich9-lpc <= dummy-device
[0.992] ../core/device.cc:62 Connect() debug: ich9-lpc <= firmware-config
[1.029] ../core/device.cc:62 Connect() debug: ich9-lpc <= ps2
[1.033] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI ich9-lpc at 0:1f.0
[1.036] ../core/device.cc:62 Connect() debug: q35-host <= ich9-lpc
[1.039] ../core/device.cc:62 Connect() debug: ich9-ahci <= ata-cdrom
[2.850] ../core/device.cc:62 Connect() debug: ich9-ahci <= ata-cdrom-1
[3.349] ../core/device.cc:62 Connect() debug: ich9-ahci <= ata-disk
[3.462] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI ich9-ahci at 0:1f.2
[3.466] ../core/device.cc:62 Connect() debug: q35-host <= ich9-ahci
[3.517] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI qxl at 0:1.0
[3.524] ../core/memory_manager.cc:299 Map() debug: map region VGA MMIO gpa=0xa0000 size=0x20000 type=0x2
[3.572] ../core/device.cc:62 Connect() debug: q35-host <= qxl
[3.580] ../core/device.cc:62 Connect() debug: virtio-console <= spice-agent
[3.583] ../core/device.cc:62 Connect() debug: virtio-console <= qemu-guest-agent
[3.588] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI virtio-console at 0:2.0
[3.590] ../core/device.cc:62 Connect() debug: q35-host <= virtio-console
[3.595] ../core/device.cc:62 Connect() debug: xhci-host <= usb-tablet
[3.601] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI xhci-host at 0:3.0
[3.603] ../core/device.cc:62 Connect() debug: q35-host <= xhci-host
[3.611] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI virtio-network at 0:4.0
[3.613] ../core/device.cc:62 Connect() debug: q35-host <= virtio-network
[3.666] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI virtio-vgpu at 0:5.0
[3.670] ../core/device.cc:62 Connect() debug: q35-host <= virtio-vgpu
[3.673] ../core/device_manager.cc:157 RegisterDevice() debug: register PCI q35-host at 0:0.0
[3.677] ../core/device.cc:62 Connect() debug: system-root <= q35-host
[3.680] ../core/device.cc:62 Connect() debug: system-root <= kvm-clock
[4.271] ../core/vcpu.cc:506 Process() debug: mvisor-vcpu-0 started
[4.286] ../core/vcpu.cc:506 Process() debug: mvisor-vcpu-1 started
[4.306] ../core/vcpu.cc:506 Process() debug: mvisor-vcpu-3 started
[4.305] ../core/vcpu.cc:506 Process() debug: mvisor-vcpu-2 started
[62.064] ../core/device_manager.cc:462 HandleIo() debug: pio count=1  mmio count=0
SeaBIOS (version rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org)
BUILD: gcc: (GCC) 11.2.1 20210728 (Red Hat Cross 11.2.1-1) binutils: version 2.37-3.fc35
No Xen hypervisor found.
Running on QEMU (q35)
Found QEMU fw_cfg
QEMU fw_cfg DMA interface supported
qemu/e820: addr 0x0000000000000000 len 0x0000000080000000 [RAM]
qemu/e820: addr 0x0000000100000000 len 0x0000000080000000 [RAM]
Relocating init from 0x000d4c00 to 0x7ffab420 (size 84800)
[64.734] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore DMA Controller 1 write base=0x0 offset=0xd data=0x486d0000 size=1
[64.747] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore DMA Controller 2 write base=0xc0 offset=0x1a data=0x486d0000 size=1
[64.756] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore DMA Controller 2 write base=0xc0 offset=0x16 data=0x486d00c0 size=1
[64.765] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore DMA Controller 2 write base=0xc0 offset=0x14 data=0x486d0000 size=1
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 9 PCI devices (max PCI bus is 00)
[67.089] ../core/memory_manager.cc:299 Map() debug: map region PCIE XBAR gpa=0xb0000000 size=0x10000000 type=0x2
PCIe: using q35 mmconfig at 0xb0000000
=== PCI new allocation pass #1 ===
PCI: check devices
=== PCI new allocation pass #2 ===
PCI: IO: c000 - c0df
PCI: 32: 00000000c0000000 - 00000000fec00000
PCI: map device bdf=00:02.0  bar 0, addr 0000c000, size 00000040 [io]
PCI: map device bdf=00:04.0  bar 0, addr 0000c040, size 00000040 [io]
PCI: map device bdf=00:05.0  bar 0, addr 0000c080, size 00000040 [io]
PCI: map device bdf=00:01.0  bar 3, addr 0000c0c0, size 00000020 [io]
PCI: map device bdf=00:01.0  bar 6, addr febd0000, size 00010000 [mem]
[70.909] ../core/memory_manager.cc:299 Map() debug: map region PCI ROM gpa=0xfebd0000 size=0x10000 type=0x3
PCI: map device bdf=00:02.0  bar 4, addr febe0000, size 00004000 [mem]
[71.276] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe0000 size=0x4000 type=0x2
PCI: map device bdf=00:03.0  bar 0, addr febe4000, size 00004000 [mem]
[71.582] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe4000 size=0x4000 type=0x2
PCI: map device bdf=00:04.0  bar 4, addr febe8000, size 00004000 [mem]
[71.889] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe8000 size=0x4000 type=0x2
PCI: map device bdf=00:05.0  bar 4, addr febec000, size 00004000 [mem]
[72.195] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebec000 size=0x4000 type=0x2
PCI: map device bdf=00:1b.0  bar 0, addr febf0000, size 00004000 [mem]
[72.479] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf0000 size=0x4000 type=0x2
PCI: map device bdf=00:02.0  bar 1, addr febf4000, size 00001000 [mem]
[72.761] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf4000 size=0x1000 type=0x2
PCI: map device bdf=00:04.0  bar 1, addr febf5000, size 00001000 [mem]
[73.043] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf5000 size=0x1000 type=0x2
PCI: map device bdf=00:05.0  bar 1, addr febf6000, size 00001000 [mem]
[73.342] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf6000 size=0x1000 type=0x2
PCI: map device bdf=00:1f.2  bar 5, addr febf7000, size 00001000 [mem]
PCI: map device bdf=00:01.0  bar 0, addr e0000000, size 10000000 [prefmem]
PCI: map device bdf=00:01.0  bar 1, addr f0000000, size 01000000 [prefmem]
PCI: map device bdf=00:01.0  bar 2, addr f1000000, size 00002000 [prefmem]
PCI: init bdf=00:00.0 id=8086:29c0
PCI: init bdf=00:01.0 id=1b36:0100
[74.841] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xe0000000 size=0x10000000 type=0x1
[74.916] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xf0000000 size=0x1000000 type=0x1
[74.951] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xf1000000 size=0x2000 type=0x1
[75.006] ../core/device_manager.cc:322 RegisterIoEvent() debug: qxl register IO event address=0xc0c0 length=0 fd=25
[75.036] ../core/device_manager.cc:322 RegisterIoEvent() debug: qxl register IO event address=0xc0c1 length=0 fd=26
PCI: init bdf=00:02.0 id=1af4:1003
PCI: init bdf=00:03.0 id=1b36:000d
PCI: init bdf=00:04.0 id=1af4:1000
PCI: init bdf=00:05.0 id=1af4:105b
PCI: init bdf=00:1b.0 id=8086:293e
PCI: init bdf=00:1f.0 id=8086:2918
Q35 LPC init: elcr=00 0c
[76.150] ../core/memory_manager.cc:299 Map() debug: map region RCRB gpa=0xfed1c000 size=0x4000 type=0x2
Using pmtimer, ioport 0xb008
PCI: init bdf=00:1f.2 id=8086:2922
[76.443] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf7000 size=0x1000 type=0x2
PCI: Using 00:01.0 for primary VGA
handle_smp: apic_id=0x2
handle_smp: apic_id=0x1
handle_smp: apic_id=0x3
Found 4 cpu(s) max supported 4 cpu(s)
Copying PIR from 0x7ffbfc40 to 0x000f5c80
Copying MPTABLE from 0x00006d00/7ffa2870 to 0x000f5b70
Copying SMBIOS from 0x00006d00 to 0x000f5af0
[78.121] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[78.133] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
ACPI DSDT=0x7fffd760
Copying ACPI RSDP from 0x00006cdc to 0x000f5ad0
Scan for VGA option rom
Running option rom at c000:0003
Start SeaVGABIOS (version rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org)
VGABUILD: gcc: (GCC) 11.2.1 20210728 (Red Hat Cross 11.2.1-1) binutils: version 2.37-3.fc35
enter vga_post:
   a=00000008  b=0000ffff  c=00000000  d=0000ffff ds=0000 es=f000 ss=0000
  si=00000000 di=00006060 bp=00000000 sp=00006d1a cs=f000 ip=d04a  f=0000
VBE DISPI: bdf 00:01.0, bar 0
VBE DISPI: lfb_addr=e0000000, size 256 MB
Attempting to allocate 512 bytes lowmem via pmm call to f000:d104
pmm call arg1=0
VGA stack allocated at e8c80
Turning on vga text mode console
set VGA mode 3
SeaBIOS (version rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org)
PCI: XHCI at 00:03.0 (mmio 0xfebe4000)
XHCI init: regs @ 0xfebe4000, 8 ports, 64 slots, 32 byte contexts
XHCI    protocol USB  2.00, 4 ports (offset 1), def 0
XHCI    protocol USB  3.00, 4 ports (offset 5), def 0
AHCI controller at 00:1f.2, iobase 0xfebf7000, irq 10
Searching bootorder for: /pci@i0cf8/*@1f,2/drive@0/disk@0
Searching bios-geometry for: /pci@i0cf8/*@1f,2/drive@0/disk@0
Searching bootorder for: /pci@i0cf8/*@1f,2/drive@1/disk@0
Searching bios-geometry for: /pci@i0cf8/*@1f,2/drive@1/disk@0
AHCI/0: registering: "DVD/CD [AHCI/0: DVD-ROM ATAPI-4 DVD/CD]"
Searching bootorder for: /pci@i0cf8/*@1f,2/drive@2/disk@0
AHCI/2: Set transfer mode to UDMA-5
Searching bios-geometry for: /pci@i0cf8/*@1f,2/drive@2/disk@0
AHCI/1: registering: "DVD/CD [AHCI/1: DVD-ROM ATAPI-4 DVD/CD]"
AHCI/2: registering: "AHCI/2: Tenclass Disk ATA-7 Hard-Disk (70 GiBytes)"
PS2 keyboard initialized
Searching bootorder for: HALT
[103.804] ../devices/superio/dummy.cc:115 Read() debug: PIO ignore Parallel LPT2 read base=0x378 offset=0x2 size=1
[103.811] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore Parallel LPT2 write base=0x378 offset=0x2 data=0x1269df size=1
[103.816] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore Parallel LPT2 write base=0x378 offset=0x0 data=0x1269aa size=1
[103.821] ../devices/superio/dummy.cc:115 Read() debug: PIO ignore Parallel LPT2 read base=0x378 offset=0x0 size=1
[103.826] ../devices/superio/dummy.cc:115 Read() debug: PIO ignore Parallel LPT1 read base=0x278 offset=0x2 size=1
[103.831] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore Parallel LPT1 write base=0x278 offset=0x2 data=0x1269df size=1
[103.835] ../devices/superio/dummy.cc:106 Write() debug: PIO ignore Parallel LPT1 write base=0x278 offset=0x0 data=0x1269aa size=1
[103.840] ../devices/superio/dummy.cc:115 Read() debug: PIO ignore Parallel LPT1 read base=0x278 offset=0x0 size=1
Found 0 lpt ports
[103.880] ../core/device_manager.cc:478 HandleIo() debug: unhandled io out port: 0x3f9 size: 1 data: 00000000001269ff count: 1
[103.886] ../core/device_manager.cc:478 HandleIo() debug: unhandled io in port: 0x3f9 size: 1 data: 00000000001269ff count: 1
[103.892] ../core/device_manager.cc:478 HandleIo() debug: unhandled io out port: 0x2f9 size: 1 data: 00000000001269ff count: 1
[103.897] ../core/device_manager.cc:478 HandleIo() debug: unhandled io in port: 0x2f9 size: 1 data: 00000000001269ff count: 1
[103.903] ../core/device_manager.cc:478 HandleIo() debug: unhandled io out port: 0x3e9 size: 1 data: 00000000001269ff count: 1
[103.909] ../core/device_manager.cc:478 HandleIo() debug: unhandled io in port: 0x3e9 size: 1 data: 00000000001269ff count: 1
[103.914] ../core/device_manager.cc:478 HandleIo() debug: unhandled io out port: 0x2e9 size: 1 data: 00000000001269ff count: 1
[103.920] ../core/device_manager.cc:478 HandleIo() debug: unhandled io in port: 0x2e9 size: 1 data: 00000000001269ff count: 1
Found 0 serial ports
XHCI port #1: 0x00220603, powered, enabled, pls 0, speed 1 [Full]
xhci_realloc_pipe: reconf ctl endpoint pkt size: 8 -> 64
XHCI no devices found
All threads complete.
Scan for option roms

Press ESC for boot menu.

[1067.185] ../core/device_manager.cc:462 HandleIo() debug: pio count=57332  mmio count=22081
[2110.768] ../core/device_manager.cc:462 HandleIo() debug: pio count=76  mmio count=0
Searching bootorder for: HALT
drive 0x000f59c0: PCHS=16383/16/63 translation=lba LCHS=1024/255/63 s=146800640
Space available for UMB: ca000-e8000, f5500-f5990
Returned 241664 bytes of ZoneHigh
e820 map has 10 items:
  0: 0000000000000000 - 000000000009fc00 = 1 RAM
  1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
  3: 0000000000100000 - 000000007fffb000 = 1 RAM
  4: 000000007fffb000 - 0000000080000000 = 2 RESERVED
  5: 00000000b0000000 - 00000000c0000000 = 2 RESERVED
  6: 00000000fed1c000 - 00000000fed20000 = 2 RESERVED
  7: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
  8: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
  9: 0000000100000000 - 0000000180000000 = 1 RAM
enter handle_19:
  NULL
Booting from Hard Disk...
Boot failed: not a bootable disk

enter handle_18:
  NULL
Booting from DVD/CD...
Booting from 0000:7c00
VBE current mode=3
VBE mode info request: 3
VBE mode info request: 100
VBE mode info request: 101
VBE mode info request: 102
VBE mode info request: 103
VBE mode info request: 104
VBE mode info request: 105
VBE mode info request: 106
VBE mode info request: 107
VBE mode info request: 10d
VBE mode info request: 10e
VBE mode info request: 10f
VBE mode info request: 110
VBE mode info request: 111
VBE mode info request: 112
VBE mode info request: 113
VBE mode info request: 114
VBE mode info request: 115
VBE mode info request: 116
VBE mode info request: 117
VBE mode info request: 118
VBE mode set: 4118
set VGA mode 118
[2937.556] ../core/memory_manager.cc:299 Map() debug: map region VGA RAM gpa=0xa0000 size=0x20000 type=0x1
VBE mode info request: 118
VBE current mode=4118
VBE mode set: 4003
set VGA mode 3
[2954.376] ../core/memory_manager.cc:311 Unmap() debug: unmap region VGA RAM gpa=0xa0000 size=20000 type=1
[3110.783] ../core/device_manager.cc:462 HandleIo() debug: pio count=29799  mmio count=32935
[4110.784] ../core/device_manager.cc:524 HandleMmio() debug: pio count=129107  mmio count=68256
VBE current mode=4003
VBE mode info request: 3
VBE mode info request: 100
VBE mode info request: 101
VBE mode info request: 102
VBE mode info request: 103
VBE mode info request: 104
VBE mode info request: 105
VBE mode info request: 106
VBE mode info request: 107
VBE mode info request: 10d
VBE mode info request: 10e
VBE mode info request: 10f
VBE mode info request: 110
VBE mode info request: 111
VBE mode info request: 112
VBE mode info request: 113
VBE mode info request: 114
VBE mode info request: 115
VBE mode info request: 116
VBE mode info request: 117
VBE mode info request: 118
VBE mode set: 4118
set VGA mode 118
VBE mode info request: 118
[5115.756] ../core/device_manager.cc:462 HandleIo() debug: pio count=23023  mmio count=19164
[5687.048] ../core/vcpu.cc:429 ProcessHyperV() debug: msr_hv_synic_msg_page = 0x17001
[5886.608] ../core/vcpu.cc:429 ProcessHyperV() debug: msr_hv_synic_msg_page = 0x18001
[5887.713] ../core/vcpu.cc:429 ProcessHyperV() debug: msr_hv_synic_msg_page = 0x19001
[5888.795] ../core/vcpu.cc:429 ProcessHyperV() debug: msr_hv_synic_msg_page = 0x1a001
[6198.252] ../core/device_manager.cc:524 HandleMmio() debug: pio count=34515  mmio count=8239
[6203.975] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6204.015] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6207.401] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6207.424] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6208.766] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6208.785] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6209.957] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6209.986] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6210.728] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6210.749] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6224.077] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6224.104] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6224.550] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x0 size=4
[6224.569] ../devices/superio/dummy.cc:115 Read() debug: MMIO ignore HPET read base=0xfed00000 offset=0x4 size=4
[6225.876] ../core/vcpu.cc:439 ProcessHyperV() debug: msr_hv_synic_evt_page = 0x3fff0001
[6225.886] ../core/vcpu.cc:423 ProcessHyperV() debug: msr_hv_synic_control = 0x1
[6225.925] ../core/vcpu.cc:439 ProcessHyperV() debug: msr_hv_synic_evt_page = 0x3ffef001
[6225.936] ../core/vcpu.cc:423 ProcessHyperV() debug: msr_hv_synic_control = 0x1
[6225.983] ../core/vcpu.cc:439 ProcessHyperV() debug: msr_hv_synic_evt_page = 0x3ffee001
[6226.003] ../core/vcpu.cc:423 ProcessHyperV() debug: msr_hv_synic_control = 0x1
[6226.029] ../core/vcpu.cc:439 ProcessHyperV() debug: msr_hv_synic_evt_page = 0x3ffed001
[6226.040] ../core/vcpu.cc:423 ProcessHyperV() debug: msr_hv_synic_control = 0x1
[6234.404] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xe0000000 size=10000000 type=1
[6259.846] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xf0000000 size=1000000 type=1
[6259.993] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xf1000000 size=2000 type=1
[6260.181] ../core/device_manager.cc:519 HandleMmio() debug: q35-host SLOW MMIO out addr=0xb0008004 size=2 data=500 cost=25.778ms
[6260.496] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xe0000000 size=0x10000000 type=0x1
[6260.566] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xf0000000 size=0x1000000 type=0x1
[6260.589] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR RAM gpa=0xf1000000 size=0x2000 type=0x1
[6260.624] ../core/device_manager.cc:322 RegisterIoEvent() debug: qxl register IO event address=0xc0c0 length=0 fd=25
[6260.643] ../core/device_manager.cc:322 RegisterIoEvent() debug: qxl register IO event address=0xc0c1 length=0 fd=26
[6262.569] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf4000 size=1000 type=2
[6262.584] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe0000 size=4000 type=2
[6262.825] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf4000 size=0x1000 type=0x2
[6262.842] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe0000 size=0x4000 type=0x2
[6263.449] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe4000 size=4000 type=2
[6263.692] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe4000 size=0x4000 type=0x2
[6264.387] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf5000 size=1000 type=2
[6264.400] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe8000 size=4000 type=2
[6264.629] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf5000 size=0x1000 type=0x2
[6264.644] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebe8000 size=0x4000 type=0x2
[6265.302] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf6000 size=1000 type=2
[6265.315] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebec000 size=4000 type=2
[6265.550] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf6000 size=0x1000 type=0x2
[6265.566] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebec000 size=0x4000 type=0x2
[6266.312] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf0000 size=4000 type=2
[6266.498] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf0000 size=0x4000 type=0x2
[6267.419] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf7000 size=1000 type=2
[6267.612] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf7000 size=0x1000 type=0x2
[6383.064] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf7000 size=1000 type=2
[6383.176] ../core/memory_manager.cc:299 Map() debug: map region PCI BAR MMIO gpa=0xfebf7000 size=0x1000 type=0x2
^C[13005.966] ../core/vcpu.cc:562 Process() debug: mvisor-vcpu-1 ended
[13005.968] ../core/io_thread.cc:158 RunLoop() debug: mvisor-iothread ended
[13005.965] ../core/vcpu.cc:562 Process() debug: mvisor-vcpu-0 ended
[13005.967] ../core/vcpu.cc:562 Process() debug: mvisor-vcpu-2 ended
[13005.969] ../core/vcpu.cc:562 Process() debug: mvisor-vcpu-3 ended
[13006.147] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf0000 size=4000 type=2
[13006.201] ../core/memory_manager.cc:311 Unmap() debug: unmap region HPET gpa=0xfed00000 size=400 type=2
[13006.229] ../core/memory_manager.cc:311 Unmap() debug: unmap region RCRB gpa=0xfed1c000 size=4000 type=2
[13006.242] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf7000 size=1000 type=2
[13007.010] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xe0000000 size=10000000 type=1
[13089.716] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xf0000000 size=1000000 type=1
[13089.770] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR RAM gpa=0xf1000000 size=2000 type=1
[13089.865] ../core/memory_manager.cc:311 Unmap() debug: unmap region VGA MMIO gpa=0xa0000 size=20000 type=2
[13089.896] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf4000 size=1000 type=2
[13089.904] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe0000 size=4000 type=2
[13089.922] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe4000 size=4000 type=2
[13089.962] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf5000 size=1000 type=2
[13089.969] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebe8000 size=4000 type=2
[13089.979] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebf6000 size=1000 type=2
[13089.986] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCI BAR MMIO gpa=0xfebec000 size=4000 type=2
[13089.995] ../core/memory_manager.cc:311 Unmap() debug: unmap region PCIE XBAR gpa=0xb0000000 size=10000000 type=2

like this issue : https://github.com/tenclass/mvisor/issues/1#issue-1873602949

Best regards,

Nikos

nooodles2023 commented 7 months ago
Nikoos commented 7 months ago

Got the same BSOD with virtio-block config, if you think this BSOD is similar to the one provided in my previous post, should we switch to this issue to diagnose the BSOD issue ?

(to avoid poluting this issue)

nooodles2023 commented 7 months ago

Got the same BSOD with virtio-block config, if you think this BSOD is similar to the one provided in my previous post, should we switch to this issue to diagnose the BSOD issue ?

(to avoid poluting this issue)

Post your host environment in detail. I will test it later. You can use qemu to install os now, then check the vgpu driver.

Nikoos commented 7 months ago

Here are the requested details :

OS : Elementary 7.1 (based on Ubuntu 22.04.x LTS) Graphic card : AMD Radeon 7900XT CPU : AMD Ryzen Threadripper PRO 3955WX 16-Cores Motherboard : Pro WS WRX80E-SAGE SE WIFI

To be noted, I do not have to patch src/vrend_renderer.c as it already contains the corresponding line :

   if (has_feature(feat_arb_buffer_storage) && !vrend_state.use_external_blob) {
      const char *vendor = (const char *)glGetString(GL_VENDOR);
      bool is_mesa = ((strstr(renderer, "Mesa") != NULL) || (strstr(renderer, "DRM") != NULL) ||
                      (strstr(renderer, "llvmpipe") != NULL));
      /*
       * Intel GPUs (aside from Atom, which doesn't expose GL4.5) are cache-coherent.
       * Mesa AMDGPUs use write-combine mappings for coherent/persistent memory (see
       * RADEON_FLAG_GTT_WC in si_buffer.c/r600_buffer_common.c). For Nvidia, we can guess and
       * check.  Long term, maybe a GL extension or using VK could replace these heuristics.
       *
       * Note Intel VMX ignores the caching type returned from virglrenderer, while AMD SVM and
       * ARM honor it.
       */
      if (is_mesa) {
         if (strstr(vendor, "Intel") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
         else if (strstr(vendor, "AMD") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_WC;
         else if (strstr(vendor, "Mesa") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
      } else {
         /* This is an educated guess since things don't explode with VMX + Nvidia. */
         if (strstr(renderer, "Quadro K2200") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
      }

      if (vrend_state.inferred_gl_caching_type)
         caps->v2.capability_bits |= VIRGL_CAP_ARB_BUFFER_STORAGE;
   }

However, I built and installed it :

# ldd mvisor | grep virgl
    libvirglrenderer.so.1 => /usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1 (0x00007fd04fa1e000)

# readlink -f /usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1
/usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1.8.9

Nikos

nooodles2023 commented 7 months ago

Here are the requested details :

OS : Elementary 7.1 (based on Ubuntu 22.04.x LTS) Graphic card : AMD Radeon 7900XT CPU : AMD Ryzen Threadripper PRO 3955WX 16-Cores Motherboard : Pro WS WRX80E-SAGE SE WIFI

To be noted, I do not have to patch src/vrend_renderer.c as it already contains the corresponding line :

   if (has_feature(feat_arb_buffer_storage) && !vrend_state.use_external_blob) {
      const char *vendor = (const char *)glGetString(GL_VENDOR);
      bool is_mesa = ((strstr(renderer, "Mesa") != NULL) || (strstr(renderer, "DRM") != NULL) ||
                      (strstr(renderer, "llvmpipe") != NULL));
      /*
       * Intel GPUs (aside from Atom, which doesn't expose GL4.5) are cache-coherent.
       * Mesa AMDGPUs use write-combine mappings for coherent/persistent memory (see
       * RADEON_FLAG_GTT_WC in si_buffer.c/r600_buffer_common.c). For Nvidia, we can guess and
       * check.  Long term, maybe a GL extension or using VK could replace these heuristics.
       *
       * Note Intel VMX ignores the caching type returned from virglrenderer, while AMD SVM and
       * ARM honor it.
       */
      if (is_mesa) {
         if (strstr(vendor, "Intel") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
         else if (strstr(vendor, "AMD") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_WC;
         else if (strstr(vendor, "Mesa") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
      } else {
         /* This is an educated guess since things don't explode with VMX + Nvidia. */
         if (strstr(renderer, "Quadro K2200") != NULL)
            vrend_state.inferred_gl_caching_type = VIRGL_RENDERER_MAP_CACHE_CACHED;
      }

      if (vrend_state.inferred_gl_caching_type)
         caps->v2.capability_bits |= VIRGL_CAP_ARB_BUFFER_STORAGE;
   }

However, I built and installed it :

# ldd mvisor | grep virgl
  libvirglrenderer.so.1 => /usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1 (0x00007fd04fa1e000)

# readlink -f /usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1
/usr/local/lib/x86_64-linux-gnu/libvirglrenderer.so.1.8.9

Nikos

Thank you for your patient assistance. We have not test it on Elementary 7.1, but it should work on the latest version of Ubuntu.

as you see, AMD gpu doesn't need to be patch the libvirglrenderer to use BLOB feature. if you want to use blob, you need to turn it on in config file like this:

Gargazou commented 7 months ago

I successfully compiled the user mode driver using mingw64. Using VS2019 was a waste of time. It generated a lot of compilation errors: VS2019 is more strict than GCC.

Now I try to compile the kernel mode driver using VisualStudio 2019. No luck.
1-I selected the x64 target in the vgpu project. It fails to compile: ntdef.h, error directive: "No Target Architecture" I guess the architecture to select is the x86?
-I want to deploy this driver on this target HW : x64 Intel Haswell , Intel HD4600 GPU and running Win10 LTS (1809).

Can you specify which VisualStudio version you used to successfully build the Kernel Module?
Also, can you tell me the exact version of WDK10 that was used? There are many different versions of the WDK10, and the compatibility is less than guaranteed.

I do have access to a Windows 11 machine. I can install teh latest VS2022 on it. However, I want to generate a driver than will run on Windows 10.

nooodles2023 commented 7 months ago

I successfully compiled the user mode driver using mingw64. Using VS2019 was a waste of time. It generated a lot of compilation errors: VS2019 is more strict than GCC.

Now I try to compile the kernel mode driver using VisualStudio 2019. No luck. 1-I selected the x64 target in the vgpu project. It fails to compile: ntdef.h, error directive: "No Target Architecture" I guess the architecture to select is the x86? -I want to deploy this driver on this target HW : x64 Intel Haswell , Intel HD4600 GPU and running Win10 LTS (1809).

Can you specify which VisualStudio version you used to successfully build the Kernel Module? Also, can you tell me the exact version of WDK10 that was used? There are many different versions of the WDK10, and the compatibility is less than guaranteed.

I do have access to a Windows 11 machine. I can install teh latest VS2022 on it. However, I want to generate a driver than will run on Windows 10.

VS2019 + WDK10.0 Did you know this driver is only for Mvisor vgpu device?It only works in Mvisor windows VM. For win10 64bit os, you need to choose x64 arch to generate vgpu.sys Have you tested it with the latest release in Mvisor win10 vm yet?

Nikoos commented 6 months ago

I successfully compiled the user mode driver using mingw64. Using VS2019 was a waste of time. It generated a lot of compilation errors: VS2019 is more strict than GCC.

Now I try to compile the kernel mode driver using VisualStudio 2019. No luck. 1-I selected the x64 target in the vgpu project. It fails to compile: ntdef.h, error directive: "No Target Architecture" I guess the architecture to select is the x86? -I want to deploy this driver on this target HW : x64 Intel Haswell , Intel HD4600 GPU and running Win10 LTS (1809).

Can you specify which VisualStudio version you used to successfully build the Kernel Module? Also, can you tell me the exact version of WDK10 that was used? There are many different versions of the WDK10, and the compatibility is less than guaranteed.

I do have access to a Windows 11 machine. I can install teh latest VS2022 on it. However, I want to generate a driver than will run on Windows 10.

I faced this issue too, when installing Windows Driver Kit and Visual Studio 2019, it appears that Windows Driver Kit was not properly registered in Visual Studio 2019.

You'll have a special program in the start menu that will perform the correct registration.

Regards,

Nikos