Skip to content

Instantly share code, notes, and snippets.

@peppergrayxyz
Last active March 13, 2025 19:21
Show Gist options
  • Save peppergrayxyz/fdc9042760273d137dddd3e97034385f to your computer and use it in GitHub Desktop.
Save peppergrayxyz/fdc9042760273d137dddd3e97034385f to your computer and use it in GitHub Desktop.
QEMU with VirtIO GPU Vulkan Support

QEMU with VirtIO GPU Vulkan Support

With its latest reales qemu added the Venus patches so that virtio-gpu now support venus encapsulation for vulkan. This is one more piece to the puzzle towards full Vulkan support.

An outdated blog post on clollabora described in 2021 how to enable 3D acceleration of Vulkan applications in QEMU through the Venus experimental Vulkan driver for VirtIO-GPU with a local development environment. Following up on the outdated write up, this is how its done today.

Definitions

Let's start with the brief description of the projects mentioned in the post & extend them:

  • QEMU is a machine emulator
  • VirGL is an OpenGL driver for VirtIO-GPU, available in Mesa.
  • Venus is an experimental Vulkan driver for VirtIO-GPU, also available in Mesa.
  • Virglrenderer is a library that enables hardware acceleration to VM guests, effectively translating commands from the two drivers just mentioned to either OpenGL or Vulkan.
  • libvirt is an API for managing platform virtualization
  • virt-manager is a desktop user interface for managing virtual machines through libvirt

Merged Patches:

Work in progress:

Prerequisites

Make sure you have the proper version installed on the host:

  • linux kernel >= 6.13 built with CONFIG_UDMABUF
  • working Vulkan and kvm setup
  • qemu >= 9.2.0
  • virglrenderer with enabled venus support
  • mesa >= 24.2.0

You can verify this like so:

$ uname -r
6.13.0
$ ls /dev/udmabuf
/dev/udmabuf
$ ls /dev/kvm
/dev/kvm
$ qemu-system-x86_64 --version
QEMU emulator version 9.2.0
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

Check your distros package sources how they build virglrenderer.

For Vulkan to work you need the proper drivers to be installed for your graphics card.

To verfiy your setup, install vulkan-tools. Make sure mesa >= 24.2.0 and test vkcube:

$ vulkaninfo --summary | grep driverInfo
	driverInfo         = Mesa 24.2.3-1ubuntu1
	driverInfo         = Mesa 24.2.3-1ubuntu1 (LLVM 19.1.0)
...
$ vkcube
Selected GPU x: ..., type: ...

Building qemu

If your distro doesn't (yet) ship and updated version of qemu, you can build it yourself from source:

wget https://download.qemu.org/qemu-9.2.0.tar.xz
tar xvJf qemu-9.2.0.tar.xz
cd qemu-9.2.0
mkdir build && cd build
../configure --target-list=x86_64-softmmu  \
  --enable-kvm                 \
  --enable-opengl              \
  --enable-virglrenderer       \
  --enable-gtk                 \
  --enable-sdl
make -j4

The configuration step will throgh errors if packages are missing. Check the qemu wiki for further info what to install: https://wiki.qemu.org/Hosts/Linux

Create and run an image for QEMU

Create an image & fetch the distro of your choice:

Host

ISO=ubuntu-24.10-desktop-amd64.iso  
wget https://releases.ubuntu.com/oracular/ubuntu-24.10-desktop-amd64.iso  

IMG=ubuntu-24-10.qcow2
qemu-img create -f qcow2 $IMG 16G

Run a live version or install the distro

qemu-system-x86_64                                               \
    -enable-kvm                                                  \
    -M q35                                                       \
    -smp 4                                                       \
    -m 4G                                                        \
    -cpu host                                                    \
    -net nic,model=virtio                                        \
    -net user,hostfwd=tcp::2222-:22                              \
    -device virtio-vga-gl,hostmem=4G,blob=true,venus=true        \
    -vga none                                                    \
    -display gtk,gl=on,show-cursor=on                            \
    -usb -device usb-tablet                                      \
    -object memory-backend-memfd,id=mem1,size=4G                 \
    -machine memory-backend=mem1                                 \
    -hda $IMG                                                    \
    -cdrom $ISO                                                  

Adjust the parameters accordingly:

  • smp: number of cpu cores
  • m: RAM
  • hostmem,size: VRAM

Guest

Install mesa-utilites and vulkan-tools to test the setup:

$ glxinfo -B
$ vkcube
Selected GPU x: ..., type: ...

If the deive is llvmpipe somehting is wrong. The device should be virgl (...).

Troubleshooting

  • (host) add -d guest_errors to show error messages from the guest
  • (guest) try installing vulkan virtio drivers and mesa
  • check the original blog post

Ubuntu 24.10

This is how you do it on Ubuntu

kernel

Install mainline: https://github.com/bkw777/mainline

sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline

find the latest kernel (>= 6.13), at the time of writing 6.13 is a release candidate, so include those:

$ mainline check --include-rc

Install kernel:

$ sudo mainline install 6.13-rc1

Verfify installed kernels:

$ mainline list-installed
mainline 1.4.10
Installed Kernels:
linux-image-6.11.0-13-generic
linux-image-generic-hwe-24.04
linux-image-unsigned-6.13.0-061300rc1-generic
mainline: done

reboot into new kernel

verify running kernel

$ uname -r
6.13.0-061300rc1-generic

virglrenderer

the ubuntu package is not compiled with the proper flags.

If installed remove it: $ sudo apt-get remove libvirglrenderer-dev

download, build & install from source with venus enabled

wget    https://gitlab.freedesktop.org/virgl/virglrenderer/-/archive/1.1.0/virglrenderer-1.1.0.tar.gz
sudo apt-get install python3-full ninja-build libvulkan-dev libva-dev
python3 -m venv venv
venv/bin/pip install meson
venv/bin/meson build -Dvideo=true -Dvenus=true
ninja -C build
ninja install

qemu

install qemu >= 9.2.0, at the time of writing ubuntu has not yet packaged it

Install build depdencies: https://wiki.qemu.org/Hosts/Linux

sudo apt-get install build-essential pip libslirp-dev slirp
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev 
sudo apt-get install libnfs-dev libiscsi-dev

build and run as described

virt-manager

-- work in progress --

Currently this is work in progress, so there is no option to add vulkan support in virt-manager. There are no fields to configure this. Also xml doesnt work, because libvirt doesn't know about these options either, so xml validation fails. There is however an option for QEMU command-line passthrough which bypasses the validation.

If you setup a default machine with 4G of memory, you can do this:

  <qemu:commandline>
    <qemu:arg value="-device"/>
    <qemu:arg value="virtio-vga-gl,hostmem=4G,blob=true,venus=true"/>
    <qemu:arg value="-object"/>
    <qemu:arg value="memory-backend-memfd,id=mem1,size=4G"/>
    <qemu:arg value="-machine"/>
    <qemu:arg value="memory-backend=mem1"/>
    <qemu:arg value="-vga"/>
    <qemu:arg value="none"/>
  </qemu:commandline>

Which gives this error:

qemu-system-x86_64: virgl could not be initialized: -1

Changing the number from 4G to 4194304k (same as memory) leds to this error:

qemu-system-x86_64: Spice: ../spice-0.15.2/server/red-qxl.cpp:435:spice_qxl_gl_scanout: condition `qxl_state->gl_draw_cookie == GL_DRAW_COOKIE_INVALID' failed

to be further investigated.

@peppergrayxyz
Copy link
Author

@jon-bit not that I'm aware of yet, but there have been initiatives based on OpenGL (virtio-win/kvm-guest-drivers-windows#841) which look promising. I'll try to get an overview myself atm, I will add the links!

@jon-bit
Copy link

jon-bit commented Dec 15, 2024

@peppergrayxyz I found these in the mason build:

option(
  'gallium-d3d12-video',
  type : 'feature',
  value : 'auto',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'build gallium d3d12 with video support.',
)

option(
  'gallium-d3d12-graphics',
  type : 'feature',
  value : 'auto',
  description : 'build gallium d3d12 with graphics pipeline support.',
)

meson
option(
  'gallium-drivers',
  type : 'array',
  value : ['auto'],
  choices : [
    'auto', 'radeonsi', 'r300', 'r600', 'nouveau', 'freedreno',
    'swrast', 'v3d', 'vc4', 'etnaviv', 'tegra', 'i915', 'svga', 'virgl',
    'panfrost', 'iris', 'lima', 'zink', 'd3d12', 'asahi', 'crocus', 'all',
    'softpipe', 'llvmpipe',
  ],
  description : 'List of gallium drivers to build. If this is set to auto ' +
                'all drivers applicable to the target OS/architecture ' +
                'will be built.'
)

(Don't know if they are releted but hey.)
and here they have RE8 and others running on venus:
https://www.youtube.com/watch?v=HmyQqrS09eo
https://www.youtube.com/watch?v=Vk6ux08UDuA
https://www.youtube.com/watch?v=icCxskFVapU

Any clue how they did it?

@kerriganx
Copy link

I need help. When I launch vkcube, it shows MESA-VIRTIO: debug: stuck in fence wait with iter at error. The cube is static and not moving.
Screenshot_20241216_212222

@niansa
Copy link

niansa commented Dec 18, 2024

Unfortunately I'm only getting

error: kvm run failed Bad address
RAX=0000000000000000 RBX=00007ffcca3ae490 RCX=0000000000000000 RDX=00007fd754f2dff0
RSI=0000000000000000 RDI=0000000000000000 RBP=0000000000000500 RSP=00007ffcca3ae240
R8 =0000000000000000 R9 =0000000000000000 R10=0000000000000000 R11=0000000000000000
R12=0000000000000010 R13=00000000000003c0 R14=000055fe4d951a80 R15=00007fd754f2dfd0
RIP=00007fd765aeefcc RFL=00000206 [-----P-] CPL=3 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 00000000 00000000
CS =0033 0000000000000000 ffffffff 00a0fb00 DPL=3 CS64 [-RA]
SS =002b 0000000000000000 ffffffff 00c0f300 DPL=3 DS   [-WA]
DS =0000 0000000000000000 00000000 00000000
FS =0000 00007fd765f05b00 00000000 00000000
GS =0000 0000000000000000 00000000 00000000
LDT=0000 0000000000000000 00000000 00000000
TR =0040 fffffe6e8bc34000 00004087 00008b00 DPL=0 TSS64-busy
GDT=     fffffe6e8bc32000 0000007f
IDT=     fffffe0000000000 00000fff
CR0=80050033 CR2=00007fd7557f9eb0 CR3=00000001075d8000 CR4=000006f0
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000 
DR6=00000000ffff0ff0 DR7=0000000000000400
EFER=0000000000000d01
Code=f3 41 0f 11 07 f3 0f 11 0a 4c 01 e2 f3 0f 11 0a 66 0f ef c9 <f3> 42 0f 11 04 22 8d 14 08 44 01 e8 66 0f ef c0 01 c8 01 d2 01 c0 f3 0f 2a ca 8b 54 24 50

as soon as the desktop envrionment starts :-(

Any ideas? Followed the tutorial 1:1

@peppergrayxyz
Copy link
Author

@nmhn I set up an Ubuntu machine and tested it. I needed to build virglrenderer from source, because the package from Ubuntu was not built with Vulkan support. As for the build errors of the kernel: I just installed from mainline. I added my steps to the description!

@peppergrayxyz
Copy link
Author

@kerriganx I haven't seen that error yet, but this issue #25862120 points towards virglrenderer. Try building virglrenderer from source, I added steps for ubuntu!

@peppergrayxyz
Copy link
Author

@jon-bit If you use Steam on Linux, it will use Proton to translate DirectX to Vulkan. So you can set up containerized games if you want with this setup!

@kerriganx
Copy link

kerriganx commented Dec 18, 2024

@kerriganx I haven't seen that error yet, but this issue #25862120 points towards virglrenderer. Try building virglrenderer from source, I added steps for ubuntu!

Should I do it for host or guest? On host I build virglrenderer-git from AUR since I use arch (btw). According to PKGBUILD there is support for venus -Dvenus=true. Unfortunately, it didn't help. Same error

@peppergrayxyz
Copy link
Author

On the host, nothing to do on the guest!

It works for me with linux 6.13.0-rc2-1 and virglrenderer 1.0.1-2 (extra), I'm also on Arch (btw). I'll try to spin up a fresh install later, maybe try the same!

@peppergrayxyz
Copy link
Author

@niansa nvidia gpu? Any further details on your setup?

@jon-bit
Copy link

jon-bit commented Dec 19, 2024

@peppergrayxyz Sorry for the late replay. I've had finals. Anyway, I tried RE8, Persona 5 royal, and Myst (the newer one), and none worked. P5R just hung, RE8 crashes and Myst says it needs DX12. Any idea what is wrong or if I should do something different?

@jon-bit
Copy link

jon-bit commented Dec 20, 2024

@peppergrayxyz I have an update. When I set my DXVK HUD to be used it it NOT using venus on lighter games that do start like Henry stick man. It says in the driver section it is using llvmpipe, not venus. Is their any way to select GPU and/or driver?

@rapidshmo
Copy link

@peppergrayxyz I need help. I get the same error as kerriganx when running vkcube. Im on arch linux-mainline 6.13.0-rc3-1 and virglrenderer 1.0.1-2
image

@xvim
Copy link

xvim commented Dec 23, 2024

I can only run it successfully on Intel integrated graphics card, with amd or nvidia GPU,also get error when launch vkcube

@hjolli
Copy link

hjolli commented Dec 23, 2024

I got this to work on fedora rawhide as the host and ubuntu 23.10 as the guest. Fedora rawhide has all the relevant packages in the repos now
system: AMD ryzen 7 3900x and Radeon rx 5500 gpu

@thesword53
Copy link

thesword53 commented Dec 25, 2024

@peppergrayxyz I need help. I get the same error as kerriganx when running vkcube. Im on arch linux-mainline 6.13.0-rc3-1 and virglrenderer 1.0.1-2 image

I have a similar issue but the window is black
vkcube_venus_nvidia

I'm using Nvidia proprietary drivers on host (tested with GTX 1060 and RTX 2080 SUPER)

I also have those errors on host:

[  922.039626] NVRM: GPU at PCI:0000:2d:00: GPU-85142072-d857-6520-e4b7-8d06bf8e4a0d
[  922.039632] NVRM: Xid (PCI:0000:2d:00): 69, pid='<unknown>', name=<unknown>, Class Error: ChId 00ac, Class 0000c597, Offset 00000274, Data 00000024, ErrorCode 0000009c

Note: If your are using Nvidia drivers < 565, you should use this patch https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1458 and for reasons I ignore (NVIDIA/open-gpu-kernel-modules#748) the patch is also needed for Turing GPUs even with 565 drivers.

Edit: Some other Vulkan apps such as vkgears or vkmark crash with Illegal instruction and no error on host

@Tony763
Copy link

Tony763 commented Dec 28, 2024

Hi, for me, installing kernel 6.13-rc1 fail on nvidia 565.77 dkms (Ubuntu 24.10).

Fail on /usr/bin/ld.bfd: cannot find ./nvidia/nv-kernel.o: Directory or file not found (it is symlink to binary file which exist)

unset ARCH; [ ! -h /usr/bin/cc ] && export CC=/usr/bin/gcc; env NV_VERBOSE=1 'make' -j16 NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=6.13.0-061300rc1-generic IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=/lib/modules/6.13.0-061300rc1-generic/build LD=/usr/bin/ld.bfd CONFIG_X86_KERNEL_IBT= modules............(bad exit status: 2)
ERROR (dkms apport): kernel package linux-headers-6.13.0-061300rc1-generic is not supported
Error! Bad return status for module build on kernel: 6.13.0-061300rc1-generic (x86_64)
Consult /var/lib/dkms/nvidia/565.77/build/make.log for more information.

@lion328
Copy link

lion328 commented Dec 30, 2024

I got the same error on libvirt. Messing around with virgl log settings gave me failed to fork proxy server. Solved the issue by disabling seccomp_sandbox in /etc/libvirt/qemu.conf since it was blocking fork syscalls.

My setup:

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
  <memoryBacking>
    <source type="memfd"/>
  </memoryBacking>
  <devices>
    <graphics type="spice">
      <listen type="none"/>
      <image compression="off"/>
      <gl enable="yes"/>
    </graphics>
    <video>
      <model type="virtio" heads="1" primary="yes" blob="on">
        <acceleration accel3d="yes"/>
      </model>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
    </video>
    ...
  </devices>
  <qemu:override>
    <qemu:device alias="video0">
      <qemu:frontend>
        <qemu:property name="venus" type="bool" value="true"/>
        <qemu:property name="hostmem" type="unsigned" value="1073741824"/>
      </qemu:frontend>
    </qemu:device>
  </qemu:override>
  ...
</domain>

@henriqueffc
Copy link

henriqueffc commented Feb 4, 2025

Worked correctly. The host is Arch Linux and the guest too.

2025-02-04_17-44
2025-02-04_17-41
2025-02-04_17-40_1
2025-02-04_17-40

@thesword53
Copy link

I can also get it working with my Intel iGPU, but not with Nvidia GPU: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/602

@snrubthinks
Copy link

snrubthinks commented Feb 6, 2025

Works for me with NixOS on the host and CachyOS in the guest, but there is a significant amount of stuttering with some games, and others don't even launch.

The stuttering isn't quite the usual stuttering either. It looks particularly strange with Persona 5.

CPU: Ryzen 5900X
GPU: RX 6600
Proton Experimental in guest typically

qemu command:
qemu-system-x86_64
-enable-kvm
-M q35
-m 24G
-cpu host,topoext
-net nic,model=virtio
-net user,hostfwd=tcp::2222-:22
-device virtio-vga-gl,hostmem=8G,blob=true,venus=true
-vga none
-display gtk,gl=on,show-cursor=off
-usb -device usb-tablet
-object memory-backend-memfd,id=mem1,size=24G
-machine memory-backend=mem1
-hda cachoys-desktop.qcow2
-smp 20,sockets=1,cores=10,threads=2

Working with stutter:

  • Persona 5
  • Hi-Fi Rush
  • Bloodstained Ritual of the Night
  • FTL (with Zink)

Not working:

  • Sonic Mania (works with wined3d through ogl)
  • DoDonPachi Resurrection (works with wined3d through ogl)

Non-gaming tests:

  • Vulkan Video doesn't work (unsurprisingly). If QEMU supported VAAPI passthrough (which virglrenderer does) that would work instead.

The stuttering issues could be down to qemu configuration, as anyone who has used a GPU passthrough setup will know that you often need to tweak a bunch of settings to get good performance.

I believe the not working games are both 32-bit so it could be some issue there. I know that DXVK can use more vram and have allocation issues in 32-bit mode historically so maybe it's related to that.

EDIT: Looks like the stutter is down to vsync in the games themselves. Disabling it works around the issue. I'll add from a quick test that VRR might work in that if it's enabled on the host the monitor refresh moves up and down but it's hard to tell if it's syncing properly with the framerate or not (further testing needed).

@hyperstown
Copy link

Works great with Arch as guest and host.

The only thing I had to install in guest was vulkan-virtio and lib32-vulkan-virtio

image

image

@snrubthinks
Copy link

snrubthinks commented Feb 12, 2025

@lion328 I also have gotten your example with libvirt working. One issue is that if I passthrough any PCI device (including a USB controller), I get this error:

VFIO_MAP_DMA failed: Bad address

and the VM crashes.

EDIT: Another issue is that unlike running qemu directly, virt-manager only seems to detect 50hz and 60hz (whereas qemu uses whatever refresh rate is being used on the host).

EDIT 2: It seems that the difference in refresh rate handling is because virt-manager is using -display spice,gl=on and qemu is using -display gtk,gl=on (which libvirtd doesn't support. See: https://gitlab.com/libvirt/libvirt/-/issues/570)

@cRaZy-bisCuiT
Copy link

cRaZy-bisCuiT commented Feb 25, 2025

For me everything runs fine on Arch Linux Host with the following specs:

Host

  • Kernel 6.13.4-arch1-1
  • qemu-system-x86 9.2.0-2

Guest

  • Ubuntu 24.04

Old games like e.g. Northgard run without any isssues. Even if I run one instance of the Game on the host and one on the Guest.
More demanding Games like The Witcher III run as well. I even get High FPS with High Graphics Settings (80+), but it's stuttering every once in a while, like micro freezes.

Do you guys have any idea why this is the case? Maybe shader loading/compiling? Is it beacause of the early stage of the whole implementation or does it have another reason?

EDIT: Maybe it's cause by this?

DRM contexts are mapping host blobs extensively and these mapping
operations work slowly in Qemu. Exact reason is unknown. Mappings work
fast on Crosvm For DRM contexts this problem is more visible than for
Venus/Virgl.

https://lore.kernel.org/all/[email protected]/T/

Even though DRM native context seems to be affected even more, it still means Venus is affacted as well.

@thesword53
Copy link

I have updates for Nvidia GPU users. I successfully ran D3D12 and D3D11 games such as Control and Mirror's Edge and even VMware with D3D11 GPU acceleration.
To get it working -display gtk,gl=on is required, SDL is not working as it doesn't expose EGL device to virglrenderer, so virgl will fallback to glImportMemoryFdEXT which fails with the Nvidia OpenGL driver.

angle_d3d11_venus.mp4

@Tony763
Copy link

Tony763 commented Mar 2, 2025

Hi @thesword53, could You please share necessary steps for VMWare? Thanks in advance

@Tony763
Copy link

Tony763 commented Mar 2, 2025

https://xanmod.org/ finally made 6.13 as stable, udmabuff included. Its alternative to building mainland.
image

@thesword53
Copy link

Hi @thesword53, could You please share necessary steps for VMWare? Thanks in advance

I just installed VMware from AUR on the guest with venus enabled and I obviously enabled nested virtualization.

@Tony763
Copy link

Tony763 commented Mar 2, 2025

-display gtk,gl=on returns OpenGL is not supported by display backend 'gtk'

@jon-bit
Copy link

jon-bit commented Mar 9, 2025

I get a lot of stutter When I play a game (ALOT!) almost all 3D games do it. But this guy (Yes I know it was before it was main stream but still) Was perfect:

https://www.youtube.com/watch?v=HmyQqrS09eo
https://www.youtube.com/watch?v=Vk6ux08UDuA

even this guy had less them me:

https://www.youtube.com/watch?v=icCxskFVapU

Does anyone know why this is happening?

I guess it is worth mentioning I have a AMD Radeon RX 6950 XT and need to give this patch in kernel 6.13.0 in drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c for vkcube or ... anything really to work(line numbers not accurate):

@@ -1143,8 +1143,10 @@ static int amdgpu_ttm_tt_populate(struct ttm_device *bdev,
	if (ret)
		return ret;

-	for (i = 0; i < ttm->num_pages; ++i)
+	for (i = 0; i < ttm->num_pages; ++i) {
		ttm->pages[i]->mapping = bdev->dev_mapping;
+		page_ref_inc(ttm->pages[i]);
+	}

	return 0;
}
------------------------------------------------------------------------
	if (ttm->page_flags & TTM_TT_FLAG_EXTERNAL)
		return;

-	for (i = 0; i < ttm->num_pages; ++i)
+	for (i = 0; i < ttm->num_pages; ++i) {
		ttm->pages[i]->mapping = NULL;
+		page_ref_dec(ttm->pages[i]);
+	}

And no newer kernels do not work (even with the patch)

I'm at my limit. I don't know if it's my hardware, my bios settings, the patch, I simply don't know. Any ideas?

EDIT: I'm on Linux mint if it helps.

EDIT2: MY GOD! I keep forgetting! Sorry if this is spamming you email. Here is my QEMU script.

/tools/virtualization/venus/qemu/build/qemu-system-x86_64 \
	-enable-kvm \
	-smp $CPU_CORES \
	-m $MEMORY \
	-hda $DISK \
	-audio pa,id=snd0,model=virtio,server=/run/user/1000/pulse/native \
	-overcommit mem-lock=off \
	-rtc base=utc \
	-serial mon:stdio \
	-device virtio-vga-gl,hostmem=$VRAM,blob=true,venus=true \
	-display gtk,gl=es,show-cursor=on \
	-object memory-backend-memfd,id=mem1,size=$MEMORY,share=on \
	-machine q35,accel=kvm,kernel-irqchip=split,memory-backend=mem1 \
	-net nic,model=virtio \
	-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no \
	-device virtio-net-pci,netdev=mynet0 \
	-device virtio-balloon \
	-vga none \
	-net user,hostfwd=tcp::2222-:22 \
	-usb \
	-full-screen \
	-device usb-host,vendorid=$CONTROLERVID,productid=$CONTROLERPID \
	-kernel $KERNEL \
	-initrd $INITRD \
	-append "BOOT_IMAGE=$KERNEL root=/dev/sda2 rw nowatchdog nvme_load=YES zswap.enabled=0 loglevel=3 mitigations=off quiet splash" \
	-sandbox on \
	-d guest_errors \
	-boot c,menu=on \
	-cdrom $ISO

all variables are set.

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