mlnx-ofed-kernel-3.1中断处理程序中“MLX4_EVENT_TYPE_COMP”和“MLX4_EVENT_TYPE_CMD”的用途是什么?

时间:2015-11-28 15:31:47

标签: interrupt infiniband rdma

我在Linux内核版本3.13.0上使用mellanox Infiniband card MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE]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));

0 个答案:

没有答案