2013-05-14 140 views

回答

0

返回-1 设置errno。 函数返回时检查errno值。

+0

errno设置为零。即成功。 – Daniil 2013-05-15 08:05:27

0

您正在使用哪种低级硬件驱动程序?什么版本?我猜它是libmlx4(Mellanox ConnectX/ConnectX-2/ConnectX-3)。

如果是这样,版本> = libmlx4 1.0.2实际上已经修复 - ibv_post_send()将返回错误代码而不是-1。

在任何情况下(这实际上是不是很依赖底层驱动的 - 我想libmthca,libcxgb4等都是小气得多相同),即ibv_post_send()可能返回即时错误的原因是:

  • 发送队列已满(即发送未收集完成的发送数大于发送队列的大小)。

  • 操作码在发送WR是无效

  • 数收集条目是无效的(或者< = 0或>创建的发送队列时指定的条目最大GS)

  • 联数据大于最大大对于发送队列内联数据

编辑:我看到我读的问题,太快和困惑ibv_post_recv()的d ibv_post_send()ibv_post_recv()的答案几乎相同,只是更简单一点。基本上,为什么ibv_post_recv()可能会返回一个错误的唯一原因是:

  • 接收队列已满

  • 在接收工作请求数量散射项无效