1

我在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_COMPMLX4_EVENT_TYPE_CMD.

我还注意到,如果我修改函数 mlx4_interrupt 代码(它是 mlnx-ofed-kernel-3.1 中的中断处理程序)以避免它处理这两个中断事件,则完成队列会立即销毁,这会直接导致进一步的数据传输infiniband 卡失败。

我的问题是这些中断事件的目的是什么MLX4_EVENT_TYPE_COMPMLX4_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));
4

0 回答 0