2013-05-14 141 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()可能會返回一個錯誤的唯一原因是:

  • 接收隊列已滿

  • 在接收工作請求數量散射項無效