mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 09:22:08 +00:00

Since commit6e890c5d50
("vhost: use vhost_tasks for worker threads"), the vhost uses vhost_task and operates as a child of the owner thread. This is required for correct CPU usage accounting, especially when using containers. However, this change has caused confusion for some legacy userspace applications, and we didn't notice until it's too late. Unfortunately, it's too late to revert - we now have userspace depending both on old and new behaviour :( To address the issue, reintroduce kthread mode for vhost workers and provide a configuration to select between kthread and task worker. - Add 'fork_owner' parameter to vhost_dev to let users select kthread or task mode. Default mode is task mode(VHOST_FORK_OWNER_TASK). - Reintroduce kthread mode support: * Bring back the original vhost_worker() implementation, and renamed to vhost_run_work_kthread_list(). * Add cgroup support for the kthread * Introduce struct vhost_worker_ops: - Encapsulates create / stop / wake‑up callbacks. - vhost_worker_create() selects the proper ops according to inherit_owner. - Userspace configuration interface: * New IOCTLs: - VHOST_SET_FORK_FROM_OWNER lets userspace select task mode (VHOST_FORK_OWNER_TASK) or kthread mode (VHOST_FORK_OWNER_KTHREAD) - VHOST_GET_FORK_FROM_OWNER reads the current worker mode * Expose module parameter 'fork_from_owner_default' to allow system administrators to configure the default mode for vhost workers * Kconfig option CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL controls whether these IOCTLs and the parameter are available - The VHOST_NEW_WORKER functionality requires fork_owner to be set to true, with validation added to ensure proper configuration This partially reverts or improves upon: commit6e890c5d50
("vhost: use vhost_tasks for worker threads") commit1cdaafa1b8
("vhost: replace single worker pointer with xarray") Fixes:6e890c5d50
("vhost: use vhost_tasks for worker threads"), Signed-off-by: Cindy Lu <lulu@redhat.com> Message-Id: <20250714071333.59794-2-lulu@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Tested-by: Lei Yang <leiyang@redhat.com>
117 lines
3.2 KiB
Plaintext
117 lines
3.2 KiB
Plaintext
# 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
|
|
select SG_POOL
|
|
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".
|
|
|
|
config VHOST_ENABLE_FORK_OWNER_CONTROL
|
|
bool "Enable VHOST_ENABLE_FORK_OWNER_CONTROL"
|
|
default y
|
|
help
|
|
This option enables two IOCTLs: VHOST_SET_FORK_FROM_OWNER and
|
|
VHOST_GET_FORK_FROM_OWNER. These allow userspace applications
|
|
to modify the vhost worker mode for vhost devices.
|
|
|
|
Also expose module parameter 'fork_from_owner_default' to allow users
|
|
to configure the default mode for vhost workers.
|
|
|
|
By default, `VHOST_ENABLE_FORK_OWNER_CONTROL` is set to `y`,
|
|
users can change the worker thread mode as needed.
|
|
If this config is disabled (n),the related IOCTLs and parameters will
|
|
be unavailable.
|
|
|
|
If unsure, say "Y".
|
|
|
|
endif
|