根据 virtio 规范 v1.2 设备状态寄存器中有一个
DEVICE_NEEDS_RESET
标志可用。
如果我在成功探测后通过设备中的
virtio_pci_common_cfg.mxix_config
(或ISR
的1位)中断设置此标志,则不会发生任何来自驱动程序的重置。
在 Linux 内核源代码 (https://elixir.bootlin.com/linux/v6.5.2/source/include/uapi/linux/virtio_config.h#L44) 中,此位定义但未使用(mlx5_vnet.c 除外)定制设备)。
从设备端启动访客驱动程序重置的正确方法是什么?
谢谢。
根据规范的2.1设备状态字段,启用了一个
DEVICE_NEEDS_RESET
位,用于向驱动程序指示设备遇到了错误。
在
2.1.2 Device Requirements: Device Status Field
:
当设备进入需要重置的错误状态时,应该设置DEVICE_NEEDS_RESET。如果设置了 DRIVER_OK,则在设置 DEVICE_NEEDS_RESET 后,设备必须向驱动程序发送设备配置更改通知。
根据
4.1.4.3 Common configuration structure layout
,启用了几种类型的通知(设备到驱动程序):
公共中断(
config_msix_vector
)
队列中断(
queue_msix_vector
)
我玩
virtio-pci-net
设备。
一般情况下,它有 3 个队列:tx
、rx
、control
。
设备驱动程序集 tx_msix=2
、rx_msix=1
、control_msix=0
、config_msix_vector=0
。
设备需要重置案例(我的顺序):
virtio_pci_common_cfg.config_generation
DEVICE_NEEDS_RESET
位config_msix_vector
但是驱动程序根本只检查控制队列设置。
我做错了什么?
谢谢