NAME
ibv_open_device, ibv_close_device - RDMA デバイスコンテキストをオープン・クローズする。
SYNOPSIS
#include <infiniband/verbs.h> struct ibv_context *ibv_open_device(struct ibv_device *device); int ibv_close_device(struct ibv_context *context);
DESCRIPTION
ibv_open_device()
は、device で指定された RDMA デバイスをオープンし、RDMA デバイスのコンテキストを作成する。
device は ibv_get_device_list() の戻り値として返される RDMA デバイス情報へのポインタの配列の(NULL でない)要素を指定する。
ibv_close_device()
は、context で指定された RDMA デバイスコンテキストをクローズする。
RETURN VALUE
ibv_open_device()
は成功すると割り当てられた RDMA デバイスコンテキストへのポインタを返す。
失敗すると NULL を返す。
ibv_close_device()
は成功すると 0 を返す。
失敗すると -1 を返す。
NOTES
ibv_close_device()
を使っても context を使って割り当てられたリソースは回収されない。
リソースのリークを回避するためには、context をクローズする前に、ユーザが関連する全てのリソースを解放する必要がある。
ibv_open_device()
を実行するには、特別なアクセス権限(root とか)が必要な HCA がある。
そのため ibv_get_device_list() は実行可能だが、ibv_open_device()
で失敗するということが起きる。
Linux の場合、ibv_open_device()
は内部で /dev/infiniband/uverbsX をオープンする。
しかし HCA によっては、この /dev/infiniband/uverbsX にパーミッションが出ていないことがある。
crw-rw---- 1 root root 231, 192 Aug 25 11:19 /dev/infiniband/uverbs0 crw-rw---- 1 root root 231, 193 Aug 25 11:19 /dev/infiniband/uverbs1
この疑似デバイスのパーミッションを root 権限によって変更すると、一般ユーザーの権限で ibv_open_device()
が実行可能になる場合もある。
# chmod a+rw /dev/infiniband/uverbs*
SEE ALSO
InfiniBand Verbs API Reference、ibv_get_device_list(3)、ibv_query_device(3)、ibv_query_port(3)、ibv_query_gid(3)、ibv_query_pkey(3)
AUTHORS
原文 Dotan Barak <dotanba@gmail.com> 原文にない加筆がある。