我在linux 内核版本 3.13.0 上使用mellanox Infiniband card MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE]
with 。mlnx-ofed-kernel-3.1
当卡连接到另一张卡并进行配置时(ibstat 表示两张卡都在 infiniband 链路层处于活动状态),我实验卡每 9 秒发送 8 次中断,包括 4 对事件类型MLX4_EVENT_TYPE_COMP
和MLX4_EVENT_TYPE_CMD
.
我还注意到,如果我修改函数 mlx4_interrupt 代码(它是 mlnx-ofed-kernel-3.1 中的中断处理程序)以避免它处理这两个中断事件,则完成队列会立即销毁,这会直接导致进一步的数据传输infiniband 卡失败。
我的问题是这些中断事件的目的是什么MLX4_EVENT_TYPE_COMP
,MLX4_EVENT_TYPE_CMD
为什么它们必须保持队列对可用?
以下是 drivers/net/ethernet/mellanox/mlx4/eq.c 中每个中断事件调用的代码
MLX4_EVENT_TYPE_COMP
:
cqn = be32_to_cpu(eqe->event.comp.cqn) & 0xffffff;
mlx4_cq_completion(dev, cqn);
MLX4_EVENT_TYPE_CMD
:
mlx4_cmd_event(dev, be16_to_cpu(eqe->event.cmd.token), eqe->event.cmd.status, be64_to_cpu(eqe->event.cmd.out_param));