Upstream: https://gitlab.com/qemu-project/qemu.git Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
91 lines
2.1 KiB
ReStructuredText
91 lines
2.1 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
===================================
|
|
Testing VFIO display with mdev mdpy
|
|
===================================
|
|
|
|
.. contents:: Table of Contents
|
|
|
|
The kernel provides a sample mediated device driver, ``mdpy``
|
|
(``samples/vfio-mdev/mdpy.c``), that exposes a fake framebuffer through the VFIO
|
|
display region interface. It can be used to test VFIO display support, including
|
|
hotplug, without any real GPU hardware.
|
|
|
|
The kernel modules
|
|
==================
|
|
|
|
The ``mdpy`` driver depends on the ``mdev`` subsystem. Enable, build and load
|
|
the modules.
|
|
|
|
The minimal set is::
|
|
|
|
CONFIG_SAMPLE_VFIO_MDEV_MDPY=m
|
|
CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=m # guest framebuffer driver
|
|
|
|
CONFIG_VFIO_MDEV is selected automatically.
|
|
|
|
Verify that the driver registered successfully:
|
|
|
|
.. code-block:: bash
|
|
|
|
ls /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/
|
|
|
|
Creating an mdev instance
|
|
=========================
|
|
|
|
Available types correspond to different resolutions (e.g. ``mdpy-vga``
|
|
for 640x480, ``mdpy-xga`` for 1024x768, ``mdpy-hd`` for 1920x1080).
|
|
|
|
Each mdev instance is identified by a UUID:
|
|
|
|
.. code-block:: bash
|
|
|
|
uuid=$(uuidgen)
|
|
echo "$uuid" > /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/mdpy-xga/create
|
|
|
|
To remove the instance later:
|
|
|
|
.. code-block:: bash
|
|
|
|
echo 1 > /sys/bus/mdev/devices/$uuid/remove
|
|
|
|
Make sure your user has the necessary permissions to access the vfio group.
|
|
(ex: chmod 666 /dev/vfio/16)
|
|
|
|
Starting QEMU
|
|
=============
|
|
|
|
Boot-time attachment
|
|
--------------------
|
|
|
|
.. code-block:: bash
|
|
|
|
qemu-system-x86_64 -machine q35 -m 1G \
|
|
-device vfio-pci,sysfsdev=/sys/bus/mdev/devices/$uuid,display=on \
|
|
-display gtk,gl=on
|
|
|
|
Hotplug via HMP
|
|
---------------
|
|
|
|
Start QEMU with a PCIe root port (required for PCIe hotplug) and a
|
|
monitor:
|
|
|
|
.. code-block:: bash
|
|
|
|
qemu-system-x86_64 -machine q35 -m 1G \
|
|
-device pcie-root-port,id=rp0,slot=1 \
|
|
-display gtk,gl=on \
|
|
-monitor stdio
|
|
|
|
Then at the ``(qemu)`` prompt:
|
|
|
|
.. code-block:: none
|
|
|
|
device_add vfio-pci,sysfsdev=/sys/bus/mdev/devices/<uuid>,display=on,bus=rp0,id=mdpy0
|
|
|
|
To hot-unplug:
|
|
|
|
.. code-block:: none
|
|
|
|
device_del mdpy0
|