从设备端重置virtio驱动程序

问题描述 投票:0回答:1

根据 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 除外)定制设备)。

从设备端启动访客驱动程序重置的正确方法是什么?

谢谢。

linux driver device reset virtio
1个回答
0
投票

根据规范的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
  • 中设置公共中断

但是驱动程序根本只检查控制队列设置。

我做错了什么?

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.