
Qemu will create vhost devices in the kernel which perform network, SCSI, etc IO and management operations from worker threads created by the kthread API. Because the kthread API does a copy_process on the kthreadd thread, the vhost layer has to use kthread_use_mm to access the Qemu thread's memory and cgroup_attach_task_all to add itself to the Qemu thread's cgroups, and it bypasses the RLIMIT_NPROC limit which can result in VMs creating more threads than the admin expected. This patch adds a new struct vhost_task which can be used instead of kthreads. They allow the vhost layer to use copy_process and inherit the userspace process's mm and cgroups, the task is accounted for under the userspace's nproc count and can be seen in its process tree, and other features like namespaces work and are inherited by default. Signed-off-by: Mike Christie <michael.christie@oracle.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
2.5 KiB
SPDX-License-Identifier: GPL-2.0-only
config VHOST_IOTLB tristate help Generic IOTLB implementation for vhost and vringh. This option is selected by any driver which needs to support an IOMMU in software.
config VHOST_RING tristate select VHOST_IOTLB help This option is selected by any driver which needs to access the host side of a virtio ring.
config VHOST_TASK bool default n
config VHOST tristate select VHOST_IOTLB select VHOST_TASK help This option is selected by any driver which needs to access the core of vhost.
menuconfig VHOST_MENU bool "VHOST drivers" default y
if VHOST_MENU
config VHOST_NET tristate "Host kernel accelerator for virtio net" depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP) select VHOST help This kernel module can be loaded in host kernel to accelerate guest networking with virtio_net. Not to be confused with virtio_net module itself which needs to be loaded in guest kernel.
To compile this driver as a module, choose M here: the module will
be called vhost_net.
config VHOST_SCSI tristate "VHOST_SCSI TCM fabric driver" depends on TARGET_CORE && EVENTFD select VHOST default n help Say M here to enable the vhost_scsi TCM fabric module for use with virtio-scsi guests
config VHOST_VSOCK tristate "vhost virtio-vsock driver" depends on VSOCKETS && EVENTFD select VHOST select VIRTIO_VSOCKETS_COMMON default n help This kernel module can be loaded in the host kernel to provide AF_VSOCK sockets for communicating with guests. The guests must have the virtio_transport.ko driver loaded to use the virtio-vsock device.
To compile this driver as a module, choose M here: the module will be called
vhost_vsock.
config VHOST_VDPA tristate "Vhost driver for vDPA-based backend" depends on EVENTFD select VHOST select IRQ_BYPASS_MANAGER depends on VDPA help This kernel module can be loaded in host kernel to accelerate guest virtio devices with the vDPA-based backends.
To compile this driver as a module, choose M here: the module
will be called vhost_vdpa.
config VHOST_CROSS_ENDIAN_LEGACY bool "Cross-endian support for vhost" default n help This option allows vhost to support guests with a different byte ordering from host while using legacy virtio.
Userspace programs can control the feature using the
VHOST_SET_VRING_ENDIAN and VHOST_GET_VRING_ENDIAN ioctls.
This is only useful on a few platforms (ppc64 and arm64). Since it
adds some overhead, it is disabled by default.
If unsure, say "N".
endif