mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-14 05:55:49 +07:00
![Michael S. Tsirkin](/assets/img/avatar_default.png)
vhost is currently broken on the some ARM configs.
The reason is that the ring element addresses are passed between
components with different alignments assumptions. Thus, if
guest selects a pointer and host then gets and dereferences
it, then alignment assumed by the host's compiler might be
greater than the actual alignment of the pointer.
compiler on the host from assuming pointer is aligned.
This actually triggers on ARM with -mabi=apcs-gnu - which is a
deprecated configuration. With this OABI, compiler assumes that
all structures are 4 byte aligned - which is stronger than
virtio guarantees for available and used rings, which are
merely 2 bytes. Thus a guest without -mabi=apcs-gnu running
on top of host with -mabi=apcs-gnu will be broken.
The correct fix is to force alignment of structures - however
that is an intrusive fix that's best deferred until the next release.
We didn't previously support such ancient systems at all - this surfaced
after vdpa support prompted removing dependency of vhost on
VIRTULIZATION. So for now, let's just add something along the lines of
depends on !ARM || AEABI
to the virtio Kconfig declaration, and add a comment that it has to do
with struct member alignment.
Note: we can't make VHOST and VHOST_RING themselves have
a dependency since these are selected. Add a new symbol for that.
We should be able to drop this dependency down the road.
Fixes: 20c384f1ea
("vhost: refine vhost and vringh kconfig")
Suggested-by: Ard Biesheuvel <ardb@kernel.org>
Suggested-by: Richard Earnshaw <Richard.Earnshaw@arm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
62 lines
1.7 KiB
Plaintext
62 lines
1.7 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# CAIF physical drivers
|
|
#
|
|
|
|
menuconfig CAIF_DRIVERS
|
|
bool "CAIF transport drivers"
|
|
depends on CAIF
|
|
help
|
|
Enable this to see CAIF physical drivers.
|
|
|
|
if CAIF_DRIVERS
|
|
|
|
config CAIF_TTY
|
|
tristate "CAIF TTY transport driver"
|
|
depends on CAIF && TTY
|
|
default n
|
|
---help---
|
|
The CAIF TTY transport driver is a Line Discipline (ldisc)
|
|
identified as N_CAIF. When this ldisc is opened from user space
|
|
it will redirect the TTY's traffic into the CAIF stack.
|
|
|
|
config CAIF_SPI_SLAVE
|
|
tristate "CAIF SPI transport driver for slave interface"
|
|
depends on CAIF && HAS_DMA
|
|
default n
|
|
---help---
|
|
The CAIF Link layer SPI Protocol driver for Slave SPI interface.
|
|
This driver implements a platform driver to accommodate for a
|
|
platform specific SPI device. A sample CAIF SPI Platform device is
|
|
provided in <file:Documentation/networking/caif/spi_porting.txt>.
|
|
|
|
config CAIF_SPI_SYNC
|
|
bool "Next command and length in start of frame"
|
|
depends on CAIF_SPI_SLAVE
|
|
default n
|
|
---help---
|
|
Putting the next command and length in the start of the frame can
|
|
help to synchronize to the next transfer in case of over or under-runs.
|
|
This option also needs to be enabled on the modem.
|
|
|
|
config CAIF_HSI
|
|
tristate "CAIF HSI transport driver"
|
|
depends on CAIF
|
|
default n
|
|
---help---
|
|
The CAIF low level driver for CAIF over HSI.
|
|
Be aware that if you enable this then you also need to
|
|
enable a low-level HSI driver.
|
|
|
|
config CAIF_VIRTIO
|
|
tristate "CAIF virtio transport driver"
|
|
depends on CAIF && HAS_DMA && VHOST_DPN
|
|
select VHOST_RING
|
|
select VIRTIO
|
|
select GENERIC_ALLOCATOR
|
|
default n
|
|
---help---
|
|
The CAIF driver for CAIF over Virtio.
|
|
|
|
endif # CAIF_DRIVERS
|