2019-03-08 14:04:44 +00:00
|
|
|
# -*- Mode: Python -*-
|
2020-07-29 18:50:24 +00:00
|
|
|
# vim: filetype=python
|
2019-03-08 14:04:44 +00:00
|
|
|
#
|
|
|
|
# Copyright (C) 2018 Red Hat, Inc.
|
|
|
|
#
|
|
|
|
# Authors:
|
|
|
|
# Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
|
|
#
|
|
|
|
# This work is licensed under the terms of the GNU GPL, version 2 or
|
|
|
|
# later. See the COPYING file in the top-level directory.
|
|
|
|
|
|
|
|
##
|
|
|
|
# = vhost user backend discovery & capabilities
|
|
|
|
##
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendType:
|
|
|
|
#
|
|
|
|
# List the various vhost user backend types.
|
|
|
|
#
|
|
|
|
# @9p: 9p virtio console
|
|
|
|
# @balloon: virtio balloon
|
|
|
|
# @block: virtio block
|
|
|
|
# @caif: virtio caif
|
|
|
|
# @console: virtio console
|
|
|
|
# @crypto: virtio crypto
|
|
|
|
# @gpu: virtio gpu
|
|
|
|
# @input: virtio input
|
|
|
|
# @net: virtio net
|
|
|
|
# @rng: virtio rng
|
|
|
|
# @rpmsg: virtio remote processor messaging
|
|
|
|
# @rproc-serial: virtio remoteproc serial link
|
|
|
|
# @scsi: virtio scsi
|
|
|
|
# @vsock: virtio vsock transport
|
2019-08-27 09:54:35 +00:00
|
|
|
# @fs: virtio fs (since 4.2)
|
2019-03-08 14:04:44 +00:00
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'enum': 'VHostUserBackendType',
|
|
|
|
'data': [
|
|
|
|
'9p',
|
|
|
|
'balloon',
|
|
|
|
'block',
|
|
|
|
'caif',
|
|
|
|
'console',
|
|
|
|
'crypto',
|
|
|
|
'gpu',
|
|
|
|
'input',
|
|
|
|
'net',
|
|
|
|
'rng',
|
|
|
|
'rpmsg',
|
|
|
|
'rproc-serial',
|
|
|
|
'scsi',
|
2019-08-27 09:54:35 +00:00
|
|
|
'vsock',
|
|
|
|
'fs'
|
2019-03-08 14:04:44 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2019-12-09 01:53:31 +00:00
|
|
|
##
|
|
|
|
# @VHostUserBackendBlockFeature:
|
|
|
|
#
|
|
|
|
# List of vhost user "block" features.
|
|
|
|
#
|
|
|
|
# @read-only: The --read-only command line option is supported.
|
|
|
|
# @blk-file: The --blk-file command line option is supported.
|
|
|
|
#
|
|
|
|
# Since: 5.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'enum': 'VHostUserBackendBlockFeature',
|
|
|
|
'data': [ 'read-only', 'blk-file' ]
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendCapabilitiesBlock:
|
|
|
|
#
|
|
|
|
# Capabilities reported by vhost user "block" backends
|
|
|
|
#
|
|
|
|
# @features: list of supported features.
|
|
|
|
#
|
|
|
|
# Since: 5.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'struct': 'VHostUserBackendCapabilitiesBlock',
|
|
|
|
'data': {
|
|
|
|
'features': [ 'VHostUserBackendBlockFeature' ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-08 14:04:44 +00:00
|
|
|
##
|
|
|
|
# @VHostUserBackendInputFeature:
|
|
|
|
#
|
|
|
|
# List of vhost user "input" features.
|
|
|
|
#
|
|
|
|
# @evdev-path: The --evdev-path command line option is supported.
|
|
|
|
# @no-grab: The --no-grab command line option is supported.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'enum': 'VHostUserBackendInputFeature',
|
|
|
|
'data': [ 'evdev-path', 'no-grab' ]
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendCapabilitiesInput:
|
|
|
|
#
|
|
|
|
# Capabilities reported by vhost user "input" backends
|
|
|
|
#
|
|
|
|
# @features: list of supported features.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'struct': 'VHostUserBackendCapabilitiesInput',
|
|
|
|
'data': {
|
|
|
|
'features': [ 'VHostUserBackendInputFeature' ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendGPUFeature:
|
|
|
|
#
|
|
|
|
# List of vhost user "gpu" features.
|
|
|
|
#
|
|
|
|
# @render-node: The --render-node command line option is supported.
|
|
|
|
# @virgl: The --virgl command line option is supported.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'enum': 'VHostUserBackendGPUFeature',
|
|
|
|
'data': [ 'render-node', 'virgl' ]
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendCapabilitiesGPU:
|
|
|
|
#
|
|
|
|
# Capabilities reported by vhost user "gpu" backends.
|
|
|
|
#
|
|
|
|
# @features: list of supported features.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'struct': 'VHostUserBackendCapabilitiesGPU',
|
|
|
|
'data': {
|
|
|
|
'features': [ 'VHostUserBackendGPUFeature' ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VHostUserBackendCapabilities:
|
|
|
|
#
|
|
|
|
# Capabilities reported by vhost user backends.
|
|
|
|
#
|
|
|
|
# @type: The vhost user backend type.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'union': 'VHostUserBackendCapabilities',
|
|
|
|
'base': { 'type': 'VHostUserBackendType' },
|
|
|
|
'discriminator': 'type',
|
|
|
|
'data': {
|
|
|
|
'input': 'VHostUserBackendCapabilitiesInput',
|
|
|
|
'gpu': 'VHostUserBackendCapabilitiesGPU'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
##
|
|
|
|
# @VhostUserBackend:
|
|
|
|
#
|
|
|
|
# Describes a vhost user backend to management software.
|
|
|
|
#
|
|
|
|
# It is possible for multiple @VhostUserBackend elements to match the
|
|
|
|
# search criteria of management software. Applications thus need rules
|
|
|
|
# to pick one of the many matches, and users need the ability to
|
|
|
|
# override distro defaults.
|
|
|
|
#
|
|
|
|
# It is recommended to create vhost user backend JSON files (each
|
|
|
|
# containing a single @VhostUserBackend root element) with a
|
|
|
|
# double-digit prefix, for example "50-qemu-gpu.json",
|
|
|
|
# "50-crosvm-gpu.json", etc, so they can be sorted in predictable
|
|
|
|
# order. The backend JSON files should be searched for in three
|
|
|
|
# directories:
|
|
|
|
#
|
|
|
|
# - /usr/share/qemu/vhost-user -- populated by distro-provided
|
|
|
|
# packages (XDG_DATA_DIRS covers
|
|
|
|
# /usr/share by default),
|
|
|
|
#
|
|
|
|
# - /etc/qemu/vhost-user -- exclusively for sysadmins' local additions,
|
|
|
|
#
|
|
|
|
# - $XDG_CONFIG_HOME/qemu/vhost-user -- exclusively for per-user local
|
|
|
|
# additions (XDG_CONFIG_HOME
|
|
|
|
# defaults to $HOME/.config).
|
|
|
|
#
|
|
|
|
# Top-down, the list of directories goes from general to specific.
|
|
|
|
#
|
|
|
|
# Management software should build a list of files from all three
|
|
|
|
# locations, then sort the list by filename (i.e., basename
|
|
|
|
# component). Management software should choose the first JSON file on
|
|
|
|
# the sorted list that matches the search criteria. If a more specific
|
|
|
|
# directory has a file with same name as a less specific directory,
|
|
|
|
# then the file in the more specific directory takes effect. If the
|
|
|
|
# more specific file is zero length, it hides the less specific one.
|
|
|
|
#
|
|
|
|
# For example, if a distro ships
|
|
|
|
#
|
|
|
|
# - /usr/share/qemu/vhost-user/50-qemu-gpu.json
|
|
|
|
#
|
|
|
|
# - /usr/share/qemu/vhost-user/50-crosvm-gpu.json
|
|
|
|
#
|
2019-06-05 13:12:21 +00:00
|
|
|
# then the sysadmin can prevent the default QEMU GPU being used at all with
|
2019-03-08 14:04:44 +00:00
|
|
|
#
|
|
|
|
# $ touch /etc/qemu/vhost-user/50-qemu-gpu.json
|
|
|
|
#
|
2019-06-05 13:12:21 +00:00
|
|
|
# The sysadmin can replace/alter the distro default QEMU GPU with
|
2019-03-08 14:04:44 +00:00
|
|
|
#
|
|
|
|
# $ vim /etc/qemu/vhost-user/50-qemu-gpu.json
|
|
|
|
#
|
|
|
|
# or they can provide a parallel QEMU GPU with higher priority
|
|
|
|
#
|
|
|
|
# $ vim /etc/qemu/vhost-user/10-qemu-gpu.json
|
|
|
|
#
|
2019-06-05 13:12:21 +00:00
|
|
|
# or they can provide a parallel QEMU GPU with lower priority
|
2019-03-08 14:04:44 +00:00
|
|
|
#
|
|
|
|
# $ vim /etc/qemu/vhost-user/99-qemu-gpu.json
|
|
|
|
#
|
|
|
|
# @type: The vhost user backend type.
|
|
|
|
#
|
|
|
|
# @description: Provides a human-readable description of the backend.
|
|
|
|
# Management software may or may not display @description.
|
|
|
|
#
|
|
|
|
# @binary: Absolute path to the backend binary.
|
|
|
|
#
|
|
|
|
# @tags: An optional list of auxiliary strings associated with the
|
|
|
|
# backend for which @description is not appropriate, due to the
|
|
|
|
# latter's possible exposure to the end-user. @tags serves
|
|
|
|
# development and debugging purposes only, and management
|
|
|
|
# software shall explicitly ignore it.
|
|
|
|
#
|
|
|
|
# Since: 4.0
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
|
|
|
# {
|
|
|
|
# "description": "QEMU vhost-user-gpu",
|
|
|
|
# "type": "gpu",
|
|
|
|
# "binary": "/usr/libexec/qemu/vhost-user-gpu",
|
|
|
|
# "tags": [
|
2021-02-23 06:03:07 +00:00
|
|
|
# "CONFIG_OPENGL=y",
|
|
|
|
# "CONFIG_GBM=y"
|
2019-03-08 14:04:44 +00:00
|
|
|
# ]
|
|
|
|
# }
|
|
|
|
#
|
|
|
|
##
|
|
|
|
{
|
|
|
|
'struct' : 'VhostUserBackend',
|
|
|
|
'data' : {
|
|
|
|
'description': 'str',
|
|
|
|
'type': 'VHostUserBackendType',
|
|
|
|
'binary': 'str',
|
|
|
|
'*tags': [ 'str' ]
|
|
|
|
}
|
|
|
|
}
|