sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/driver-api/infinibandmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/pt_BR/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/driver-api/infinibandmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h+InfiniBand and Remote DMA (RDMA) Interfacesh]h+InfiniBand and Remote DMA (RDMA) Interfaces}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband.rsthKubh)}(hhh](h)}(hIntroduction and Overviewh]hIntroduction and Overview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hTBDh]hTBD}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]introduction-and-overviewah ]h"]introduction and overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInfiniBand core interfacesh]hInfiniBand core interfaces}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single#iwpm_get_nlmsg_request (C function)c.iwpm_get_nlmsg_requesthNtauh1jhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h]struct iwpm_nlmsg_request * iwpm_get_nlmsg_request (__u32 nlmsg_seq, u8 nl_client, gfp_t gfp)h]hdesc_signature_line)}(h[struct iwpm_nlmsg_request *iwpm_get_nlmsg_request(__u32 nlmsg_seq, u8 nl_client, gfp_t gfp)h](hdesc_sig_keyword)}(hstructh]hstruct}(hj)hhhNhNubah}(h]h ]kah"]h$]h&]uh1j'hj#hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKaubhdesc_sig_space)}(h h]h }(hj;hhhNhNubah}(h]h ]wah"]h$]h&]uh1j9hj#hhhj8hKaubh)}(hhh]h desc_sig_name)}(hiwpm_nlmsg_requesth]hiwpm_nlmsg_request}(hjOhhhNhNubah}(h]h ]nah"]h$]h&]uh1jMhjJubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjQmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jl ASTIdentifier)}jgiwpm_get_nlmsg_requestsbc.iwpm_get_nlmsg_requestasbuh1hhj#hhhj8hKaubj:)}(h h]h }(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#hhhj8hKaubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj#hhhj8hKaubh desc_name)}(hiwpm_get_nlmsg_requesth]jN)}(hjwh]hiwpm_get_nlmsg_request}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhj#hhhj8hKaubhdesc_parameterlist)}(h*(__u32 nlmsg_seq, u8 nl_client, gfp_t gfp)h](hdesc_parameter)}(h__u32 nlmsg_seqh](h)}(hhh]jN)}(h__u32h]h__u32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]juc.iwpm_get_nlmsg_requestasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h nlmsg_seqh]h nlmsg_seq}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 nl_clienth](h)}(hhh]jN)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]juc.iwpm_get_nlmsg_requestasbuh1hhjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h nl_clienth]h nl_client}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h gfp_t gfph](h)}(hhh]jN)}(hgfp_th]hgfp_t}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]juc.iwpm_get_nlmsg_requestasbuh1hhjNubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubjN)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj8hKaubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j!sphinx_line_type declaratorhjhhhj8hKaubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj8hKahjhhubh desc_content)}(hhh]h)}(h/Allocate and initialize netlink message requesth]h/Allocate and initialize netlink message request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKahjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hKaubeh}(h]h ](jefunctioneh"]h$]h&]domainjeobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhhhNhNubh container)}(hX9**Parameters** ``__u32 nlmsg_seq`` Sequence number of the netlink message ``u8 nl_client`` The index of the netlink client ``gfp_t gfp`` Indicates how the memory for the request should be allocated **Description** Returns the newly allocated netlink request object if successful, otherwise returns NULLh](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKehjubhdefinition_list)}(hhh](hdefinition_list_item)}(h;``__u32 nlmsg_seq`` Sequence number of the netlink message h](hterm)}(h``__u32 nlmsg_seq``h]hliteral)}(hjh]h__u32 nlmsg_seq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKbhjubh definition)}(hhh]h)}(h&Sequence number of the netlink messageh]h&Sequence number of the netlink message}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKbhjubj)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j )}(hjCh]h u8 nl_client}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKchj=ubj)}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKchjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKchjubj)}(hK``gfp_t gfp`` Indicates how the memory for the request should be allocated h](j)}(h ``gfp_t gfp``h]j )}(hj|h]h gfp_t gfp}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKdhjvubj)}(hhh]h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj;hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjVjjVjjjuh1jhhhhhNhNubj)}(hy**Parameters** ``u8 nl_client`` The index of the netlink client **Description** Returns the client registration typeh](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjZubj)}(hhh]j)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j )}(hjh]h u8 nl_client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjyubj)}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjZubh)}(h$Returns the client registration typeh]h$Returns the client registration type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiwpm_send_mapinfo (C function)c.iwpm_send_mapinfohNtauh1jhhhhhNhNubj)}(hhh](j)}(h2int iwpm_send_mapinfo (u8 nl_client, int iwpm_pid)h]j")}(h1int iwpm_send_mapinfo(u8 nl_client, int iwpm_pid)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hKubj)}(hiwpm_send_mapinfoh]jN)}(hiwpm_send_mapinfoh]hiwpm_send_mapinfo}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKubj)}(h(u8 nl_client, int iwpm_pid)h](j)}(h u8 nl_clienth](h)}(hhh]jN)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjAmodnameN classnameNjkjn)}jq]jt)}jgj"sbc.iwpm_send_mapinfoasbuh1hhj8ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubjN)}(h nl_clienth]h nl_client}(hjmhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h int iwpm_pidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hiwpm_pidh]hiwpm_pid}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKhjhhubj)}(hhh]h)}(hVSend local and mapped IPv4/IPv6 address info of a client to the user space port mapperh]hVSend local and mapped IPv4/IPv6 address info of a client to the user space port mapper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``u8 nl_client`` The index of the netlink client ``int iwpm_pid`` The pid of the user space port mapper **Description** If successful, returns the number of sent mapping info recordsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh](j)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j )}(hj h]h u8 nl_client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjubj)}(h7``int iwpm_pid`` The pid of the user space port mapper h](j)}(h``int iwpm_pid``h]j )}(hjFh]h int iwpm_pid}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj@ubj)}(hhh]h)}(h%The pid of the user space port mapperh]h%The pid of the user space port mapper}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubh)}(h>If successful, returns the number of sent mapping info recordsh]h>If successful, returns the number of sent mapping info records}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#iwpm_mapinfo_available (C function)c.iwpm_mapinfo_availablehNtauh1jhhhhhNhNubj)}(hhh](j)}(h!int iwpm_mapinfo_available (void)h]j")}(h int iwpm_mapinfo_available(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiwpm_mapinfo_availableh]jN)}(hiwpm_mapinfo_availableh]hiwpm_mapinfo_available}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h@Check if any mapping info records is available in the hash tableh]h@Check if any mapping info records is available in the hash table}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjEjjEjjjuh1jhhhhhNhNubj)}(h|**Parameters** ``void`` no arguments **Description** Returns 1 if mapping information is available, otherwise returns 0h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjIubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j )}(hjnh]hvoid}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjhubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubah}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjIubh)}(hBReturns 1 if mapping information is available, otherwise returns 0h]hBReturns 1 if mapping information is available, otherwise returns 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"iwpm_compare_sockaddr (C function)c.iwpm_compare_sockaddrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hdint iwpm_compare_sockaddr (struct sockaddr_storage *a_sockaddr, struct sockaddr_storage *b_sockaddr)h]j")}(hcint iwpm_compare_sockaddr(struct sockaddr_storage *a_sockaddr, struct sockaddr_storage *b_sockaddr)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiwpm_compare_sockaddrh]jN)}(hiwpm_compare_sockaddrh]hiwpm_compare_sockaddr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hJ(struct sockaddr_storage *a_sockaddr, struct sockaddr_storage *b_sockaddr)h](j)}(h#struct sockaddr_storage *a_sockaddrh](j()}(hj+h]hstruct}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj'ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubh)}(hhh]jN)}(hsockaddr_storageh]hsockaddr_storage}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjKmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iwpm_compare_sockaddrasbuh1hhj'ubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjN)}(h a_sockaddrh]h a_sockaddr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h#struct sockaddr_storage *b_sockaddrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsockaddr_storageh]hsockaddr_storage}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jec.iwpm_compare_sockaddrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h b_sockaddrh]h b_sockaddr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h$Compare two sockaddr storage structsh]h$Compare two sockaddr storage structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj6jj6jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct sockaddr_storage *a_sockaddr`` first sockaddr to compare ``struct sockaddr_storage *b_sockaddr`` second sockaddr to compare **Return** 0 if they are holding the same ip/tcp address info, otherwise returns 1h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj:ubj)}(hhh](j)}(hB``struct sockaddr_storage *a_sockaddr`` first sockaddr to compare h](j)}(h'``struct sockaddr_storage *a_sockaddr``h]j )}(hj_h]h#struct sockaddr_storage *a_sockaddr}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjYubj)}(hhh]h)}(hfirst sockaddr to compareh]hfirst sockaddr to compare}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjVubj)}(hC``struct sockaddr_storage *b_sockaddr`` second sockaddr to compare h](j)}(h'``struct sockaddr_storage *b_sockaddr``h]j )}(hjh]h#struct sockaddr_storage *b_sockaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(hsecond sockaddr to compareh]hsecond sockaddr to compare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj:ubh)}(hG0 if they are holding the same ip/tcp address info, otherwise returns 1h]hG0 if they are holding the same ip/tcp address info, otherwise returns 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iwpm_validate_nlmsg_attr (C function)c.iwpm_validate_nlmsg_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hCint iwpm_validate_nlmsg_attr (struct nlattr *nltb[], int nla_count)h]j")}(hBint iwpm_validate_nlmsg_attr(struct nlattr *nltb[], int nla_count)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj&hKubj)}(hiwpm_validate_nlmsg_attrh]jN)}(hiwpm_validate_nlmsg_attrh]hiwpm_validate_nlmsg_attr}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj&hKubj)}(h&(struct nlattr *nltb[], int nla_count)h](j)}(hstruct nlattr *nltb[]h](j()}(hj+h]hstruct}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjQubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubh)}(hhh]jN)}(hnlattrh]hnlattr}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjumodnameN classnameNjkjn)}jq]jt)}jgj;sbc.iwpm_validate_nlmsg_attrasbuh1hhjQubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjN)}(hnltbh]hnltb}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubj)}(h[h]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h]h]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h int nla_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h nla_counth]h nla_count}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj&hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj&hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj&hKhj hhubj)}(hhh]h)}(h!Check for NULL netlink attributesh]h!Check for NULL netlink attributes}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj&hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjAjjAjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct nlattr *nltb[]`` Holds address of each netlink message attributes ``int nla_count`` Number of netlink message attributes **Description** Returns error if any of the nla_count attributes is NULLh](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjEubj)}(hhh](j)}(hK``struct nlattr *nltb[]`` Holds address of each netlink message attributes h](j)}(h``struct nlattr *nltb[]``h]j )}(hjjh]hstruct nlattr *nltb[]}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjdubj)}(hhh]h)}(h0Holds address of each netlink message attributesh]h0Holds address of each netlink message attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKhjaubj)}(h7``int nla_count`` Number of netlink message attributes h](j)}(h``int nla_count``h]j )}(hjh]h int nla_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(h$Number of netlink message attributesh]h$Number of netlink message attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjEubh)}(h8Returns error if any of the nla_count attributes is NULLh]h8Returns error if any of the nla_count attributes is NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiwpm_create_nlmsg (C function)c.iwpm_create_nlmsghNtauh1jhhhhhNhNubj)}(hhh](j)}(hTstruct sk_buff * iwpm_create_nlmsg (u32 nl_op, struct nlmsghdr **nlh, int nl_client)h]j")}(hRstruct sk_buff *iwpm_create_nlmsg(u32 nl_op, struct nlmsghdr **nlh, int nl_client)h](j()}(hj+h]hstruct}(hj#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj0hKubh)}(hhh]jN)}(hsk_buffh]hsk_buff}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjDmodnameN classnameNjkjn)}jq]jt)}jgiwpm_create_nlmsgsbc.iwpm_create_nlmsgasbuh1hhjhhhj0hKubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj0hKubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hKubj)}(hiwpm_create_nlmsgh]jN)}(hj`h]hiwpm_create_nlmsg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj0hKubj)}(h1(u32 nl_op, struct nlmsghdr **nlh, int nl_client)h](j)}(h u32 nl_oph](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j^c.iwpm_create_nlmsgasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hnl_oph]hnl_op}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct nlmsghdr **nlhh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hnlmsghdrh]hnlmsghdr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j^c.iwpm_create_nlmsgasbuh1hhjubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hnlhh]hnlh}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int nl_clienth](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubjN)}(h nl_clienth]h nl_client}(hj~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj0hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj0hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj0hKhjhhubj)}(hhh]h)}(h'Allocate skb and form a netlink messageh]h'Allocate skb and form a netlink message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hXH**Parameters** ``u32 nl_op`` Netlink message opcode ``struct nlmsghdr **nlh`` Holds address of the netlink message header in skb ``int nl_client`` The index of the netlink client **Description** Returns the newly allcated skb, or NULL if the tailroom of the skb is insufficient to store the message header and payloadh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh](j)}(h%``u32 nl_op`` Netlink message opcode h](j)}(h ``u32 nl_op``h]j )}(hjh]h u32 nl_op}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(hNetlink message opcodeh]hNetlink message opcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hM``struct nlmsghdr **nlh`` Holds address of the netlink message header in skb h](j)}(h``struct nlmsghdr **nlh``h]j )}(hj"h]hstruct nlmsghdr **nlh}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(h2Holds address of the netlink message header in skbh]h2Holds address of the netlink message header in skb}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjubj)}(h2``int nl_client`` The index of the netlink client h](j)}(h``int nl_client``h]j )}(hj[h]h int nl_client}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjUubj)}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubh)}(hzReturns the newly allcated skb, or NULL if the tailroom of the skb is insufficient to store the message header and payloadh]hzReturns the newly allcated skb, or NULL if the tailroom of the skb is insufficient to store the message header and payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiwpm_parse_nlmsg (C function)c.iwpm_parse_nlmsghNtauh1jhhhhhNhNubj)}(hhh](j)}(hint iwpm_parse_nlmsg (struct netlink_callback *cb, int policy_max, const struct nla_policy *nlmsg_policy, struct nlattr *nltb[], const char *msg_type)h]j")}(hint iwpm_parse_nlmsg(struct netlink_callback *cb, int policy_max, const struct nla_policy *nlmsg_policy, struct nlattr *nltb[], const char *msg_type)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiwpm_parse_nlmsgh]jN)}(hiwpm_parse_nlmsgh]hiwpm_parse_nlmsg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct netlink_callback *cb, int policy_max, const struct nla_policy *nlmsg_policy, struct nlattr *nltb[], const char *msg_type)h](j)}(hstruct netlink_callback *cbh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hnetlink_callbackh]hnetlink_callback}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj3ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]jt)}jgjsbc.iwpm_parse_nlmsgasbuh1hhjubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hcbh]hcb}(hjqhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint policy_maxh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h policy_maxh]h policy_max}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%const struct nla_policy *nlmsg_policyh](j()}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h nla_policyh]h nla_policy}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jRc.iwpm_parse_nlmsgasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h nlmsg_policyh]h nlmsg_policy}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct nlattr *nltb[]h](j()}(hj+h]hstruct}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubh)}(hhh]jN)}(hnlattrh]hnlattr}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjfubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjkmodnameN classnameNjkjn)}jq]jRc.iwpm_parse_nlmsgasbuh1hhjGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjN)}(hnltbh]hnltb}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubj)}(hjh]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *msg_typeh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmsg_typeh]hmsg_type}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h/Validate and parse the received netlink messageh]h/Validate and parse the received netlink message}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj@hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj[jj[jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct netlink_callback *cb`` Netlink callback structure ``int policy_max`` Maximum attribute type to be expected ``const struct nla_policy *nlmsg_policy`` Validation policy ``struct nlattr *nltb[]`` Array to store policy_max parsed elements ``const char *msg_type`` Type of netlink message **Description** Returns 0 on success or a negative error codeh](h)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj_ubj)}(hhh](j)}(h;``struct netlink_callback *cb`` Netlink callback structure h](j)}(h``struct netlink_callback *cb``h]j )}(hjh]hstruct netlink_callback *cb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj~ubj)}(hhh]h)}(hNetlink callback structureh]hNetlink callback structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj{ubj)}(h9``int policy_max`` Maximum attribute type to be expected h](j)}(h``int policy_max``h]j )}(hjh]hint policy_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(h%Maximum attribute type to be expectedh]h%Maximum attribute type to be expected}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj{ubj)}(h<``const struct nla_policy *nlmsg_policy`` Validation policy h](j)}(h)``const struct nla_policy *nlmsg_policy``h]j )}(hjh]h%const struct nla_policy *nlmsg_policy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]h)}(hValidation policyh]hValidation policy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj{ubj)}(hD``struct nlattr *nltb[]`` Array to store policy_max parsed elements h](j)}(h``struct nlattr *nltb[]``h]j )}(hj/h]hstruct nlattr *nltb[]}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj)ubj)}(hhh]h)}(h)Array to store policy_max parsed elementsh]h)Array to store policy_max parsed elements}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj{ubj)}(h1``const char *msg_type`` Type of netlink message h](j)}(h``const char *msg_type``h]j )}(hjhh]hconst char *msg_type}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjbubj)}(hhh]h)}(hType of netlink messageh]hType of netlink message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj_ubh)}(h-Returns 0 on success or a negative error codeh]h-Returns 0 on success or a negative error code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j iwpm_print_sockaddr (C function)c.iwpm_print_sockaddrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hGvoid iwpm_print_sockaddr (struct sockaddr_storage *sockaddr, char *msg)h]j")}(hFvoid iwpm_print_sockaddr(struct sockaddr_storage *sockaddr, char *msg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiwpm_print_sockaddrh]jN)}(hiwpm_print_sockaddrh]hiwpm_print_sockaddr}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h.(struct sockaddr_storage *sockaddr, char *msg)h](j)}(h!struct sockaddr_storage *sockaddrh](j()}(hj+h]hstruct}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]jN)}(hsockaddr_storageh]hsockaddr_storage}(hjChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjEmodnameN classnameNjkjn)}jq]jt)}jgj sbc.iwpm_print_sockaddrasbuh1hhj!ubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjN)}(hsockaddrh]hsockaddr}(hj~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h char *msgh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmsgh]hmsg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h$Print IPv4/IPv6 address and TCP porth]h$Print IPv4/IPv6 address and TCP port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hq**Parameters** ``struct sockaddr_storage *sockaddr`` Socket address to print ``char *msg`` Message to printh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh](j)}(h>``struct sockaddr_storage *sockaddr`` Socket address to print h](j)}(h%``struct sockaddr_storage *sockaddr``h]j )}(hj+h]h!struct sockaddr_storage *sockaddr}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj%ubj)}(hhh]h)}(hSocket address to printh]hSocket address to print}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hKhj"ubj)}(h``char *msg`` Message to printh](j)}(h ``char *msg``h]j )}(hjdh]h char *msg}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj^ubj)}(hhh]h)}(hMessage to printh]hMessage to print}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiwpm_send_hello (C function)c.iwpm_send_hellohNtauh1jhhhhhNhNubj)}(hhh](j)}(hAint iwpm_send_hello (u8 nl_client, int iwpm_pid, u16 abi_version)h]j")}(h@int iwpm_send_hello(u8 nl_client, int iwpm_pid, u16 abi_version)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiwpm_send_helloh]jN)}(hiwpm_send_helloh]hiwpm_send_hello}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h-(u8 nl_client, int iwpm_pid, u16 abi_version)h](j)}(h u8 nl_clienth](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgjsbc.iwpm_send_helloasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h nl_clienth]h nl_client}(hj, hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int iwpm_pidh](j)}(hinth]hint}(hjE hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjA ubj:)}(h h]h }(hjS hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjA ubjN)}(hiwpm_pidh]hiwpm_pid}(hja hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjA ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 abi_versionh](h)}(hhh]jN)}(hu16h]hu16}(hj} hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjz ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j c.iwpm_send_helloasbuh1hhjv ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv ubjN)}(h abi_versionh]h abi_version}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjv ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hSend hello response to iwpmdh]hSend hello response to iwpmd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhhhNhNubj)}(h**Parameters** ``u8 nl_client`` The index of the netlink client ``int iwpm_pid`` The pid of the user space port mapper ``u16 abi_version`` The kernel's abi_version **Description** Returns 0 on success or a negative error codeh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj ubj)}(hhh](j)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j )}(hj!h]h u8 nl_client}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj!ubj)}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hj-!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)!hMhj*!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj)!hMhj !ubj)}(h7``int iwpm_pid`` The pid of the user space port mapper h](j)}(h``int iwpm_pid``h]j )}(hjM!h]h int iwpm_pid}(hjO!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK!ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhjG!ubj)}(hhh]h)}(h%The pid of the user space port mapperh]h%The pid of the user space port mapper}(hjf!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb!hMhjc!ubah}(h]h ]h"]h$]h&]uh1jhjG!ubeh}(h]h ]h"]h$]h&]uh1jhjb!hMhj !ubj)}(h-``u16 abi_version`` The kernel's abi_version h](j)}(h``u16 abi_version``h]j )}(hj!h]hu16 abi_version}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj!ubj)}(hhh]h)}(hThe kernel's abi_versionh]hThe kernel’s abi_version}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj !ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj ubh)}(h-Returns 0 on success or a negative error codeh]h-Returns 0 on success or a negative error code}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_process_cq_direct (C function)c.ib_process_cq_directhNtauh1jhhhhhNhNubj)}(hhh](j)}(h7int ib_process_cq_direct (struct ib_cq *cq, int budget)h]j")}(h6int ib_process_cq_direct(struct ib_cq *cq, int budget)h](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chK}ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"hhhj"hK}ubj)}(hib_process_cq_directh]jN)}(hib_process_cq_directh]hib_process_cq_direct}(hj'"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hK}ubj)}(h(struct ib_cq *cq, int budget)h](j)}(hstruct ib_cq *cqh](j()}(hj+h]hstruct}(hjC"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj?"ubj:)}(h h]h }(hjP"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?"ubh)}(hhh]jN)}(hib_cqh]hib_cq}(hja"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjc"modnameN classnameNjkjn)}jq]jt)}jgj)"sbc.ib_process_cq_directasbuh1hhj?"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?"ubjN)}(hcqh]hcq}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;"ubj)}(h int budgeth](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubjN)}(hbudgeth]hbudget}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;"ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hK}ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj!hhhj"hK}ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj"hK}hj!hhubj)}(hhh]h)}(hprocess a CQ in caller contexth]hprocess a CQ in caller context}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chK}hj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj"hK}ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj#jj#jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_cq *cq`` CQ to process ``int budget`` number of CQEs to poll for **Description** This function is used to process all outstanding CQ entries. It does not offload CQ processing to a different context and does not ask for completion interrupts from the HCA. Using direct processing on CQ with non IB_POLL_DIRECT type may trigger concurrent processing. **Note** do not pass -1 as ``budget`` unless it is guaranteed that the number of completions that will be processed is small.h](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj#ubj)}(hhh](j)}(h#``struct ib_cq *cq`` CQ to process h](j)}(h``struct ib_cq *cq``h]j )}(hj<#h]hstruct ib_cq *cq}(hj>#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:#ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chK~hj6#ubj)}(hhh]h)}(h CQ to processh]h CQ to process}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ#hK~hjR#ubah}(h]h ]h"]h$]h&]uh1jhj6#ubeh}(h]h ]h"]h$]h&]uh1jhjQ#hK~hj3#ubj)}(h*``int budget`` number of CQEs to poll for h](j)}(h``int budget``h]j )}(hju#h]h int budget}(hjw#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs#ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhjo#ubj)}(hhh]h)}(hnumber of CQEs to poll forh]hnumber of CQEs to poll for}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjo#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj3#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj#ubh)}(hX This function is used to process all outstanding CQ entries. It does not offload CQ processing to a different context and does not ask for completion interrupts from the HCA. Using direct processing on CQ with non IB_POLL_DIRECT type may trigger concurrent processing.h]hX This function is used to process all outstanding CQ entries. It does not offload CQ processing to a different context and does not ask for completion interrupts from the HCA. Using direct processing on CQ with non IB_POLL_DIRECT type may trigger concurrent processing.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj#ubh)}(h**Note**h]j)}(hj#h]hNote}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj#ubh)}(htdo not pass -1 as ``budget`` unless it is guaranteed that the number of completions that will be processed is small.h](hdo not pass -1 as }(hj#hhhNhNubj )}(h ``budget``h]hbudget}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubhX unless it is guaranteed that the number of completions that will be processed is small.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__ib_alloc_cq (C function)c.__ib_alloc_cqhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_cq * __ib_alloc_cq (struct ib_device *dev, void *private, int nr_cqe, int comp_vector, enum ib_poll_context poll_ctx, const char *caller)h]j")}(hstruct ib_cq *__ib_alloc_cq(struct ib_device *dev, void *private, int nr_cqe, int comp_vector, enum ib_poll_context poll_ctx, const char *caller)h](j()}(hj+h]hstruct}(hj.$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj*$hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKubj:)}(h h]h }(hj<$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*$hhhj;$hKubh)}(hhh]jN)}(hib_cqh]hib_cq}(hjM$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjJ$ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjO$modnameN classnameNjkjn)}jq]jt)}jg __ib_alloc_cqsbc.__ib_alloc_cqasbuh1hhj*$hhhj;$hKubj:)}(h h]h }(hjn$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*$hhhj;$hKubj)}(hjh]h*}(hj|$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*$hhhj;$hKubj)}(h __ib_alloc_cqh]jN)}(hjk$h]h __ib_alloc_cq}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*$hhhj;$hKubj)}(hv(struct ib_device *dev, void *private, int nr_cqe, int comp_vector, enum ib_poll_context poll_ctx, const char *caller)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj$ubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj$modnameN classnameNjkjn)}jq]ji$c.__ib_alloc_cqasbuh1hhj$ubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjN)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h void *privateh](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj:)}(h h]h }(hj&%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj)}(hjh]h*}(hj4%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjN)}(hprivateh]hprivate}(hjA%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h int nr_cqeh](j)}(hinth]hint}(hjZ%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV%ubj:)}(h h]h }(hjh%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV%ubjN)}(hnr_cqeh]hnr_cqe}(hjv%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjV%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hint comp_vectorh](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubjN)}(h comp_vectorh]h comp_vector}(hj%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(henum ib_poll_context poll_ctxh](j()}(henumh]henum}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj%ubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubh)}(hhh]jN)}(hib_poll_contexth]hib_poll_context}(hj%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj%modnameN classnameNjkjn)}jq]ji$c.__ib_alloc_cqasbuh1hhj%ubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubjN)}(hpoll_ctxh]hpoll_ctx}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hconst char *callerh](j()}(hjh]hconst}(hj(&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj$&ubj:)}(h h]h }(hj5&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$&ubj)}(hcharh]hchar}(hjC&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$&ubj:)}(h h]h }(hjQ&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$&ubj)}(hjh]h*}(hj_&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$&ubjN)}(hcallerh]hcaller}(hjl&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhj*$hhhj;$hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj&$hhhj;$hKubah}(h]j!$ah ](jjeh"]h$]h&]jj)jhuh1jhj;$hKhj#$hhubj)}(hhh]h)}(hallocate a completion queueh]hallocate a completion queue}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj&hhubah}(h]h ]h"]h$]h&]uh1jhj#$hhhj;$hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj&jj&jjjuh1jhhhhhNhNubj)}(hXf**Parameters** ``struct ib_device *dev`` device to allocate the CQ for ``void *private`` driver private data, accessible from cq->cq_context ``int nr_cqe`` number of CQEs to allocate ``int comp_vector`` HCA completion vectors for this CQ ``enum ib_poll_context poll_ctx`` context to poll the CQ from. ``const char *caller`` module owner name. **Description** This is the proper interface to allocate a CQ for in-kernel users. A CQ allocated with this interface will automatically be polled from the specified context. The ULP must use wr->wr_cqe instead of wr->wr_id to use this CQ abstraction.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj&ubj)}(hhh](j)}(h8``struct ib_device *dev`` device to allocate the CQ for h](j)}(h``struct ib_device *dev``h]j )}(hj&h]hstruct ib_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj&ubj)}(hhh]h)}(hdevice to allocate the CQ forh]hdevice to allocate the CQ for}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj&ubj)}(hF``void *private`` driver private data, accessible from cq->cq_context h](j)}(h``void *private``h]j )}(hj'h]h void *private}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj 'ubj)}(hhh]h)}(h3driver private data, accessible from cq->cq_contexth]h3driver private data, accessible from cq->cq_context}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%'hKhj&'ubah}(h]h ]h"]h$]h&]uh1jhj 'ubeh}(h]h ]h"]h$]h&]uh1jhj%'hKhj&ubj)}(h*``int nr_cqe`` number of CQEs to allocate h](j)}(h``int nr_cqe``h]j )}(hjI'h]h int nr_cqe}(hjK'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhjC'ubj)}(hhh]h)}(hnumber of CQEs to allocateh]hnumber of CQEs to allocate}(hjb'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^'hKhj_'ubah}(h]h ]h"]h$]h&]uh1jhjC'ubeh}(h]h ]h"]h$]h&]uh1jhj^'hKhj&ubj)}(h7``int comp_vector`` HCA completion vectors for this CQ h](j)}(h``int comp_vector``h]j )}(hj'h]hint comp_vector}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj|'ubj)}(hhh]h)}(h"HCA completion vectors for this CQh]h"HCA completion vectors for this CQ}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj|'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj&ubj)}(h?``enum ib_poll_context poll_ctx`` context to poll the CQ from. h](j)}(h!``enum ib_poll_context poll_ctx``h]j )}(hj'h]henum ib_poll_context poll_ctx}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj'ubj)}(hhh]h)}(hcontext to poll the CQ from.h]hcontext to poll the CQ from.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj&ubj)}(h*``const char *caller`` module owner name. h](j)}(h``const char *caller``h]j )}(hj'h]hconst char *caller}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj'ubj)}(hhh]h)}(hmodule owner name.h]hmodule owner name.}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj (hKhj (ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj (hKhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j)}(hj/(h]h Description}(hj1(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-(ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj&ubh)}(hThis is the proper interface to allocate a CQ for in-kernel users. A CQ allocated with this interface will automatically be polled from the specified context. The ULP must use wr->wr_cqe instead of wr->wr_id to use this CQ abstraction.h]hThis is the proper interface to allocate a CQ for in-kernel users. A CQ allocated with this interface will automatically be polled from the specified context. The ULP must use wr->wr_cqe instead of wr->wr_id to use this CQ abstraction.}(hjE(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__ib_alloc_cq_any (C function)c.__ib_alloc_cq_anyhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_cq * __ib_alloc_cq_any (struct ib_device *dev, void *private, int nr_cqe, enum ib_poll_context poll_ctx, const char *caller)h]j")}(hstruct ib_cq *__ib_alloc_cq_any(struct ib_device *dev, void *private, int nr_cqe, enum ib_poll_context poll_ctx, const char *caller)h](j()}(hj+h]hstruct}(hjt(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjp(hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM"ubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp(hhhj(hM"ubh)}(hhh]jN)}(hib_cqh]hib_cq}(hj(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj(modnameN classnameNjkjn)}jq]jt)}jg__ib_alloc_cq_anysbc.__ib_alloc_cq_anyasbuh1hhjp(hhhj(hM"ubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp(hhhj(hM"ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp(hhhj(hM"ubj)}(h__ib_alloc_cq_anyh]jN)}(hj(h]h__ib_alloc_cq_any}(hj(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjp(hhhj(hM"ubj)}(he(struct ib_device *dev, void *private, int nr_cqe, enum ib_poll_context poll_ctx, const char *caller)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj(ubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj )hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj )ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj)modnameN classnameNjkjn)}jq]j(c.__ib_alloc_cq_anyasbuh1hhj(ubj:)}(h h]h }(hj*)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubj)}(hjh]h*}(hj8)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjN)}(hdevh]hdev}(hjE)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h void *privateh](j)}(hvoidh]hvoid}(hj^)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZ)ubj:)}(h h]h }(hjl)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZ)ubj)}(hjh]h*}(hjz)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ)ubjN)}(hprivateh]hprivate}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZ)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h int nr_cqeh](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubjN)}(hnr_cqeh]hnr_cqe}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(henum ib_poll_context poll_ctxh](j()}(hj%h]henum}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]jN)}(hib_poll_contexth]hib_poll_context}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj)modnameN classnameNjkjn)}jq]j(c.__ib_alloc_cq_anyasbuh1hhj)ubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubjN)}(hpoll_ctxh]hpoll_ctx}(hj*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hconst char *callerh](j()}(hjh]hconst}(hj8*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4*ubj:)}(h h]h }(hjE*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4*ubj)}(hcharh]hchar}(hjS*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4*ubj:)}(h h]h }(hja*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4*ubj)}(hjh]h*}(hjo*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4*ubjN)}(hcallerh]hcaller}(hj|*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhjp(hhhj(hM"ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjl(hhhj(hM"ubah}(h]jg(ah ](jjeh"]h$]h&]jj)jhuh1jhj(hM"hji(hhubj)}(hhh]h)}(hallocate a completion queueh]hallocate a completion queue}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM"hj*hhubah}(h]h ]h"]h$]h&]uh1jhji(hhhj(hM"ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj*jj*jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *dev`` device to allocate the CQ for ``void *private`` driver private data, accessible from cq->cq_context ``int nr_cqe`` number of CQEs to allocate ``enum ib_poll_context poll_ctx`` context to poll the CQ from ``const char *caller`` module owner name **Description** Attempt to spread ULP Completion Queues over each device's interrupt vectors. A simple best-effort mechanism is used.h](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM&hj*ubj)}(hhh](j)}(h8``struct ib_device *dev`` device to allocate the CQ for h](j)}(h``struct ib_device *dev``h]j )}(hj*h]hstruct ib_device *dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM#hj*ubj)}(hhh]h)}(hdevice to allocate the CQ forh]hdevice to allocate the CQ for}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM#hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM#hj*ubj)}(hF``void *private`` driver private data, accessible from cq->cq_context h](j)}(h``void *private``h]j )}(hj +h]h void *private}(hj"+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM$hj+ubj)}(hhh]h)}(h3driver private data, accessible from cq->cq_contexth]h3driver private data, accessible from cq->cq_context}(hj9+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5+hM$hj6+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj5+hM$hj*ubj)}(h*``int nr_cqe`` number of CQEs to allocate h](j)}(h``int nr_cqe``h]j )}(hjY+h]h int nr_cqe}(hj[+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW+ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM%hjS+ubj)}(hhh]h)}(hnumber of CQEs to allocateh]hnumber of CQEs to allocate}(hjr+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn+hM%hjo+ubah}(h]h ]h"]h$]h&]uh1jhjS+ubeh}(h]h ]h"]h$]h&]uh1jhjn+hM%hj*ubj)}(h>``enum ib_poll_context poll_ctx`` context to poll the CQ from h](j)}(h!``enum ib_poll_context poll_ctx``h]j )}(hj+h]henum ib_poll_context poll_ctx}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM&hj+ubj)}(hhh]h)}(hcontext to poll the CQ fromh]hcontext to poll the CQ from}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM&hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM&hj*ubj)}(h)``const char *caller`` module owner name h](j)}(h``const char *caller``h]j )}(hj+h]hconst char *caller}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM'hj+ubj)}(hhh]h)}(hmodule owner nameh]hmodule owner name}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM'hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM'hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM)hj*ubh)}(huAttempt to spread ULP Completion Queues over each device's interrupt vectors. A simple best-effort mechanism is used.h]hwAttempt to spread ULP Completion Queues over each device’s interrupt vectors. A simple best-effort mechanism is used.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM(hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_free_cq (C function) c.ib_free_cqhNtauh1jhhhhhNhNubj)}(hhh](j)}(h"void ib_free_cq (struct ib_cq *cq)h]j")}(h!void ib_free_cq(struct ib_cq *cq)h](j)}(hvoidh]hvoid}(hjK,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjG,hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM>ubj:)}(h h]h }(hjZ,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG,hhhjY,hM>ubj)}(h ib_free_cqh]jN)}(h ib_free_cqh]h ib_free_cq}(hjl,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjh,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjG,hhhjY,hM>ubj)}(h(struct ib_cq *cq)h]j)}(hstruct ib_cq *cqh](j()}(hj+h]hstruct}(hj,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj,ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubh)}(hhh]jN)}(hib_cqh]hib_cq}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,modnameN classnameNjkjn)}jq]jt)}jgjn,sb c.ib_free_cqasbuh1hhj,ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjN)}(hcqh]hcq}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubah}(h]h ]h"]h$]h&]jjuh1jhjG,hhhjY,hM>ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjC,hhhjY,hM>ubah}(h]j>,ah ](jjeh"]h$]h&]jj)jhuh1jhjY,hM>hj@,hhubj)}(hhh]h)}(hfree a completion queueh]hfree a completion queue}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM>hj-hhubah}(h]h ]h"]h$]h&]uh1jhj@,hhhjY,hM>ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj#-jj#-jjjuh1jhhhhhNhNubj)}(h@**Parameters** ``struct ib_cq *cq`` completion queue to free.h](h)}(h**Parameters**h]j)}(hj--h]h Parameters}(hj/-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+-ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMBhj'-ubj)}(hhh]j)}(h.``struct ib_cq *cq`` completion queue to free.h](j)}(h``struct ib_cq *cq``h]j )}(hjL-h]hstruct ib_cq *cq}(hjN-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ-ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMDhjF-ubj)}(hhh]h)}(hcompletion queue to free.h]hcompletion queue to free.}(hje-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM?hjb-ubah}(h]h ]h"]h$]h&]uh1jhjF-ubeh}(h]h ]h"]h$]h&]uh1jhja-hMDhjC-ubah}(h]h ]h"]h$]h&]uh1jhj'-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_cq_pool_get (C function)c.ib_cq_pool_gethNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_cq * ib_cq_pool_get (struct ib_device *dev, unsigned int nr_cqe, int comp_vector_hint, enum ib_poll_context poll_ctx)h]j")}(h}struct ib_cq *ib_cq_pool_get(struct ib_device *dev, unsigned int nr_cqe, int comp_vector_hint, enum ib_poll_context poll_ctx)h](j()}(hj+h]hstruct}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj-hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-hhhj-hMubh)}(hhh]jN)}(hib_cqh]hib_cq}(hj-hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj-ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj-modnameN classnameNjkjn)}jq]jt)}jgib_cq_pool_getsbc.ib_cq_pool_getasbuh1hhj-hhhj-hMubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-hhhj-hMubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMubj)}(hib_cq_pool_geth]jN)}(hj-h]hib_cq_pool_get}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj-hMubj)}(ha(struct ib_device *dev, unsigned int nr_cqe, int comp_vector_hint, enum ib_poll_context poll_ctx)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hj .hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj.ubj:)}(h h]h }(hj-.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj>.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;.ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@.modnameN classnameNjkjn)}jq]j-c.ib_cq_pool_getasbuh1hhj.ubj:)}(h h]h }(hj\.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubj)}(hjh]h*}(hjj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjN)}(hdevh]hdev}(hjw.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hunsigned int nr_cqeh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubjN)}(hnr_cqeh]hnr_cqe}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hint comp_vector_hinth](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubjN)}(hcomp_vector_hinth]hcomp_vector_hint}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(henum ib_poll_context poll_ctxh](j()}(hj%h]henum}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj/ubj:)}(h h]h }(hj#/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubh)}(hhh]jN)}(hib_poll_contexth]hib_poll_context}(hj4/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1/ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj6/modnameN classnameNjkjn)}jq]j-c.ib_cq_pool_getasbuh1hhj/ubj:)}(h h]h }(hjR/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubjN)}(hpoll_ctxh]hpoll_ctx}(hj`/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj-hhhj-hMubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhj-hMhj-hhubj)}(hhh]h)}(hzFind the least used completion queue that matches a given cpu hint (or least used for wild card affinity) and fits nr_cqe.h]hzFind the least used completion queue that matches a given cpu hint (or least used for wild card affinity) and fits nr_cqe.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj/jj/jjjuh1jhhhhhNhNubj)}(hXc**Parameters** ``struct ib_device *dev`` rdma device ``unsigned int nr_cqe`` number of needed cqe entries ``int comp_vector_hint`` completion vector hint (-1) for the driver to assign a comp vector based on internal counter ``enum ib_poll_context poll_ctx`` cq polling context **Description** Finds a cq that satisfies **comp_vector_hint** and **nr_cqe** requirements and claim entries in it for us. In case there is no available cq, allocate a new cq with the requirements and add it to the device pool. IB_POLL_DIRECT cannot be used for shared cqs so it is not a valid value for **poll_ctx**.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/ubj)}(hhh](j)}(h&``struct ib_device *dev`` rdma device h](j)}(h``struct ib_device *dev``h]j )}(hj/h]hstruct ib_device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/ubj)}(hhh]h)}(h rdma deviceh]h rdma device}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubj)}(h5``unsigned int nr_cqe`` number of needed cqe entries h](j)}(h``unsigned int nr_cqe``h]j )}(hj0h]hunsigned int nr_cqe}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/ubj)}(hhh]h)}(hnumber of needed cqe entriesh]hnumber of needed cqe entries}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(hv``int comp_vector_hint`` completion vector hint (-1) for the driver to assign a comp vector based on internal counter h](j)}(h``int comp_vector_hint``h]j )}(hj=0h]hint comp_vector_hint}(hj?0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj70ubj)}(hhh]h)}(h\completion vector hint (-1) for the driver to assign a comp vector based on internal counterh]h\completion vector hint (-1) for the driver to assign a comp vector based on internal counter}(hjV0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjS0ubah}(h]h ]h"]h$]h&]uh1jhj70ubeh}(h]h ]h"]h$]h&]uh1jhjR0hMhj/ubj)}(h5``enum ib_poll_context poll_ctx`` cq polling context h](j)}(h!``enum ib_poll_context poll_ctx``h]j )}(hjw0h]henum ib_poll_context poll_ctx}(hjy0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjq0ubj)}(hhh]h)}(hcq polling contexth]hcq polling context}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjq0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/ubh)}(hX.Finds a cq that satisfies **comp_vector_hint** and **nr_cqe** requirements and claim entries in it for us. In case there is no available cq, allocate a new cq with the requirements and add it to the device pool. IB_POLL_DIRECT cannot be used for shared cqs so it is not a valid value for **poll_ctx**.h](hFinds a cq that satisfies }(hj0hhhNhNubj)}(h**comp_vector_hint**h]hcomp_vector_hint}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh and }(hj0hhhNhNubj)}(h **nr_cqe**h]hnr_cqe}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh requirements and claim entries in it for us. In case there is no available cq, allocate a new cq with the requirements and add it to the device pool. IB_POLL_DIRECT cannot be used for shared cqs so it is not a valid value for }(hj0hhhNhNubj)}(h **poll_ctx**h]hpoll_ctx}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_cq_pool_put (C function)c.ib_cq_pool_puthNtauh1jhhhhhNhNubj)}(hhh](j)}(h;void ib_cq_pool_put (struct ib_cq *cq, unsigned int nr_cqe)h]j")}(h:void ib_cq_pool_put(struct ib_cq *cq, unsigned int nr_cqe)h](j)}(hvoidh]hvoid}(hj-1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)1hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMubj:)}(h h]h }(hj<1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)1hhhj;1hMubj)}(hib_cq_pool_puth]jN)}(hib_cq_pool_puth]hib_cq_pool_put}(hjN1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjJ1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)1hhhj;1hMubj)}(h'(struct ib_cq *cq, unsigned int nr_cqe)h](j)}(hstruct ib_cq *cqh](j()}(hj+h]hstruct}(hjj1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjf1ubj:)}(h h]h }(hjw1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjf1ubh)}(hhh]jN)}(hib_cqh]hib_cq}(hj1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj1modnameN classnameNjkjn)}jq]jt)}jgjP1sbc.ib_cq_pool_putasbuh1hhjf1ubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjf1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf1ubjN)}(hcqh]hcq}(hj1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjf1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjb1ubj)}(hunsigned int nr_cqeh](j)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubj)}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubjN)}(hnr_cqeh]hnr_cqe}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjb1ubeh}(h]h ]h"]h$]h&]jjuh1jhj)1hhhj;1hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj%1hhhj;1hMubah}(h]j 1ah ](jjeh"]h$]h&]jj)jhuh1jhj;1hMhj"1hhubj)}(hhh]h)}(h%Return a CQ taken from a shared pool.h]h%Return a CQ taken from a shared pool.}(hj>2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj;2hhubah}(h]h ]h"]h$]h&]uh1jhj"1hhhj;1hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjV2jjV2jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_cq *cq`` The CQ to return. ``unsigned int nr_cqe`` The max number of cqes that the user had requested.h](h)}(h**Parameters**h]j)}(hj`2h]h Parameters}(hjb2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjZ2ubj)}(hhh](j)}(h'``struct ib_cq *cq`` The CQ to return. h](j)}(h``struct ib_cq *cq``h]j )}(hj2h]hstruct ib_cq *cq}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}2ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjy2ubj)}(hhh]h)}(hThe CQ to return.h]hThe CQ to return.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjy2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjv2ubj)}(hK``unsigned int nr_cqe`` The max number of cqes that the user had requested.h](j)}(h``unsigned int nr_cqe``h]j )}(hj2h]hunsigned int nr_cqe}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj2ubj)}(hhh]h)}(h3The max number of cqes that the user had requested.h]h3The max number of cqes that the user had requested.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjv2ubeh}(h]h ]h"]h$]h&]uh1jhjZ2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_cm_listen (C function)c.ib_cm_listenhNtauh1jhhhhhNhNubj)}(hhh](j)}(h4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:4ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj64ubj)}(hhh](j)}(hU``struct ib_cm_id *cm_id`` Connection identifier associated with the listen request. h](j)}(h``struct ib_cm_id *cm_id``h]j )}(hj[4h]hstruct ib_cm_id *cm_id}(hj]4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY4ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhjU4ubj)}(hhh]h)}(h9Connection identifier associated with the listen request.h]h9Connection identifier associated with the listen request.}(hjt4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp4hMhjq4ubah}(h]h ]h"]h$]h&]uh1jhjU4ubeh}(h]h ]h"]h$]h&]uh1jhjp4hMhjR4ubj)}(h``__be64 service_id`` Service identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller.h](j)}(h``__be64 service_id``h]j )}(hj4h]h__be64 service_id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj4ubj)}(hhh]h)}(hService identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller.h]hService identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjR4ubeh}(h]h ]h"]h$]h&]uh1jhj64ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ib_cm_insert_listen (C function)c.ib_cm_insert_listenhNtauh1jhhhhhNhNubj)}(hhh](j)}(hmstruct ib_cm_id * ib_cm_insert_listen (struct ib_device *device, ib_cm_handler cm_handler, __be64 service_id)h]j")}(hkstruct ib_cm_id *ib_cm_insert_listen(struct ib_device *device, ib_cm_handler cm_handler, __be64 service_id)h](j()}(hj+h]hstruct}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4hhhj4hMubh)}(hhh]jN)}(hib_cm_idh]hib_cm_id}(hj 5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj 5ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj5modnameN classnameNjkjn)}jq]jt)}jgib_cm_insert_listensbc.ib_cm_insert_listenasbuh1hhj4hhhj4hMubj:)}(h h]h }(hj.5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4hhhj4hMubj)}(hjh]h*}(hj<5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMubj)}(hib_cm_insert_listenh]jN)}(hj+5h]hib_cm_insert_listen}(hjM5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjI5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj4hMubj)}(hG(struct ib_device *device, ib_cm_handler cm_handler, __be64 service_id)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjh5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjd5ubj:)}(h h]h }(hju5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjd5ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj5modnameN classnameNjkjn)}jq]j)5c.ib_cm_insert_listenasbuh1hhjd5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjd5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd5ubjN)}(hdeviceh]hdevice}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjd5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`5ubj)}(hib_cm_handler cm_handlerh](h)}(hhh]jN)}(h ib_cm_handlerh]h ib_cm_handler}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj5modnameN classnameNjkjn)}jq]j)5c.ib_cm_insert_listenasbuh1hhj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubjN)}(h cm_handlerh]h cm_handler}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`5ubj)}(h__be64 service_idh](h)}(hhh]jN)}(h__be64h]h__be64}(hj#6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj 6ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj%6modnameN classnameNjkjn)}jq]j)5c.ib_cm_insert_listenasbuh1hhj6ubj:)}(h h]h }(hjA6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubjN)}(h service_idh]h service_id}(hjO6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`5ubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj4hhhj4hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhj4hMhj4hhubj)}(hhh]h)}(hCCreate a new listening ib_cm_id and listen on the given service ID.h]hCCreate a new listening ib_cm_id and listen on the given service ID.}(hjy6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhjv6hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj6jj6jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` Device associated with the cm_id. All related communication will be associated with the specified device. ``ib_cm_handler cm_handler`` Callback invoked to notify the user of CM events. ``__be64 service_id`` Service identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller. **Description** If there's an existing ID listening on that same device and service ID, return it. Callers should call ib_destroy_cm_id when done with the listener ID.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubj)}(hhh](j)}(h``struct ib_device *device`` Device associated with the cm_id. All related communication will be associated with the specified device. h](j)}(h``struct ib_device *device``h]j )}(hj6h]hstruct ib_device *device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubj)}(hhh]h)}(hjDevice associated with the cm_id. All related communication will be associated with the specified device.h]hjDevice associated with the cm_id. All related communication will be associated with the specified device.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(hO``ib_cm_handler cm_handler`` Callback invoked to notify the user of CM events. h](j)}(h``ib_cm_handler cm_handler``h]j )}(hj6h]hib_cm_handler cm_handler}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubj)}(hhh]h)}(h1Callback invoked to notify the user of CM events.h]h1Callback invoked to notify the user of CM events.}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 7hMhj 7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMhj6ubj)}(h``__be64 service_id`` Service identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller. h](j)}(h``__be64 service_id``h]j )}(hj-7h]h__be64 service_id}(hj/7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+7ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj'7ubj)}(hhh]h)}(hService identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller.h]hService identifier matched against incoming connection and service ID resolution requests. The service ID should be specified network-byte order. If set to IB_CM_ASSIGN_SERVICE_ID, the CM will assign a service ID to the caller.}(hjF7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhjC7ubah}(h]h ]h"]h$]h&]uh1jhj'7ubeh}(h]h ]h"]h$]h&]uh1jhjB7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hji7h]h Description}(hjk7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg7ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubh)}(hRIf there's an existing ID listening on that same device and service ID, return it.h]hTIf there’s an existing ID listening on that same device and service ID, return it.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubh)}(hDCallers should call ib_destroy_cm_id when done with the listener ID.h]hDCallers should call ib_destroy_cm_id when done with the listener ID.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_rw_ctx_init (C function)c.rdma_rw_ctx_inithNtauh1jhhhhhNhNubj)}(hhh](j)}(hint rdma_rw_ctx_init (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, u32 sg_offset, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h]j")}(hint rdma_rw_ctx_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, u32 sg_offset, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM0ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7hhhj7hM0ubj)}(hrdma_rw_ctx_inith]jN)}(hrdma_rw_ctx_inith]hrdma_rw_ctx_init}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj7hM0ubj)}(h(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, u32 sg_offset, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]jt)}jgj7sbc.rdma_rw_ctx_initasbuh1hhj7ubj:)}(h h]h }(hj88hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubj)}(hjh]h*}(hjF8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjN)}(hctxh]hctx}(hjS8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjl8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjh8ubj:)}(h h]h }(hjy8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjh8ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhjh8ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjh8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh8ubjN)}(hqph]hqp}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjh8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj8ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubjN)}(hport_numh]hport_num}(hj 9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hj$9hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj 9ubj:)}(h h]h }(hj19hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 9ubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjB9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?9ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjD9modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj 9ubj:)}(h h]h }(hj`9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 9ubj)}(hjh]h*}(hjn9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9ubjN)}(hsgh]hsg}(hj{9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj 9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj9ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubjN)}(hsg_cnth]hsg_cnt}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 sg_offseth](h)}(hhh]jN)}(hu32h]hu32}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj9ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubjN)}(h sg_offseth]h sg_offset}(hj :hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hu64 remote_addrh](h)}(hhh]jN)}(hu64h]hu64}(hj':hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$:ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj):modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj :ubj:)}(h h]h }(hjE:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj :ubjN)}(h remote_addrh]h remote_addr}(hjS:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj :ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hu32 rkeyh](h)}(hhh]jN)}(hu32h]hu32}(hjo:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjl:ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjq:modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhjh:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjh:ubjN)}(hrkeyh]hrkey}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjh:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj:modnameN classnameNjkjn)}jq]j48c.rdma_rw_ctx_initasbuh1hhj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubjN)}(hdirh]hdir}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hM0ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj7hhhj7hM0ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhj7hM0hj7hhubj)}(hhh]h)}(h$initialize a RDMA READ/WRITE contexth]h$initialize a RDMA READ/WRITE context}(hj(;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM0hj%;hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hM0ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj@;jj@;jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_rw_ctx *ctx`` context to initialize ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``struct scatterlist *sg`` scatterlist to READ/WRITE from/to ``u32 sg_cnt`` number of entries in **sg** ``u32 sg_offset`` current byte offset into **sg** ``u64 remote_addr`` remote address to read/write (relative to **rkey**) ``u32 rkey`` remote key to operate on ``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ **Description** Returns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.h](h)}(h**Parameters**h]j)}(hjJ;h]h Parameters}(hjL;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH;ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM4hjD;ubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to initialize h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hji;h]hstruct rdma_rw_ctx *ctx}(hjk;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg;ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM1hjc;ubj)}(hhh]h)}(hcontext to initializeh]hcontext to initialize}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~;hM1hj;ubah}(h]h ]h"]h$]h&]uh1jhjc;ubeh}(h]h ]h"]h$]h&]uh1jhj~;hM1hj`;ubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hj;h]hstruct ib_qp *qp}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM2hj;ubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM2hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM2hj`;ubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hj;h]h u32 port_num}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM3hj;ubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM3hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM3hj`;ubj)}(h=``struct scatterlist *sg`` scatterlist to READ/WRITE from/to h](j)}(h``struct scatterlist *sg``h]j )}(hj<h]hstruct scatterlist *sg}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM4hj<ubj)}(hhh]h)}(h!scatterlist to READ/WRITE from/toh]h!scatterlist to READ/WRITE from/to}(hj-<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)<hM4hj*<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj)<hM4hj`;ubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j )}(hjM<h]h u32 sg_cnt}(hjO<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK<ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM5hjG<ubj)}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjf<hhhNhNubj)}(h**sg**h]hsg}(hjn<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf<ubeh}(h]h ]h"]h$]h&]uh1hhjb<hM5hjc<ubah}(h]h ]h"]h$]h&]uh1jhjG<ubeh}(h]h ]h"]h$]h&]uh1jhjb<hM5hj`;ubj)}(h2``u32 sg_offset`` current byte offset into **sg** h](j)}(h``u32 sg_offset``h]j )}(hj<h]h u32 sg_offset}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM6hj<ubj)}(hhh]h)}(hcurrent byte offset into **sg**h](hcurrent byte offset into }(hj<hhhNhNubj)}(h**sg**h]hsg}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1hhj<hM6hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM6hj`;ubj)}(hH``u64 remote_addr`` remote address to read/write (relative to **rkey**) h](j)}(h``u64 remote_addr``h]j )}(hj<h]hu64 remote_addr}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM7hj<ubj)}(hhh]h)}(h3remote address to read/write (relative to **rkey**)h](h*remote address to read/write (relative to }(hj<hhhNhNubj)}(h**rkey**h]hrkey}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh)}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hM7hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM7hj`;ubj)}(h&``u32 rkey`` remote key to operate on h](j)}(h ``u32 rkey``h]j )}(hj&=h]hu32 rkey}(hj(=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$=ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM8hj =ubj)}(hhh]h)}(hremote key to operate onh]hremote key to operate on}(hj?=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;=hM8hj<=ubah}(h]h ]h"]h$]h&]uh1jhj =ubeh}(h]h ]h"]h$]h&]uh1jhj;=hM8hj`;ubj)}(hd``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ h](j)}(h``enum dma_data_direction dir``h]j )}(hj_=h]henum dma_data_direction dir}(hja=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]=ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM9hjY=ubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hj|=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx=ubh for RDMA WRITE, }(hjx=hhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx=ubh for RDMA READ}(hjx=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjt=hM9hju=ubah}(h]h ]h"]h$]h&]uh1jhjY=ubeh}(h]h ]h"]h$]h&]uh1jhjt=hM9hj`;ubeh}(h]h ]h"]h$]h&]uh1jhjD;ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM;hjD;ubh)}(hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.h]hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM:hjD;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"rdma_rw_ctx_init_bvec (C function)c.rdma_rw_ctx_init_bvechNtauh1jhhhhhNhNubj)}(hhh](j)}(hint rdma_rw_ctx_init_bvec (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, struct bvec_iter iter, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h]j")}(hint rdma_rw_ctx_init_bvec(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, struct bvec_iter iter, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=hhhj >hMubj)}(hrdma_rw_ctx_init_bvech]jN)}(hrdma_rw_ctx_init_bvech]hrdma_rw_ctx_init_bvec}(hj >hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj >hMubj)}(h(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, struct bvec_iter iter, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hj<>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj8>ubj:)}(h h]h }(hjI>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8>ubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjZ>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjW>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj\>modnameN classnameNjkjn)}jq]jt)}jgj">sbc.rdma_rw_ctx_init_bvecasbuh1hhj8>ubj:)}(h h]h }(hjz>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8>ubjN)}(hctxh]hctx}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj>modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjN)}(hqph]hqp}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hj!?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj#?modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj?ubj:)}(h h]h }(hj??hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubjN)}(hport_numh]hport_num}(hjM?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(hconst struct bio_vec *bvecsh](j()}(hjh]hconst}(hjf?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjb?ubj:)}(h h]h }(hjs?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb?ubj()}(hj+h]hstruct}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjb?ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb?ubh)}(hhh]jN)}(hbio_vech]hbio_vec}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj?modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhjb?ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb?ubjN)}(hbvecsh]hbvecs}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjb?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(h u32 nr_bvech](h)}(hhh]jN)}(hu32h]hu32}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj?modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj?ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubjN)}(hnr_bvech]hnr_bvec}(hj @hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(hstruct bvec_iter iterh](j()}(hj+h]hstruct}(hj9@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5@ubj:)}(h h]h }(hjF@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5@ubh)}(hhh]jN)}(h bvec_iterh]h bvec_iter}(hjW@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjT@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjY@modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj5@ubj:)}(h h]h }(hju@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5@ubjN)}(hiterh]hiter}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(hu64 remote_addrh](h)}(hhh]jN)}(hu64h]hu64}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubjN)}(h remote_addrh]h remote_addr}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(hu32 rkeyh](h)}(hhh]jN)}(hu32h]hu32}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@modnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj@ubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubjN)}(hrkeyh]hrkey}(hjAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj,AhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj(Aubj:)}(h h]h }(hj9AhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(Aubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjJAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGAubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjLAmodnameN classnameNjkjn)}jq]jv>c.rdma_rw_ctx_init_bvecasbuh1hhj(Aubj:)}(h h]h }(hjhAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(AubjN)}(hdirh]hdir}(hjvAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4>ubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhj >hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj=hhhj >hMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhj >hMhj=hhubj)}(hhh]h)}(h1initialize a RDMA READ/WRITE context from bio_vech]h1initialize a RDMA READ/WRITE context from bio_vec}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj >hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjAjjAjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_rw_ctx *ctx`` context to initialize ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``const struct bio_vec *bvecs`` bio_vec array to READ/WRITE from/to ``u32 nr_bvec`` number of entries in **bvecs** ``struct bvec_iter iter`` bvec iterator describing offset and length ``u64 remote_addr`` remote address to read/write (relative to **rkey**) ``u32 rkey`` remote key to operate on ``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ **Description** Maps the bio_vec array directly, avoiding intermediate scatterlist conversion. Supports MR registration for iWARP devices and force_mr mode. Returns the number of WQEs that will be needed on the workqueue if successful, or a negative error code: * -EINVAL - **nr_bvec** is zero or **iter.bi_size** is zero * -ENOMEM - DMA mapping or memory allocation failedh](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to initialize h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hjAh]hstruct rdma_rw_ctx *ctx}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAubj)}(hhh]h)}(hcontext to initializeh]hcontext to initialize}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hjBh]hstruct ib_qp *qp}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjBubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hj3BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/BhMhj0Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj/BhMhjAubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hjSBh]h u32 port_num}(hjUBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQBubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjMBubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhBhMhjiBubah}(h]h ]h"]h$]h&]uh1jhjMBubeh}(h]h ]h"]h$]h&]uh1jhjhBhMhjAubj)}(hD``const struct bio_vec *bvecs`` bio_vec array to READ/WRITE from/to h](j)}(h``const struct bio_vec *bvecs``h]j )}(hjBh]hconst struct bio_vec *bvecs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjBubj)}(hhh]h)}(h#bio_vec array to READ/WRITE from/toh]h#bio_vec array to READ/WRITE from/to}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubj)}(h/``u32 nr_bvec`` number of entries in **bvecs** h](j)}(h``u32 nr_bvec``h]j )}(hjBh]h u32 nr_bvec}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjBubj)}(hhh]h)}(hnumber of entries in **bvecs**h](hnumber of entries in }(hjBhhhNhNubj)}(h **bvecs**h]hbvecs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubj)}(hE``struct bvec_iter iter`` bvec iterator describing offset and length h](j)}(h``struct bvec_iter iter``h]j )}(hj Ch]hstruct bvec_iter iter}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Cubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjCubj)}(hhh]h)}(h*bvec iterator describing offset and lengthh]h*bvec iterator describing offset and length}(hj%ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!ChMhj"Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj!ChMhjAubj)}(hH``u64 remote_addr`` remote address to read/write (relative to **rkey**) h](j)}(h``u64 remote_addr``h]j )}(hjECh]hu64 remote_addr}(hjGChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCCubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj?Cubj)}(hhh]h)}(h3remote address to read/write (relative to **rkey**)h](h*remote address to read/write (relative to }(hj^ChhhNhNubj)}(h**rkey**h]hrkey}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Cubh)}(hj^ChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZChMhj[Cubah}(h]h ]h"]h$]h&]uh1jhj?Cubeh}(h]h ]h"]h$]h&]uh1jhjZChMhjAubj)}(h&``u32 rkey`` remote key to operate on h](j)}(h ``u32 rkey``h]j )}(hjCh]hu32 rkey}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjCubj)}(hhh]h)}(hremote key to operate onh]hremote key to operate on}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjAubj)}(hd``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ h](j)}(h``enum dma_data_direction dir``h]j )}(hjCh]henum dma_data_direction dir}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjCubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh for RDMA WRITE, }(hjChhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh for RDMA READ}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hj$Dh]h Description}(hj&DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Dubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAubh)}(hMaps the bio_vec array directly, avoiding intermediate scatterlist conversion. Supports MR registration for iWARP devices and force_mr mode.h]hMaps the bio_vec array directly, avoiding intermediate scatterlist conversion. Supports MR registration for iWARP devices and force_mr mode.}(hj:DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAubh)}(hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code:h]hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code:}(hjIDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjAubh block_quote)}(hp* -EINVAL - **nr_bvec** is zero or **iter.bi_size** is zero * -ENOMEM - DMA mapping or memory allocation failedh]h bullet_list)}(hhh](h list_item)}(h:-EINVAL - **nr_bvec** is zero or **iter.bi_size** is zeroh]h option_list)}(hhh]hoption_list_item)}(hhh](h option_group)}(hhh]hoption)}(h-EINVALh](h option_string)}(h-Eh]h-E}hjDsbah}(h]h ]h"]h$]h&]uh1j~DhjzDubhoption_argument)}(hINVALh]hINVAL}(hjDhhhNhNubah}(h]h ]h"]h$]h&] delimiterhuh1jDhjzDubeh}(h]h ]h"]h$]h&]uh1jxDhjuDubah}(h]h ]h"]h$]h&]uh1jsDhjpDubh description)}(h1- **nr_bvec** is zero or **iter.bi_size** is zeroh]j_D)}(hhh]jdD)}(h/**nr_bvec** is zero or **iter.bi_size** is zeroh]h)}(hjDh](j)}(h **nr_bvec**h]hnr_bvec}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh is zero or }(hjDhhhNhNubj)}(h**iter.bi_size**h]h iter.bi_size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh is zero}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjDubah}(h]h ]h"]h$]h&]uh1jcDhjDubah}(h]h ]h"]h$]h&]bullet-uh1j^DhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jDhjpDubeh}(h]h ]h"]h$]h&]uh1jnDhjkDubah}(h]h ]h"]h$]h&]uh1jiDhjDhMhjeDubah}(h]h ]h"]h$]h&]uh1jcDhj`DubjdD)}(h1-ENOMEM - DMA mapping or memory allocation failedh]h)}(hjEh]h1-ENOMEM - DMA mapping or memory allocation failed}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj Eubah}(h]h ]h"]h$]h&]uh1jcDhj`Dubeh}(h]h ]h"]h$]h&]jDjuh1j^DhjDhMhjZDubah}(h]h ]h"]h$]h&]uh1jXDhjDhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'rdma_rw_ctx_signature_init (C function)c.rdma_rw_ctx_signature_inithNtauh1jhhhhhNhNubj)}(hhh](j)}(hXint rdma_rw_ctx_signature_init (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, struct ib_sig_attrs *sig_attrs, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h]j")}(hXint rdma_rw_ctx_signature_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, struct ib_sig_attrs *sig_attrs, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hinth]hint}(hjPEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLEhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj:)}(h h]h }(hj_EhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLEhhhj^EhMubj)}(hrdma_rw_ctx_signature_inith]jN)}(hrdma_rw_ctx_signature_inith]hrdma_rw_ctx_signature_init}(hjqEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLEhhhj^EhMubj)}(h(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, struct ib_sig_attrs *sig_attrs, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjEubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjEmodnameN classnameNjkjn)}jq]jt)}jgjsEsbc.rdma_rw_ctx_signature_initasbuh1hhjEubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjN)}(hctxh]hctx}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjEubj:)}(h h]h }(hj FhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubh)}(hhh]jN)}(hib_qph]hib_qp}(hjFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjFmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjEubj:)}(h h]h }(hj;FhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubj)}(hjh]h*}(hjIFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjN)}(hqph]hqp}(hjVFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjrFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoFubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjtFmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjkFubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkFubjN)}(hport_numh]hport_num}(hjFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hjFhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjFubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjFmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjFubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjN)}(hsgh]hsg}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(h u32 sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hj*GhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'Gubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,GmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhj#Gubj:)}(h h]h }(hjHGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#GubjN)}(hsg_cnth]hsg_cnt}(hjVGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#Gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct scatterlist *prot_sgh](j()}(hj+h]hstruct}(hjoGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjkGubj:)}(h h]h }(hj|GhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkGubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjkGubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkGubjN)}(hprot_sgh]hprot_sg}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hu32 prot_sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjGubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubjN)}(h prot_sg_cnth]h prot_sg_cnt}(hjHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct ib_sig_attrs *sig_attrsh](j()}(hj+h]hstruct}(hj'HhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#Hubj:)}(h h]h }(hj4HhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#Hubh)}(hhh]jN)}(h ib_sig_attrsh]h ib_sig_attrs}(hjEHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBHubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGHmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhj#Hubj:)}(h h]h }(hjcHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#Hubj)}(hjh]h*}(hjqHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#HubjN)}(h sig_attrsh]h sig_attrs}(hj~HhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#Hubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hu64 remote_addrh](h)}(hhh]jN)}(hu64h]hu64}(hjHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjHubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjHmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjHubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubjN)}(h remote_addrh]h remote_addr}(hjHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hu32 rkeyh](h)}(hhh]jN)}(hu32h]hu32}(hjHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjHubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjHmodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhjHubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubjN)}(hrkeyh]hrkey}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj'IhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#Iubj:)}(h h]h }(hj4IhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#Iubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjEIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBIubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGImodnameN classnameNjkjn)}jq]jEc.rdma_rw_ctx_signature_initasbuh1hhj#Iubj:)}(h h]h }(hjcIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#IubjN)}(hdirh]hdir}(hjqIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#Iubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubeh}(h]h ]h"]h$]h&]jjuh1jhjLEhhhj^EhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjHEhhhj^EhMubah}(h]jCEah ](jjeh"]h$]h&]jj)jhuh1jhj^EhMhjEEhhubj)}(hhh]h)}(h.initialize a RW context with signature offloadh]h.initialize a RW context with signature offload}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjEEhhhj^EhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjIjjIjjjuh1jhhhhhNhNubj)}(hXP**Parameters** ``struct rdma_rw_ctx *ctx`` context to initialize ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``struct scatterlist *sg`` scatterlist to READ/WRITE from/to ``u32 sg_cnt`` number of entries in **sg** ``struct scatterlist *prot_sg`` scatterlist to READ/WRITE protection information from/to ``u32 prot_sg_cnt`` number of entries in **prot_sg** ``struct ib_sig_attrs *sig_attrs`` signature offloading algorithms ``u64 remote_addr`` remote address to read/write (relative to **rkey**) ``u32 rkey`` remote key to operate on ``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ **Description** Returns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjIubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to initialize h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hjIh]hstruct rdma_rw_ctx *ctx}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjIubj)}(hhh]h)}(hcontext to initializeh]hcontext to initialize}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hjJh]hstruct ib_qp *qp}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjJubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hj.JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*JhMhj+Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj*JhMhjIubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hjNJh]h u32 port_num}(hjPJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLJubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjHJubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjgJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcJhMhjdJubah}(h]h ]h"]h$]h&]uh1jhjHJubeh}(h]h ]h"]h$]h&]uh1jhjcJhMhjIubj)}(h=``struct scatterlist *sg`` scatterlist to READ/WRITE from/to h](j)}(h``struct scatterlist *sg``h]j )}(hjJh]hstruct scatterlist *sg}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjJubj)}(hhh]h)}(h!scatterlist to READ/WRITE from/toh]h!scatterlist to READ/WRITE from/to}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j )}(hjJh]h u32 sg_cnt}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjJubj)}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjJhhhNhNubj)}(h**sg**h]hsg}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(hY``struct scatterlist *prot_sg`` scatterlist to READ/WRITE protection information from/to h](j)}(h``struct scatterlist *prot_sg``h]j )}(hjKh]hstruct scatterlist *prot_sg}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjKubj)}(hhh]h)}(h8scatterlist to READ/WRITE protection information from/toh]h8scatterlist to READ/WRITE protection information from/to}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjIubj)}(h5``u32 prot_sg_cnt`` number of entries in **prot_sg** h](j)}(h``u32 prot_sg_cnt``h]j )}(hj@Kh]hu32 prot_sg_cnt}(hjBKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Kubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj:Kubj)}(hhh]h)}(h number of entries in **prot_sg**h](hnumber of entries in }(hjYKhhhNhNubj)}(h **prot_sg**h]hprot_sg}(hjaKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYKubeh}(h]h ]h"]h$]h&]uh1hhjUKhMhjVKubah}(h]h ]h"]h$]h&]uh1jhj:Kubeh}(h]h ]h"]h$]h&]uh1jhjUKhMhjIubj)}(hC``struct ib_sig_attrs *sig_attrs`` signature offloading algorithms h](j)}(h"``struct ib_sig_attrs *sig_attrs``h]j )}(hjKh]hstruct ib_sig_attrs *sig_attrs}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjKubj)}(hhh]h)}(hsignature offloading algorithmsh]hsignature offloading algorithms}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjIubj)}(hH``u64 remote_addr`` remote address to read/write (relative to **rkey**) h](j)}(h``u64 remote_addr``h]j )}(hjKh]hu64 remote_addr}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjKubj)}(hhh]h)}(h3remote address to read/write (relative to **rkey**)h](h*remote address to read/write (relative to }(hjKhhhNhNubj)}(h**rkey**h]hrkey}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh)}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjIubj)}(h&``u32 rkey`` remote key to operate on h](j)}(h ``u32 rkey``h]j )}(hj Lh]hu32 rkey}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjLubj)}(hhh]h)}(hremote key to operate onh]hremote key to operate on}(hj$LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj LhMhj!Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj LhMhjIubj)}(hd``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ h](j)}(h``enum dma_data_direction dir``h]j )}(hjDLh]henum dma_data_direction dir}(hjFLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBLubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj>Lubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hjaLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Lubh for RDMA WRITE, }(hj]LhhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Lubh for RDMA READ}(hj]LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYLhMhjZLubah}(h]h ]h"]h$]h&]uh1jhj>Lubeh}(h]h ]h"]h$]h&]uh1jhjYLhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjIubh)}(hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.h]hhReturns the number of WQEs that will be needed on the workqueue if successful, or a negative error code.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_rw_ctx_wrs (C function)c.rdma_rw_ctx_wrshNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_send_wr * rdma_rw_ctx_wrs (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h]j")}(hstruct ib_send_wr *rdma_rw_ctx_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h](j()}(hj+h]hstruct}(hjLhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjLhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMXubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLhhhjLhMXubh)}(hhh]jN)}(h ib_send_wrh]h ib_send_wr}(hjMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjMmodnameN classnameNjkjn)}jq]jt)}jgrdma_rw_ctx_wrssbc.rdma_rw_ctx_wrsasbuh1hhjLhhhjLhMXubj:)}(h h]h }(hj$MhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLhhhjLhMXubj)}(hjh]h*}(hj2MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhjLhMXubj)}(hrdma_rw_ctx_wrsh]jN)}(hj!Mh]hrdma_rw_ctx_wrs}(hjCMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?Mubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhjLhMXubj)}(hj(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hj^MhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjZMubj:)}(h h]h }(hjkMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZMubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hj|MhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjyMubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj~MmodnameN classnameNjkjn)}jq]jMc.rdma_rw_ctx_wrsasbuh1hhjZMubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZMubjN)}(hctxh]hctx}(hjMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVMubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjMhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjMubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubh)}(hhh]jN)}(hib_qph]hib_qp}(hjMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjMmodnameN classnameNjkjn)}jq]jMc.rdma_rw_ctx_wrsasbuh1hhjMubj:)}(h h]h }(hj NhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjN)}(hqph]hqp}(hj%NhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVMubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjANhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>Nubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjCNmodnameN classnameNjkjn)}jq]jMc.rdma_rw_ctx_wrsasbuh1hhj:Nubj:)}(h h]h }(hj_NhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:NubjN)}(hport_numh]hport_num}(hjmNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVMubj)}(hstruct ib_cqe *cqeh](j()}(hj+h]hstruct}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubh)}(hhh]jN)}(hib_cqeh]hib_cqe}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjNmodnameN classnameNjkjn)}jq]jMc.rdma_rw_ctx_wrsasbuh1hhjNubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjN)}(hcqeh]hcqe}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVMubj)}(hstruct ib_send_wr *chain_wrh](j()}(hj+h]hstruct}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubh)}(hhh]jN)}(h ib_send_wrh]h ib_send_wr}(hjOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjOubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjOmodnameN classnameNjkjn)}jq]jMc.rdma_rw_ctx_wrsasbuh1hhjNubj:)}(h h]h }(hj2OhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj)}(hjh]h*}(hj@OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjN)}(hchain_wrh]hchain_wr}(hjMOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVMubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhjLhMXubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjLhhhjLhMXubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhjLhMXhjLhhubj)}(hhh]h)}(h6return chain of WRs for a RDMA READ or WRITE operationh]h6return chain of WRs for a RDMA READ or WRITE operation}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMXhjtOhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhMXubeh}(h]h ](jefunctioneh"]h$]h&]jjejjOjjOjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_rw_ctx *ctx`` context to operate on ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``struct ib_cqe *cqe`` completion queue entry for the last WR ``struct ib_send_wr *chain_wr`` WR to append to the posted chain **Description** Return the WR chain for the set of RDMA READ/WRITE operations described by **ctx**, as well as any memory registration operations needed. If **chain_wr** is non-NULL the WR it points to will be appended to the chain of WRs posted. If **chain_wr** is not set **cqe** must be set so that the caller gets a completion notification.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM\hjOubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to operate on h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hjOh]hstruct rdma_rw_ctx *ctx}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMYhjOubj)}(hhh]h)}(hcontext to operate onh]hcontext to operate on}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMYhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMYhjOubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hjOh]hstruct ib_qp *qp}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMZhjOubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMZhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMZhjOubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hj*Ph]h u32 port_num}(hj,PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Pubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM[hj$Pubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjCPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?PhM[hj@Pubah}(h]h ]h"]h$]h&]uh1jhj$Pubeh}(h]h ]h"]h$]h&]uh1jhj?PhM[hjOubj)}(h>``struct ib_cqe *cqe`` completion queue entry for the last WR h](j)}(h``struct ib_cqe *cqe``h]j )}(hjcPh]hstruct ib_cqe *cqe}(hjePhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaPubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM\hj]Pubj)}(hhh]h)}(h&completion queue entry for the last WRh]h&completion queue entry for the last WR}(hj|PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxPhM\hjyPubah}(h]h ]h"]h$]h&]uh1jhj]Pubeh}(h]h ]h"]h$]h&]uh1jhjxPhM\hjOubj)}(hA``struct ib_send_wr *chain_wr`` WR to append to the posted chain h](j)}(h``struct ib_send_wr *chain_wr``h]j )}(hjPh]hstruct ib_send_wr *chain_wr}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM]hjPubj)}(hhh]h)}(h WR to append to the posted chainh]h WR to append to the posted chain}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM]hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM]hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM_hjOubh)}(hXIReturn the WR chain for the set of RDMA READ/WRITE operations described by **ctx**, as well as any memory registration operations needed. If **chain_wr** is non-NULL the WR it points to will be appended to the chain of WRs posted. If **chain_wr** is not set **cqe** must be set so that the caller gets a completion notification.h](hKReturn the WR chain for the set of RDMA READ/WRITE operations described by }(hjPhhhNhNubj)}(h**ctx**h]hctx}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh<, as well as any memory registration operations needed. If }(hjPhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhQ is non-NULL the WR it points to will be appended to the chain of WRs posted. If }(hjPhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh is not set }(hjPhhhNhNubj)}(h**cqe**h]hcqe}(hj+QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh? must be set so that the caller gets a completion notification.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM^hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_rw_ctx_post (C function)c.rdma_rw_ctx_posthNtauh1jhhhhhNhNubj)}(hhh](j)}(hint rdma_rw_ctx_post (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h]j")}(h~int rdma_rw_ctx_post(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h](j)}(hinth]hint}(hjdQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`Qhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj:)}(h h]h }(hjsQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`QhhhjrQhMubj)}(hrdma_rw_ctx_posth]jN)}(hrdma_rw_ctx_posth]hrdma_rw_ctx_post}(hjQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`QhhhjrQhMubj)}(hj(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct ib_cqe *cqe, struct ib_send_wr *chain_wr)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hjQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjQmodnameN classnameNjkjn)}jq]jt)}jgjQsbc.rdma_rw_ctx_postasbuh1hhjQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjN)}(hctxh]hctx}(hjQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjRubj:)}(h h]h }(hj RhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubh)}(hhh]jN)}(hib_qph]hib_qp}(hj1RhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.Rubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj3RmodnameN classnameNjkjn)}jq]jQc.rdma_rw_ctx_postasbuh1hhjRubj:)}(h h]h }(hjORhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj)}(hjh]h*}(hj]RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjN)}(hqph]hqp}(hjjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjRmodnameN classnameNjkjn)}jq]jQc.rdma_rw_ctx_postasbuh1hhjRubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubjN)}(hport_numh]hport_num}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hstruct ib_cqe *cqeh](j()}(hj+h]hstruct}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjRubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubh)}(hhh]jN)}(hib_cqeh]hib_cqe}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjRmodnameN classnameNjkjn)}jq]jQc.rdma_rw_ctx_postasbuh1hhjRubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjN)}(hcqeh]hcqe}(hj"ShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hstruct ib_send_wr *chain_wrh](j()}(hj+h]hstruct}(hj;ShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7Subj:)}(h h]h }(hjHShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7Subh)}(hhh]jN)}(h ib_send_wrh]h ib_send_wr}(hjYShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVSubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj[SmodnameN classnameNjkjn)}jq]jQc.rdma_rw_ctx_postasbuh1hhj7Subj:)}(h h]h }(hjwShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7Subj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7SubjN)}(hchain_wrh]hchain_wr}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7Subeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubeh}(h]h ]h"]h$]h&]jjuh1jhj`QhhhjrQhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj\QhhhjrQhMubah}(h]jWQah ](jjeh"]h$]h&]jj)jhuh1jhjrQhMhjYQhhubj)}(hhh]h)}(h(post a RDMA READ or RDMA WRITE operationh]h(post a RDMA READ or RDMA WRITE operation}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhjYQhhhjrQhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjSjjSjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_rw_ctx *ctx`` context to operate on ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``struct ib_cqe *cqe`` completion queue entry for the last WR ``struct ib_send_wr *chain_wr`` WR to append to the posted chain **Description** Post the set of RDMA READ/WRITE operations described by **ctx**, as well as any memory registration operations needed. If **chain_wr** is non-NULL the WR it points to will be appended to the chain of WRs posted. If **chain_wr** is not set **cqe** must be set so that the caller gets a completion notification.h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjSubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to operate on h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hjSh]hstruct rdma_rw_ctx *ctx}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjSubj)}(hhh]h)}(hcontext to operate onh]hcontext to operate on}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hj6Th]hstruct ib_qp *qp}(hj8ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Tubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj0Tubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hjOThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKThMhjLTubah}(h]h ]h"]h$]h&]uh1jhj0Tubeh}(h]h ]h"]h$]h&]uh1jhjKThMhjSubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hjoTh]h u32 port_num}(hjqThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmTubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjiTubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjiTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(h>``struct ib_cqe *cqe`` completion queue entry for the last WR h](j)}(h``struct ib_cqe *cqe``h]j )}(hjTh]hstruct ib_cqe *cqe}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjTubj)}(hhh]h)}(h&completion queue entry for the last WRh]h&completion queue entry for the last WR}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubj)}(hA``struct ib_send_wr *chain_wr`` WR to append to the posted chain h](j)}(h``struct ib_send_wr *chain_wr``h]j )}(hjTh]hstruct ib_send_wr *chain_wr}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjTubj)}(hhh]h)}(h WR to append to the posted chainh]h WR to append to the posted chain}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjSubh)}(hX7Post the set of RDMA READ/WRITE operations described by **ctx**, as well as any memory registration operations needed. If **chain_wr** is non-NULL the WR it points to will be appended to the chain of WRs posted. If **chain_wr** is not set **cqe** must be set so that the caller gets a completion notification.h](h8Post the set of RDMA READ/WRITE operations described by }(hj2UhhhNhNubj)}(h**ctx**h]hctx}(hj:UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Uubh<, as well as any memory registration operations needed. If }(hj2UhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjLUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2UubhR is non-NULL the WR it points to will be appended to the chain of WRs posted. If }(hj2UhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hj^UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Uubh is not set }(hj2UhhhNhNubj)}(h**cqe**h]hcqe}(hjpUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Uubh? must be set so that the caller gets a completion notification.}(hj2UhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j rdma_rw_ctx_destroy (C function)c.rdma_rw_ctx_destroyhNtauh1jhhhhhNhNubj)}(hhh](j)}(hvoid rdma_rw_ctx_destroy (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, enum dma_data_direction dir)h]j")}(hvoid rdma_rw_ctx_destroy(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUhhhjUhMubj)}(hrdma_rw_ctx_destroyh]jN)}(hrdma_rw_ctx_destroyh]hrdma_rw_ctx_destroy}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhMubj)}(hz(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjUubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjVmodnameN classnameNjkjn)}jq]jt)}jgjUsbc.rdma_rw_ctx_destroyasbuh1hhjUubj:)}(h h]h }(hj$VhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubj)}(hjh]h*}(hj2VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjN)}(hctxh]hctx}(hj?VhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjXVhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjTVubj:)}(h h]h }(hjeVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTVubh)}(hhh]jN)}(hib_qph]hib_qp}(hjvVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjsVubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjxVmodnameN classnameNjkjn)}jq]j Vc.rdma_rw_ctx_destroyasbuh1hhjTVubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTVubjN)}(hqph]hqp}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjTVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjVmodnameN classnameNjkjn)}jq]j Vc.rdma_rw_ctx_destroyasbuh1hhjVubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubjN)}(hport_numh]hport_num}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj Wubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Wubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hj.WhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+Wubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj0WmodnameN classnameNjkjn)}jq]j Vc.rdma_rw_ctx_destroyasbuh1hhj Wubj:)}(h h]h }(hjLWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Wubj)}(hjh]h*}(hjZWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj WubjN)}(hsgh]hsg}(hjgWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj Wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(h u32 sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]j Vc.rdma_rw_ctx_destroyasbuh1hhj|Wubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|WubjN)}(hsg_cnth]hsg_cnt}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj|Wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjWubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]j Vc.rdma_rw_ctx_destroyasbuh1hhjWubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubjN)}(hdirh]hdir}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjUhMhjUhhubj)}(hhh]h)}(h3release all resources allocated by rdma_rw_ctx_inith]h3release all resources allocated by rdma_rw_ctx_init}(hjYubah}(h]h ]h"]h$]h&]uh1jhj"Yubeh}(h]h ]h"]h$]h&]uh1jhj=YhMhjtXubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j )}(hjaYh]h u32 sg_cnt}(hjcYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Yubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj[Yubj)}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjzYhhhNhNubj)}(h**sg**h]hsg}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzYubeh}(h]h ]h"]h$]h&]uh1hhjvYhMhjwYubah}(h]h ]h"]h$]h&]uh1jhj[Yubeh}(h]h ]h"]h$]h&]uh1jhjvYhMhjtXubj)}(hc``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j)}(h``enum dma_data_direction dir``h]j )}(hjYh]henum dma_data_direction dir}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjYubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh for RDMA WRITE, }(hjYhhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh for RDMA READ}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjtXubeh}(h]h ]h"]h$]h&]uh1jhjXXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%rdma_rw_ctx_destroy_bvec (C function)c.rdma_rw_ctx_destroy_bvechNtauh1jhhhhhNhNubj)}(hhh](j)}(hvoid rdma_rw_ctx_destroy_bvec (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, enum dma_data_direction dir)h]j")}(hvoid rdma_rw_ctx_destroy_bvec(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hj"ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj:)}(h h]h }(hj1ZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZhhhj0ZhMubj)}(hrdma_rw_ctx_destroy_bvech]jN)}(hrdma_rw_ctx_destroy_bvech]hrdma_rw_ctx_destroy_bvec}(hjCZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?Zubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhj0ZhMubj)}(h(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, const struct bio_vec *bvecs, u32 nr_bvec, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hj_ZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj[Zubj:)}(h h]h }(hjlZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[Zubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hj}ZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjzZubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjZmodnameN classnameNjkjn)}jq]jt)}jgjEZsbc.rdma_rw_ctx_destroy_bvecasbuh1hhj[Zubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[Zubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ZubjN)}(hctxh]hctx}(hjZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj[Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjZubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubh)}(hhh]jN)}(hib_qph]hib_qp}(hjZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjZmodnameN classnameNjkjn)}jq]jZc.rdma_rw_ctx_destroy_bvecasbuh1hhjZubj:)}(h h]h }(hj [hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubj)}(hjh]h*}(hjhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjN)}(hqph]hqp}(hj([hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjD[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjA[ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjF[modnameN classnameNjkjn)}jq]jZc.rdma_rw_ctx_destroy_bvecasbuh1hhj=[ubj:)}(h h]h }(hjb[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=[ubjN)}(hport_numh]hport_num}(hjp[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(hconst struct bio_vec *bvecsh](j()}(hjh]hconst}(hj[hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj[ubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubj()}(hj+h]hstruct}(hj[hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj[ubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubh)}(hhh]jN)}(hbio_vech]hbio_vec}(hj[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj[ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj[modnameN classnameNjkjn)}jq]jZc.rdma_rw_ctx_destroy_bvecasbuh1hhj[ubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjN)}(hbvecsh]hbvecs}(hj[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(h u32 nr_bvech](h)}(hhh]jN)}(hu32h]hu32}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj\modnameN classnameNjkjn)}jq]jZc.rdma_rw_ctx_destroy_bvecasbuh1hhj\ubj:)}(h h]h }(hj5\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubjN)}(hnr_bvech]hnr_bvec}(hjC\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj\\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjX\ubj:)}(h h]h }(hji\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjX\ubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjz\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjw\ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj|\modnameN classnameNjkjn)}jq]jZc.rdma_rw_ctx_destroy_bvecasbuh1hhjX\ubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjX\ubjN)}(hdirh]hdir}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjX\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhj0ZhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjZhhhj0ZhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhj0ZhMhjZhhubj)}(hhh]h)}(h,release resources from rdma_rw_ctx_init_bvech]h,release resources from rdma_rw_ctx_init_bvec}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj0ZhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj\jj\jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_rw_ctx *ctx`` context to release ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound (unused) ``const struct bio_vec *bvecs`` bio_vec array that was used for the READ/WRITE (unused) ``u32 nr_bvec`` number of entries in **bvecs** ``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ **Description** Releases all resources allocated by a successful rdma_rw_ctx_init_bvec() call. Must not be called if rdma_rw_ctx_init_bvec() returned an error. The **port_num** and **bvecs** parameters are unused but present for API symmetry with rdma_rw_ctx_destroy().h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\ubj)}(hhh](j)}(h/``struct rdma_rw_ctx *ctx`` context to release h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hj]h]hstruct rdma_rw_ctx *ctx}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj ]ubj)}(hhh]h)}(hcontext to releaseh]hcontext to release}(hj*]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&]hMhj']ubah}(h]h ]h"]h$]h&]uh1jhj ]ubeh}(h]h ]h"]h$]h&]uh1jhj&]hMhj]ubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hjJ]h]hstruct ib_qp *qp}(hjL]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjD]ubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hjc]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_]hMhj`]ubah}(h]h ]h"]h$]h&]uh1jhjD]ubeh}(h]h ]h"]h$]h&]uh1jhj_]hMhj]ubj)}(hD``u32 port_num`` port num to which the connection is bound (unused) h](j)}(h``u32 port_num``h]j )}(hj]h]h u32 port_num}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj}]ubj)}(hhh]h)}(h2port num to which the connection is bound (unused)h]h2port num to which the connection is bound (unused)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj}]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj]ubj)}(hX``const struct bio_vec *bvecs`` bio_vec array that was used for the READ/WRITE (unused) h](j)}(h``const struct bio_vec *bvecs``h]j )}(hj]h]hconst struct bio_vec *bvecs}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj]ubj)}(hhh]h)}(h7bio_vec array that was used for the READ/WRITE (unused)h]h7bio_vec array that was used for the READ/WRITE (unused)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj]ubj)}(h/``u32 nr_bvec`` number of entries in **bvecs** h](j)}(h``u32 nr_bvec``h]j )}(hj]h]h u32 nr_bvec}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj]ubj)}(hhh]h)}(hnumber of entries in **bvecs**h](hnumber of entries in }(hj^hhhNhNubj)}(h **bvecs**h]hbvecs}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1hhj ^hMhj ^ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj ^hMhj]ubj)}(hd``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READ h](j)}(h``enum dma_data_direction dir``h]j )}(hj<^h]henum dma_data_direction dir}(hj>^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:^ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj6^ubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hjY^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU^ubh for RDMA WRITE, }(hjU^hhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjk^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU^ubh for RDMA READ}(hjU^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQ^hMhjR^ubah}(h]h ]h"]h$]h&]uh1jhj6^ubeh}(h]h ]h"]h$]h&]uh1jhjQ^hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\ubh)}(hReleases all resources allocated by a successful rdma_rw_ctx_init_bvec() call. Must not be called if rdma_rw_ctx_init_bvec() returned an error.h]hReleases all resources allocated by a successful rdma_rw_ctx_init_bvec() call. Must not be called if rdma_rw_ctx_init_bvec() returned an error.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\ubh)}(hmThe **port_num** and **bvecs** parameters are unused but present for API symmetry with rdma_rw_ctx_destroy().h](hThe }(hj^hhhNhNubj)}(h **port_num**h]hport_num}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh and }(hj^hhhNhNubj)}(h **bvecs**h]hbvecs}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubhO parameters are unused but present for API symmetry with rdma_rw_ctx_destroy().}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*rdma_rw_ctx_destroy_signature (C function)c.rdma_rw_ctx_destroy_signaturehNtauh1jhhhhhNhNubj)}(hhh](j)}(hvoid rdma_rw_ctx_destroy_signature (struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, enum dma_data_direction dir)h]j")}(hvoid rdma_rw_ctx_destroy_signature(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj _hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj _hhhj_hM ubj)}(hrdma_rw_ctx_destroy_signatureh]jN)}(hrdma_rw_ctx_destroy_signatureh]hrdma_rw_ctx_destroy_signature}(hj0_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj _hhhj_hM ubj)}(h(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u32 port_num, struct scatterlist *sg, u32 sg_cnt, struct scatterlist *prot_sg, u32 prot_sg_cnt, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j()}(hj+h]hstruct}(hjL_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjH_ubj:)}(h h]h }(hjY_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjH_ubh)}(hhh]jN)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjg_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjl_modnameN classnameNjkjn)}jq]jt)}jgj2_sbc.rdma_rw_ctx_destroy_signatureasbuh1hhjH_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjH_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH_ubjN)}(hctxh]hctx}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjH_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj_modnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhj_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjN)}(hqph]hqp}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hj1`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.`ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj3`modnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhj*`ubj:)}(h h]h }(hjO`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*`ubjN)}(hport_numh]hport_num}(hj]`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hjv`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjr`ubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr`ubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj`modnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhjr`ubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr`ubjN)}(hsgh]hsg}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjr`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(h u32 sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj`modnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhj`ubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubjN)}(hsg_cnth]hsg_cnt}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(hstruct scatterlist *prot_sgh](j()}(hj+h]hstruct}(hj.ahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj*aubj:)}(h h]h }(hj;ahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*aubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjLahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjIaubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjNamodnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhj*aubj:)}(h h]h }(hjjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*aubj)}(hjh]h*}(hjxahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*aubjN)}(hprot_sgh]hprot_sg}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(hu32 prot_sg_cnth](h)}(hhh]jN)}(hu32h]hu32}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjaubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjamodnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhjaubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubjN)}(h prot_sg_cnth]h prot_sg_cnt}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjaubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjbmodnameN classnameNjkjn)}jq]j_c.rdma_rw_ctx_destroy_signatureasbuh1hhjaubj:)}(h h]h }(hj"bhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubjN)}(hdirh]hdir}(hj0bhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD_ubeh}(h]h ]h"]h$]h&]jjuh1jhj _hhhj_hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj_hhhj_hM ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhj_hM hj_hhubj)}(hhh]h)}(h=release all resources allocated by rdma_rw_ctx_signature_inith]h=release all resources allocated by rdma_rw_ctx_signature_init}(hjZbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM hjWbhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjrbjjrbjjjuh1jhhhhhNhNubj)}(hX!**Parameters** ``struct rdma_rw_ctx *ctx`` context to release ``struct ib_qp *qp`` queue pair to operate on ``u32 port_num`` port num to which the connection is bound ``struct scatterlist *sg`` scatterlist that was used for the READ/WRITE ``u32 sg_cnt`` number of entries in **sg** ``struct scatterlist *prot_sg`` scatterlist that was used for the READ/WRITE of the PI ``u32 prot_sg_cnt`` number of entries in **prot_sg** ``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](h)}(h**Parameters**h]j)}(hj|bh]h Parameters}(hj~bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzbubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjvbubj)}(hhh](j)}(h/``struct rdma_rw_ctx *ctx`` context to release h](j)}(h``struct rdma_rw_ctx *ctx``h]j )}(hjbh]hstruct rdma_rw_ctx *ctx}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjbubj)}(hhh]h)}(hcontext to releaseh]hcontext to release}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(h.``struct ib_qp *qp`` queue pair to operate on h](j)}(h``struct ib_qp *qp``h]j )}(hjbh]hstruct ib_qp *qp}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjbubj)}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjbubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hj ch]h u32 port_num}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj cubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjcubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hj&chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"chMhj#cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj"chMhjbubj)}(hH``struct scatterlist *sg`` scatterlist that was used for the READ/WRITE h](j)}(h``struct scatterlist *sg``h]j )}(hjFch]hstruct scatterlist *sg}(hjHchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDcubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj@cubj)}(hhh]h)}(h,scatterlist that was used for the READ/WRITEh]h,scatterlist that was used for the READ/WRITE}(hj_chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[chMhj\cubah}(h]h ]h"]h$]h&]uh1jhj@cubeh}(h]h ]h"]h$]h&]uh1jhj[chMhjbubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j )}(hjch]h u32 sg_cnt}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}cubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjycubj)}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjchhhNhNubj)}(h**sg**h]hsg}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjycubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(hW``struct scatterlist *prot_sg`` scatterlist that was used for the READ/WRITE of the PI h](j)}(h``struct scatterlist *prot_sg``h]j )}(hjch]hstruct scatterlist *prot_sg}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjcubj)}(hhh]h)}(h6scatterlist that was used for the READ/WRITE of the PIh]h6scatterlist that was used for the READ/WRITE of the PI}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubj)}(h5``u32 prot_sg_cnt`` number of entries in **prot_sg** h](j)}(h``u32 prot_sg_cnt``h]j )}(hjch]hu32 prot_sg_cnt}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjcubj)}(hhh]h)}(h number of entries in **prot_sg**h](hnumber of entries in }(hjdhhhNhNubj)}(h **prot_sg**h]hprot_sg}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjbubj)}(hc``enum dma_data_direction dir`` ``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j)}(h``enum dma_data_direction dir``h]j )}(hjFdh]henum dma_data_direction dir}(hjHdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDdubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj@dubj)}(hhh]h)}(hC``DMA_TO_DEVICE`` for RDMA WRITE, ``DMA_FROM_DEVICE`` for RDMA READh](j )}(h``DMA_TO_DEVICE``h]h DMA_TO_DEVICE}(hjcdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_dubh for RDMA WRITE, }(hj_dhhhNhNubj )}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjudhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_dubh for RDMA READ}(hj_dhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj\dubah}(h]h ]h"]h$]h&]uh1jhj@dubeh}(h]h ]h"]h$]h&]uh1jhj[dhMhjbubeh}(h]h ]h"]h$]h&]uh1jhjvbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_rw_mr_factor (C function)c.rdma_rw_mr_factorhNtauh1jhhhhhNhNubj)}(hhh](j)}(h^unsigned int rdma_rw_mr_factor (struct ib_device *device, u32 port_num, unsigned int maxpages)h]j")}(h]unsigned int rdma_rw_mr_factor(struct ib_device *device, u32 port_num, unsigned int maxpages)h](j)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM)ubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdhhhjdhM)ubj)}(hinth]hint}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdhhhjdhM)ubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdhhhjdhM)ubj)}(hrdma_rw_mr_factorh]jN)}(hrdma_rw_mr_factorh]hrdma_rw_mr_factor}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjdhM)ubj)}(h?(struct ib_device *device, u32 port_num, unsigned int maxpages)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjeubj:)}(h h]h }(hj&ehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj7ehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4eubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9emodnameN classnameNjkjn)}jq]jt)}jgjdsbc.rdma_rw_mr_factorasbuh1hhjeubj:)}(h h]h }(hjWehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubj)}(hjh]h*}(hjeehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjN)}(hdeviceh]hdevice}(hjrehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjemodnameN classnameNjkjn)}jq]jSec.rdma_rw_mr_factorasbuh1hhjeubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubjN)}(hport_numh]hport_num}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hunsigned int maxpagesh](j)}(hunsignedh]hunsigned}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubj)}(hinth]hint}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubjN)}(hmaxpagesh]hmaxpages}(hj fhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhjdhhhjdhM)ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjdhhhjdhM)ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhjdhM)hjdhhubj)}(hhh]h)}(h+return number of MRs required for a payloadh]h+return number of MRs required for a payload}(hj5fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM)hj2fhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM)ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjMfjjMfjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` device handling the connection ``u32 port_num`` port num to which the connection is bound ``unsigned int maxpages`` maximum payload pages per rdma_rw_ctx **Description** Returns the number of MRs the device requires to move **maxpayload** bytes. The returned value is used during transport creation to compute max_rdma_ctxts and the size of the transport's Send and Send Completion Queues.h](h)}(h**Parameters**h]j)}(hjWfh]h Parameters}(hjYfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUfubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM-hjQfubj)}(hhh](j)}(h<``struct ib_device *device`` device handling the connection h](j)}(h``struct ib_device *device``h]j )}(hjvfh]hstruct ib_device *device}(hjxfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtfubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM*hjpfubj)}(hhh]h)}(hdevice handling the connectionh]hdevice handling the connection}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM*hjfubah}(h]h ]h"]h$]h&]uh1jhjpfubeh}(h]h ]h"]h$]h&]uh1jhjfhM*hjmfubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j )}(hjfh]h u32 port_num}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM+hjfubj)}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM+hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM+hjmfubj)}(h@``unsigned int maxpages`` maximum payload pages per rdma_rw_ctx h](j)}(h``unsigned int maxpages``h]j )}(hjfh]hunsigned int maxpages}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM,hjfubj)}(hhh]h)}(h%maximum payload pages per rdma_rw_ctxh]h%maximum payload pages per rdma_rw_ctx}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM,hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM,hjmfubeh}(h]h ]h"]h$]h&]uh1jhjQfubh)}(h**Description**h]j)}(hj#gh]h Description}(hj%ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!gubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM.hjQfubh)}(hReturns the number of MRs the device requires to move **maxpayload** bytes. The returned value is used during transport creation to compute max_rdma_ctxts and the size of the transport's Send and Send Completion Queues.h](h6Returns the number of MRs the device requires to move }(hj9ghhhNhNubj)}(h**maxpayload**h]h maxpayload}(hjAghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9gubh bytes. The returned value is used during transport creation to compute max_rdma_ctxts and the size of the transport’s Send and Send Completion Queues.}(hj9ghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM-hjQfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j rdma_rw_max_send_wr (C function)c.rdma_rw_max_send_wrhNtauh1jhhhhhNhNubj)}(hhh](j)}(htunsigned int rdma_rw_max_send_wr (struct ib_device *dev, u32 port_num, unsigned int max_rdma_ctxs, u32 create_flags)h]j")}(hsunsigned int rdma_rw_max_send_wr(struct ib_device *dev, u32 port_num, unsigned int max_rdma_ctxs, u32 create_flags)h](j)}(hunsignedh]hunsigned}(hjzghhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjvghhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMAubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvghhhjghMAubj)}(hinth]hint}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjvghhhjghMAubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvghhhjghMAubj)}(hrdma_rw_max_send_wrh]jN)}(hrdma_rw_max_send_wrh]hrdma_rw_max_send_wr}(hjghhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvghhhjghMAubj)}(hS(struct ib_device *dev, u32 port_num, unsigned int max_rdma_ctxs, u32 create_flags)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hjghhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjgubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjghhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjgmodnameN classnameNjkjn)}jq]jt)}jgjgsbc.rdma_rw_max_send_wrasbuh1hhjgubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjN)}(hdevh]hdev}(hj,hhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjHhhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEhubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjJhmodnameN classnameNjkjn)}jq]j hc.rdma_rw_max_send_wrasbuh1hhjAhubj:)}(h h]h }(hjfhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAhubjN)}(hport_numh]hport_num}(hjthhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjAhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hunsigned int max_rdma_ctxsh](j)}(hunsignedh]hunsigned}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubj)}(hinth]hint}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubjN)}(h max_rdma_ctxsh]h max_rdma_ctxs}(hjhhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hu32 create_flagsh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjhmodnameN classnameNjkjn)}jq]j hc.rdma_rw_max_send_wrasbuh1hhjhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubjN)}(h create_flagsh]h create_flags}(hj ihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjvghhhjghMAubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjrghhhjghMAubah}(h]jmgah ](jjeh"]h$]h&]jj)jhuh1jhjghMAhjoghhubj)}(hhh]h)}(h1compute max Send WRs needed for RDMA R/W contextsh]h1compute max Send WRs needed for RDMA R/W contexts}(hj7ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMAhj4ihhubah}(h]h ]h"]h$]h&]uh1jhjoghhhjghMAubeh}(h]h ](jefunctioneh"]h$]h&]jjejjOijjOijjjuh1jhhhhhNhNubj)}(hX(**Parameters** ``struct ib_device *dev`` RDMA device ``u32 port_num`` port number ``unsigned int max_rdma_ctxs`` number of rdma_rw_ctx structures ``u32 create_flags`` QP create flags (pass IB_QP_CREATE_INTEGRITY_EN if data integrity will be enabled on the QP) **Description** Returns the total number of Send Queue entries needed for **max_rdma_ctxs**. The result accounts for memory registration and invalidation work requests when the device requires them. ULPs use this to size Send Queues and Send CQs before creating a Queue Pair.h](h)}(h**Parameters**h]j)}(hjYih]h Parameters}(hj[ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWiubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMEhjSiubj)}(hhh](j)}(h&``struct ib_device *dev`` RDMA device h](j)}(h``struct ib_device *dev``h]j )}(hjxih]hstruct ib_device *dev}(hjzihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjviubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMBhjriubj)}(hhh]h)}(h RDMA deviceh]h RDMA device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMBhjiubah}(h]h ]h"]h$]h&]uh1jhjriubeh}(h]h ]h"]h$]h&]uh1jhjihMBhjoiubj)}(h``u32 port_num`` port number h](j)}(h``u32 port_num``h]j )}(hjih]h u32 port_num}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMChjiubj)}(hhh]h)}(h port numberh]h port number}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMChjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMChjoiubj)}(h@``unsigned int max_rdma_ctxs`` number of rdma_rw_ctx structures h](j)}(h``unsigned int max_rdma_ctxs``h]j )}(hjih]hunsigned int max_rdma_ctxs}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMDhjiubj)}(hhh]h)}(h number of rdma_rw_ctx structuresh]h number of rdma_rw_ctx structures}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMDhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMDhjoiubj)}(hr``u32 create_flags`` QP create flags (pass IB_QP_CREATE_INTEGRITY_EN if data integrity will be enabled on the QP) h](j)}(h``u32 create_flags``h]j )}(hj#jh]hu32 create_flags}(hj%jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!jubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMFhjjubj)}(hhh]h)}(h\QP create flags (pass IB_QP_CREATE_INTEGRITY_EN if data integrity will be enabled on the QP)h]h\QP create flags (pass IB_QP_CREATE_INTEGRITY_EN if data integrity will be enabled on the QP)}(hjnubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj:nubj)}(hhh]h)}(h5Pointer to rdma device whose capability to be checkedh]h5Pointer to rdma device whose capability to be checked}(hjYnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUnhKhjVnubah}(h]h ]h"]h$]h&]uh1jhj:nubeh}(h]h ]h"]h$]h&]uh1jhjUnhKhj7nubah}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j)}(hj{nh]h Description}(hj}nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjynubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhjnubh)}(hReturns true if a rdma device's owning user namespace has CAP_NET_RAW capability, otherwise false. When rdma subsystem is in legacy shared network, namespace mode, the default net namespace is considered.h]hReturns true if a rdma device’s owning user namespace has CAP_NET_RAW capability, otherwise false. When rdma subsystem is in legacy shared network, namespace mode, the default net namespace is considered.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_device_put (C function)c.ib_device_puthNtauh1jhhhhhNhNubj)}(hhh](j)}(h-void ib_device_put (struct ib_device *device)h]j")}(h,void ib_device_put(struct ib_device *device)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMUubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnhhhjnhMUubj)}(h ib_device_puth]jN)}(h ib_device_puth]h ib_device_put}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjnhMUubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjnubj:)}(h h]h }(hj ohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjohhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjomodnameN classnameNjkjn)}jq]jt)}jgjnsbc.ib_device_putasbuh1hhjnubj:)}(h h]h }(hj;ohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubj)}(hjh]h*}(hjIohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjN)}(hdeviceh]hdevice}(hjVohhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubah}(h]h ]h"]h$]h&]jjuh1jhjnhhhjnhMUubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjnhhhjnhMUubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjnhMUhjnhhubj)}(hhh]h)}(hRelease IB device referenceh]hRelease IB device reference}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMUhj}ohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMUubeh}(h]h ](jefunctioneh"]h$]h&]jjejjojjojjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` device whose reference to be released **Description** ib_device_put() releases reference to the IB device to allow it to be unregistered and eventually free.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMYhjoubj)}(hhh]j)}(hC``struct ib_device *device`` device whose reference to be released h](j)}(h``struct ib_device *device``h]j )}(hjoh]hstruct ib_device *device}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMVhjoubj)}(hhh]h)}(h%device whose reference to be releasedh]h%device whose reference to be released}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMVhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMVhjoubah}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMXhjoubh)}(hgib_device_put() releases reference to the IB device to allow it to be unregistered and eventually free.h]hgib_device_put() releases reference to the IB device to allow it to be unregistered and eventually free.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMWhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j_ib_alloc_device (C function)c._ib_alloc_devicehNtauh1jhhhhhNhNubj)}(hhh](j)}(hBstruct ib_device * _ib_alloc_device (size_t size, struct net *net)h]j")}(h@struct ib_device *_ib_alloc_device(size_t size, struct net *net)h](j()}(hj+h]hstruct}(hjAphhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj=phhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0ubj:)}(h h]h }(hjOphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=phhhjNphM0ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj`phhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj]pubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjbpmodnameN classnameNjkjn)}jq]jt)}jg_ib_alloc_devicesbc._ib_alloc_deviceasbuh1hhj=phhhjNphM0ubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=phhhjNphM0ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=phhhjNphM0ubj)}(h_ib_alloc_deviceh]jN)}(hj~ph]h_ib_alloc_device}(hjphhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=phhhjNphM0ubj)}(h(size_t size, struct net *net)h](j)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hjphhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjpmodnameN classnameNjkjn)}jq]j|pc._ib_alloc_deviceasbuh1hhjpubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubjN)}(hsizeh]hsize}(hjphhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(hstruct net *neth](j()}(hj+h]hstruct}(hjqhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjpubj:)}(h h]h }(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubh)}(hhh]jN)}(hneth]hnet}(hj!qhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjqubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj#qmodnameN classnameNjkjn)}jq]j|pc._ib_alloc_deviceasbuh1hhjpubj:)}(h h]h }(hj?qhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubj)}(hjh]h*}(hjMqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubjN)}(hneth]hnet}(hjZqhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhj=phhhjNphM0ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj9phhhjNphM0ubah}(h]j4pah ](jjeh"]h$]h&]jj)jhuh1jhjNphM0hj6phhubj)}(hhh]h)}(hallocate an IB device structh]hallocate an IB device struct}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0hjqhhubah}(h]h ]h"]h$]h&]uh1jhj6phhhjNphM0ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjqjjqjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``size_t size`` size of structure to allocate ``struct net *net`` network namespace device should be located in, namespace must stay valid until ib_register_device() is completed. **Description** Low-level drivers should use ib_alloc_device() to allocate :c:type:`struct ib_device `. **size** is the size of the structure to be allocated, including any private data used by the low-level driver. ib_dealloc_device() must be used to free structures allocated with ib_alloc_device().h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM4hjqubj)}(hhh](j)}(h.``size_t size`` size of structure to allocate h](j)}(h``size_t size``h]j )}(hjqh]h size_t size}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM1hjqubj)}(hhh]h)}(hsize of structure to allocateh]hsize of structure to allocate}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM1hjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhM1hjqubj)}(h``struct net *net`` network namespace device should be located in, namespace must stay valid until ib_register_device() is completed. h](j)}(h``struct net *net``h]j )}(hjqh]hstruct net *net}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM3hjqubj)}(hhh]h)}(hqnetwork namespace device should be located in, namespace must stay valid until ib_register_device() is completed.h]hqnetwork namespace device should be located in, namespace must stay valid until ib_register_device() is completed.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM2hjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhM3hjqubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hj:rh]h Description}(hj`. **size** is the size of the structure to be allocated, including any private data used by the low-level driver. ib_dealloc_device() must be used to free structures allocated with ib_alloc_device().h](h;Low-level drivers should use ib_alloc_device() to allocate }(hjPrhhhNhNubh)}(h&:c:type:`struct ib_device `h]j )}(hjZrh]hstruct ib_device}(hj\rhhhNhNubah}(h]h ](xrefjec-typeeh"]h$]h&]uh1jhjXrubah}(h]h ]h"]h$]h&]refdocdriver-api/infiniband refdomainjereftypetype refexplicitrefwarnjkjn)}jq]sb reftarget ib_deviceuh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM4hjPrubh. }(hjPrhhhNhNubj)}(h**size**h]hsize}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPrubh is the size of the structure to be allocated, including any private data used by the low-level driver. ib_dealloc_device() must be used to free structures allocated with ib_alloc_device().}(hjPrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}rhM4hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_dealloc_device (C function)c.ib_dealloc_devicehNtauh1jhhhhhNhNubj)}(hhh](j)}(h1void ib_dealloc_device (struct ib_device *device)h]j")}(h0void ib_dealloc_device(struct ib_device *device)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjrhMubj)}(hib_dealloc_deviceh]jN)}(hib_dealloc_deviceh]hib_dealloc_device}(hjrhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjrhMubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjrhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjrubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjsubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjsmodnameN classnameNjkjn)}jq]jt)}jgjrsbc.ib_dealloc_deviceasbuh1hhjrubj:)}(h h]h }(hj5shhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubj)}(hjh]h*}(hjCshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjN)}(hdeviceh]hdevice}(hjPshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjrhhhjrhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjrhhubj)}(hhh]h)}(hfree an IB device structh]hfree an IB device struct}(hjzshhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjwshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjsjjsjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` structure to free **Description** Free a structure allocated with ib_alloc_device().h](h)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjsubj)}(hhh]j)}(h/``struct ib_device *device`` structure to free h](j)}(h``struct ib_device *device``h]j )}(hjsh]hstruct ib_device *device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjsubj)}(hhh]h)}(hstructure to freeh]hstructure to free}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjsubh)}(h2Free a structure allocated with ib_alloc_device().h]h2Free a structure allocated with ib_alloc_device().}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ib_port_immutable_read (C function)c.ib_port_immutable_readhNtauh1jhhhhhNhNubj)}(hhh](j)}(haconst struct ib_port_immutable* ib_port_immutable_read (struct ib_device *dev, unsigned int port)h]j")}(h`const struct ib_port_immutable *ib_port_immutable_read(struct ib_device *dev, unsigned int port)h](j()}(hjh]hconst}(hj;thhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7thhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMfubj:)}(h h]h }(hjIthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7thhhjHthMfubj()}(hj+h]hstruct}(hjWthhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7thhhjHthMfubj:)}(h h]h }(hjdthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7thhhjHthMfubh)}(hhh]jN)}(hib_port_immutableh]hib_port_immutable}(hjuthhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjrtubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjwtmodnameN classnameNjkjn)}jq]jt)}jgib_port_immutable_readsbc.ib_port_immutable_readasbuh1hhj7thhhjHthMfubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7thhhjHthMfubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7thhhjHthMfubj)}(hib_port_immutable_readh]jN)}(hjth]hib_port_immutable_read}(hjthhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7thhhjHthMfubj)}(h*(struct ib_device *dev, unsigned int port)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hjthhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjtubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjthhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjtmodnameN classnameNjkjn)}jq]jtc.ib_port_immutable_readasbuh1hhjtubj:)}(h h]h }(hj uhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjN)}(hdevh]hdev}(hj'uhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(hunsigned int porth](j)}(hunsignedh]hunsigned}(hj@uhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hM/ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj{hhhj{hM/ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhj{hM/hjzhhubj)}(hhh]h)}(h)Unregister a device while holding a 'get'h]h-Unregister a device while holding a ‘get’}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM/hj{hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhj{hM/ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj{jj{jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *ib_dev`` The device to unregister **Description** This is the same as ib_unregister_device(), except it includes an internal ib_device_put() that should match a 'get' obtained by the caller. It is safe to call this routine concurrently from multiple threads while holding the 'get'. When the function returns the device is fully unregistered. Drivers using this flow MUST use the driver_unregister callback to clean up their resources associated with the device and dealloc it.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM3hj{ubj)}(hhh]j)}(h6``struct ib_device *ib_dev`` The device to unregister h](j)}(h``struct ib_device *ib_dev``h]j )}(hj |h]hstruct ib_device *ib_dev}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0hj|ubj)}(hhh]h)}(hThe device to unregisterh]hThe device to unregister}(hj#|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hM0hj |ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hM0hj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j)}(hjE|h]h Description}(hjG|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC|ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM2hj{ubh)}(hThis is the same as ib_unregister_device(), except it includes an internal ib_device_put() that should match a 'get' obtained by the caller.h]hThis is the same as ib_unregister_device(), except it includes an internal ib_device_put() that should match a ‘get’ obtained by the caller.}(hj[|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM1hj{ubh)}(hIt is safe to call this routine concurrently from multiple threads while holding the 'get'. When the function returns the device is fully unregistered.h]hIt is safe to call this routine concurrently from multiple threads while holding the ‘get’. When the function returns the device is fully unregistered.}(hjj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM4hj{ubh)}(hDrivers using this flow MUST use the driver_unregister callback to clean up their resources associated with the device and dealloc it.h]hDrivers using this flow MUST use the driver_unregister callback to clean up their resources associated with the device and dealloc it.}(hjy|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM8hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_unregister_driver (C function)c.ib_unregister_driverhNtauh1jhhhhhNhNubj)}(hhh](j)}(h9void ib_unregister_driver (enum rdma_driver_id driver_id)h]j")}(h8void ib_unregister_driver(enum rdma_driver_id driver_id)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMGubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|hhhj|hMGubj)}(hib_unregister_driverh]jN)}(hib_unregister_driverh]hib_unregister_driver}(hj|hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhj|hMGubj)}(h(enum rdma_driver_id driver_id)h]j)}(henum rdma_driver_id driver_idh](j()}(hj%h]henum}(hj|hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj|ubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubh)}(hhh]jN)}(hrdma_driver_idh]hrdma_driver_id}(hj}hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj}ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj}modnameN classnameNjkjn)}jq]jt)}jgj|sbc.ib_unregister_driverasbuh1hhj|ubj:)}(h h]h }(hj#}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubjN)}(h driver_idh]h driver_id}(hj1}hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubah}(h]h ]h"]h$]h&]jjuh1jhj|hhhj|hMGubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj|hhhj|hMGubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jhj|hMGhj|hhubj)}(hhh]h)}(h&Unregister all IB devices for a driverh]h&Unregister all IB devices for a driver}(hj[}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMGhjX}hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj|hMGubeh}(h]h ](jefunctioneh"]h$]h&]jjejjs}jjs}jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``enum rdma_driver_id driver_id`` The driver to unregister **Description** This implements a fence for device unregistration. It only returns once all devices associated with the driver_id have fully completed their unregistration and returned from ib_unregister_device*(). If device's are not yet unregistered it goes ahead and starts unregistering them. This does not block creation of new devices with the given driver_id, that is the responsibility of the caller.h](h)}(h**Parameters**h]j)}(hj}}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{}ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMKhjw}ubj)}(hhh]j)}(h;``enum rdma_driver_id driver_id`` The driver to unregister h](j)}(h!``enum rdma_driver_id driver_id``h]j )}(hj}h]henum rdma_driver_id driver_id}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMHhj}ubj)}(hhh]h)}(hThe driver to unregisterh]hThe driver to unregister}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMHhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMHhj}ubah}(h]h ]h"]h$]h&]uh1jhjw}ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMJhjw}ubh)}(hThis implements a fence for device unregistration. It only returns once all devices associated with the driver_id have fully completed their unregistration and returned from ib_unregister_device*().h]hThis implements a fence for device unregistration. It only returns once all devices associated with the driver_id have fully completed their unregistration and returned from ib_unregister_device*().}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMIhjw}ubh)}(hQIf device's are not yet unregistered it goes ahead and starts unregistering them.h]hSIf device’s are not yet unregistered it goes ahead and starts unregistering them.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMMhjw}ubh)}(hoThis does not block creation of new devices with the given driver_id, that is the responsibility of the caller.h]hoThis does not block creation of new devices with the given driver_id, that is the responsibility of the caller.}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMPhjw}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ib_unregister_device_queued (C function)c.ib_unregister_device_queuedhNtauh1jhhhhhNhNubj)}(hhh](j)}(h;void ib_unregister_device_queued (struct ib_device *ib_dev)h]j")}(h:void ib_unregister_device_queued(struct ib_device *ib_dev)h](j)}(hvoidh]hvoid}(hj:~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6~hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMuubj:)}(h h]h }(hjI~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6~hhhjH~hMuubj)}(hib_unregister_device_queuedh]jN)}(hib_unregister_device_queuedh]hib_unregister_device_queued}(hj[~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjW~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6~hhhjH~hMuubj)}(h(struct ib_device *ib_dev)h]j)}(hstruct ib_device *ib_devh](j()}(hj+h]hstruct}(hjw~hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjs~ubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjs~ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj~modnameN classnameNjkjn)}jq]jt)}jgj]~sbc.ib_unregister_device_queuedasbuh1hhjs~ubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjs~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs~ubjN)}(hib_devh]hib_dev}(hj~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjs~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjo~ubah}(h]h ]h"]h$]h&]jjuh1jhj6~hhhjH~hMuubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj2~hhhjH~hMuubah}(h]j-~ah ](jjeh"]h$]h&]jj)jhuh1jhjH~hMuhj/~hhubj)}(hhh]h)}(h&Unregister a device using a work queueh]h&Unregister a device using a work queue}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMuhj~hhubah}(h]h ]h"]h$]h&]uh1jhj/~hhhjH~hMuubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *ib_dev`` The device to unregister **Description** This schedules an asynchronous unregistration using a WQ for the device. A driver should use this to avoid holding locks while doing unregistration, such as holding the RTNL lock. Drivers using this API must use ib_unregister_driver before module unload to ensure that all scheduled unregistrations have completed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMyhjubj)}(hhh]j)}(h6``struct ib_device *ib_dev`` The device to unregister h](j)}(h``struct ib_device *ib_dev``h]j )}(hj;h]hstruct ib_device *ib_dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMvhj5ubj)}(hhh]h)}(hThe device to unregisterh]hThe device to unregister}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMvhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMvhj2ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMxhjubh)}(hThis schedules an asynchronous unregistration using a WQ for the device. A driver should use this to avoid holding locks while doing unregistration, such as holding the RTNL lock.h]hThis schedules an asynchronous unregistration using a WQ for the device. A driver should use this to avoid holding locks while doing unregistration, such as holding the RTNL lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMwhjubh)}(hDrivers using this API must use ib_unregister_driver before module unload to ensure that all scheduled unregistrations have completed.h]hDrivers using this API must use ib_unregister_driver before module unload to ensure that all scheduled unregistrations have completed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_register_client (C function)c.ib_register_clienthNtauh1jhhhhhNhNubj)}(hhh](j)}(h1int ib_register_client (struct ib_client *client)h]j")}(h0int ib_register_client(struct ib_client *client)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hib_register_clienth]jN)}(hib_register_clienth]hib_register_client}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ib_client *client)h]j)}(hstruct ib_client *clienth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_clienth]h ib_client}(hj%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_register_clientasbuh1hhjubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hclienth]hclient}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hRegister an IB clienth]hRegister an IB client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hXG**Parameters** ``struct ib_client *client`` Client to register **Description** Upper level users of the IB drivers can use ib_register_client() to register callbacks for IB device addition and removal. When an IB device is added, each registered client's add method will be called (in the order the clients were registered), and when a device is removed, each client's remove method will be called (in the reverse order that clients were registered). In addition, when ib_register_client() is called, the client will receive an add callback for all devices already registered.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM"hjubj)}(hhh]j)}(h0``struct ib_client *client`` Client to register h](j)}(h``struct ib_client *client``h]j )}(hjˀh]hstruct ib_client *client}(hj̀hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɀubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjŀubj)}(hhh]h)}(hClient to registerh]hClient to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjŀubeh}(h]h ]h"]h$]h&]uh1jhjhMhj€ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM!hjubh)}(hXUpper level users of the IB drivers can use ib_register_client() to register callbacks for IB device addition and removal. When an IB device is added, each registered client's add method will be called (in the order the clients were registered), and when a device is removed, each client's remove method will be called (in the reverse order that clients were registered). In addition, when ib_register_client() is called, the client will receive an add callback for all devices already registered.h]hXUpper level users of the IB drivers can use ib_register_client() to register callbacks for IB device addition and removal. When an IB device is added, each registered client’s add method will be called (in the order the clients were registered), and when a device is removed, each client’s remove method will be called (in the reverse order that clients were registered). In addition, when ib_register_client() is called, the client will receive an add callback for all devices already registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_unregister_client (C function)c.ib_unregister_clienthNtauh1jhhhhhNhNubj)}(hhh](j)}(h4void ib_unregister_client (struct ib_client *client)h]j")}(h3void ib_unregister_client(struct ib_client *client)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMOubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGhhhjYhMOubj)}(hib_unregister_clienth]jN)}(hib_unregister_clienth]hib_unregister_client}(hjlhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjYhMOubj)}(h(struct ib_client *client)h]j)}(hstruct ib_client *clienth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_clienth]h ib_client}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjnsbc.ib_unregister_clientasbuh1hhjubj:)}(h h]h }(hjƁhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjԁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hclienth]hclient}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjGhhhjYhMOubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjChhhjYhMOubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhjYhMOhj@hhubj)}(hhh]h)}(hUnregister an IB clienth]hUnregister an IB client}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMOubeh}(h]h ](jefunctioneh"]h$]h&]jjejj#jj#jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_client *client`` Client to unregister **Description** Upper level users use ib_unregister_client() to remove their client registration. When ib_unregister_client() is called, the client will receive a remove callback for each IB device still registered. This is a full fence, once it returns no client callbacks will be called, or are running in another thread.h](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMShj'ubj)}(hhh]j)}(h2``struct ib_client *client`` Client to unregister h](j)}(h``struct ib_client *client``h]j )}(hjLh]hstruct ib_client *client}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMPhjFubj)}(hhh]h)}(hClient to unregisterh]hClient to unregister}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMPhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMPhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMRhj'ubh)}(hUpper level users use ib_unregister_client() to remove their client registration. When ib_unregister_client() is called, the client will receive a remove callback for each IB device still registered.h]hUpper level users use ib_unregister_client() to remove their client registration. When ib_unregister_client() is called, the client will receive a remove callback for each IB device still registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMQhj'ubh)}(hkThis is a full fence, once it returns no client callbacks will be called, or are running in another thread.h]hkThis is a full fence, once it returns no client callbacks will be called, or are running in another thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMUhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_set_client_data (C function)c.ib_set_client_datahNtauh1jhhhhhNhNubj)}(hhh](j)}(hXvoid ib_set_client_data (struct ib_device *device, struct ib_client *client, void *data)h]j")}(hWvoid ib_set_client_data(struct ib_device *device, struct ib_client *client, void *data)h](j)}(hvoidh]hvoid}(hjۂhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjׂhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjׂhhhjhMubj)}(hib_set_client_datah]jN)}(hib_set_client_datah]hib_set_client_data}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjׂhhhjhMubj)}(h@(struct ib_device *device, struct ib_client *client, void *data)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj3ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_set_client_dataasbuh1hhjubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjqhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_client *clienth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_clienth]h ib_client}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jRc.ib_set_client_dataasbuh1hhjubj:)}(h h]h }(hjƃhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjԃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hclienth]hclient}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdatah]hdata}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjׂhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjӂhhhjhMubah}(h]j΂ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjЂhhubj)}(hhh]h)}(hSet IB client contexth]hSet IB client context}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjЂhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjejjejjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` Device to set context for ``struct ib_client *client`` Client to set context for ``void *data`` Context to set **Description** ib_set_client_data() sets client context data that can be retrieved with ib_get_client_data(). This can only be called while the client is registered to the device, once the ib_client remove() callback returns this cannot be called.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjiubj)}(hhh](j)}(h7``struct ib_device *device`` Device to set context for h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjubj)}(hhh]h)}(hDevice to set context forh]hDevice to set context for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``struct ib_client *client`` Client to set context for h](j)}(h``struct ib_client *client``h]j )}(hjDŽh]hstruct ib_client *client}(hjɄhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjńubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjubj)}(hhh]h)}(hClient to set context forh]hClient to set context for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj܄hMhj݄ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj܄hMhjubj)}(h``void *data`` Context to set h](j)}(h``void *data``h]j )}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjubj)}(hhh]h)}(hContext to seth]hContext to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjiubh)}(hib_set_client_data() sets client context data that can be retrieved with ib_get_client_data(). This can only be called while the client is registered to the device, once the ib_client remove() callback returns this cannot be called.h]hib_set_client_data() sets client context data that can be retrieved with ib_get_client_data(). This can only be called while the client is registered to the device, once the ib_client remove() callback returns this cannot be called.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ib_register_event_handler (C function)c.ib_register_event_handlerhNtauh1jhhhhhNhNubj)}(hhh](j)}(hGvoid ib_register_event_handler (struct ib_event_handler *event_handler)h]j")}(hFvoid ib_register_event_handler(struct ib_event_handler *event_handler)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|hhhjhMubj)}(hib_register_event_handlerh]jN)}(hib_register_event_handlerh]hib_register_event_handler}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMubj)}(h((struct ib_event_handler *event_handler)h]j)}(h&struct ib_event_handler *event_handlerh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjʅhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_event_handlerh]hib_event_handler}(hjۅhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj؅ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj݅modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_register_event_handlerasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h event_handlerh]h event_handler}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjuhhubj)}(hhh]h)}(hRegister an IB event handlerh]hRegister an IB event handler}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjXjjXjjjuh1jhhhhhNhNubj)}(hXH**Parameters** ``struct ib_event_handler *event_handler`` Handler to register **Description** ib_register_event_handler() registers an event handler that will be called back when asynchronous IB events occur (as defined in chapter 11 of the InfiniBand Architecture Specification). This callback occurs in workqueue context.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj\ubj)}(hhh]j)}(h?``struct ib_event_handler *event_handler`` Handler to register h](j)}(h*``struct ib_event_handler *event_handler``h]j )}(hjh]h&struct ib_event_handler *event_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj{ubj)}(hhh]h)}(hHandler to registerh]hHandler to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj\ubh)}(hib_register_event_handler() registers an event handler that will be called back when asynchronous IB events occur (as defined in chapter 11 of the InfiniBand Architecture Specification). This callback occurs in workqueue context.h]hib_register_event_handler() registers an event handler that will be called back when asynchronous IB events occur (as defined in chapter 11 of the InfiniBand Architecture Specification). This callback occurs in workqueue context.}(hj҆hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ib_unregister_event_handler (C function)c.ib_unregister_event_handlerhNtauh1jhhhhhNhNubj)}(hhh](j)}(hIvoid ib_unregister_event_handler (struct ib_event_handler *event_handler)h]j")}(hHvoid ib_unregister_event_handler(struct ib_event_handler *event_handler)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hib_unregister_event_handlerh]jN)}(hib_unregister_event_handlerh]hib_unregister_event_handler}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h((struct ib_event_handler *event_handler)h]j)}(h&struct ib_event_handler *event_handlerh](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj:ubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubh)}(hhh]jN)}(hib_event_handlerh]hib_event_handler}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjYubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj^modnameN classnameNjkjn)}jq]jt)}jgj$sbc.ib_unregister_event_handlerasbuh1hhj:ubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjN)}(h event_handlerh]h event_handler}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hUnregister an event handlerh]hUnregister an event handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjهjjهjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_event_handler *event_handler`` Handler to unregister **Description** Unregister an event handler registered with ib_register_event_handler().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj݇ubj)}(hhh]j)}(hA``struct ib_event_handler *event_handler`` Handler to unregister h](j)}(h*``struct ib_event_handler *event_handler``h]j )}(hjh]h&struct ib_event_handler *event_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hHandler to unregisterh]hHandler to unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj݇ubh)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj݇ubh)}(hHUnregister an event handler registered with ib_register_event_handler().h]hHUnregister an event handler registered with ib_register_event_handler().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj݇ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_query_port (C function)c.ib_query_porthNtauh1jhhhhhNhNubj)}(hhh](j)}(hZint ib_query_port (struct ib_device *device, u32 port_num, struct ib_port_attr *port_attr)h]j")}(hYint ib_query_port(struct ib_device *device, u32 port_num, struct ib_port_attr *port_attr)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM_ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~hhhjhM_ubj)}(h ib_query_porth]jN)}(h ib_query_porth]h ib_query_port}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhM_ubj)}(hH(struct ib_device *device, u32 port_num, struct ib_port_attr *port_attr)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj̈hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj݈hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjڈubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj߈modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_query_portasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj6modnameN classnameNjkjn)}jq]jc.ib_query_portasbuh1hhj-ubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubjN)}(hport_numh]hport_num}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_port_attr *port_attrh](j()}(hj+h]hstruct}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjuubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubh)}(hhh]jN)}(h ib_port_attrh]h ib_port_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_query_portasbuh1hhjuubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubj)}(hjh]h*}(hjÉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjN)}(h port_attrh]h port_attr}(hjЉhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhM_ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjzhhhjhM_ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhM_hjwhhubj)}(hhh]h)}(hQuery IB port attributesh]hQuery IB port attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM_hjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhM_ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` Device to query ``u32 port_num`` Port number to query ``struct ib_port_attr *port_attr`` Port attributes **Description** ib_query_port() returns the attributes of a port through the **port_attr** pointer.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMchjubj)}(hhh](j)}(h-``struct ib_device *device`` Device to query h](j)}(h``struct ib_device *device``h]j )}(hj;h]hstruct ib_device *device}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM`hj5ubj)}(hhh]h)}(hDevice to queryh]hDevice to query}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM`hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM`hj2ubj)}(h&``u32 port_num`` Port number to query h](j)}(h``u32 port_num``h]j )}(hjth]h u32 port_num}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMahjnubj)}(hhh]h)}(hPort number to queryh]hPort number to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMahj2ubj)}(h3``struct ib_port_attr *port_attr`` Port attributes h](j)}(h"``struct ib_port_attr *port_attr``h]j )}(hjh]hstruct ib_port_attr *port_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMbhjubj)}(hhh]h)}(hPort attributesh]hPort attributes}(hjƊhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjŠhMbhjÊubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŠhMbhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMdhjubh)}(hSib_query_port() returns the attributes of a port through the **port_attr** pointer.h](h=ib_query_port() returns the attributes of a port through the }(hjhhhNhNubj)}(h **port_attr**h]h port_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_device_set_netdev (C function)c.ib_device_set_netdevhNtauh1jhhhhhNhNubj)}(hhh](j)}(hVint ib_device_set_netdev (struct ib_device *ib_dev, struct net_device *ndev, u32 port)h]j")}(hUint ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev, u32 port)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;hhhjMhMubj)}(hib_device_set_netdevh]jN)}(hib_device_set_netdevh]hib_device_set_netdev}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhjMhMubj)}(h=(struct ib_device *ib_dev, struct net_device *ndev, u32 port)h](j)}(hstruct ib_device *ib_devh](j()}(hj+h]hstruct}(hj|hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjxubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjbsbc.ib_device_set_netdevasbuh1hhjxubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubj)}(hjh]h*}(hjȋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjN)}(hib_devh]hib_dev}(hjՋhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(hstruct net_device *ndevh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_device_set_netdevasbuh1hhjubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hndevh]hndev}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(hu32 porth](h)}(hhh]jN)}(hu32h]hu32}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjcmodnameN classnameNjkjn)}jq]jc.ib_device_set_netdevasbuh1hhjZubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubjN)}(hporth]hport}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubeh}(h]h ]h"]h$]h&]jjuh1jhj;hhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj7hhhjMhMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1jhjMhMhj4hhubj)}(hhh]h)}(h2Associate the ib_dev with an underlying net_deviceh]h2Associate the ib_dev with an underlying net_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjόjjόjjjuh1jhhhhhNhNubj)}(hXS**Parameters** ``struct ib_device *ib_dev`` Device to modify ``struct net_device *ndev`` net_device to affiliate, may be NULL ``u32 port`` IB port the net_device is connected to **Description** Drivers should use this to link the ib_device to a netdev so the netdev shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be affiliated with any port. The caller must ensure that the given ndev is not unregistered or unregistering, and that either the ib_device is unregistered or ib_device_set_netdev() is called with NULL when the ndev sends a NETDEV_UNREGISTER event.h](h)}(h**Parameters**h]j)}(hjٌh]h Parameters}(hjیhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׌ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjӌubj)}(hhh](j)}(h.``struct ib_device *ib_dev`` Device to modify h](j)}(h``struct ib_device *ib_dev``h]j )}(hjh]hstruct ib_device *ib_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjubj)}(hhh]h)}(hDevice to modifyh]hDevice to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hA``struct net_device *ndev`` net_device to affiliate, may be NULL h](j)}(h``struct net_device *ndev``h]j )}(hj1h]hstruct net_device *ndev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj+ubj)}(hhh]h)}(h$net_device to affiliate, may be NULLh]h$net_device to affiliate, may be NULL}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubj)}(h4``u32 port`` IB port the net_device is connected to h](j)}(h ``u32 port``h]j )}(hjjh]hu32 port}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjdubj)}(hhh]h)}(h&IB port the net_device is connected toh]h&IB port the net_device is connected to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjӌubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjӌubh)}(hDrivers should use this to link the ib_device to a netdev so the netdev shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be affiliated with any port.h]hDrivers should use this to link the ib_device to a netdev so the netdev shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be affiliated with any port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjӌubh)}(hThe caller must ensure that the given ndev is not unregistered or unregistering, and that either the ib_device is unregistered or ib_device_set_netdev() is called with NULL when the ndev sends a NETDEV_UNREGISTER event.h]hThe caller must ensure that the given ndev is not unregistered or unregistering, and that either the ib_device is unregistered or ib_device_set_netdev() is called with NULL when the ndev sends a NETDEV_UNREGISTER event.}(hjʍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjӌubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_query_netdev_port (C function)c.ib_query_netdev_porthNtauh1jhhhhhNhNubj)}(hhh](j)}(hVint ib_query_netdev_port (struct ib_device *ibdev, struct net_device *ndev, u32 *port)h]j")}(hUint ib_query_netdev_port(struct ib_device *ibdev, struct net_device *ndev, u32 *port)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hib_query_netdev_porth]jN)}(hib_query_netdev_porth]hib_query_netdev_port}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h=(struct ib_device *ibdev, struct net_device *ndev, u32 *port)h](j)}(hstruct ib_device *ibdevh](j()}(hj+h]hstruct}(hj6hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2ubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjVmodnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_query_netdev_portasbuh1hhj2ubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjN)}(hibdevh]hibdev}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hstruct net_device *ndevh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h net_deviceh]h net_device}(hjƎhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjÎubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjȎmodnameN classnameNjkjn)}jq]jpc.ib_query_netdev_portasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hndevh]hndev}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h u32 *porth](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jpc.ib_query_netdev_portasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hporth]hport}(hjThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h>Query the port number of a net_device associated with an ibdevh]h>Query the port number of a net_device associated with an ibdev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *ibdev`` IB device ``struct net_device *ndev`` Network device ``u32 *port`` IB port the net_device is connected toh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh](j)}(h&``struct ib_device *ibdev`` IB device h](j)}(h``struct ib_device *ibdev``h]j )}(hjh]hstruct ib_device *ibdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(h IB deviceh]h IB device}(hj؏hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԏhM hjՏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԏhM hjubj)}(h+``struct net_device *ndev`` Network device h](j)}(h``struct net_device *ndev``h]j )}(hjh]hstruct net_device *ndev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hNetwork deviceh]hNetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h4``u32 *port`` IB port the net_device is connected toh](j)}(h ``u32 *port``h]j )}(hj1h]h u32 *port}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj+ubj)}(hhh]h)}(h&IB port the net_device is connected toh]h&IB port the net_device is connected to}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ib_device_get_by_netdev (C function)c.ib_device_get_by_netdevhNtauh1jhhhhhNhNubj)}(hhh](j)}(hcstruct ib_device * ib_device_get_by_netdev (struct net_device *ndev, enum rdma_driver_id driver_id)h]j")}(hastruct ib_device *ib_device_get_by_netdev(struct net_device *ndev, enum rdma_driver_id driver_id)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM' ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM' ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_device_get_by_netdevsbc.ib_device_get_by_netdevasbuh1hhjhhhjhM' ubj:)}(h h]h }(hjːhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM' ubj)}(hjh]h*}(hjِhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM' ubj)}(hib_device_get_by_netdevh]jN)}(hjȐh]hib_device_get_by_netdev}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM' ubj)}(h8(struct net_device *ndev, enum rdma_driver_id driver_id)h](j)}(hstruct net_device *ndevh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h net_deviceh]h net_device}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj%modnameN classnameNjkjn)}jq]jƐc.ib_device_get_by_netdevasbuh1hhjubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hndevh]hndev}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum rdma_driver_id driver_idh](j()}(hj%h]henum}(hjuhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubh)}(hhh]jN)}(hrdma_driver_idh]hrdma_driver_id}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jƐc.ib_device_get_by_netdevasbuh1hhjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubjN)}(h driver_idh]h driver_id}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM' ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM' ubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhjhM' hjhhubj)}(hhh]h)}(h*Find an IB device associated with a netdevh]h*Find an IB device associated with a netdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM' hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM' ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hXK**Parameters** ``struct net_device *ndev`` netdev to locate ``enum rdma_driver_id driver_id`` The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all) **Description** Find and hold an ib_device that is associated with a netdev via ib_device_set_netdev(). The caller must call ib_device_put() on the returned pointer.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM+ hjubj)}(hhh](j)}(h-``struct net_device *ndev`` netdev to locate h](j)}(h``struct net_device *ndev``h]j )}(hj*h]hstruct net_device *ndev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM( hj$ubj)}(hhh]h)}(hnetdev to locateh]hnetdev to locate}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM( hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM( hj!ubj)}(hb``enum rdma_driver_id driver_id`` The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all) h](j)}(h!``enum rdma_driver_id driver_id``h]j )}(hjch]henum rdma_driver_id driver_id}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM) hj]ubj)}(hhh]h)}(h?The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all)h]h?The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM) hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM) hj!ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM+ hjubh)}(hFind and hold an ib_device that is associated with a netdev via ib_device_set_netdev(). The caller must call ib_device_put() on the returned pointer.h]hFind and hold an ib_device that is associated with a netdev via ib_device_set_netdev(). The caller must call ib_device_put() on the returned pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM* hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_query_pkey (C function)c.ib_query_pkeyhNtauh1jhhhhhNhNubj)}(hhh](j)}(hPint ib_query_pkey (struct ib_device *device, u32 port_num, u16 index, u16 *pkey)h]j")}(hOint ib_query_pkey(struct ib_device *device, u32 port_num, u16 index, u16 *pkey)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjߒhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjߒhhhjhM ubj)}(h ib_query_pkeyh]jN)}(h ib_query_pkeyh]h ib_query_pkey}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjߒhhhjhM ubj)}(h>(struct ib_device *device, u32 port_num, u16 index, u16 *pkey)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_query_pkeyasbuh1hhjubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjyhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jZc.ib_query_pkeyasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 indexh](h)}(hhh]jN)}(hu16h]hu16}(hjݓhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjړubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjߓmodnameN classnameNjkjn)}jq]jZc.ib_query_pkeyasbuh1hhj֓ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj֓ubjN)}(hindexh]hindex}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj֓ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 *pkeyh](h)}(hhh]jN)}(hu16h]hu16}(hj%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]jZc.ib_query_pkeyasbuh1hhjubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hpkeyh]hpkey}(hj^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjߒhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjےhhhjhM ubah}(h]j֒ah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjؒhhubj)}(hhh]h)}(hGet P_Key table entryh]hGet P_Key table entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjؒhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` Device to query ``u32 port_num`` Port number to query ``u16 index`` P_Key table index to query ``u16 *pkey`` Returned P_Key **Description** ib_query_pkey() fetches the specified P_Key table entry.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh](j)}(h-``struct ib_device *device`` Device to query h](j)}(h``struct ib_device *device``h]j )}(hjɔh]hstruct ib_device *device}(hj˔hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǔubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjÔubj)}(hhh]h)}(hDevice to queryh]hDevice to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjޔhM hjߔubah}(h]h ]h"]h$]h&]uh1jhjÔubeh}(h]h ]h"]h$]h&]uh1jhjޔhM hjubj)}(h&``u32 port_num`` Port number to query h](j)}(h``u32 port_num``h]j )}(hjh]h u32 port_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hPort number to queryh]hPort number to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h)``u16 index`` P_Key table index to query h](j)}(h ``u16 index``h]j )}(hj;h]h u16 index}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj5ubj)}(hhh]h)}(hP_Key table index to queryh]hP_Key table index to query}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM hjubj)}(h``u16 *pkey`` Returned P_Key h](j)}(h ``u16 *pkey``h]j )}(hjth]h u16 *pkey}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjnubj)}(hhh]h)}(hReturned P_Keyh]hReturned P_Key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubh)}(h8ib_query_pkey() fetches the specified P_Key table entry.h]h8ib_query_pkey() fetches the specified P_Key table entry.}(hjŕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_modify_device (C function)c.ib_modify_devicehNtauh1jhhhhhNhNubj)}(hhh](j)}(hoint ib_modify_device (struct ib_device *device, int device_modify_mask, struct ib_device_modify *device_modify)h]j")}(hnint ib_modify_device(struct ib_device *device, int device_modify_mask, struct ib_device_modify *device_modify)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hib_modify_deviceh]jN)}(hib_modify_deviceh]hib_modify_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hZ(struct ib_device *device, int device_modify_mask, struct ib_device_modify *device_modify)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj-ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjLubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjQmodnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_modify_deviceasbuh1hhj-ubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hint device_modify_maskh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hdevice_modify_maskh]hdevice_modify_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(h&struct ib_device_modify *device_modifyh](j()}(hj+h]hstruct}(hjؖhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjԖubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjԖubh)}(hhh]jN)}(hib_device_modifyh]hib_device_modify}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jkc.ib_modify_deviceasbuh1hhjԖubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjԖubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԖubjN)}(h device_modifyh]h device_modify}(hj/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjԖubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hChange IB device attributesh]hChange IB device attributes}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjqjjqjjjuh1jhhhhhNhNubj)}(hXL**Parameters** ``struct ib_device *device`` Device to modify ``int device_modify_mask`` Mask of attributes to change ``struct ib_device_modify *device_modify`` New attribute values **Description** ib_modify_device() changes a device's attributes as specified by the **device_modify_mask** and **device_modify** structure.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjuubj)}(hhh](j)}(h.``struct ib_device *device`` Device to modify h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hDevice to modifyh]hDevice to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h8``int device_modify_mask`` Mask of attributes to change h](j)}(h``int device_modify_mask``h]j )}(hjӗh]hint device_modify_mask}(hj՗hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjїubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj͗ubj)}(hhh]h)}(hMask of attributes to changeh]hMask of attributes to change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj͗ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h@``struct ib_device_modify *device_modify`` New attribute values h](j)}(h*``struct ib_device_modify *device_modify``h]j )}(hj h]h&struct ib_device_modify *device_modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hNew attribute valuesh]hNew attribute values}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM hjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjuubh)}(h|ib_modify_device() changes a device's attributes as specified by the **device_modify_mask** and **device_modify** structure.h](hGib_modify_device() changes a device’s attributes as specified by the }(hj]hhhNhNubj)}(h**device_modify_mask**h]hdevice_modify_mask}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh and }(hj]hhhNhNubj)}(h**device_modify**h]h device_modify}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh structure.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_modify_port (C function)c.ib_modify_porthNtauh1jhhhhhNhNubj)}(hhh](j)}(huint ib_modify_port (struct ib_device *device, u32 port_num, int port_modify_mask, struct ib_port_modify *port_modify)h]j")}(htint ib_modify_port(struct ib_device *device, u32 port_num, int port_modify_mask, struct ib_port_modify *port_modify)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hib_modify_porth]jN)}(hib_modify_porth]hib_modify_port}(hjјhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj͘ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hb(struct ib_device *device, u32 port_num, int port_modify_mask, struct ib_port_modify *port_modify)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgjӘsbc.ib_modify_portasbuh1hhjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjdmodnameN classnameNjkjn)}jq]j'c.ib_modify_portasbuh1hhj[ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubjN)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint port_modify_maskh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hport_modify_maskh]hport_modify_mask}(hjÙhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct ib_port_modify *port_modifyh](j()}(hj+h]hstruct}(hjܙhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjؙubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjؙubh)}(hhh]jN)}(hib_port_modifyh]hib_port_modify}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j'c.ib_modify_portasbuh1hhjؙubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjؙubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؙubjN)}(h port_modifyh]h port_modify}(hj3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjؙubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h/Modifies the attributes for the specified port.h]h/Modifies the attributes for the specified port.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjujjujjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` The device to modify. ``u32 port_num`` The number of the port to modify. ``int port_modify_mask`` Mask used to specify which attributes of the port to change. ``struct ib_port_modify *port_modify`` New attribute values for the port. **Description** ib_modify_port() changes a port's attributes as specified by the **port_modify_mask** and **port_modify** structure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjyubj)}(hhh](j)}(h3``struct ib_device *device`` The device to modify. h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjubj)}(hhh]h)}(hThe device to modify.h]hThe device to modify.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``u32 port_num`` The number of the port to modify. h](j)}(h``u32 port_num``h]j )}(hjךh]h u32 port_num}(hjٚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj՚ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjњubj)}(hhh]h)}(h!The number of the port to modify.h]h!The number of the port to modify.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjњubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hV``int port_modify_mask`` Mask used to specify which attributes of the port to change. h](j)}(h``int port_modify_mask``h]j )}(hjh]hint port_modify_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj ubj)}(hhh]h)}(h(struct ib_device *device, u32 port_num, u16 pkey, u16 *index)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjfubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjkmodnameN classnameNjkjn)}jq]jt)}jgj1sbc.ib_find_pkeyasbuh1hhjGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjŸmodnameN classnameNjkjn)}jq]jc.ib_find_pkeyasbuh1hhjubj:)}(h h]h }(hjޟhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(hu16 pkeyh](h)}(hhh]jN)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jc.ib_find_pkeyasbuh1hhjubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hpkeyh]hpkey}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(h u16 *indexh](h)}(hhh]jN)}(hu16h]hu16}(hjPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjRmodnameN classnameNjkjn)}jq]jc.ib_find_pkeyasbuh1hhjIubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjN)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhM. ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM. ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM. hjhhubj)}(hhh]h)}(hAReturns the PKey table index where a specified PKey value occurs.h]hAReturns the PKey table index where a specified PKey value occurs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM. hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM. ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjˠjjˠjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` The device to query. ``u32 port_num`` The port number of the device to search for the PKey. ``u16 pkey`` The PKey value to search for. ``u16 *index`` The index into the PKey table where the PKey was found.h](h)}(h**Parameters**h]j)}(hjՠh]h Parameters}(hjנhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӠubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM2 hjϠubj)}(hhh](j)}(h2``struct ib_device *device`` The device to query. h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0 hjubj)}(hhh]h)}(hThe device to query.h]hThe device to query.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM0 hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM0 hjubj)}(hG``u32 port_num`` The port number of the device to search for the PKey. h](j)}(h``u32 port_num``h]j )}(hj-h]h u32 port_num}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM1 hj'ubj)}(hhh]h)}(h5The port number of the device to search for the PKey.h]h5The port number of the device to search for the PKey.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM1 hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM1 hjubj)}(h+``u16 pkey`` The PKey value to search for. h](j)}(h ``u16 pkey``h]j )}(hjfh]hu16 pkey}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM2 hj`ubj)}(hhh]h)}(hThe PKey value to search for.h]hThe PKey value to search for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM2 hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM2 hjubj)}(hF``u16 *index`` The index into the PKey table where the PKey was found.h](j)}(h``u16 *index``h]j )}(hjh]h u16 *index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM4 hjubj)}(hhh]h)}(h7The index into the PKey table where the PKey was found.h]h7The index into the PKey table where the PKey was found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM3 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4 hjubeh}(h]h ]h"]h$]h&]uh1jhjϠubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ib_get_net_dev_by_params (C function)c.ib_get_net_dev_by_paramshNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct net_device * ib_get_net_dev_by_params (struct ib_device *dev, u32 port, u16 pkey, const union ib_gid *gid, const struct sockaddr *addr)h]j")}(hstruct net_device *ib_get_net_dev_by_params(struct ib_device *dev, u32 port, u16 pkey, const union ib_gid *gid, const struct sockaddr *addr)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMV ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMV ubh)}(hhh]jN)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_get_net_dev_by_paramssbc.ib_get_net_dev_by_paramsasbuh1hhjhhhjhMV ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMV ubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMV ubj)}(hib_get_net_dev_by_paramsh]jN)}(hj6h]hib_get_net_dev_by_params}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMV ubj)}(ha(struct ib_device *dev, u32 port, u16 pkey, const union ib_gid *gid, const struct sockaddr *addr)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hjshhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j4c.ib_get_net_dev_by_paramsasbuh1hhjoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjN)}(hdevh]hdev}(hjʢhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(hu32 porth](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j4c.ib_get_net_dev_by_paramsasbuh1hhjߢubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjߢubjN)}(hporth]hport}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjߢubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(hu16 pkeyh](h)}(hhh]jN)}(hu16h]hu16}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj0modnameN classnameNjkjn)}jq]j4c.ib_get_net_dev_by_paramsasbuh1hhj'ubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubjN)}(hpkeyh]hpkey}(hjZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(hconst union ib_gid *gidh](j()}(hjh]hconst}(hjshhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubj()}(hjh]hunion}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubh)}(hhh]jN)}(hib_gidh]hib_gid}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j4c.ib_get_net_dev_by_paramsasbuh1hhjoubj:)}(h h]h }(hjʣhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubj)}(hjh]h*}(hjأhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjN)}(hgidh]hgid}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubj)}(hconst struct sockaddr *addrh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsockaddrh]hsockaddr}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]j4c.ib_get_net_dev_by_paramsasbuh1hhjubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(haddrh]haddr}(hjphhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMV ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMV ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMV hjhhubj)}(hhh]h)}(h8Return the appropriate net_dev for a received CM requesth]h8Return the appropriate net_dev for a received CM request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMV hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMV ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hXw**Parameters** ``struct ib_device *dev`` An RDMA device on which the request has been received. ``u32 port`` Port number on the RDMA device. ``u16 pkey`` The Pkey the request came on. ``const union ib_gid *gid`` A GID that the net_dev uses to communicate. ``const struct sockaddr *addr`` Contains the IP address that the request specified as its destination.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMZ hjubj)}(hhh](j)}(hQ``struct ib_device *dev`` An RDMA device on which the request has been received. h](j)}(h``struct ib_device *dev``h]j )}(hjۤh]hstruct ib_device *dev}(hjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj٤ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMX hjդubj)}(hhh]h)}(h6An RDMA device on which the request has been received.h]h6An RDMA device on which the request has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMX hjubah}(h]h ]h"]h$]h&]uh1jhjդubeh}(h]h ]h"]h$]h&]uh1jhjhMX hjҤubj)}(h-``u32 port`` Port number on the RDMA device. h](j)}(h ``u32 port``h]j )}(hjh]hu32 port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMY hjubj)}(hhh]h)}(hPort number on the RDMA device.h]hPort number on the RDMA device.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMY hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMY hjҤubj)}(h+``u16 pkey`` The Pkey the request came on. h](j)}(h ``u16 pkey``h]j )}(hjMh]hu16 pkey}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMZ hjGubj)}(hhh]h)}(hThe Pkey the request came on.h]hThe Pkey the request came on.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMZ hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMZ hjҤubj)}(hH``const union ib_gid *gid`` A GID that the net_dev uses to communicate. h](j)}(h``const union ib_gid *gid``h]j )}(hjh]hconst union ib_gid *gid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM[ hjubj)}(hhh]h)}(h+A GID that the net_dev uses to communicate.h]h+A GID that the net_dev uses to communicate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[ hjҤubj)}(hf``const struct sockaddr *addr`` Contains the IP address that the request specified as its destination.h](j)}(h``const struct sockaddr *addr``h]j )}(hjh]hconst struct sockaddr *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM\ hjubj)}(hhh]h)}(hFContains the IP address that the request specified as its destination.h]hFContains the IP address that the request specified as its destination.}(hjإhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԥhM\ hjեubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԥhM\ hjҤubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__ib_alloc_pd (C function)c.__ib_alloc_pdhNtauh1jhhhhhNhNubj)}(hhh](j)}(h_struct ib_pd * __ib_alloc_pd (struct ib_device *device, unsigned int flags, const char *caller)h]j")}(h]struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags, const char *caller)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM4ubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj%hM4ubh)}(hhh]jN)}(hib_pdh]hib_pd}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]jt)}jg __ib_alloc_pdsbc.__ib_alloc_pdasbuh1hhjhhhj%hM4ubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj%hM4ubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj%hM4ubj)}(h __ib_alloc_pdh]jN)}(hjUh]h __ib_alloc_pd}(hjwhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj%hM4ubj)}(hB(struct ib_device *device, unsigned int flags, const char *caller)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jSc.__ib_alloc_pdasbuh1hhjubj:)}(h h]h }(hjΦhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjܦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hflagsh]hflags}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *callerh](j()}(hjh]hconst}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjOubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubj)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubjN)}(hcallerh]hcaller}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj%hM4ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj%hM4ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj%hM4hj hhubj)}(hhh]h)}(h&Allocates an unused protection domain.h]h&Allocates an unused protection domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM4hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hM4ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj٧jj٧jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` The device on which to allocate the protection domain. ``unsigned int flags`` protection domain flags ``const char *caller`` caller's build-time module name **Description** A protection domain object provides an association between QPs, shared receive queues, address handles, memory regions, and memory windows. Every PD has a local_dma_lkey which can be used as the lkey value for local memory operations.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM8hjݧubj)}(hhh](j)}(hT``struct ib_device *device`` The device on which to allocate the protection domain. h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM5hjubj)}(hhh]h)}(h6The device on which to allocate the protection domain.h]h6The device on which to allocate the protection domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(h/``unsigned int flags`` protection domain flags h](j)}(h``unsigned int flags``h]j )}(hj;h]hunsigned int flags}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM6hj5ubj)}(hhh]h)}(hprotection domain flagsh]hprotection domain flags}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM6hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM6hjubj)}(h7``const char *caller`` caller's build-time module name h](j)}(h``const char *caller``h]j )}(hjth]hconst char *caller}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM7hjnubj)}(hhh]h)}(hcaller's build-time module nameh]h!caller’s build-time module name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjݧubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM9hjݧubh)}(hA protection domain object provides an association between QPs, shared receive queues, address handles, memory regions, and memory windows.h]hA protection domain object provides an association between QPs, shared receive queues, address handles, memory regions, and memory windows.}(hjŨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM8hjݧubh)}(h^Every PD has a local_dma_lkey which can be used as the lkey value for local memory operations.h]h^Every PD has a local_dma_lkey which can be used as the lkey value for local memory operations.}(hjԨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM;hjݧubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_dealloc_pd_user (C function)c.ib_dealloc_pd_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hAint ib_dealloc_pd_user (struct ib_pd *pd, struct ib_udata *udata)h]j")}(h@int ib_dealloc_pd_user(struct ib_pd *pd, struct ib_udata *udata)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hib_dealloc_pd_userh]jN)}(hib_dealloc_pd_userh]hib_dealloc_pd_user}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h*(struct ib_pd *pd, struct ib_udata *udata)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj<ubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubh)}(hhh]jN)}(hib_pdh]hib_pd}(hj^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj[ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj`modnameN classnameNjkjn)}jq]jt)}jgj&sbc.ib_dealloc_pd_userasbuh1hhj<ubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjЩhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjͩubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjҩmodnameN classnameNjkjn)}jq]jzc.ib_dealloc_pd_userasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hudatah]hudata}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h Deallocates a protection domain.h]h Deallocates a protection domain.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjKjjKjjjuh1jhhhhhNhNubj)}(hX\**Parameters** ``struct ib_pd *pd`` The protection domain to deallocate. ``struct ib_udata *udata`` Valid user data or NULL for kernel object **Description** It is an error to call this function while any resources in the pd still exist. The caller is responsible to synchronously destroy them and guarantee no new allocations will happen.h](h)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjOubj)}(hhh](j)}(h:``struct ib_pd *pd`` The protection domain to deallocate. h](j)}(h``struct ib_pd *pd``h]j )}(hjth]hstruct ib_pd *pd}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjnubj)}(hhh]h)}(h$The protection domain to deallocate.h]h$The protection domain to deallocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(hE``struct ib_udata *udata`` Valid user data or NULL for kernel object h](j)}(h``struct ib_udata *udata``h]j )}(hjh]hstruct ib_udata *udata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hjƪhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjªhMhjêubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjªhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjOubh)}(hIt is an error to call this function while any resources in the pd still exist. The caller is responsible to synchronously destroy them and guarantee no new allocations will happen.h]hIt is an error to call this function while any resources in the pd still exist. The caller is responsible to synchronously destroy them and guarantee no new allocations will happen.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_copy_ah_attr (C function)c.rdma_copy_ah_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hRvoid rdma_copy_ah_attr (struct rdma_ah_attr *dest, const struct rdma_ah_attr *src)h]j")}(hQvoid rdma_copy_ah_attr(struct rdma_ah_attr *dest, const struct rdma_ah_attr *src)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)hhhj;hMubj)}(hrdma_copy_ah_attrh]jN)}(hrdma_copy_ah_attrh]hrdma_copy_ah_attr}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj;hMubj)}(h;(struct rdma_ah_attr *dest, const struct rdma_ah_attr *src)h](j)}(hstruct rdma_ah_attr *desth](j()}(hj+h]hstruct}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjfubj:)}(h h]h }(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjPsbc.rdma_copy_ah_attrasbuh1hhjfubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjN)}(hdesth]hdest}(hjëhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hconst struct rdma_ah_attr *srch](j()}(hjh]hconst}(hjܫhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjثubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjثubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjثubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjثubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.rdma_copy_ah_attrasbuh1hhjثubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjثubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjثubjN)}(hsrch]hsrc}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjثubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj;hMhj"hhubj)}(hhh]h)}(h2Copy rdma ah attribute from source to destination.h]h2Copy rdma ah attribute from source to destination.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct rdma_ah_attr *dest`` Pointer to destination ah_attr. Contents of the destination pointer is assumed to be invalid and attribute are overwritten. ``const struct rdma_ah_attr *src`` Pointer to source ah_attr.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh](j)}(h``struct rdma_ah_attr *dest`` Pointer to destination ah_attr. Contents of the destination pointer is assumed to be invalid and attribute are overwritten. h](j)}(h``struct rdma_ah_attr *dest``h]j )}(hjh]hstruct rdma_ah_attr *dest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h{Pointer to destination ah_attr. Contents of the destination pointer is assumed to be invalid and attribute are overwritten.h]h{Pointer to destination ah_attr. Contents of the destination pointer is assumed to be invalid and attribute are overwritten.}(hjҬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjϬubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjάhMhjubj)}(h=``const struct rdma_ah_attr *src`` Pointer to source ah_attr.h](j)}(h"``const struct rdma_ah_attr *src``h]j )}(hjh]hconst struct rdma_ah_attr *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hPointer to source ah_attr.h]hPointer to source ah_attr.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!rdma_replace_ah_attr (C function)c.rdma_replace_ah_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hTvoid rdma_replace_ah_attr (struct rdma_ah_attr *old, const struct rdma_ah_attr *new)h]j")}(hSvoid rdma_replace_ah_attr(struct rdma_ah_attr *old, const struct rdma_ah_attr *new)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIhhhj[hMubj)}(hrdma_replace_ah_attrh]jN)}(hrdma_replace_ah_attrh]hrdma_replace_ah_attr}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhj[hMubj)}(h:(struct rdma_ah_attr *old, const struct rdma_ah_attr *new)h](j)}(hstruct rdma_ah_attr *oldh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjpsbc.rdma_replace_ah_attrasbuh1hhjubj:)}(h h]h }(hjȭhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj֭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(holdh]hold}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct rdma_ah_attr *newh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj7modnameN classnameNjkjn)}jq]jĭc.rdma_replace_ah_attrasbuh1hhjubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hnewh]hnew}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjEhhhj[hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhj[hMhjBhhubj)}(hhh]h)}(h#Replace valid ah_attr with new one.h]h#Replace valid ah_attr with new one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_ah_attr *old`` Pointer to existing ah_attr which needs to be replaced. old is assumed to be valid or zero'd ``const struct rdma_ah_attr *new`` Pointer to the new ah_attr. **Description** rdma_replace_ah_attr() first releases any reference in the old ah_attr if old the ah_attr is valid; after that it copies the new attribute and holds the reference to the replaced ah_attr.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh](j)}(hz``struct rdma_ah_attr *old`` Pointer to existing ah_attr which needs to be replaced. old is assumed to be valid or zero'd h](j)}(h``struct rdma_ah_attr *old``h]j )}(hjٮh]hstruct rdma_ah_attr *old}(hjۮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׮ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjӮubj)}(hhh]h)}(h\Pointer to existing ah_attr which needs to be replaced. old is assumed to be valid or zero'dh]h^Pointer to existing ah_attr which needs to be replaced. old is assumed to be valid or zero’d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjӮubeh}(h]h ]h"]h$]h&]uh1jhjhMhjЮubj)}(h?``const struct rdma_ah_attr *new`` Pointer to the new ah_attr. h](j)}(h"``const struct rdma_ah_attr *new``h]j )}(hjh]hconst struct rdma_ah_attr *new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj ubj)}(hhh]h)}(hPointer to the new ah_attr.h]hPointer to the new ah_attr.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjЮubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(hrdma_replace_ah_attr() first releases any reference in the old ah_attr if old the ah_attr is valid; after that it copies the new attribute and holds the reference to the replaced ah_attr.h]hrdma_replace_ah_attr() first releases any reference in the old ah_attr if old the ah_attr is valid; after that it copies the new attribute and holds the reference to the replaced ah_attr.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_move_ah_attr (C function)c.rdma_move_ah_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hLvoid rdma_move_ah_attr (struct rdma_ah_attr *dest, struct rdma_ah_attr *src)h]j")}(hKvoid rdma_move_ah_attr(struct rdma_ah_attr *dest, struct rdma_ah_attr *src)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hrdma_move_ah_attrh]jN)}(hrdma_move_ah_attrh]hrdma_move_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h5(struct rdma_ah_attr *dest, struct rdma_ah_attr *src)h](j)}(hstruct rdma_ah_attr *desth](j()}(hj+h]hstruct}(hjЯhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj̯ubj:)}(h h]h }(hjݯhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj̯ubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.rdma_move_ah_attrasbuh1hhj̯ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj̯ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̯ubjN)}(hdesth]hdest}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj̯ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjȯubj)}(hstruct rdma_ah_attr *srch](j()}(hj+h]hstruct}(hjBhhhNhNubah}('h]h ]j4ah"]h$]h&]uh1j'hj>ubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj]ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjbmodnameN classnameNjkjn)}jq]j c.rdma_move_ah_attrasbuh1hhj>ubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjN)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjȯubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h.Move ah_attr pointed by source to destination.h]h.Move ah_attr pointed by source to destination.}(hjðhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj۰jj۰jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_ah_attr *dest`` Pointer to destination ah_attr to copy to. dest is assumed to be valid or zero'd ``struct rdma_ah_attr *src`` Pointer to the new ah_attr. **Description** rdma_move_ah_attr() first releases any reference in the destination ah_attr if it is valid. This also transfers ownership of internal references from src to dest, making src invalid in the process. No new reference of the src ah_attr is taken.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj߰ubj)}(hhh](j)}(ho``struct rdma_ah_attr *dest`` Pointer to destination ah_attr to copy to. dest is assumed to be valid or zero'd h](j)}(h``struct rdma_ah_attr *dest``h]j )}(hjh]hstruct rdma_ah_attr *dest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hPPointer to destination ah_attr to copy to. dest is assumed to be valid or zero'dh]hRPointer to destination ah_attr to copy to. dest is assumed to be valid or zero’d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``struct rdma_ah_attr *src`` Pointer to the new ah_attr. h](j)}(h``struct rdma_ah_attr *src``h]j )}(hj>h]hstruct rdma_ah_attr *src}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj8ubj)}(hhh]h)}(hPointer to the new ah_attr.h]hPointer to the new ah_attr.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubeh}(h]h ]h"]h$]h&]uh1jhj߰ubh)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj߰ubh)}(hrdma_move_ah_attr() first releases any reference in the destination ah_attr if it is valid. This also transfers ownership of internal references from src to dest, making src invalid in the process. No new reference of the src ah_attr is taken.h]hrdma_move_ah_attr() first releases any reference in the destination ah_attr if it is valid. This also transfers ownership of internal references from src to dest, making src invalid in the process. No new reference of the src ah_attr is taken.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj߰ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_create_ah (C function)c.rdma_create_ahhNtauh1jhhhhhNhNubj)}(hhh](j)}(hYstruct ib_ah * rdma_create_ah (struct ib_pd *pd, struct rdma_ah_attr *ah_attr, u32 flags)h]j")}(hWstruct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr, u32 flags)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM^ubj:)}(h h]h }(hj̱hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj˱hM^ubh)}(hhh]jN)}(hib_ahh]hib_ah}(hjݱhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjڱubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj߱modnameN classnameNjkjn)}jq]jt)}jgrdma_create_ahsbc.rdma_create_ahasbuh1hhjhhhj˱hM^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj˱hM^ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj˱hM^ubj)}(hrdma_create_ahh]jN)}(hjh]hrdma_create_ah}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj˱hM^ubj)}(h;(struct ib_pd *pd, struct rdma_ah_attr *ah_attr, u32 flags)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hj8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4ubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubh)}(hhh]jN)}(hib_pdh]hib_pd}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjXmodnameN classnameNjkjn)}jq]jc.rdma_create_ahasbuh1hhj4ubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hstruct rdma_ah_attr *ah_attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjƲhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjòubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjȲmodnameN classnameNjkjn)}jq]jc.rdma_create_ahasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hah_attrh]hah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(h u32 flagsh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.rdma_create_ahasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hflagsh]hflags}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj˱hM^ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj˱hM^ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj˱hM^hjhhubj)}(hhh]h)}(h7Creates an address handle for the given address vector.h]h7Creates an address handle for the given address vector.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM^hjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj˱hM^ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_pd *pd`` The protection domain associated with the address handle. ``struct rdma_ah_attr *ah_attr`` The attributes of the address vector. ``u32 flags`` Create address handle flags (see enum rdma_create_ah_flags). **Description** It returns 0 on success and returns appropriate error code on error. The address handle is used to reference a local or global destination in all UD QP post sends.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMbhjubj)}(hhh](j)}(hO``struct ib_pd *pd`` The protection domain associated with the address handle. h](j)}(h``struct ib_pd *pd``h]j )}(hjh]hstruct ib_pd *pd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM`hjubj)}(hhh]h)}(h9The protection domain associated with the address handle.h]h9The protection domain associated with the address handle.}(hj˳hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdzhM`hjȳubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjdzhM`hjubj)}(hG``struct rdma_ah_attr *ah_attr`` The attributes of the address vector. h](j)}(h ``struct rdma_ah_attr *ah_attr``h]j )}(hjh]hstruct rdma_ah_attr *ah_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMahjubj)}(hhh]h)}(h%The attributes of the address vector.h]h%The attributes of the address vector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(hK``u32 flags`` Create address handle flags (see enum rdma_create_ah_flags). h](j)}(h ``u32 flags``h]j )}(hj$h]h u32 flags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMbhjubj)}(hhh]h)}(hmodnameN classnameNjkjn)}jq]jߴc.rdma_create_user_ahasbuh1hhjubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hpdh]hpd}(hjuhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct rdma_ah_attr *ah_attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jߴc.rdma_create_user_ahasbuh1hhjubj:)}(h h]h }(hjʵhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjصhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hah_attrh]hah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jߴc.rdma_create_user_ahasbuh1hhjubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hudatah]hudata}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hzCreates an address handle for the given address vector. It resolves destination mac address for ah attribute of RoCE type.h]hzCreates an address handle for the given address vector. It resolves destination mac address for ah attribute of RoCE type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_pd *pd`` The protection domain associated with the address handle. ``struct rdma_ah_attr *ah_attr`` The attributes of the address vector. ``struct ib_udata *udata`` pointer to user's input output buffer information need by provider driver. **Description** It returns 0 on success and returns appropriate error code on error. The address handle is used to reference a local or global destination in all UD QP post sends.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh](j)}(hO``struct ib_pd *pd`` The protection domain associated with the address handle. h](j)}(h``struct ib_pd *pd``h]j )}(hjh]hstruct ib_pd *pd}(hj¶hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h9The protection domain associated with the address handle.h]h9The protection domain associated with the address handle.}(hjٶhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjնhMhjֶubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjնhMhjubj)}(hG``struct rdma_ah_attr *ah_attr`` The attributes of the address vector. h](j)}(h ``struct rdma_ah_attr *ah_attr``h]j )}(hjh]hstruct rdma_ah_attr *ah_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h%The attributes of the address vector.h]h%The attributes of the address vector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hf``struct ib_udata *udata`` pointer to user's input output buffer information need by provider driver. h](j)}(h``struct ib_udata *udata``h]j )}(hj2h]hstruct ib_udata *udata}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj,ubj)}(hhh]h)}(hJpointer to user's input output buffer information need by provider driver.h]hLpointer to user’s input output buffer information need by provider driver.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(hIt returns 0 on success and returns appropriate error code on error. The address handle is used to reference a local or global destination in all UD QP post sends.h]hIt returns 0 on success and returns appropriate error code on error. The address handle is used to reference a local or global destination in all UD QP post sends.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$rdma_move_grh_sgid_attr (C function)c.rdma_move_grh_sgid_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hvoid rdma_move_grh_sgid_attr (struct rdma_ah_attr *attr, union ib_gid *dgid, u32 flow_label, u8 hop_limit, u8 traffic_class, const struct ib_gid_attr *sgid_attr)h]j")}(hvoid rdma_move_grh_sgid_attr(struct rdma_ah_attr *attr, union ib_gid *dgid, u32 flow_label, u8 hop_limit, u8 traffic_class, const struct ib_gid_attr *sgid_attr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hj·hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hrdma_move_grh_sgid_attrh]jN)}(hrdma_move_grh_sgid_attrh]hrdma_move_grh_sgid_attr}(hjԷhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjзubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct rdma_ah_attr *attr, union ib_gid *dgid, u32 flow_label, u8 hop_limit, u8 traffic_class, const struct ib_gid_attr *sgid_attr)h](j)}(hstruct rdma_ah_attr *attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjַsbc.rdma_move_grh_sgid_attrasbuh1hhjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hattrh]hattr}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunion ib_gid *dgidh](j()}(hjh]hunion}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj^ubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubh)}(hhh]jN)}(hib_gidh]hib_gid}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj}ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j*c.rdma_move_grh_sgid_attrasbuh1hhj^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjN)}(hdgidh]hdgid}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 flow_labelh](h)}(hhh]jN)}(hu32h]hu32}(hjոhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjҸubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj׸modnameN classnameNjkjn)}jq]j*c.rdma_move_grh_sgid_attrasbuh1hhjθubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjθubjN)}(h flow_labelh]h flow_label}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjθubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 hop_limith](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j*c.rdma_move_grh_sgid_attrasbuh1hhjubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h hop_limith]h hop_limit}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 traffic_classh](h)}(hhh]jN)}(hu8h]hu8}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjgmodnameN classnameNjkjn)}jq]j*c.rdma_move_grh_sgid_attrasbuh1hhj^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubjN)}(h traffic_classh]h traffic_class}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct ib_gid_attr *sgid_attrh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjŹhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjҹhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_gid_attrh]h ib_gid_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j*c.rdma_move_grh_sgid_attrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h sgid_attrh]h sgid_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hASets the sgid attribute of GRH, taking ownership of the referenceh]hASets the sgid attribute of GRH, taking ownership of the reference}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj^jj^jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_ah_attr *attr`` Pointer to AH attribute structure ``union ib_gid *dgid`` Destination GID ``u32 flow_label`` Flow label ``u8 hop_limit`` Hop limit ``u8 traffic_class`` traffic class ``const struct ib_gid_attr *sgid_attr`` Pointer to SGID attribute **Description** This takes ownership of the sgid_attr reference. The caller must ensure rdma_destroy_ah_attr() is called before destroying the rdma_ah_attr after calling this function.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjbubj)}(hhh](j)}(h@``struct rdma_ah_attr *attr`` Pointer to AH attribute structure h](j)}(h``struct rdma_ah_attr *attr``h]j )}(hjh]hstruct rdma_ah_attr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h!Pointer to AH attribute structureh]h!Pointer to AH attribute structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h'``union ib_gid *dgid`` Destination GID h](j)}(h``union ib_gid *dgid``h]j )}(hjh]hunion ib_gid *dgid}(hjºhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hDestination GIDh]hDestination GID}(hjٺhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjպhMhjֺubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjպhMhj~ubj)}(h``u32 flow_label`` Flow label h](j)}(h``u32 flow_label``h]j )}(hjh]hu32 flow_label}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(h Flow labelh]h Flow label}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h``u8 hop_limit`` Hop limit h](j)}(h``u8 hop_limit``h]j )}(hj2h]h u8 hop_limit}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj,ubj)}(hhh]h)}(h Hop limith]h Hop limit}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj~ubj)}(h#``u8 traffic_class`` traffic class h](j)}(h``u8 traffic_class``h]j )}(hjkh]hu8 traffic_class}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjeubj)}(hhh]h)}(h traffic classh]h traffic class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(hB``const struct ib_gid_attr *sgid_attr`` Pointer to SGID attribute h](j)}(h'``const struct ib_gid_attr *sgid_attr``h]j )}(hjh]h#const struct ib_gid_attr *sgid_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hPointer to SGID attributeh]hPointer to SGID attribute}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubh)}(h**Description**h]j)}(hj߻h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݻubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjbubh)}(hThis takes ownership of the sgid_attr reference. The caller must ensure rdma_destroy_ah_attr() is called before destroying the rdma_ah_attr after calling this function.h]hThis takes ownership of the sgid_attr reference. The caller must ensure rdma_destroy_ah_attr() is called before destroying the rdma_ah_attr after calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!rdma_destroy_ah_attr (C function)c.rdma_destroy_ah_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(h8void rdma_destroy_ah_attr (struct rdma_ah_attr *ah_attr)h]j")}(h7void rdma_destroy_ah_attr(struct rdma_ah_attr *ah_attr)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj2hMubj)}(hrdma_destroy_ah_attrh]jN)}(hrdma_destroy_ah_attrh]hrdma_destroy_ah_attr}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj2hMubj)}(h(struct rdma_ah_attr *ah_attr)h]j)}(hstruct rdma_ah_attr *ah_attrh](j()}(hj+h]hstruct}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj]ubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubh)}(hhh]jN)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj|ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjGsbc.rdma_destroy_ah_attrasbuh1hhj]ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjN)}(hah_attrh]hah_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj2hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj2hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj2hMhjhhubj)}(hhh]h)}(h4Release reference to SGID attribute of ah attribute.h]h4Release reference to SGID attribute of ah attribute.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct rdma_ah_attr *ah_attr`` Pointer to ah attribute **Description** Release reference to the SGID attribute of the ah attribute if it is non NULL. It is safe to call this multiple times, and safe to call it on a zero initialized ah_attr.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]j)}(h9``struct rdma_ah_attr *ah_attr`` Pointer to ah attribute h](j)}(h ``struct rdma_ah_attr *ah_attr``h]j )}(hj%h]hstruct rdma_ah_attr *ah_attr}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hPointer to ah attributeh]hPointer to ah attribute}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(hRelease reference to the SGID attribute of the ah attribute if it is non NULL. It is safe to call this multiple times, and safe to call it on a zero initialized ah_attr.h]hRelease reference to the SGID attribute of the ah attribute if it is non NULL. It is safe to call this multiple times, and safe to call it on a zero initialized ah_attr.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_create_srq_user (C function)c.ib_create_srq_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_srq * ib_create_srq_user (struct ib_pd *pd, struct ib_srq_init_attr *srq_init_attr, struct ib_usrq_object *uobject, struct ib_udata *udata)h]j")}(hstruct ib_srq *ib_create_srq_user(struct ib_pd *pd, struct ib_srq_init_attr *srq_init_attr, struct ib_usrq_object *uobject, struct ib_udata *udata)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubh)}(hhh]jN)}(hib_srqh]hib_srq}(hjĽhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjƽmodnameN classnameNjkjn)}jq]jt)}jgib_create_srq_usersbc.ib_create_srq_userasbuh1hhjhhhjhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hib_create_srq_userh]jN)}(hjh]hib_create_srq_user}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hr(struct ib_pd *pd, struct ib_srq_init_attr *srq_init_attr, struct ib_usrq_object *uobject, struct ib_udata *udata)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_pdh]hib_pd}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj?modnameN classnameNjkjn)}jq]jc.ib_create_srq_userasbuh1hhjubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hpdh]hpd}(hjvhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&struct ib_srq_init_attr *srq_init_attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_srq_init_attrh]hib_srq_init_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_srq_userasbuh1hhjubj:)}(h h]h }(hj˾hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjپhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h srq_init_attrh]h srq_init_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_usrq_object *uobjecth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_usrq_objecth]hib_usrq_object}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_srq_userasbuh1hhjubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(huobjecth]huobject}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjohhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjkubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_srq_userasbuh1hhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjN)}(hudatah]hudata}(hjƿhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h>Creates a SRQ associated with the specified protection domain.h]h>Creates a SRQ associated with the specified protection domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_pd *pd`` The protection domain associated with the SRQ. ``struct ib_srq_init_attr *srq_init_attr`` A list of initial attributes required to create the SRQ. If SRQ creation succeeds, then the attributes are updated to the actual capabilities of the created SRQ. ``struct ib_usrq_object *uobject`` uobject pointer if this is not a kernel SRQ ``struct ib_udata *udata`` udata pointer if this is not a kernel SRQ **Description** srq_attr->max_wr and srq_attr->max_sge are read the determine the requested size of the SRQ, and set to the actual values allocated on return. If ib_create_srq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM!hj ubj)}(hhh](j)}(hD``struct ib_pd *pd`` The protection domain associated with the SRQ. h](j)}(h``struct ib_pd *pd``h]j )}(hj1h]hstruct ib_pd *pd}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj+ubj)}(hhh]h)}(h.The protection domain associated with the SRQ.h]h.The protection domain associated with the SRQ.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(h``struct ib_srq_init_attr *srq_init_attr`` A list of initial attributes required to create the SRQ. If SRQ creation succeeds, then the attributes are updated to the actual capabilities of the created SRQ. h](j)}(h*``struct ib_srq_init_attr *srq_init_attr``h]j )}(hjjh]h&struct ib_srq_init_attr *srq_init_attr}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM"hjdubj)}(hhh]h)}(hA list of initial attributes required to create the SRQ. If SRQ creation succeeds, then the attributes are updated to the actual capabilities of the created SRQ.h]hA list of initial attributes required to create the SRQ. If SRQ creation succeeds, then the attributes are updated to the actual capabilities of the created SRQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhM"hj(ubj)}(hO``struct ib_usrq_object *uobject`` uobject pointer if this is not a kernel SRQ h](j)}(h"``struct ib_usrq_object *uobject``h]j )}(hjh]hstruct ib_usrq_object *uobject}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM#hjubj)}(hhh]h)}(h+uobject pointer if this is not a kernel SRQh]h+uobject pointer if this is not a kernel SRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hj(ubj)}(hE``struct ib_udata *udata`` udata pointer if this is not a kernel SRQ h](j)}(h``struct ib_udata *udata``h]j )}(hjh]hstruct ib_udata *udata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM$hjubj)}(hhh]h)}(h)udata pointer if this is not a kernel SRQh]h)udata pointer if this is not a kernel SRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM&hj ubh)}(hsrq_attr->max_wr and srq_attr->max_sge are read the determine the requested size of the SRQ, and set to the actual values allocated on return. If ib_create_srq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.h]hsrq_attr->max_wr and srq_attr->max_sge are read the determine the requested size of the SRQ, and set to the actual values allocated on return. If ib_create_srq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM%hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_create_qp_user (C function)c.ib_create_qp_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_qp * ib_create_qp_user (struct ib_device *dev, struct ib_pd *pd, struct ib_qp_init_attr *attr, struct uverbs_attr_bundle *uattrs, struct ib_uqp_object *uobj, const char *caller)h]j")}(hstruct ib_qp *ib_create_qp_user(struct ib_device *dev, struct ib_pd *pd, struct ib_qp_init_attr *attr, struct uverbs_attr_bundle *uattrs, struct ib_uqp_object *uobj, const char *caller)h](j()}(hj+h]hstruct}(hj]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjYhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM8ubj:)}(h h]h }(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYhhhjjhM8ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj|hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjyubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj~modnameN classnameNjkjn)}jq]jt)}jgib_create_qp_usersbc.ib_create_qp_userasbuh1hhjYhhhjjhM8ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYhhhjjhM8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjjhM8ubj)}(hib_create_qp_userh]jN)}(hjh]hib_create_qp_user}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjjhM8ubj)}(h(struct ib_device *dev, struct ib_pd *pd, struct ib_qp_init_attr *attr, struct uverbs_attr_bundle *uattrs, struct ib_uqp_object *uobj, const char *caller)h](j)}(hstruct ib_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_qp_userasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdevh]hdev}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hjGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubh)}(hhh]jN)}(hib_pdh]hib_pd}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjgmodnameN classnameNjkjn)}jq]jc.ib_create_qp_userasbuh1hhjCubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_qp_init_attr *attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_qp_init_attrh]hib_qp_init_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_qp_userasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct uverbs_attr_bundle *uattrsh](j()}(hj+h]hstruct}(hj'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#ubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubh)}(hhh]jN)}(huverbs_attr_bundleh]huverbs_attr_bundle}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGmodnameN classnameNjkjn)}jq]jc.ib_create_qp_userasbuh1hhj#ubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjN)}(huattrsh]huattrs}(hj~hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_uqp_object *uobjh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_uqp_objecth]h ib_uqp_object}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_create_qp_userasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(huobjh]huobj}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *callerh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hcharh]hchar}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hcallerh]hcaller}(hjKhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjjhM8ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjUhhhjjhM8ubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjjhM8hjRhhubj)}(hhh]h)}(h=Creates a QP associated with the specified protection domain.h]h=Creates a QP associated with the specified protection domain.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM8hjrhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjjhM8ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *dev`` IB device ``struct ib_pd *pd`` The protection domain associated with the QP. ``struct ib_qp_init_attr *attr`` A list of initial attributes required to create the QP. If QP creation succeeds, then the attributes are updated to the actual capabilities of the created QP. ``struct uverbs_attr_bundle *uattrs`` User ioctl attributes and udata ``struct ib_uqp_object *uobj`` uverbs obect ``const char *caller`` caller's build-time module nameh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM<hjubj)}(hhh](j)}(h$``struct ib_device *dev`` IB device h](j)}(h``struct ib_device *dev``h]j )}(hjh]hstruct ib_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM:hjubj)}(hhh]h)}(h IB deviceh]h IB device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubj)}(hC``struct ib_pd *pd`` The protection domain associated with the QP. h](j)}(h``struct ib_pd *pd``h]j )}(hjh]hstruct ib_pd *pd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM;hjubj)}(hhh]h)}(h-The protection domain associated with the QP.h]h-The protection domain associated with the QP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h``struct ib_qp_init_attr *attr`` A list of initial attributes required to create the QP. If QP creation succeeds, then the attributes are updated to the actual capabilities of the created QP. h](j)}(h ``struct ib_qp_init_attr *attr``h]j )}(hj(h]hstruct ib_qp_init_attr *attr}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM>hj"ubj)}(hhh]h)}(hA list of initial attributes required to create the QP. If QP creation succeeds, then the attributes are updated to the actual capabilities of the created QP.h]hA list of initial attributes required to create the QP. If QP creation succeeds, then the attributes are updated to the actual capabilities of the created QP.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM<hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hM>hjubj)}(hF``struct uverbs_attr_bundle *uattrs`` User ioctl attributes and udata h](j)}(h%``struct uverbs_attr_bundle *uattrs``h]j )}(hjbh]h!struct uverbs_attr_bundle *uattrs}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM?hj\ubj)}(hhh]h)}(hUser ioctl attributes and udatah]hUser ioctl attributes and udata}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM?hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM?hjubj)}(h,``struct ib_uqp_object *uobj`` uverbs obect h](j)}(h``struct ib_uqp_object *uobj``h]j )}(hjh]hstruct ib_uqp_object *uobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM@hjubj)}(hhh]h)}(h uverbs obecth]h uverbs obect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(h6``const char *caller`` caller's build-time module nameh](j)}(h``const char *caller``h]j )}(hjh]hconst char *caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMBhjubj)}(hhh]h)}(hcaller's build-time module nameh]h!caller’s build-time module name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ib_modify_qp_with_udata (C function)c.ib_modify_qp_with_udatahNtauh1jhhhhhNhNubj)}(hhh](j)}(hqint ib_modify_qp_with_udata (struct ib_qp *ib_qp, struct ib_qp_attr *attr, int attr_mask, struct ib_udata *udata)h]j")}(hpint ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr, int attr_mask, struct ib_udata *udata)h](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*hhhj<hMubj)}(hib_modify_qp_with_udatah]jN)}(hib_modify_qp_with_udatah]hib_modify_qp_with_udata}(hjOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj<hMubj)}(hU(struct ib_qp *ib_qp, struct ib_qp_attr *attr, int attr_mask, struct ib_udata *udata)h](j)}(hstruct ib_qp *ib_qph](j()}(hj+h]hstruct}(hjkhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjgubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubh)}(hhh]jN)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjQsbc.ib_modify_qp_with_udataasbuh1hhjgubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjN)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubj)}(hstruct ib_qp_attr *attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_qp_attrh]h ib_qp_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_modify_qp_with_udataasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hattrh]hattr}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubj)}(h int attr_maskh](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubjN)}(h attr_maskh]h attr_mask}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj~ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_modify_qp_with_udataasbuh1hhj~ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjN)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubeh}(h]h ]h"]h$]h&]jjuh1jhj*hhhj<hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj&hhhj<hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj<hMhj#hhubj)}(hhh]h)}(h-Modifies the attributes for the specified QP.h]h-Modifies the attributes for the specified QP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj<hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_qp *ib_qp`` The QP to modify. ``struct ib_qp_attr *attr`` On input, specifies the QP attributes to modify. On output, the current values of selected QP attributes are returned. ``int attr_mask`` A bit-mask used to specify which attributes of the QP are being modified. ``struct ib_udata *udata`` pointer to user's input output buffer information are being modified. It returns 0 on success and returns appropriate error code on error.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh](j)}(h*``struct ib_qp *ib_qp`` The QP to modify. h](j)}(h``struct ib_qp *ib_qp``h]j )}(hjDh]hstruct ib_qp *ib_qp}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhj>ubj)}(hhh]h)}(hThe QP to modify.h]hThe QP to modify.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj;ubj)}(h``struct ib_qp_attr *attr`` On input, specifies the QP attributes to modify. On output, the current values of selected QP attributes are returned. h](j)}(h``struct ib_qp_attr *attr``h]j )}(hj}h]hstruct ib_qp_attr *attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjwubj)}(hhh]h)}(hwOn input, specifies the QP attributes to modify. On output, the current values of selected QP attributes are returned.h]hwOn input, specifies the QP attributes to modify. On output, the current values of selected QP attributes are returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubj)}(h\``int attr_mask`` A bit-mask used to specify which attributes of the QP are being modified. h](j)}(h``int attr_mask``h]j )}(hjh]h int attr_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hIA bit-mask used to specify which attributes of the QP are being modified.h]hIA bit-mask used to specify which attributes of the QP are being modified.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubj)}(h``struct ib_udata *udata`` pointer to user's input output buffer information are being modified. It returns 0 on success and returns appropriate error code on error.h](j)}(h``struct ib_udata *udata``h]j )}(hjh]hstruct ib_udata *udata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubj)}(hhh]h)}(hpointer to user's input output buffer information are being modified. It returns 0 on success and returns appropriate error code on error.h]hpointer to user’s input output buffer information are being modified. It returns 0 on success and returns appropriate error code on error.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_alloc_mr (C function) c.ib_alloc_mrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hVstruct ib_mr * ib_alloc_mr (struct ib_pd *pd, enum ib_mr_type mr_type, u32 max_num_sg)h]j")}(hTstruct ib_mr *ib_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type, u32 max_num_sg)h](j()}(hj+h]hstruct}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGhhhjXhM ubh)}(hhh]jN)}(hib_mrh]hib_mr}(hjjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjlmodnameN classnameNjkjn)}jq]jt)}jg ib_alloc_mrsb c.ib_alloc_mrasbuh1hhjGhhhjXhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGhhhjXhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjXhM ubj)}(h ib_alloc_mrh]jN)}(hjh]h ib_alloc_mr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjXhM ubj)}(h;(struct ib_pd *pd, enum ib_mr_type mr_type, u32 max_num_sg)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j c.ib_alloc_mrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum ib_mr_type mr_typeh](j()}(hj%h]henum}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj1ubj:)}(h h]h }(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubh)}(hhh]jN)}(h ib_mr_typeh]h ib_mr_type}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjUmodnameN classnameNjkjn)}jq]j c.ib_alloc_mrasbuh1hhj1ubj:)}(h h]h }(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubjN)}(hmr_typeh]hmr_type}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 max_num_sgh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j c.ib_alloc_mrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h max_num_sgh]h max_num_sg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjGhhhjXhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjChhhjXhM ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhjXhM hj@hhubj)}(hhh]h)}(hAllocates a memory regionh]hAllocates a memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjXhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhhhNhNubj)}(hXq**Parameters** ``struct ib_pd *pd`` protection domain associated with the region ``enum ib_mr_type mr_type`` memory region type ``u32 max_num_sg`` maximum sg entries available for registration. **Notes** Memory registeration page/sg lists must not exceed max_num_sg. For mr_type IB_MR_TYPE_MEM_REG, the total length cannot exceed max_num_sg * used_page_size.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM! hj ubj)}(hhh](j)}(hB``struct ib_pd *pd`` protection domain associated with the region h](j)}(h``struct ib_pd *pd``h]j )}(hj2h]hstruct ib_pd *pd}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj,ubj)}(hhh]h)}(h,protection domain associated with the regionh]h,protection domain associated with the region}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM hj)ubj)}(h/``enum ib_mr_type mr_type`` memory region type h](j)}(h``enum ib_mr_type mr_type``h]j )}(hjkh]henum ib_mr_type mr_type}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjeubj)}(hhh]h)}(hmemory region typeh]hmemory region type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM hj)ubj)}(hB``u32 max_num_sg`` maximum sg entries available for registration. h](j)}(h``u32 max_num_sg``h]j )}(hjh]hu32 max_num_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(h.maximum sg entries available for registration.h]h.maximum sg entries available for registration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM" hj ubh)}(hMemory registeration page/sg lists must not exceed max_num_sg. For mr_type IB_MR_TYPE_MEM_REG, the total length cannot exceed max_num_sg * used_page_size.h]hMemory registeration page/sg lists must not exceed max_num_sg. For mr_type IB_MR_TYPE_MEM_REG, the total length cannot exceed max_num_sg * used_page_size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM" hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ib_alloc_mr_integrity (C function)c.ib_alloc_mr_integrityhNtauh1jhhhhhNhNubj)}(hhh](j)}(hastruct ib_mr * ib_alloc_mr_integrity (struct ib_pd *pd, u32 max_num_data_sg, u32 max_num_meta_sg)h]j")}(h_struct ib_mr *ib_alloc_mr_integrity(struct ib_pd *pd, u32 max_num_data_sg, u32 max_num_meta_sg)h](j()}(hj+h]hstruct}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMO ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj1hMO ubh)}(hhh]jN)}(hib_mrh]hib_mr}(hjChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjEmodnameN classnameNjkjn)}jq]jt)}jgib_alloc_mr_integritysbc.ib_alloc_mr_integrityasbuh1hhj hhhj1hMO ubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj1hMO ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hMO ubj)}(hib_alloc_mr_integrityh]jN)}(hjah]hib_alloc_mr_integrity}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj1hMO ubj)}(h<(struct ib_pd *pd, u32 max_num_data_sg, u32 max_num_meta_sg)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j_c.ib_alloc_mr_integrityasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 max_num_data_sgh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j_c.ib_alloc_mr_integrityasbuh1hhj ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubjN)}(hmax_num_data_sgh]hmax_num_data_sg}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 max_num_meta_sgh](h)}(hhh]jN)}(hu32h]hu32}(hjYhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj[modnameN classnameNjkjn)}jq]j_c.ib_alloc_mr_integrityasbuh1hhjRubj:)}(h h]h }(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubjN)}(hmax_num_meta_sgh]hmax_num_meta_sg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj1hMO ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj1hMO ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hMO hjhhubj)}(hhh]h)}(h$Allocates an integrity memory regionh]h$Allocates an integrity memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMO hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMO ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_pd *pd`` protection domain associated with the region ``u32 max_num_data_sg`` maximum data sg entries available for registration ``u32 max_num_meta_sg`` maximum metadata sg entries available for registration **Notes** Memory registration page/sg lists must not exceed max_num_sg, also the integrity page/sg lists must not exceed max_num_meta_sg.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMS hjubj)}(hhh](j)}(hB``struct ib_pd *pd`` protection domain associated with the region h](j)}(h``struct ib_pd *pd``h]j )}(hjh]hstruct ib_pd *pd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMP hjubj)}(hhh]h)}(h,protection domain associated with the regionh]h,protection domain associated with the region}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMP hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMP hjubj)}(hK``u32 max_num_data_sg`` maximum data sg entries available for registration h](j)}(h``u32 max_num_data_sg``h]j )}(hj)h]hu32 max_num_data_sg}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMQ hj#ubj)}(hhh]h)}(h2maximum data sg entries available for registrationh]h2maximum data sg entries available for registration}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMQ hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMQ hjubj)}(hO``u32 max_num_meta_sg`` maximum metadata sg entries available for registration h](j)}(h``u32 max_num_meta_sg``h]j )}(hjbh]hu32 max_num_meta_sg}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMS hj\ubj)}(hhh]h)}(h6maximum metadata sg entries available for registrationh]h6maximum metadata sg entries available for registration}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMR hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMS hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMU hjubh)}(hMemory registration page/sg lists must not exceed max_num_sg, also the integrity page/sg lists must not exceed max_num_meta_sg.h]hMemory registration page/sg lists must not exceed max_num_sg, also the integrity page/sg lists must not exceed max_num_meta_sg.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMU hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_alloc_xrcd_user (C function)c.ib_alloc_xrcd_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hkstruct ib_xrcd * ib_alloc_xrcd_user (struct ib_device *device, struct inode *inode, struct ib_udata *udata)h]j")}(histruct ib_xrcd *ib_alloc_xrcd_user(struct ib_device *device, struct inode *inode, struct ib_udata *udata)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubh)}(hhh]jN)}(hib_xrcdh]hib_xrcd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_alloc_xrcd_usersbc.ib_alloc_xrcd_userasbuh1hhjhhhjhM ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hib_alloc_xrcd_userh]jN)}(hj h]hib_alloc_xrcd_user}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hG(struct ib_device *device, struct inode *inode, struct ib_udata *udata)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjYubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj{hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjxubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj}modnameN classnameNjkjn)}jq]jc.ib_alloc_xrcd_userasbuh1hhjYubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct inode *inodeh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_alloc_xrcd_userasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hinodeh]hinode}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hj=hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj9ubj:)}(h h]h }(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubh)}(hhh]jN)}(hib_udatah]hib_udata}(hj[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj]modnameN classnameNjkjn)}jq]jc.ib_alloc_xrcd_userasbuh1hhj9ubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjN)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hAllocates an XRC domain.h]hAllocates an XRC domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` The device on which to allocate the XRC domain. ``struct inode *inode`` inode to connect XRCD ``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh](j)}(hM``struct ib_device *device`` The device on which to allocate the XRC domain. h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(h/The device on which to allocate the XRC domain.h]h/The device on which to allocate the XRC domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``struct inode *inode`` inode to connect XRCD h](j)}(h``struct inode *inode``h]j )}(hj8h]hstruct inode *inode}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj2ubj)}(hhh]h)}(hinode to connect XRCDh]hinode to connect XRCD}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM hjubj)}(hD``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](j)}(h``struct ib_udata *udata``h]j )}(hjqh]hstruct ib_udata *udata}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjkubj)}(hhh]h)}(h)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ib_dealloc_xrcd_user (C function)c.ib_dealloc_xrcd_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hGint ib_dealloc_xrcd_user (struct ib_xrcd *xrcd, struct ib_udata *udata)h]j")}(hFint ib_dealloc_xrcd_user(struct ib_xrcd *xrcd, struct ib_udata *udata)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hib_dealloc_xrcd_userh]jN)}(hib_dealloc_xrcd_userh]hib_dealloc_xrcd_user}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h.(struct ib_xrcd *xrcd, struct ib_udata *udata)h](j)}(hstruct ib_xrcd *xrcdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_xrcdh]hib_xrcd}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj(modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_dealloc_xrcd_userasbuh1hhjubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hxrcdh]hxrcd}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjvubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jBc.ib_dealloc_xrcd_userasbuh1hhjvubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjN)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hDeallocates an XRC domain.h]hDeallocates an XRC domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_xrcd *xrcd`` The XRC domain to deallocate. ``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh](j)}(h7``struct ib_xrcd *xrcd`` The XRC domain to deallocate. h](j)}(h``struct ib_xrcd *xrcd``h]j )}(hj<h]hstruct ib_xrcd *xrcd}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj6ubj)}(hhh]h)}(hThe XRC domain to deallocate.h]hThe XRC domain to deallocate.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM hj3ubj)}(hD``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](j)}(h``struct ib_udata *udata``h]j )}(hjuh]hstruct ib_udata *udata}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjoubj)}(hhh]h)}(h)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM hj3ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_create_wq (C function)c.ib_create_wqhNtauh1jhhhhhNhNubj)}(hhh](j)}(hOstruct ib_wq * ib_create_wq (struct ib_pd *pd, struct ib_wq_init_attr *wq_attr)h]j")}(hMstruct ib_wq *ib_create_wq(struct ib_pd *pd, struct ib_wq_init_attr *wq_attr)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubh)}(hhh]jN)}(hib_wqh]hib_wq}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jg ib_create_wqsbc.ib_create_wqasbuh1hhjhhhjhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h ib_create_wqh]jN)}(hj h]h ib_create_wq}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h3(struct ib_pd *pd, struct ib_wq_init_attr *wq_attr)h](j)}(hstruct ib_pd *pdh](j()}(hj+h]hstruct}(hjIhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjEubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubh)}(hhh]jN)}(hib_pdh]hib_pd}(hjghhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjimodnameN classnameNjkjn)}jq]j c.ib_create_wqasbuh1hhjEubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjN)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hstruct ib_wq_init_attr *wq_attrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_wq_init_attrh]hib_wq_init_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j c.ib_create_wqasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hwq_attrh]hwq_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h=Creates a WQ associated with the specified protection domain.h]h=Creates a WQ associated with the specified protection domain.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj7hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjRjjRjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_pd *pd`` The protection domain associated with the WQ. ``struct ib_wq_init_attr *wq_attr`` A list of initial attributes required to create the WQ. If WQ creation succeeds, then the attributes are updated to the actual capabilities of the created WQ. **Description** wq_attr->max_wr and wq_attr->max_sge determine the requested size of the WQ, and set to the actual values allocated on return. If ib_create_wq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjVubj)}(hhh](j)}(hC``struct ib_pd *pd`` The protection domain associated with the WQ. h](j)}(h``struct ib_pd *pd``h]j )}(hj{h]hstruct ib_pd *pd}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjuubj)}(hhh]h)}(h-The protection domain associated with the WQ.h]h-The protection domain associated with the WQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubj)}(h``struct ib_wq_init_attr *wq_attr`` A list of initial attributes required to create the WQ. If WQ creation succeeds, then the attributes are updated to the actual capabilities of the created WQ. h](j)}(h#``struct ib_wq_init_attr *wq_attr``h]j )}(hjh]hstruct ib_wq_init_attr *wq_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hA list of initial attributes required to create the WQ. If WQ creation succeeds, then the attributes are updated to the actual capabilities of the created WQ.h]hA list of initial attributes required to create the WQ. If WQ creation succeeds, then the attributes are updated to the actual capabilities of the created WQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubeh}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjVubh)}(hwq_attr->max_wr and wq_attr->max_sge determine the requested size of the WQ, and set to the actual values allocated on return. If ib_create_wq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.h]hwq_attr->max_wr and wq_attr->max_sge determine the requested size of the WQ, and set to the actual values allocated on return. If ib_create_wq() succeeds, then max_wr and max_sge will always be at least as large as the requested values.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_destroy_wq_user (C function)c.ib_destroy_wq_userhNtauh1jhhhhhNhNubj)}(hhh](j)}(hAint ib_destroy_wq_user (struct ib_wq *wq, struct ib_udata *udata)h]j")}(h@int ib_destroy_wq_user(struct ib_wq *wq, struct ib_udata *udata)h](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM7 ubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1hhhjChM7 ubj)}(hib_destroy_wq_userh]jN)}(hib_destroy_wq_userh]hib_destroy_wq_user}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjChM7 ubj)}(h*(struct ib_wq *wq, struct ib_udata *udata)h](j)}(hstruct ib_wq *wqh](j()}(hj+h]hstruct}(hjrhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjnubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubh)}(hhh]jN)}(hib_wqh]hib_wq}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjXsbc.ib_destroy_wq_userasbuh1hhjnubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjN)}(hwqh]hwq}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hstruct ib_udata *udatah](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_destroy_wq_userasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hudatah]hudata}(hj;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhjChM7 ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj-hhhjChM7 ubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhjChM7 hj*hhubj)}(hhh]h)}(hDestroys the specified user WQ.h]hDestroys the specified user WQ.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM7 hjbhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChM7 ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj}jj}jjjuh1jhhhhhNhNubj)}(hg**Parameters** ``struct ib_wq *wq`` The WQ to destroy. ``struct ib_udata *udata`` Valid user datah](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM; hjubj)}(hhh](j)}(h(``struct ib_wq *wq`` The WQ to destroy. h](j)}(h``struct ib_wq *wq``h]j )}(hjh]hstruct ib_wq *wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM8 hjubj)}(hhh]h)}(hThe WQ to destroy.h]hThe WQ to destroy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8 hjubj)}(h*``struct ib_udata *udata`` Valid user datah](j)}(h``struct ib_udata *udata``h]j )}(hjh]hstruct ib_udata *udata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM: hjubj)}(hhh]h)}(hValid user datah]hValid user data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM9 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_map_mr_sg_pi (C function)c.ib_map_mr_sg_pihNtauh1jhhhhhNhNubj)}(hhh](j)}(hint ib_map_mr_sg_pi (struct ib_mr *mr, struct scatterlist *data_sg, int data_sg_nents, unsigned int *data_sg_offset, struct scatterlist *meta_sg, int meta_sg_nents, unsigned int *meta_sg_offset, unsigned int page_size)h]j")}(hint ib_map_mr_sg_pi(struct ib_mr *mr, struct scatterlist *data_sg, int data_sg_nents, unsigned int *data_sg_offset, struct scatterlist *meta_sg, int meta_sg_nents, unsigned int *meta_sg_offset, unsigned int page_size)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5hhhjGhM ubj)}(hib_map_mr_sg_pih]jN)}(hib_map_mr_sg_pih]hib_map_mr_sg_pi}(hjZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhjGhM ubj)}(h(struct ib_mr *mr, struct scatterlist *data_sg, int data_sg_nents, unsigned int *data_sg_offset, struct scatterlist *meta_sg, int meta_sg_nents, unsigned int *meta_sg_offset, unsigned int page_size)h](j)}(hstruct ib_mr *mrh](j()}(hj+h]hstruct}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjrubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubh)}(hhh]jN)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj\sbc.ib_map_mr_sg_piasbuh1hhjrubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjN)}(hmrh]hmr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hstruct scatterlist *data_sgh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_map_mr_sg_piasbuh1hhjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdata_sgh]hdata_sg}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hint data_sg_nentsh](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubj:)}(h h]h }(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubjN)}(h data_sg_nentsh]h data_sg_nents}(hjthhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hunsigned int *data_sg_offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdata_sg_offseth]hdata_sg_offset}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hstruct scatterlist *meta_sgh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jc.ib_map_mr_sg_piasbuh1hhjubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmeta_sgh]hmeta_sg}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hint meta_sg_nentsh](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubjN)}(h meta_sg_nentsh]h meta_sg_nents}(hjwhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hunsigned int *meta_sg_offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmeta_sg_offseth]hmeta_sg_offset}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hunsigned int page_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h page_sizeh]h page_size}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhjGhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj1hhhjGhM ubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jhjGhM hj.hhubj)}(hhh]h)}(hrMap the dma mapped SG lists for PI (protection information) and set an appropriate memory region for registration.h]hrMap the dma mapped SG lists for PI (protection information) and set an appropriate memory region for registration.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjMhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjhjjhjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_mr *mr`` memory region ``struct scatterlist *data_sg`` dma mapped scatterlist for data ``int data_sg_nents`` number of entries in data_sg ``unsigned int *data_sg_offset`` offset in bytes into data_sg ``struct scatterlist *meta_sg`` dma mapped scatterlist for metadata ``int meta_sg_nents`` number of entries in meta_sg ``unsigned int *meta_sg_offset`` offset in bytes into meta_sg ``unsigned int page_size`` page vector desired page size **Description** Constraints: - The MR must be allocated with type IB_MR_TYPE_INTEGRITY. After this completes successfully, the memory region is ready for registration. **Return** 0 on success.h](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubj)}(hhh](j)}(h#``struct ib_mr *mr`` memory region h](j)}(h``struct ib_mr *mr``h]j )}(hjh]hstruct ib_mr *mr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(h memory regionh]h memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h@``struct scatterlist *data_sg`` dma mapped scatterlist for data h](j)}(h``struct scatterlist *data_sg``h]j )}(hjh]hstruct scatterlist *data_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hdma mapped scatterlist for datah]hdma mapped scatterlist for data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``int data_sg_nents`` number of entries in data_sg h](j)}(h``int data_sg_nents``h]j )}(hjh]hint data_sg_nents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hnumber of entries in data_sgh]hnumber of entries in data_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h>``unsigned int *data_sg_offset`` offset in bytes into data_sg h](j)}(h ``unsigned int *data_sg_offset``h]j )}(hj<h]hunsigned int *data_sg_offset}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj6ubj)}(hhh]h)}(hoffset in bytes into data_sgh]hoffset in bytes into data_sg}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjubj)}(hD``struct scatterlist *meta_sg`` dma mapped scatterlist for metadata h](j)}(h``struct scatterlist *meta_sg``h]j )}(hjuh]hstruct scatterlist *meta_sg}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjoubj)}(hhh]h)}(h#dma mapped scatterlist for metadatah]h#dma mapped scatterlist for metadata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``int meta_sg_nents`` number of entries in meta_sg h](j)}(h``int meta_sg_nents``h]j )}(hjh]hint meta_sg_nents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hnumber of entries in meta_sgh]hnumber of entries in meta_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h>``unsigned int *meta_sg_offset`` offset in bytes into meta_sg h](j)}(h ``unsigned int *meta_sg_offset``h]j )}(hjh]hunsigned int *meta_sg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hoffset in bytes into meta_sgh]hoffset in bytes into meta_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h9``unsigned int page_size`` page vector desired page size h](j)}(h``unsigned int page_size``h]j )}(hj h]hunsigned int page_size}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hpage vector desired page sizeh]hpage vector desired page size}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubeh}(h]h ]h"]h$]h&]uh1jhjlubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubh)}(hGConstraints: - The MR must be allocated with type IB_MR_TYPE_INTEGRITY.h]hGConstraints: - The MR must be allocated with type IB_MR_TYPE_INTEGRITY.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubh)}(hPAfter this completes successfully, the memory region is ready for registration.h]hPAfter this completes successfully, the memory region is ready for registration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubh)}(h 0 on success.h]h 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_map_mr_sg (C function)c.ib_map_mr_sghNtauh1jhhhhhNhNubj)}(hhh](j)}(hzint ib_map_mr_sg (struct ib_mr *mr, struct scatterlist *sg, int sg_nents, unsigned int *sg_offset, unsigned int page_size)h]j")}(hyint ib_map_mr_sg(struct ib_mr *mr, struct scatterlist *sg, int sg_nents, unsigned int *sg_offset, unsigned int page_size)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(h ib_map_mr_sgh]jN)}(h ib_map_mr_sgh]h ib_map_mr_sg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hi(struct ib_mr *mr, struct scatterlist *sg, int sg_nents, unsigned int *sg_offset, unsigned int page_size)h](j)}(hstruct ib_mr *mrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_mrh]hib_mr}(hj1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj3modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_map_mr_sgasbuh1hhjubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmrh]hmr}(hjlhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jMc.ib_map_mr_sgasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int sg_nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hsg_nentsh]hsg_nents}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int *sg_offseth](j)}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubj)}(hinth]hint}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjN)}(h sg_offseth]h sg_offset}(hjohhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int page_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h page_sizeh]h page_size}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hLMap the largest prefix of a dma mapped SG list and set it the memory region.h]hLMap the largest prefix of a dma mapped SG list and set it the memory region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_mr *mr`` memory region ``struct scatterlist *sg`` dma mapped scatterlist ``int sg_nents`` number of entries in sg ``unsigned int *sg_offset`` offset in bytes into sg ``unsigned int page_size`` page vector desired page size **Description** Constraints: - The first sg element is allowed to have an offset. - Each sg element must either be aligned to page_size or virtually contiguous to the previous element. In case an sg element has a non-contiguous offset, the mapping prefix will not include it. - The last sg element is allowed to have length less than page_size. - If sg_nents total byte length exceeds the mr max_num_sge * page_size then only max_num_sg entries will be mapped. - If the MR was allocated with type IB_MR_TYPE_SG_GAPS, none of these constraints holds and the page_size argument is ignored. Returns the number of sg elements that were mapped to the memory region. After this completes successfully, the memory region is ready for registration.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh](j)}(h#``struct ib_mr *mr`` memory region h](j)}(h``struct ib_mr *mr``h]j )}(hj+h]hstruct ib_mr *mr}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj%ubj)}(hhh]h)}(h memory regionh]h memory region}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hj"ubj)}(h2``struct scatterlist *sg`` dma mapped scatterlist h](j)}(h``struct scatterlist *sg``h]j )}(hjdh]hstruct scatterlist *sg}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj^ubj)}(hhh]h)}(hdma mapped scatterlisth]hdma mapped scatterlist}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhM hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhM hj"ubj)}(h)``int sg_nents`` number of entries in sg h](j)}(h``int sg_nents``h]j )}(hjh]h int sg_nents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hnumber of entries in sgh]hnumber of entries in sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj"ubj)}(h4``unsigned int *sg_offset`` offset in bytes into sg h](j)}(h``unsigned int *sg_offset``h]j )}(hjh]hunsigned int *sg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hoffset in bytes into sgh]hoffset in bytes into sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj"ubj)}(h9``unsigned int page_size`` page vector desired page size h](j)}(h``unsigned int page_size``h]j )}(hjh]hunsigned int page_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubj)}(hhh]h)}(hpage vector desired page sizeh]hpage vector desired page size}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hj"ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(h Constraints:h]h Constraints:}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj_D)}(hhh](jdD)}(h2The first sg element is allowed to have an offset.h]h)}(hjth]h2The first sg element is allowed to have an offset.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjrubah}(h]h ]h"]h$]h&]uh1jcDhjoubjdD)}(hEach sg element must either be aligned to page_size or virtually contiguous to the previous element. In case an sg element has a non-contiguous offset, the mapping prefix will not include it.h]h)}(hEach sg element must either be aligned to page_size or virtually contiguous to the previous element. In case an sg element has a non-contiguous offset, the mapping prefix will not include it.h]hEach sg element must either be aligned to page_size or virtually contiguous to the previous element. In case an sg element has a non-contiguous offset, the mapping prefix will not include it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jcDhjoubjdD)}(hBThe last sg element is allowed to have length less than page_size.h]h)}(hjh]hBThe last sg element is allowed to have length less than page_size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jcDhjoubjdD)}(hqIf sg_nents total byte length exceeds the mr max_num_sge * page_size then only max_num_sg entries will be mapped.h]h)}(hqIf sg_nents total byte length exceeds the mr max_num_sge * page_size then only max_num_sg entries will be mapped.h]hqIf sg_nents total byte length exceeds the mr max_num_sge * page_size then only max_num_sg entries will be mapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jcDhjoubjdD)}(h}If the MR was allocated with type IB_MR_TYPE_SG_GAPS, none of these constraints holds and the page_size argument is ignored. h]h)}(h|If the MR was allocated with type IB_MR_TYPE_SG_GAPS, none of these constraints holds and the page_size argument is ignored.h]h|If the MR was allocated with type IB_MR_TYPE_SG_GAPS, none of these constraints holds and the page_size argument is ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubah}(h]h ]h"]h$]h&]uh1jcDhjoubeh}(h]h ]h"]h$]h&]jDjDuh1j^DhjhM hjubh)}(hHReturns the number of sg elements that were mapped to the memory region.h]hHReturns the number of sg elements that were mapped to the memory region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hPAfter this completes successfully, the memory region is ready for registration.h]hPAfter this completes successfully, the memory region is ready for registration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_sg_to_pages (C function)c.ib_sg_to_pageshNtauh1jhhhhhNhNubj)}(hhh](j)}(hint ib_sg_to_pages (struct ib_mr *mr, struct scatterlist *sgl, int sg_nents, unsigned int *sg_offset_p, int (*set_page)(struct ib_mr *, u64))h]j")}(hint ib_sg_to_pages(struct ib_mr *mr, struct scatterlist *sgl, int sg_nents, unsigned int *sg_offset_p, int (*set_page)(struct ib_mr*, u64))h](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-hhhj?hM ubj)}(hib_sg_to_pagesh]jN)}(hib_sg_to_pagesh]hib_sg_to_pages}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hM ubj)}(hy(struct ib_mr *mr, struct scatterlist *sgl, int sg_nents, unsigned int *sg_offset_p, int (*set_page)(struct ib_mr*, u64))h](j)}(hstruct ib_mr *mrh](j()}(hj+h]hstruct}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjjubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubh)}(hhh]jN)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjTsbc.ib_sg_to_pagesasbuh1hhjjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjN)}(hmrh]hmr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hstruct scatterlist *sglh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_sg_to_pagesasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsglh]hsgl}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h int sg_nentsh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubjN)}(hsg_nentsh]hsg_nents}(hjlhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hunsigned int *sg_offset_ph](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h sg_offset_ph]h sg_offset_p}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h#int (*set_page)(struct ib_mr*, u64)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(h(h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hset_pageh]hset_page}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(h)h]h)}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj()}(hj+h]hstruct}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_mrh]hib_mr}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjcmodnameN classnameNjkjn)}jq]jc.ib_sg_to_pagesasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h,h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_sg_to_pagesasbuh1hhjubj)}(hj*h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj?hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj)hhhj?hM ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj?hM hj&hhubj)}(hhh]h)}(h8Convert the largest prefix of a sg list to a page vectorh]h8Convert the largest prefix of a sg list to a page vector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhhhNhNubj)}(hXW**Parameters** ``struct ib_mr *mr`` memory region ``struct scatterlist *sgl`` dma mapped scatterlist ``int sg_nents`` number of entries in sg ``unsigned int *sg_offset_p`` ==== ======================================================= IN start offset in bytes into sg OUT offset in bytes for element n of the sg of the first byte that has not been processed where n is the return value of this function. ==== ======================================================= ``int (*set_page)(struct ib_mr *, u64)`` driver page assignment function pointer **Description** Core service helper for drivers to convert the largest prefix of given sg list to a page vector. The sg list prefix converted is the prefix that meet the requirements of ib_map_mr_sg. Returns the number of sg elements that were assigned to a page vector.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh](j)}(h#``struct ib_mr *mr`` memory region h](j)}(h``struct ib_mr *mr``h]j )}(hj3h]hstruct ib_mr *mr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj-ubj)}(hhh]h)}(h memory regionh]h memory region}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM hj*ubj)}(h3``struct scatterlist *sgl`` dma mapped scatterlist h](j)}(h``struct scatterlist *sgl``h]j )}(hjlh]hstruct scatterlist *sgl}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjfubj)}(hhh]h)}(hdma mapped scatterlisth]hdma mapped scatterlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubj)}(h)``int sg_nents`` number of entries in sg h](j)}(h``int sg_nents``h]j )}(hjh]h int sg_nents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hnumber of entries in sgh]hnumber of entries in sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubj)}(hXN``unsigned int *sg_offset_p`` ==== ======================================================= IN start offset in bytes into sg OUT offset in bytes for element n of the sg of the first byte that has not been processed where n is the return value of this function. ==== ======================================================= h](j)}(h``unsigned int *sg_offset_p``h]j )}(hjh]hunsigned int *sg_offset_p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK7uh1jhjubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(hINh]hIN}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj#ubah}(h]h ]h"]h$]h&]uh1j!hjubj")}(hhh]h)}(hstart offset in bytes into sgh]hstart offset in bytes into sg}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM hj;ubah}(h]h ]h"]h$]h&]uh1j!hjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j")}(hhh]h)}(hOUTh]hOUT}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj[ubah}(h]h ]h"]h$]h&]uh1j!hjXubj")}(hhh]h)}(hoffset in bytes for element n of the sg of the first byte that has not been processed where n is the return value of this function.h]hoffset in bytes for element n of the sg of the first byte that has not been processed where n is the return value of this function.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjsubah}(h]h ]h"]h$]h&]uh1j!hjXubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubj)}(hQ``int (*set_page)(struct ib_mr *, u64)`` driver page assignment function pointer h](j)}(h(``int (*set_page)(struct ib_mr *, u64)``h]j )}(hjh]h$int (*set_page)(struct ib_mr *, u64)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(h'driver page assignment function pointerh]h'driver page assignment function pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj*ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hCore service helper for drivers to convert the largest prefix of given sg list to a page vector. The sg list prefix converted is the prefix that meet the requirements of ib_map_mr_sg.h]hCore service helper for drivers to convert the largest prefix of given sg list to a page vector. The sg list prefix converted is the prefix that meet the requirements of ib_map_mr_sg.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hFReturns the number of sg elements that were assigned to a page vector.h]hFReturns the number of sg elements that were assigned to a page vector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_drain_sq (C function) c.ib_drain_sqhNtauh1jhhhhhNhNubj)}(hhh](j)}(h#void ib_drain_sq (struct ib_qp *qp)h]j")}(h"void ib_drain_sq(struct ib_qp *qp)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@hhhjRhM ubj)}(h ib_drain_sqh]jN)}(h ib_drain_sqh]h ib_drain_sq}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjRhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj}ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubh)}(hhh]jN)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjgsb c.ib_drain_sqasbuh1hhj}ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubjN)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhj@hhhjRhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj<hhhjRhM ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhjRhM hj9hhubj)}(hhh]h)}(h>Block until all SQ CQEs have been consumed by the application.h]h>Block until all SQ CQEs have been consumed by the application.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_qp *qp`` queue pair to drain **Description** If the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_sq(). The caller must: ensure there is room in the CQ and SQ for the drain work request and completion. allocate the CQ using ib_alloc_cq(). ensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubj)}(hhh]j)}(h)``struct ib_qp *qp`` queue pair to drain h](j)}(h``struct ib_qp *qp``h]j )}(hjEh]hstruct ib_qp *qp}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj?ubj)}(hhh]h)}(hqueue pair to drainh]hqueue pair to drain}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubh)}(hIf the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_sq().h]hIf the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_sq().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubh)}(hThe caller must:h]hThe caller must:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubh)}(hPensure there is room in the CQ and SQ for the drain work request and completion.h]hPensure there is room in the CQ and SQ for the drain work request and completion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubh)}(h$allocate the CQ using ib_alloc_cq().h]h$allocate the CQ using ib_alloc_cq().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubh)}(hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h]hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_drain_rq (C function) c.ib_drain_rqhNtauh1jhhhhhNhNubj)}(hhh](j)}(h#void ib_drain_rq (struct ib_qp *qp)h]j")}(h"void ib_drain_rq(struct ib_qp *qp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(h ib_drain_rqh]jN)}(h ib_drain_rqh]h ib_drain_rq}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj:ubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjYubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj^modnameN classnameNjkjn)}jq]jt)}jgj$sb c.ib_drain_rqasbuh1hhj:ubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjN)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h>Block until all RQ CQEs have been consumed by the application.h]h>Block until all RQ CQEs have been consumed by the application.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_qp *qp`` queue pair to drain **Description** If the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_rq(). The caller must: ensure there is room in the CQ and RQ for the drain work request and completion. allocate the CQ using ib_alloc_cq(). ensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]j)}(h)``struct ib_qp *qp`` queue pair to drain h](j)}(h``struct ib_qp *qp``h]j )}(hjh]hstruct ib_qp *qp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hqueue pair to drainh]hqueue pair to drain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hIf the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_rq().h]hIf the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_rq().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hThe caller must:h]hThe caller must:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hPensure there is room in the CQ and RQ for the drain work request and completion.h]hPensure there is room in the CQ and RQ for the drain work request and completion.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(h$allocate the CQ using ib_alloc_cq().h]h$allocate the CQ using ib_alloc_cq().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h]hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_drain_qp (C function) c.ib_drain_qphNtauh1jhhhhhNhNubj)}(hhh](j)}(h#void ib_drain_qp (struct ib_qp *qp)h]j")}(h"void ib_drain_qp(struct ib_qp *qp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(h ib_drain_qph]jN)}(h ib_drain_qph]h ib_drain_qp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsb c.ib_drain_qpasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hqph]hqp}(hjThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hQBlock until all CQEs have been consumed by the application on both the RQ and SQ.h]hQBlock until all CQEs have been consumed by the application on both the RQ and SQ.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hXO**Parameters** ``struct ib_qp *qp`` queue pair to drain **Description** The caller must: ensure there is room in the CQ(s), SQ, and RQ for drain work requests and completions. allocate the CQs using ib_alloc_cq(). ensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]j)}(h)``struct ib_qp *qp`` queue pair to drain h](j)}(h``struct ib_qp *qp``h]j )}(hjh]hstruct ib_qp *qp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubj)}(hhh]h)}(hqueue pair to drainh]hqueue pair to drain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hThe caller must:h]hThe caller must:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hVensure there is room in the CQ(s), SQ, and RQ for drain work requests and completions.h]hVensure there is room in the CQ(s), SQ, and RQ for drain work requests and completions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(h%allocate the CQs using ib_alloc_cq().h]h%allocate the CQs using ib_alloc_cq().}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.h]hqensure that there are no other contexts that are posting WRs concurrently. Otherwise the drain is not guaranteed.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'rdma_alloc_hw_stats_struct (C function)c.rdma_alloc_hw_stats_structhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct rdma_hw_stats * rdma_alloc_hw_stats_struct (const struct rdma_stat_desc *descs, int num_counters, unsigned long lifespan)h]j")}(h~struct rdma_hw_stats *rdma_alloc_hw_stats_struct(const struct rdma_stat_desc *descs, int num_counters, unsigned long lifespan)h](j()}(hj+h]hstruct}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMK ubj:)}(h h]h }(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhhjyhMK ubh)}(hhh]jN)}(h rdma_hw_statsh]h rdma_hw_stats}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgrdma_alloc_hw_stats_structsbc.rdma_alloc_hw_stats_structasbuh1hhjhhhhjyhMK ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhhjyhMK ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjyhMK ubj)}(hrdma_alloc_hw_stats_structh]jN)}(hjh]hrdma_alloc_hw_stats_struct}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjyhMK ubj)}(hN(const struct rdma_stat_desc *descs, int num_counters, unsigned long lifespan)h](j)}(h"const struct rdma_stat_desc *descsh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hrdma_stat_desch]hrdma_stat_desc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj!modnameN classnameNjkjn)}jq]jc.rdma_alloc_hw_stats_structasbuh1hhjubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdescsh]hdescs}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint num_countersh](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubjN)}(h num_countersh]h num_counters}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long lifespanh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hlifespanh]hlifespan}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhjyhMK ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjdhhhjyhMK ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhjyhMK hjahhubj)}(hhh]h)}(h;Helper function to allocate dynamic struct for the drivers.h]h;Helper function to allocate dynamic struct for the drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMK hjhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjyhMK ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhhhNhNubj)}(h**Parameters** ``const struct rdma_stat_desc *descs`` array of static descriptors ``int num_counters`` number of elements in array ``unsigned long lifespan`` milliseconds between updatesh](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMO hj$ubj)}(hhh](j)}(hC``const struct rdma_stat_desc *descs`` array of static descriptors h](j)}(h&``const struct rdma_stat_desc *descs``h]j )}(hjIh]h"const struct rdma_stat_desc *descs}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMM hjCubj)}(hhh]h)}(harray of static descriptorsh]harray of static descriptors}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMM hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMM hj@ubj)}(h1``int num_counters`` number of elements in array h](j)}(h``int num_counters``h]j )}(hjh]hint num_counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMN hj|ubj)}(hhh]h)}(hnumber of elements in arrayh]hnumber of elements in array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMN hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMN hj@ubj)}(h7``unsigned long lifespan`` milliseconds between updatesh](j)}(h``unsigned long lifespan``h]j )}(hjh]hunsigned long lifespan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMP hjubj)}(hhh]h)}(hmilliseconds between updatesh]hmilliseconds between updates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMO hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMP hj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&rdma_free_hw_stats_struct (C function)c.rdma_free_hw_stats_structhNtauh1jhhhhhNhNubj)}(hhh](j)}(hmodnameN classnameNjkjn)}jq]j.c.ib_sa_path_rec_getasbuh1hhjubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hrech]hrec}(hjuhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hib_sa_comp_mask comp_maskh](h)}(hhh]jN)}(hib_sa_comp_maskh]hib_sa_comp_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j.c.ib_sa_path_rec_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h comp_maskh]h comp_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long timeout_msh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h timeout_msh]h timeout_ms}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]jN)}(hgfp_th]hgfp_t}(hj*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,modnameN classnameNjkjn)}jq]j.c.ib_sa_path_rec_getasbuh1hhj#ubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubjN)}(hgfp_maskh]hgfp_mask}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h]void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context)h](j)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubj:)}(h h]h }(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjN)}(hcallbackh]hcallback}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubj)}(hj*h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubjN)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubh)}(hhh]jN)}(h sa_path_rech]h sa_path_rec}(hj0hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj-ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj2modnameN classnameNjkjn)}jq]j.c.ib_sa_path_rec_getasbuh1hhjkubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjN)}(hresph]hresp}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubj)}(hjh]h,}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubjN)}(h num_pathsh]h num_paths}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjN)}(hcontexth]hcontext}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubj)}(hj*h]h)}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *contexth](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>ubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjN)}(hcontexth]hcontext}(hjkhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_sa_query **sa_queryh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_sa_queryh]h ib_sa_query}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j.c.ib_sa_path_rec_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsa_queryh]hsa_query}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMghjhhubj)}(hhh]h)}(hStart a Path get queryh]hStart a Path get query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMghjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMgubeh}(h]h ](jefunctioneh"]h$]h&]jjejj*jj*jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_sa_client *client`` SA client ``struct ib_device *device`` device to send query on ``u32 port_num`` port number to send query on ``struct sa_path_rec *rec`` Path Record to send in query ``ib_sa_comp_mask comp_mask`` component mask to send in query ``unsigned long timeout_ms`` time to wait for response ``gfp_t gfp_mask`` GFP mask to use for internal allocations ``void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context)`` function called when query completes, times out or is canceled ``void *context`` opaque user context passed to callback ``struct ib_sa_query **sa_query`` query context, used to cancel query **Description** Send a Path Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0. If the return value of ib_sa_path_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMkhj.ubj)}(hhh](j)}(h*``struct ib_sa_client *client`` SA client h](j)}(h``struct ib_sa_client *client``h]j )}(hjSh]hstruct ib_sa_client *client}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhhjMubj)}(hhh]h)}(h SA clienth]h SA client}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhhjJubj)}(h5``struct ib_device *device`` device to send query on h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMihjubj)}(hhh]h)}(hdevice to send query onh]hdevice to send query on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjJubj)}(h.``u32 port_num`` port number to send query on h](j)}(h``u32 port_num``h]j )}(hjh]h u32 port_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMjhjubj)}(hhh]h)}(hport number to send query onh]hport number to send query on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjJubj)}(h9``struct sa_path_rec *rec`` Path Record to send in query h](j)}(h``struct sa_path_rec *rec``h]j )}(hjh]hstruct sa_path_rec *rec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMkhjubj)}(hhh]h)}(hPath Record to send in queryh]hPath Record to send in query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjJubj)}(h>``ib_sa_comp_mask comp_mask`` component mask to send in query h](j)}(h``ib_sa_comp_mask comp_mask``h]j )}(hj7h]hib_sa_comp_mask comp_mask}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMlhj1ubj)}(hhh]h)}(hcomponent mask to send in queryh]hcomponent mask to send in query}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMlhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMlhjJubj)}(h7``unsigned long timeout_ms`` time to wait for response h](j)}(h``unsigned long timeout_ms``h]j )}(hjph]hunsigned long timeout_ms}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMmhjjubj)}(hhh]h)}(htime to wait for responseh]htime to wait for response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjJubj)}(h<``gfp_t gfp_mask`` GFP mask to use for internal allocations h](j)}(h``gfp_t gfp_mask``h]j )}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMnhjubj)}(hhh]h)}(h(GFP mask to use for internal allocationsh]h(GFP mask to use for internal allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjJubj)}(h``void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context)`` function called when query completes, times out or is canceled h](j)}(ha``void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context)``h]j )}(hjh]h]void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMphjubj)}(hhh]h)}(h>function called when query completes, times out or is canceledh]h>function called when query completes, times out or is canceled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjJubj)}(h9``void *context`` opaque user context passed to callback h](j)}(h``void *context``h]j )}(hjh]h void *context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMqhjubj)}(hhh]h)}(h&opaque user context passed to callbackh]h&opaque user context passed to callback}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMqhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMqhjJubj)}(hF``struct ib_sa_query **sa_query`` query context, used to cancel query h](j)}(h!``struct ib_sa_query **sa_query``h]j )}(hjUh]hstruct ib_sa_query **sa_query}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMrhjOubj)}(hhh]h)}(h#query context, used to cancel queryh]h#query context, used to cancel query}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMrhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMrhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMthj.ubh)}(hXaSend a Path Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0.h]hXaSend a Path Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMshj.ubh)}(hIf the return value of ib_sa_path_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.h]hIf the return value of ib_sa_path_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMzhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ib_sa_service_rec_get (C function)c.ib_sa_service_rec_gethNtauh1jhhhhhNhNubj)}(hhh](j)}(hXSint ib_sa_service_rec_get (struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_service_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context), void *context, struct ib_sa_query **sa_query)h]j")}(hXRint ib_sa_service_rec_get(struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_service_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context), void *context, struct ib_sa_query **sa_query)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hib_sa_service_rec_geth]jN)}(hib_sa_service_rec_geth]hib_sa_service_rec_get}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hX9(struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_service_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context), void *context, struct ib_sa_query **sa_query)h](j)}(hstruct ib_sa_client *clienth](j()}(hj+h]hstruct}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_sa_clienth]h ib_sa_client}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjAmodnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_sa_service_rec_getasbuh1hhjubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hclienth]hclient}(hjzhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hport_numh]hport_num}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sa_service_rec *rech](j()}(hj+h]hstruct}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubh)}(hhh]jN)}(hsa_service_rech]hsa_service_rec}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjfubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjkmodnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjN)}(hrech]hrec}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hib_sa_comp_mask comp_maskh](h)}(hhh]jN)}(hib_sa_comp_maskh]hib_sa_comp_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h comp_maskh]h comp_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long timeout_msh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h timeout_msh]h timeout_ms}(hj;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]jN)}(hgfp_th]hgfp_t}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjTubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjYmodnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjPubj:)}(h h]h }(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubjN)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hcvoid (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hcallbackh]hcallback}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(hj*h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(hjh]h,}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsa_service_rech]hsa_service_rec}(hj]hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj_modnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhjubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hresph]hresp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(hjh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h num_servicesh]h num_services}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(hjh]h,}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj. hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hcontexth]hcontext}(hjI hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubj)}(hj*h]h)}(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *contexth](j)}(hvoidh]hvoid}(hjo hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjk ubj:)}(h h]h }(hj} hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjk ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk ubjN)}(hcontexth]hcontext}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjk ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_sa_query **sa_queryh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h ib_sa_queryh]h ib_sa_query}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j[c.ib_sa_service_rec_getasbuh1hhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(hsa_queryh]hsa_query}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hStart a Service get queryh]hStart a Service get query}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj< hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjW jjW jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_sa_client *client`` SA client ``struct ib_device *device`` device to send query on ``u32 port_num`` port number to send query on ``struct sa_service_rec *rec`` Service Record to send in query ``ib_sa_comp_mask comp_mask`` component mask to send in query ``unsigned long timeout_ms`` time to wait for response ``gfp_t gfp_mask`` GFP mask to use for internal allocations ``void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context)`` function called when query completes, times out or is canceled ``void *context`` opaque user context passed to callback ``struct ib_sa_query **sa_query`` query context, used to cancel query **Description** Send a Service Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0. If the return value of ib_sa_service_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.h](h)}(h**Parameters**h]j)}(hja h]h Parameters}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj[ ubj)}(hhh](j)}(h*``struct ib_sa_client *client`` SA client h](j)}(h``struct ib_sa_client *client``h]j )}(hj h]hstruct ib_sa_client *client}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjz ubj)}(hhh]h)}(h SA clienth]h SA client}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubj)}(h5``struct ib_device *device`` device to send query on h](j)}(h``struct ib_device *device``h]j )}(hj h]hstruct ib_device *device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj ubj)}(hhh]h)}(hdevice to send query onh]hdevice to send query on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubj)}(h.``u32 port_num`` port number to send query on h](j)}(h``u32 port_num``h]j )}(hj h]h u32 port_num}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj ubj)}(hhh]h)}(hport number to send query onh]hport number to send query on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubj)}(h?``struct sa_service_rec *rec`` Service Record to send in query h](j)}(h``struct sa_service_rec *rec``h]j )}(hj+ h]hstruct sa_service_rec *rec}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj% ubj)}(hhh]h)}(hService Record to send in queryh]hService Record to send in query}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ hMhjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hMhjw ubj)}(h>``ib_sa_comp_mask comp_mask`` component mask to send in query h](j)}(h``ib_sa_comp_mask comp_mask``h]j )}(hjd h]hib_sa_comp_mask comp_mask}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj^ ubj)}(hhh]h)}(hcomponent mask to send in queryh]hcomponent mask to send in query}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy hMhjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hMhjw ubj)}(h7``unsigned long timeout_ms`` time to wait for response h](j)}(h``unsigned long timeout_ms``h]j )}(hj h]hunsigned long timeout_ms}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj ubj)}(hhh]h)}(htime to wait for responseh]htime to wait for response}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubj)}(h<``gfp_t gfp_mask`` GFP mask to use for internal allocations h](j)}(h``gfp_t gfp_mask``h]j )}(hj h]hgfp_t gfp_mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj ubj)}(hhh]h)}(h(GFP mask to use for internal allocationsh]h(GFP mask to use for internal allocations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubj)}(h``void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context)`` function called when query completes, times out or is canceled h](j)}(hg``void (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context)``h]j )}(hj h]hcvoid (*callback)(int status, struct sa_service_rec *resp, unsigned int num_services, void *context)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj ubj)}(hhh]h)}(h>function called when query completes, times out or is canceledh]h>function called when query completes, times out or is canceled}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj% ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$ hMhjw ubj)}(h9``void *context`` opaque user context passed to callback h](j)}(h``void *context``h]j )}(hjI h]h void *context}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjC ubj)}(hhh]h)}(h&opaque user context passed to callbackh]h&opaque user context passed to callback}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^ hMhj_ ubah}(h]h ]h"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]uh1jhj^ hMhjw ubj)}(hF``struct ib_sa_query **sa_query`` query context, used to cancel query h](j)}(h!``struct ib_sa_query **sa_query``h]j )}(hj h]hstruct ib_sa_query **sa_query}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj| ubj)}(hhh]h)}(h#query context, used to cancel queryh]h#query context, used to cancel query}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj| ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjw ubeh}(h]h ]h"]h$]h&]uh1jhj[ ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj[ ubh)}(hXdSend a Service Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0.h]hXdSend a Service Record Get query to the SA to look up a path. The callback function will be called when the query completes (or fails); status is 0 for a successful response, -EINTR if the query is canceled, -ETIMEDOUT is the query timed out, or -EIO if an error occurred sending the query. The resp parameter of the callback is only valid if status is 0.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj[ ubh)}(hIf the return value of ib_sa_service_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.h]hIf the return value of ib_sa_service_rec_get() is negative, it is an error code. Otherwise it is a query ID that can be used to cancel the query.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj[ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_ud_header_init (C function)c.ib_ud_header_inithNtauh1jhhhhhNhNubj)}(hhh](j)}(hint ib_ud_header_init (int payload_bytes, int lrh_present, int eth_present, int vlan_present, int grh_present, int ip_version, int udp_present, int immediate_present, struct ib_ud_header *header)h]j")}(hint ib_ud_header_init(int payload_bytes, int lrh_present, int eth_present, int vlan_present, int grh_present, int ip_version, int udp_present, int immediate_present, struct ib_ud_header *header)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM0ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj hM0ubj)}(hib_ud_header_inith]jN)}(hib_ud_header_inith]hib_ud_header_init}(hj2 hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj. ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hM0ubj)}(h(int payload_bytes, int lrh_present, int eth_present, int vlan_present, int grh_present, int ip_version, int udp_present, int immediate_present, struct ib_ud_header *header)h](j)}(hint payload_bytesh](j)}(hinth]hint}(hjN hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ ubj:)}(h h]h }(hj\ hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJ ubjN)}(h payload_bytesh]h payload_bytes}(hjj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjJ ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint lrh_presenth](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubjN)}(h lrh_presenth]h lrh_present}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint eth_presenth](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubjN)}(h eth_presenth]h eth_present}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint vlan_presenth](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubjN)}(h vlan_presenth]h vlan_present}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint grh_presenth](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h grh_presenth]h grh_present}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint ip_versionh](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubjN)}(h ip_versionh]h ip_version}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint udp_presenth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h udp_presenth]h udp_present}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hint immediate_presenth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(himmediate_presenth]himmediate_present}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubj)}(hstruct ib_ud_header *headerh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_ud_headerh]h ib_ud_header}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj4 sbc.ib_ud_header_initasbuh1hhjubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hheaderh]hheader}(hjOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjF ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM0ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj hM0ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hM0hj hhubj)}(hhh]h)}(hInitialize UD header structureh]hInitialize UD header structure}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM0hjvhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM0ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX!**Parameters** ``int payload_bytes`` Length of packet payload ``int lrh_present`` specify if LRH is present ``int eth_present`` specify if Eth header is present ``int vlan_present`` packet is tagged vlan ``int grh_present`` GRH flag (if non-zero, GRH will be included) ``int ip_version`` if non-zero, IP header, V4 or V6, will be included ``int udp_present`` if non-zero, UDP header will be included ``int immediate_present`` specify if immediate data is present ``struct ib_ud_header *header`` Structure to initializeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM4hjubj)}(hhh](j)}(h/``int payload_bytes`` Length of packet payload h](j)}(h``int payload_bytes``h]j )}(hjh]hint payload_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM1hjubj)}(hhh]h)}(hLength of packet payloadh]hLength of packet payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(h.``int lrh_present`` specify if LRH is present h](j)}(h``int lrh_present``h]j )}(hjh]hint lrh_present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM2hjubj)}(hhh]h)}(hspecify if LRH is presenth]hspecify if LRH is present}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubj)}(h5``int eth_present`` specify if Eth header is present h](j)}(h``int eth_present``h]j )}(hj,h]hint eth_present}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM3hj&ubj)}(hhh]h)}(h specify if Eth header is presenth]h specify if Eth header is present}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM3hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM3hjubj)}(h+``int vlan_present`` packet is tagged vlan h](j)}(h``int vlan_present``h]j )}(hjeh]hint vlan_present}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM4hj_ubj)}(hhh]h)}(hpacket is tagged vlanh]hpacket is tagged vlan}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM4hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM4hjubj)}(hA``int grh_present`` GRH flag (if non-zero, GRH will be included) h](j)}(h``int grh_present``h]j )}(hjh]hint grh_present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM5hjubj)}(hhh]h)}(h,GRH flag (if non-zero, GRH will be included)h]h,GRH flag (if non-zero, GRH will be included)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(hF``int ip_version`` if non-zero, IP header, V4 or V6, will be included h](j)}(h``int ip_version``h]j )}(hjh]hint ip_version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM6hjubj)}(hhh]h)}(h2if non-zero, IP header, V4 or V6, will be includedh]h2if non-zero, IP header, V4 or V6, will be included}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h=``int udp_present`` if non-zero, UDP header will be included h](j)}(h``int udp_present``h]j )}(hjh]hint udp_present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM7hj ubj)}(hhh]h)}(h(if non-zero, UDP header will be includedh]h(if non-zero, UDP header will be included}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM7hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM7hjubj)}(h?``int immediate_present`` specify if immediate data is present h](j)}(h``int immediate_present``h]j )}(hjIh]hint immediate_present}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM8hjCubj)}(hhh]h)}(h$specify if immediate data is presenth]h$specify if immediate data is present}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM8hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM8hjubj)}(h7``struct ib_ud_header *header`` Structure to initializeh](j)}(h``struct ib_ud_header *header``h]j )}(hjh]hstruct ib_ud_header *header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM:hj|ubj)}(hhh]h)}(hStructure to initializeh]hStructure to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM9hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_ud_header_pack (C function)c.ib_ud_header_packhNtauh1jhhhhhNhNubj)}(hhh](j)}(h>int ib_ud_header_pack (struct ib_ud_header *header, void *buf)h]j")}(h=int ib_ud_header_pack(struct ib_ud_header *header, void *buf)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hib_ud_header_packh]jN)}(hib_ud_header_packh]hib_ud_header_pack}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h((struct ib_ud_header *header, void *buf)h](j)}(hstruct ib_ud_header *headerh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_ud_headerh]h ib_ud_header}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]jt)}jgjsbc.ib_ud_header_packasbuh1hhjubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hheaderh]hheader}(hjrhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *bufh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&Pack UD header struct into wire formath]h&Pack UD header struct into wire format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_ud_header *header`` UD header struct ``void *buf`` Buffer to pack into **Description** ib_ud_header_pack() packs the UD header structure **header** into wire format in the buffer **buf**.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjubj)}(hhh](j)}(h1``struct ib_ud_header *header`` UD header struct h](j)}(h``struct ib_ud_header *header``h]j )}(hjh]hstruct ib_ud_header *header}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjubj)}(hhh]h)}(hUD header structh]hUD header struct}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h"``void *buf`` Buffer to pack into h](j)}(h ``void *buf``h]j )}(hjXh]h void *buf}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjRubj)}(hhh]h)}(hBuffer to pack intoh]hBuffer to pack into}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjubh)}(hdib_ud_header_pack() packs the UD header structure **header** into wire format in the buffer **buf**.h](h2ib_ud_header_pack() packs the UD header structure }(hjhhhNhNubj)}(h **header**h]hheader}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh into wire format in the buffer }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ib_umem_find_best_pgsz (C function)c.ib_umem_find_best_pgszhNtauh1jhhhhhNhNubj)}(hhh](j)}(h`unsigned long ib_umem_find_best_pgsz (struct ib_umem *umem, unsigned long pgsz_bitmap, u64 virt)h]j")}(h_unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem, unsigned long pgsz_bitmap, u64 virt)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKHubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hKHubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj hKHubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hKHubj)}(hib_umem_find_best_pgszh]jN)}(hib_umem_find_best_pgszh]hib_umem_find_best_pgsz}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKHubj)}(h;(struct ib_umem *umem, unsigned long pgsz_bitmap, u64 virt)h](j)}(hstruct ib_umem *umemh](j()}(hj+h]hstruct}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjQubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubh)}(hhh]jN)}(hib_umemh]hib_umem}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjumodnameN classnameNjkjn)}jq]jt)}jgj;sbc.ib_umem_find_best_pgszasbuh1hhjQubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjN)}(humemh]humem}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(hunsigned long pgsz_bitmaph](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h pgsz_bitmaph]h pgsz_bitmap}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(hu64 virth](h)}(hhh]jN)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_find_best_pgszasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hvirth]hvirt}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKHubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKHhjhhubj)}(hhh]h)}(h)Find best HW page size to use for this MRh]h)Find best HW page size to use for this MR}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKHhjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKHubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_umem *umem`` umem struct ``unsigned long pgsz_bitmap`` bitmap of HW supported page sizes ``u64 virt`` IOVA **Description** This helper is intended for HW that support multiple page sizes but can do only a single page size in an MR. Returns 0 if the umem requires page sizes not supported by the driver to be mapped. Drivers always supporting PAGE_SIZE or smaller will never see a 0 result.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKLhjubj)}(hhh](j)}(h%``struct ib_umem *umem`` umem struct h](j)}(h``struct ib_umem *umem``h]j )}(hjh]hstruct ib_umem *umem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKJhjubj)}(hhh]h)}(h umem structh]h umem struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKJhjubj)}(h@``unsigned long pgsz_bitmap`` bitmap of HW supported page sizes h](j)}(h``unsigned long pgsz_bitmap``h]j )}(hjh]hunsigned long pgsz_bitmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKKhjubj)}(hhh]h)}(h!bitmap of HW supported page sizesh]h!bitmap of HW supported page sizes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubj)}(h``u64 virt`` IOVA h](j)}(h ``u64 virt``h]j )}(hj$h]hu64 virt}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKLhjubj)}(hhh]h)}(hIOVAh]hIOVA}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKLhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hKLhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKNhjubh)}(hlThis helper is intended for HW that support multiple page sizes but can do only a single page size in an MR.h]hlThis helper is intended for HW that support multiple page sizes but can do only a single page size in an MR.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKMhjubh)}(hReturns 0 if the umem requires page sizes not supported by the driver to be mapped. Drivers always supporting PAGE_SIZE or smaller will never see a 0 result.h]hReturns 0 if the umem requires page sizes not supported by the driver to be mapped. Drivers always supporting PAGE_SIZE or smaller will never see a 0 result.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_umem_get_desc (C function)c.ib_umem_get_deschNtauh1jhhhhhNhNubj)}(hhh](j)}(hrstruct ib_umem * ib_umem_get_desc (struct ib_device *device, const struct ib_uverbs_buffer_desc *desc, int access)h]j")}(hpstruct ib_umem *ib_umem_get_desc(struct ib_device *device, const struct ib_uverbs_buffer_desc *desc, int access)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubh)}(hhh]jN)}(hib_umemh]hib_umem}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_umem_get_descsbc.ib_umem_get_descasbuh1hhjhhhjhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hib_umem_get_desch]jN)}(hjh]hib_umem_get_desc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hP(struct ib_device *device, const struct ib_uverbs_buffer_desc *desc, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjKhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjHubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjMmodnameN classnameNjkjn)}jq]jc.ib_umem_get_descasbuh1hhj)ubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjN)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(h(const struct ib_uverbs_buffer_desc *desch](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_uverbs_buffer_desch]hib_uverbs_buffer_desc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_get_descasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(h int accessh](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubjN)}(haccessh]haccess}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h$Pin a umem from a buffer descriptor.h]h$Pin a umem from a buffer descriptor.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` IB device. ``const struct ib_uverbs_buffer_desc *desc`` buffer descriptor (VA or DMABUF). ``int access`` IB access flags. **Return** caller-owned umem on success, ERR_PTR(...) on error.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh](j)}(h(``struct ib_device *device`` IB device. h](j)}(h``struct ib_device *device``h]j )}(hjh]hstruct ib_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh]h)}(h IB device.h]h IB device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``const struct ib_uverbs_buffer_desc *desc`` buffer descriptor (VA or DMABUF). h](j)}(h,``const struct ib_uverbs_buffer_desc *desc``h]j )}(hjh]h(const struct ib_uverbs_buffer_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh]h)}(h!buffer descriptor (VA or DMABUF).h]h!buffer descriptor (VA or DMABUF).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int access`` IB access flags. h](j)}(h``int access``h]j )}(hj!h]h int access}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh]h)}(hIB access flags.h]hIB access flags.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubh)}(h4caller-owned umem on success, ERR_PTR(...) on error.h]h4caller-owned umem on success, ERR_PTR(...) on error.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_umem_get_attr (C function)c.ib_umem_get_attrhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem * ib_umem_get_attr (struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, size_t size, int access)h]j")}(hstruct ib_umem *ib_umem_get_attr(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, size_t size, int access)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubh)}(hhh]jN)}(hib_umemh]hib_umem}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_umem_get_attrsbc.ib_umem_get_attrasbuh1hhjhhhjhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hib_umem_get_attrh]jN)}(hjh]hib_umem_get_attr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hh(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, size_t size, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj;modnameN classnameNjkjn)}jq]jc.ib_umem_get_attrasbuh1hhjubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjrhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&const struct uverbs_attr_bundle *attrsh](j()}(hjh]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(huverbs_attr_bundleh]huverbs_attr_bundle}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 attr_idh](h)}(hhh]jN)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attrasbuh1hhjubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hattr_idh]hattr_id}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjcmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attrasbuh1hhjZubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubjN)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int accessh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(haccessh]haccess}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h-Pin a umem from a per-command UMEM attribute.h]h-Pin a umem from a per-command UMEM attribute.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhhhNhNubj)}(hX}**Parameters** ``struct ib_device *device`` IB device. ``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). ``u16 attr_id`` per-command UMEM attribute id. ``size_t size`` minimum required umem length. ``int access`` IB access flags. **Return** caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh](j)}(h(``struct ib_device *device`` IB device. h](j)}(h``struct ib_device *device``h]j )}(hj-h]hstruct ib_device *device}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj'ubj)}(hhh]h)}(h IB device.h]h IB device.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubj)}(hR``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). h](j)}(h*``const struct uverbs_attr_bundle *attrs``h]j )}(hjfh]h&const struct uverbs_attr_bundle *attrs}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj`ubj)}(hhh]h)}(h&uverbs attribute bundle (may be NULL).h]h&uverbs attribute bundle (may be NULL).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj$ubj)}(h/``u16 attr_id`` per-command UMEM attribute id. h](j)}(h``u16 attr_id``h]j )}(hjh]h u16 attr_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh]h)}(hper-command UMEM attribute id.h]hper-command UMEM attribute id.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj$ubj)}(h.``size_t size`` minimum required umem length. h](j)}(h``size_t size``h]j )}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubj)}(hhh]h)}(hminimum required umem length.h]hminimum required umem length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj$ubj)}(h ``int access`` IB access flags. h](j)}(h``int access``h]j )}(hjh]h int access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj ubj)}(hhh]h)}(hIB access flags.h]hIB access flags.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubh)}(h[caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.h]h[caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ib_umem_get_attr_or_va (C function)c.ib_umem_get_attr_or_vahNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem * ib_umem_get_attr_or_va (struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, u64 addr, size_t size, int access)h]j")}(hstruct ib_umem *ib_umem_get_attr_or_va(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, u64 addr, size_t size, int access)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubh)}(hhh]jN)}(hib_umemh]hib_umem}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgib_umem_get_attr_or_vasbc.ib_umem_get_attr_or_vaasbuh1hhjhhhjhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hib_umem_get_attr_or_vah]jN)}(hjh]hib_umem_get_attr_or_va}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hr(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u16 attr_id, u64 addr, size_t size, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj&ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj+modnameN classnameNjkjn)}jq]jc.ib_umem_get_attr_or_vaasbuh1hhjubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdeviceh]hdevice}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&const struct uverbs_attr_bundle *attrsh](j()}(hjh]hconst}(hj{hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubh)}(hhh]jN)}(huverbs_attr_bundleh]huverbs_attr_bundle}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attr_or_vaasbuh1hhjwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjN)}(hattrsh]hattrs}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 attr_idh](h)}(hhh]jN)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jc.ib_umem_get_attr_or_vaasbuh1hhjubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hattr_idh]hattr_id}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 addrh](h)}(hhh]jN)}(hu64h]hu64}(hjQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjSmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attr_or_vaasbuh1hhjJubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubjN)}(haddrh]haddr}(hj}hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.ib_umem_get_attr_or_vaasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int accessh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(haccessh]haccess}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hGPin a umem from a per-command UMEM attribute, falling back to a UHW VA.h]hGPin a umem from a per-command UMEM attribute, falling back to a UHW VA.}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj! hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj< jj< jjjuh1jhhhhhNhNubj)}(hXb**Parameters** ``struct ib_device *device`` IB device. ``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). ``u16 attr_id`` per-command UMEM attribute id. ``u64 addr`` UHW user VA used when no per-command attribute matched. ``size_t size`` on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin. ``int access`` IB access flags. **Description** Like ib_umem_get_attr(), but pins **addr**/**size** when no per-command UMEM attribute is supplied. IMPORTANT: **size** is always consumed. On the attr / legacy paths it is used as the post-pin minimum-length check; on the VA fallback path it is the length to pin. Callers MUST pass a meaningful, validated value even when they expect an attribute-supplied buffer to be used. Every in-tree caller passes the same value for the two roles of **size** because no driver today distinguishes a user-passed buffer length from a driver-computed minimum. Drivers that currently accept a user-supplied length without cross-checking it against a driver minimum (vmw_pvrdma CQ/QP/SRQ, qedr CQ/QP/SRQ, mana WQ/QP, ionic CQ/QP), once tightened to compute and check a real minimum, will want to introduce a separate helper that passes these as distinct values. **Return** caller-owned umem on success, ERR_PTR(...) on error.h](h)}(h**Parameters**h]j)}(hjF h]h Parameters}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubj)}(hhh](j)}(h(``struct ib_device *device`` IB device. h](j)}(h``struct ib_device *device``h]j )}(hje h]hstruct ib_device *device}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj_ ubj)}(hhh]h)}(h IB device.h]h IB device.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz hMhj{ ubah}(h]h ]h"]h$]h&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]uh1jhjz hMhj\ ubj)}(hR``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). h](j)}(h*``const struct uverbs_attr_bundle *attrs``h]j )}(hj h]h&const struct uverbs_attr_bundle *attrs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj ubj)}(hhh]h)}(h&uverbs attribute bundle (may be NULL).h]h&uverbs attribute bundle (may be NULL).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj\ ubj)}(h/``u16 attr_id`` per-command UMEM attribute id. h](j)}(h``u16 attr_id``h]j )}(hj h]h u16 attr_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj ubj)}(hhh]h)}(hper-command UMEM attribute id.h]hper-command UMEM attribute id.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj\ ubj)}(hE``u64 addr`` UHW user VA used when no per-command attribute matched. h](j)}(h ``u64 addr``h]j )}(hj!h]hu64 addr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj !ubj)}(hhh]h)}(h7UHW user VA used when no per-command attribute matched.h]h7UHW user VA used when no per-command attribute matched.}(hj)!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%!hMhj&!ubah}(h]h ]h"]h$]h&]uh1jhj !ubeh}(h]h ]h"]h$]h&]uh1jhj%!hMhj\ ubj)}(h``size_t size`` on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin. h](j)}(h``size_t size``h]j )}(hjI!h]h size_t size}(hjK!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjC!ubj)}(hhh]h)}(h|on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin.h]h|on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin.}(hjb!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj_!ubah}(h]h ]h"]h$]h&]uh1jhjC!ubeh}(h]h ]h"]h$]h&]uh1jhj^!hMhj\ ubj)}(h ``int access`` IB access flags. h](j)}(h``int access``h]j )}(hj!h]h int access}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj}!ubj)}(hhh]h)}(hIB access flags.h]hIB access flags.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj}!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj\ ubeh}(h]h ]h"]h$]h&]uh1jhj@ ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubh)}(hcLike ib_umem_get_attr(), but pins **addr**/**size** when no per-command UMEM attribute is supplied.h](h"Like ib_umem_get_attr(), but pins }(hj!hhhNhNubj)}(h**addr**h]haddr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh/}(hj!hhhNhNubj)}(h**size**h]hsize}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh0 when no per-command UMEM attribute is supplied.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubh)}(hXIMPORTANT: **size** is always consumed. On the attr / legacy paths it is used as the post-pin minimum-length check; on the VA fallback path it is the length to pin. Callers MUST pass a meaningful, validated value even when they expect an attribute-supplied buffer to be used.h](h IMPORTANT: }(hj"hhhNhNubj)}(h**size**h]hsize}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhX is always consumed. On the attr / legacy paths it is used as the post-pin minimum-length check; on the VA fallback path it is the length to pin. Callers MUST pass a meaningful, validated value even when they expect an attribute-supplied buffer to be used.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubh)}(hXEvery in-tree caller passes the same value for the two roles of **size** because no driver today distinguishes a user-passed buffer length from a driver-computed minimum. Drivers that currently accept a user-supplied length without cross-checking it against a driver minimum (vmw_pvrdma CQ/QP/SRQ, qedr CQ/QP/SRQ, mana WQ/QP, ionic CQ/QP), once tightened to compute and check a real minimum, will want to introduce a separate helper that passes these as distinct values.h](h@Every in-tree caller passes the same value for the two roles of }(hj("hhhNhNubj)}(h**size**h]hsize}(hj0"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj("ubhX because no driver today distinguishes a user-passed buffer length from a driver-computed minimum. Drivers that currently accept a user-supplied length without cross-checking it against a driver minimum (vmw_pvrdma CQ/QP/SRQ, qedr CQ/QP/SRQ, mana WQ/QP, ionic CQ/QP), once tightened to compute and check a real minimum, will want to introduce a separate helper that passes these as distinct values.}(hj("hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubh)}(h **Return**h]j)}(hjK"h]hReturn}(hjM"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI"ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubh)}(h4caller-owned umem on success, ERR_PTR(...) on error.h]h4caller-owned umem on success, ERR_PTR(...) on error.}(hja"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhj@ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_umem_get_cq_buf (C function)c.ib_umem_get_cq_bufhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem * ib_umem_get_cq_buf (struct ib_device *device, const struct uverbs_attr_bundle *attrs, size_t size, int access)h]j")}(h}struct ib_umem *ib_umem_get_cq_buf(struct ib_device *device, const struct uverbs_attr_bundle *attrs, size_t size, int access)h](j()}(hj+h]hstruct}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj"hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM0ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"hhhj"hM0ubh)}(hhh]jN)}(hib_umemh]hib_umem}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj"modnameN classnameNjkjn)}jq]jt)}jgib_umem_get_cq_bufsbc.ib_umem_get_cq_bufasbuh1hhj"hhhj"hM0ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"hhhj"hM0ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM0ubj)}(hib_umem_get_cq_bufh]jN)}(hj"h]hib_umem_get_cq_buf}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hM0ubj)}(h[(struct ib_device *device, const struct uverbs_attr_bundle *attrs, size_t size, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj #hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj(#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj*#modnameN classnameNjkjn)}jq]j"c.ib_umem_get_cq_bufasbuh1hhj#ubj:)}(h h]h }(hjF#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hjh]h*}(hjT#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjN)}(hdeviceh]hdevice}(hja#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h&const struct uverbs_attr_bundle *attrsh](j()}(hjh]hconst}(hjz#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjv#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv#ubj()}(hj+h]hstruct}(hj#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjv#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv#ubh)}(hhh]jN)}(huverbs_attr_bundleh]huverbs_attr_bundle}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj#modnameN classnameNjkjn)}jq]j"c.ib_umem_get_cq_bufasbuh1hhjv#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv#ubjN)}(hattrsh]hattrs}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjv#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj $modnameN classnameNjkjn)}jq]j"c.ib_umem_get_cq_bufasbuh1hhj$ubj:)}(h h]h }(hj&$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubjN)}(hsizeh]hsize}(hj4$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h int accessh](j)}(hinth]hint}(hjM$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjI$ubj:)}(h h]h }(hj[$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjI$ubjN)}(haccessh]haccess}(hji$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjI$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hM0ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj"hhhj"hM0ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hM0hj"hhubj)}(hhh]h)}(h1Pin a CQ buffer umem from per-command attributes.h]h1Pin a CQ buffer umem from per-command attributes.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM0hj$hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hM0ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj$jj$jjjuh1jhhhhhNhNubj)}(hXB**Parameters** ``struct ib_device *device`` IB device. ``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). ``size_t size`` minimum required CQ buffer length. ``int access`` IB access flags. **Description** Resolves the CQ buffer from the new UMEM attribute or the legacy CQ buffer attributes. There is no UHW VA fallback, so the caller must arrange its own backing (typically an in-kernel allocation) when no source is available. **Return** caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM4hj$ubj)}(hhh](j)}(h(``struct ib_device *device`` IB device. h](j)}(h``struct ib_device *device``h]j )}(hj$h]hstruct ib_device *device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM1hj$ubj)}(hhh]h)}(h IB device.h]h IB device.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM1hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM1hj$ubj)}(hR``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). h](j)}(h*``const struct uverbs_attr_bundle *attrs``h]j )}(hj %h]h&const struct uverbs_attr_bundle *attrs}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj %ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM2hj%ubj)}(hhh]h)}(h&uverbs attribute bundle (may be NULL).h]h&uverbs attribute bundle (may be NULL).}(hj&%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"%hM2hj#%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj"%hM2hj$ubj)}(h3``size_t size`` minimum required CQ buffer length. h](j)}(h``size_t size``h]j )}(hjF%h]h size_t size}(hjH%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM3hj@%ubj)}(hhh]h)}(h"minimum required CQ buffer length.h]h"minimum required CQ buffer length.}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[%hM3hj\%ubah}(h]h ]h"]h$]h&]uh1jhj@%ubeh}(h]h ]h"]h$]h&]uh1jhj[%hM3hj$ubj)}(h ``int access`` IB access flags. h](j)}(h``int access``h]j )}(hj%h]h int access}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM4hjy%ubj)}(hhh]h)}(hIB access flags.h]hIB access flags.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM4hj%ubah}(h]h ]h"]h$]h&]uh1jhjy%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM4hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM6hj$ubh)}(hResolves the CQ buffer from the new UMEM attribute or the legacy CQ buffer attributes. There is no UHW VA fallback, so the caller must arrange its own backing (typically an in-kernel allocation) when no source is available.h]hResolves the CQ buffer from the new UMEM attribute or the legacy CQ buffer attributes. There is no UHW VA fallback, so the caller must arrange its own backing (typically an in-kernel allocation) when no source is available.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM5hj$ubh)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM:hj$ubh)}(h[caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.h]h[caller-owned umem on success; NULL when no source supplied a buffer; ERR_PTR(...) on error.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chM;hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ib_umem_get_cq_buf_or_va (C function)c.ib_umem_get_cq_buf_or_vahNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem * ib_umem_get_cq_buf_or_va (struct ib_device *device, const struct uverbs_attr_bundle *attrs, u64 addr, size_t size, int access)h]j")}(hstruct ib_umem *ib_umem_get_cq_buf_or_va(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u64 addr, size_t size, int access)h](j()}(hj+h]hstruct}(hj&&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj"&hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMJubj:)}(h h]h }(hj4&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"&hhhj3&hMJubh)}(hhh]jN)}(hib_umemh]hib_umem}(hjE&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjB&ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjG&modnameN classnameNjkjn)}jq]jt)}jgib_umem_get_cq_buf_or_vasbc.ib_umem_get_cq_buf_or_vaasbuh1hhj"&hhhj3&hMJubj:)}(h h]h }(hjf&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"&hhhj3&hMJubj)}(hjh]h*}(hjt&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"&hhhj3&hMJubj)}(hib_umem_get_cq_buf_or_vah]jN)}(hjc&h]hib_umem_get_cq_buf_or_va}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"&hhhj3&hMJubj)}(he(struct ib_device *device, const struct uverbs_attr_bundle *attrs, u64 addr, size_t size, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj&ubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj&ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj&modnameN classnameNjkjn)}jq]ja&c.ib_umem_get_cq_buf_or_vaasbuh1hhj&ubj:)}(h h]h }(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjN)}(hdeviceh]hdevice}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h&const struct uverbs_attr_bundle *attrsh](j()}(hjh]hconst}(hj'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj 'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 'ubj()}(hj+h]hstruct}(hj+'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj 'ubj:)}(h h]h }(hj8'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 'ubh)}(hhh]jN)}(huverbs_attr_bundleh]huverbs_attr_bundle}(hjI'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjF'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjK'modnameN classnameNjkjn)}jq]ja&c.ib_umem_get_cq_buf_or_vaasbuh1hhj 'ubj:)}(h h]h }(hjg'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 'ubj)}(hjh]h*}(hju'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'ubjN)}(hattrsh]hattrs}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj 'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hu64 addrh](h)}(hhh]jN)}(hu64h]hu64}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]ja&c.ib_umem_get_cq_buf_or_vaasbuh1hhj'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubjN)}(haddrh]haddr}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]ja&c.ib_umem_get_cq_buf_or_vaasbuh1hhj'ubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubjN)}(hsizeh]hsize}(hj(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h int accessh](j)}(hinth]hint}(hj+(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'(ubj:)}(h h]h }(hj9(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'(ubjN)}(haccessh]haccess}(hjG(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhj"&hhhj3&hMJubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj&hhhj3&hMJubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhj3&hMJhj&hhubj)}(hhh]h)}(h*Pin a CQ buffer umem with UHW VA fallback.h]h*Pin a CQ buffer umem with UHW VA fallback.}(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMJhjn(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj3&hMJubeh}(h]h ](jefunctioneh"]h$]h&]jjejj(jj(jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` IB device. ``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). ``u64 addr`` UHW user VA used when no per-command attribute matched. ``size_t size`` on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin. ``int access`` IB access flags. **Description** Like ib_umem_get_cq_buf(), but pins **addr**/**size** when neither the UMEM attribute nor the legacy CQ buffer attributes are supplied. See ib_umem_get_attr_or_va() for the note on **size**'s dual role and the migration path for drivers that would distinguish a user-supplied length from a driver-computed minimum. **Return** caller-owned umem on success, ERR_PTR(...) on error.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMNhj(ubj)}(hhh](j)}(h(``struct ib_device *device`` IB device. h](j)}(h``struct ib_device *device``h]j )}(hj(h]hstruct ib_device *device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMKhj(ubj)}(hhh]h)}(h IB device.h]h IB device.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMKhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMKhj(ubj)}(hR``const struct uverbs_attr_bundle *attrs`` uverbs attribute bundle (may be NULL). h](j)}(h*``const struct uverbs_attr_bundle *attrs``h]j )}(hj(h]h&const struct uverbs_attr_bundle *attrs}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMLhj(ubj)}(hhh]h)}(h&uverbs attribute bundle (may be NULL).h]h&uverbs attribute bundle (may be NULL).}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMLhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hMLhj(ubj)}(hE``u64 addr`` UHW user VA used when no per-command attribute matched. h](j)}(h ``u64 addr``h]j )}(hj$)h]hu64 addr}(hj&)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj")ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMMhj)ubj)}(hhh]h)}(h7UHW user VA used when no per-command attribute matched.h]h7UHW user VA used when no per-command attribute matched.}(hj=)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9)hMMhj:)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj9)hMMhj(ubj)}(h``size_t size`` on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin. h](j)}(h``size_t size``h]j )}(hj])h]h size_t size}(hj_)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[)ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMOhjW)ubj)}(hhh]h)}(h|on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin.h]h|on the attr / legacy paths, the minimum required umem length validated post-pin; on the VA fallback path, the length to pin.}(hjv)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMNhjs)ubah}(h]h ]h"]h$]h&]uh1jhjW)ubeh}(h]h ]h"]h$]h&]uh1jhjr)hMOhj(ubj)}(h ``int access`` IB access flags. h](j)}(h``int access``h]j )}(hj)h]h int access}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMPhj)ubj)}(hhh]h)}(hIB access flags.h]hIB access flags.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMPhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMPhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMRhj(ubh)}(hLike ib_umem_get_cq_buf(), but pins **addr**/**size** when neither the UMEM attribute nor the legacy CQ buffer attributes are supplied.h](h$Like ib_umem_get_cq_buf(), but pins }(hj)hhhNhNubj)}(h**addr**h]haddr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh/}(hj)hhhNhNubj)}(h**size**h]hsize}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhR when neither the UMEM attribute nor the legacy CQ buffer attributes are supplied.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMQhj(ubh)}(hSee ib_umem_get_attr_or_va() for the note on **size**'s dual role and the migration path for drivers that would distinguish a user-supplied length from a driver-computed minimum.h](h-See ib_umem_get_attr_or_va() for the note on }(hj*hhhNhNubj)}(h**size**h]hsize}(hj#*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh’s dual role and the migration path for drivers that would distinguish a user-supplied length from a driver-computed minimum.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMThj(ubh)}(h **Return**h]j)}(hj>*h]hReturn}(hj@*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<*ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMXhj(ubh)}(h4caller-owned umem on success, ERR_PTR(...) on error.h]h4caller-owned umem on success, ERR_PTR(...) on error.}(hjT*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMYhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_umem_release (C function)c.ib_umem_releasehNtauh1jhhhhhNhNubj)}(hhh](j)}(h+void ib_umem_release (struct ib_umem *umem)h]j")}(h*void ib_umem_release(struct ib_umem *umem)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMgubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*hhhj*hMgubj)}(hib_umem_releaseh]jN)}(hib_umem_releaseh]hib_umem_release}(hj*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj*hMgubj)}(h(struct ib_umem *umem)h]j)}(hstruct ib_umem *umemh](j()}(hj+h]hstruct}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj*ubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*ubh)}(hhh]jN)}(hib_umemh]hib_umem}(hj*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj*modnameN classnameNjkjn)}jq]jt)}jgj*sbc.ib_umem_releaseasbuh1hhj*ubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*ubj)}(hjh]h*}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjN)}(humemh]humem}(hj+hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhj*hhhj*hMgubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj{*hhhj*hMgubah}(h]jv*ah ](jjeh"]h$]h&]jj)jhuh1jhj*hMghjx*hhubj)}(hhh]h)}(hrelease pinned memoryh]hrelease pinned memory}(hjC+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMghj@+hhubah}(h]h ]h"]h$]h&]uh1jhjx*hhhj*hMgubeh}(h]h ](jefunctioneh"]h$]h&]jjejj[+jj[+jjjuh1jhhhhhNhNubj)}(hA**Parameters** ``struct ib_umem *umem`` umem struct to releaseh](h)}(h**Parameters**h]j)}(hje+h]h Parameters}(hjg+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc+ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMkhj_+ubj)}(hhh]j)}(h/``struct ib_umem *umem`` umem struct to releaseh](j)}(h``struct ib_umem *umem``h]j )}(hj+h]hstruct ib_umem *umem}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMmhj~+ubj)}(hhh]h)}(humem struct to releaseh]humem struct to release}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhhj+ubah}(h]h ]h"]h$]h&]uh1jhj~+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMmhj{+ubah}(h]h ]h"]h$]h&]uh1jhj_+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ib_umem_odp_alloc_implicit (C function)c.ib_umem_odp_alloc_implicithNtauh1jhhhhhNhNubj)}(hhh](j)}(hVstruct ib_umem_odp * ib_umem_odp_alloc_implicit (struct ib_device *device, int access)h]j")}(hTstruct ib_umem_odp *ib_umem_odp_alloc_implicit(struct ib_device *device, int access)h](j()}(hj+h]hstruct}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj+hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK}ubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj+hK}ubh)}(hhh]jN)}(h ib_umem_odph]h ib_umem_odp}(hj+hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj+modnameN classnameNjkjn)}jq]jt)}jgib_umem_odp_alloc_implicitsbc.ib_umem_odp_alloc_implicitasbuh1hhj+hhhj+hK}ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj+hK}ubj)}(hjh]h*}(hj,,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hK}ubj)}(hib_umem_odp_alloc_implicith]jN)}(hj,h]hib_umem_odp_alloc_implicit}(hj=,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hK}ubj)}(h&(struct ib_device *device, int access)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjX,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjT,ubj:)}(h h]h }(hje,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT,ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjv,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjs,ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjx,modnameN classnameNjkjn)}jq]j,c.ib_umem_odp_alloc_implicitasbuh1hhjT,ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT,ubjN)}(hdeviceh]hdevice}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjT,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjP,ubj)}(h int accessh](j)}(hinth]hint}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubjN)}(haccessh]haccess}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjP,ubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hK}ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj+hhhj+hK}ubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hK}hj+hhubj)}(hhh]h)}(h#Allocate a parent implicit ODP umemh]h#Allocate a parent implicit ODP umem}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK}hj -hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hK}ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj&-jj&-jjjuh1jhhhhhNhNubj)}(hX#**Parameters** ``struct ib_device *device`` IB device to create UMEM ``int access`` ib_reg_mr access flags **Description** Implicit ODP umems do not have a VA range and do not have any page lists. They exist only to hold the per_mm reference to help the driver create children umems.h](h)}(h**Parameters**h]j)}(hj0-h]h Parameters}(hj2-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.-ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj*-ubj)}(hhh](j)}(h6``struct ib_device *device`` IB device to create UMEM h](j)}(h``struct ib_device *device``h]j )}(hjO-h]hstruct ib_device *device}(hjQ-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM-ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjI-ubj)}(hhh]h)}(hIB device to create UMEMh]hIB device to create UMEM}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd-hKhje-ubah}(h]h ]h"]h$]h&]uh1jhjI-ubeh}(h]h ]h"]h$]h&]uh1jhjd-hKhjF-ubj)}(h&``int access`` ib_reg_mr access flags h](j)}(h``int access``h]j )}(hj-h]h int access}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj-ubj)}(hhh]h)}(hib_reg_mr access flagsh]hib_reg_mr access flags}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjF-ubeh}(h]h ]h"]h$]h&]uh1jhj*-ubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj*-ubh)}(hImplicit ODP umems do not have a VA range and do not have any page lists. They exist only to hold the per_mm reference to help the driver create children umems.h]hImplicit ODP umems do not have a VA range and do not have any page lists. They exist only to hold the per_mm reference to help the driver create children umems.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK~hj*-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ib_umem_odp_alloc_child (C function)c.ib_umem_odp_alloc_childhNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem_odp * ib_umem_odp_alloc_child (struct ib_umem_odp *root, unsigned long addr, size_t size, const struct mmu_interval_notifier_ops *ops)h]j")}(hstruct ib_umem_odp *ib_umem_odp_alloc_child(struct ib_umem_odp *root, unsigned long addr, size_t size, const struct mmu_interval_notifier_ops *ops)h](j()}(hj+h]hstruct}(hj.hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj.hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.hhhj.hKubh)}(hhh]jN)}(h ib_umem_odph]h ib_umem_odp}(hj'.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj$.ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj).modnameN classnameNjkjn)}jq]jt)}jgib_umem_odp_alloc_childsbc.ib_umem_odp_alloc_childasbuh1hhj.hhhj.hKubj:)}(h h]h }(hjH.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.hhhj.hKubj)}(hjh]h*}(hjV.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj.hKubj)}(hib_umem_odp_alloc_childh]jN)}(hjE.h]hib_umem_odp_alloc_child}(hjg.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjc.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj.hKubj)}(hh(struct ib_umem_odp *root, unsigned long addr, size_t size, const struct mmu_interval_notifier_ops *ops)h](j)}(hstruct ib_umem_odp *rooth](j()}(hj+h]hstruct}(hj.hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj~.ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~.ubh)}(hhh]jN)}(h ib_umem_odph]h ib_umem_odp}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj.modnameN classnameNjkjn)}jq]jC.c.ib_umem_odp_alloc_childasbuh1hhj~.ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~.ubjN)}(hrooth]hroot}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz.ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubj)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubjN)}(haddrh]haddr}(hj*/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz.ubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hjF/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjC/ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjH/modnameN classnameNjkjn)}jq]jC.c.ib_umem_odp_alloc_childasbuh1hhj?/ubj:)}(h h]h }(hjd/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?/ubjN)}(hsizeh]hsize}(hjr/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz.ubj)}(h+const struct mmu_interval_notifier_ops *opsh](j()}(hjh]hconst}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj/ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubj()}(hj+h]hstruct}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj/ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubh)}(hhh]jN)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hj/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj/ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj/modnameN classnameNjkjn)}jq]jC.c.ib_umem_odp_alloc_childasbuh1hhj/ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjN)}(hopsh]hops}(hj/hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz.ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj.hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj.hhhj.hKubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhj.hKhj-hhubj)}(hhh]h)}(h;Allocate a child ODP umem under an implicit parent ODP umemh]h;Allocate a child ODP umem under an implicit parent ODP umem}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj$0hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj.hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj?0jj?0jjjuh1jhhhhhNhNubj)}(hXX**Parameters** ``struct ib_umem_odp *root`` The parent umem enclosing the child. This must be allocated using ib_alloc_implicit_odp_umem() ``unsigned long addr`` The starting userspace VA ``size_t size`` The length of the userspace VA ``const struct mmu_interval_notifier_ops *ops`` MMU interval ops, currently only **invalidate**h](h)}(h**Parameters**h]j)}(hjI0h]h Parameters}(hjK0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG0ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjC0ubj)}(hhh](j)}(h|``struct ib_umem_odp *root`` The parent umem enclosing the child. This must be allocated using ib_alloc_implicit_odp_umem() h](j)}(h``struct ib_umem_odp *root``h]j )}(hjh0h]hstruct ib_umem_odp *root}(hjj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf0ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjb0ubj)}(hhh]h)}(h^The parent umem enclosing the child. This must be allocated using ib_alloc_implicit_odp_umem()h]h^The parent umem enclosing the child. This must be allocated using ib_alloc_implicit_odp_umem()}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj~0ubah}(h]h ]h"]h$]h&]uh1jhjb0ubeh}(h]h ]h"]h$]h&]uh1jhj}0hKhj_0ubj)}(h1``unsigned long addr`` The starting userspace VA h](j)}(h``unsigned long addr``h]j )}(hj0h]hunsigned long addr}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj0ubj)}(hhh]h)}(hThe starting userspace VAh]hThe starting userspace VA}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj_0ubj)}(h/``size_t size`` The length of the userspace VA h](j)}(h``size_t size``h]j )}(hj0h]h size_t size}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj0ubj)}(hhh]h)}(hThe length of the userspace VAh]hThe length of the userspace VA}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj_0ubj)}(h_``const struct mmu_interval_notifier_ops *ops`` MMU interval ops, currently only **invalidate**h](j)}(h/``const struct mmu_interval_notifier_ops *ops``h]j )}(hj1h]h+const struct mmu_interval_notifier_ops *ops}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj1ubj)}(hhh]h)}(h/MMU interval ops, currently only **invalidate**h](h!MMU interval ops, currently only }(hj-1hhhNhNubj)}(h**invalidate**h]h invalidate}(hj51hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-1ubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj*1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj)1hKhj_0ubeh}(h]h ]h"]h$]h&]uh1jhjC0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_umem_odp_get (C function)c.ib_umem_odp_gethNtauh1jhhhhhNhNubj)}(hhh](j)}(hstruct ib_umem_odp * ib_umem_odp_get (struct ib_device *device, unsigned long addr, size_t size, int access, const struct mmu_interval_notifier_ops *ops)h]j")}(hstruct ib_umem_odp *ib_umem_odp_get(struct ib_device *device, unsigned long addr, size_t size, int access, const struct mmu_interval_notifier_ops *ops)h](j()}(hj+h]hstruct}(hj|1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjx1hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjx1hhhj1hKubh)}(hhh]jN)}(h ib_umem_odph]h ib_umem_odp}(hj1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj1modnameN classnameNjkjn)}jq]jt)}jgib_umem_odp_getsbc.ib_umem_odp_getasbuh1hhjx1hhhj1hKubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjx1hhhj1hKubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx1hhhj1hKubj)}(hib_umem_odp_geth]jN)}(hj1h]hib_umem_odp_get}(hj1hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjx1hhhj1hKubj)}(ht(struct ib_device *device, unsigned long addr, size_t size, int access, const struct mmu_interval_notifier_ops *ops)h](j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hj1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj1ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj2modnameN classnameNjkjn)}jq]j1c.ib_umem_odp_getasbuh1hhj1ubj:)}(h h]h }(hj22hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubj)}(hjh]h*}(hj@2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjN)}(hdeviceh]hdevice}(hjM2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjf2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjb2ubj:)}(h h]h }(hjt2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb2ubj)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjb2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb2ubjN)}(haddrh]haddr}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjb2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj2modnameN classnameNjkjn)}jq]j1c.ib_umem_odp_getasbuh1hhj2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubjN)}(hsizeh]hsize}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h int accessh](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj:)}(h h]h }(hj 3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubjN)}(haccessh]haccess}(hj3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h+const struct mmu_interval_notifier_ops *opsh](j()}(hjh]hconst}(hj43hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj03ubj:)}(h h]h }(hjA3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj03ubj()}(hj+h]hstruct}(hjO3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj03ubj:)}(h h]h }(hj\3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj03ubh)}(hhh]jN)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hjm3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjj3ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjo3modnameN classnameNjkjn)}jq]j1c.ib_umem_odp_getasbuh1hhj03ubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj03ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj03ubjN)}(hopsh]hops}(hj3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj03ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubeh}(h]h ]h"]h$]h&]jjuh1jhjx1hhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjt1hhhj1hKubah}(h]jo1ah ](jjeh"]h$]h&]jj)jhuh1jhj1hKhjq1hhubj)}(hhh]h)}(h$Create a umem_odp for a userspace vah]h$Create a umem_odp for a userspace va}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjq1hhhj1hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj3jj3jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *device`` IB device struct to get UMEM ``unsigned long addr`` userspace virtual address to start at ``size_t size`` length of region to pin ``int access`` IB_ACCESS_xxx flags for memory being pinned ``const struct mmu_interval_notifier_ops *ops`` MMU interval ops, currently only **invalidate** **Description** The driver should use when the access flags indicate ODP memory. It avoids pinning, instead, stores the mm for future page fault handling in conjunction with MMU notifiers.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj3ubj)}(hhh](j)}(h:``struct ib_device *device`` IB device struct to get UMEM h](j)}(h``struct ib_device *device``h]j )}(hj4h]hstruct ib_device *device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj 4ubj)}(hhh]h)}(hIB device struct to get UMEMh]hIB device struct to get UMEM}(hj*4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&4hKhj'4ubah}(h]h ]h"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]uh1jhj&4hKhj4ubj)}(h=``unsigned long addr`` userspace virtual address to start at h](j)}(h``unsigned long addr``h]j )}(hjJ4h]hunsigned long addr}(hjL4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH4ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjD4ubj)}(hhh]h)}(h%userspace virtual address to start ath]h%userspace virtual address to start at}(hjc4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_4hKhj`4ubah}(h]h ]h"]h$]h&]uh1jhjD4ubeh}(h]h ]h"]h$]h&]uh1jhj_4hKhj4ubj)}(h(``size_t size`` length of region to pin h](j)}(h``size_t size``h]j )}(hj4h]h size_t size}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj}4ubj)}(hhh]h)}(hlength of region to pinh]hlength of region to pin}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj}4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj4ubj)}(h;``int access`` IB_ACCESS_xxx flags for memory being pinned h](j)}(h``int access``h]j )}(hj4h]h int access}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj4ubj)}(hhh]h)}(h+IB_ACCESS_xxx flags for memory being pinnedh]h+IB_ACCESS_xxx flags for memory being pinned}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj4ubj)}(h```const struct mmu_interval_notifier_ops *ops`` MMU interval ops, currently only **invalidate** h](j)}(h/``const struct mmu_interval_notifier_ops *ops``h]j )}(hj4h]h+const struct mmu_interval_notifier_ops *ops}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj4ubj)}(hhh]h)}(h/MMU interval ops, currently only **invalidate**h](h!MMU interval ops, currently only }(hj5hhhNhNubj)}(h**invalidate**h]h invalidate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1hhj 5hKhj 5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 5hKhj4ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hj>5h]h Description}(hj@5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<5ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj3ubh)}(hThe driver should use when the access flags indicate ODP memory. It avoids pinning, instead, stores the mm for future page fault handling in conjunction with MMU notifiers.h]hThe driver should use when the access flags indicate ODP memory. It avoids pinning, instead, stores the mm for future page fault handling in conjunction with MMU notifiers.}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ib_umem_odp_map_dma_and_lock (C function)c.ib_umem_odp_map_dma_and_lockhNtauh1jhhhhhNhNubj)}(hhh](j)}(huint ib_umem_odp_map_dma_and_lock (struct ib_umem_odp *umem_odp, u64 user_virt, u64 bcnt, u64 access_mask, bool fault)h]j")}(htint ib_umem_odp_map_dma_and_lock(struct ib_umem_odp *umem_odp, u64 user_virt, u64 bcnt, u64 access_mask, bool fault)h](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM2ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5hhhj5hM2ubj)}(hib_umem_odp_map_dma_and_lockh]jN)}(hib_umem_odp_map_dma_and_lockh]hib_umem_odp_map_dma_and_lock}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhj5hM2ubj)}(hT(struct ib_umem_odp *umem_odp, u64 user_virt, u64 bcnt, u64 access_mask, bool fault)h](j)}(hstruct ib_umem_odp *umem_odph](j()}(hj+h]hstruct}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubh)}(hhh]jN)}(h ib_umem_odph]h ib_umem_odp}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj5modnameN classnameNjkjn)}jq]jt)}jgj5sbc.ib_umem_odp_map_dma_and_lockasbuh1hhj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubj)}(hjh]h*}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjN)}(humem_odph]humem_odp}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(h u64 user_virth](h)}(hhh]jN)}(hu64h]hu64}(hj56hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj26ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj76modnameN classnameNjkjn)}jq]j5c.ib_umem_odp_map_dma_and_lockasbuh1hhj.6ubj:)}(h h]h }(hjS6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.6ubjN)}(h user_virth]h user_virt}(hja6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hu64 bcnth](h)}(hhh]jN)}(hu64h]hu64}(hj}6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjz6ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj6modnameN classnameNjkjn)}jq]j5c.ib_umem_odp_map_dma_and_lockasbuh1hhjv6ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv6ubjN)}(hbcnth]hbcnt}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjv6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hu64 access_maskh](h)}(hhh]jN)}(hu64h]hu64}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj6modnameN classnameNjkjn)}jq]j5c.ib_umem_odp_map_dma_and_lockasbuh1hhj6ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubjN)}(h access_maskh]h access_mask}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(h bool faulth](j)}(hjjh]hbool}(hj 7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubjN)}(hfaulth]hfault}(hj%7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hM2ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj{5hhhj5hM2ubah}(h]jv5ah ](jjeh"]h$]h&]jj)jhuh1jhj5hM2hjx5hhubj)}(hhh]h)}(h2DMA map userspace memory in an ODP MR and lock it.h]h2DMA map userspace memory in an ODP MR and lock it.}(hjO7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM2hjL7hhubah}(h]h ]h"]h$]h&]uh1jhjx5hhhj5hM2ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjg7jjg7jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_umem_odp *umem_odp`` the umem to map and pin ``u64 user_virt`` the address from which we need to map. ``u64 bcnt`` the minimal number of bytes to pin and map. The mapping might be bigger due to alignment, and may also be smaller in case of an error pinning or mapping a page. The actual pages mapped is returned in the return value. ``u64 access_mask`` bit mask of the requested access permissions for the given range. ``bool fault`` is faulting required for the given range **Description** Maps the range passed in the argument to DMA addresses. Upon success the ODP MR will be locked to let caller complete its device page table update. Returns the number of pages mapped in success, negative error code for failure.h](h)}(h**Parameters**h]j)}(hjq7h]h Parameters}(hjs7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo7ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM6hjk7ubj)}(hhh](j)}(h9``struct ib_umem_odp *umem_odp`` the umem to map and pin h](j)}(h ``struct ib_umem_odp *umem_odp``h]j )}(hj7h]hstruct ib_umem_odp *umem_odp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM:hj7ubj)}(hhh]h)}(hthe umem to map and pinh]hthe umem to map and pin}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM:hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM:hj7ubj)}(h9``u64 user_virt`` the address from which we need to map. h](j)}(h``u64 user_virt``h]j )}(hj7h]h u64 user_virt}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM;hj7ubj)}(hhh]h)}(h&the address from which we need to map.h]h&the address from which we need to map.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM;hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM;hj7ubj)}(h``u64 bcnt`` the minimal number of bytes to pin and map. The mapping might be bigger due to alignment, and may also be smaller in case of an error pinning or mapping a page. The actual pages mapped is returned in the return value. h](j)}(h ``u64 bcnt``h]j )}(hj8h]hu64 bcnt}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM?hj7ubj)}(hhh]h)}(hthe minimal number of bytes to pin and map. The mapping might be bigger due to alignment, and may also be smaller in case of an error pinning or mapping a page. The actual pages mapped is returned in the return value.h]hthe minimal number of bytes to pin and map. The mapping might be bigger due to alignment, and may also be smaller in case of an error pinning or mapping a page. The actual pages mapped is returned in the return value.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM<hj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hM?hj7ubj)}(hV``u64 access_mask`` bit mask of the requested access permissions for the given range. h](j)}(h``u64 access_mask``h]j )}(hj<8h]hu64 access_mask}(hj>8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:8ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chMAhj68ubj)}(hhh]h)}(hAbit mask of the requested access permissions for the given range.h]hAbit mask of the requested access permissions for the given range.}(hjU8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM@hjR8ubah}(h]h ]h"]h$]h&]uh1jhj68ubeh}(h]h ]h"]h$]h&]uh1jhjQ8hMAhj7ubj)}(h8``bool fault`` is faulting required for the given range h](j)}(h``bool fault``h]j )}(hjv8h]h bool fault}(hjx8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt8ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chMBhjp8ubj)}(hhh]h)}(h(is faulting required for the given rangeh]h(is faulting required for the given range}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMBhj8ubah}(h]h ]h"]h$]h&]uh1jhjp8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMBhj7ubeh}(h]h ]h"]h$]h&]uh1jhjk7ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chMDhjk7ubh)}(hMaps the range passed in the argument to DMA addresses. Upon success the ODP MR will be locked to let caller complete its device page table update.h]hMaps the range passed in the argument to DMA addresses. Upon success the ODP MR will be locked to let caller complete its device page table update.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM3hjk7ubh)}(hOReturns the number of pages mapped in success, negative error code for failure.h]hOReturns the number of pages mapped in success, negative error code for failure.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM7hjk7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]infiniband-core-interfacesah ]h"]infiniband core interfacesah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hRDMA Verbs transport libraryh]hRDMA Verbs transport library}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hhhhhK/ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_fast_reg_mr (C function)c.rvt_fast_reg_mrhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hPint rvt_fast_reg_mr (struct rvt_qp *qp, struct ib_mr *ibmr, u32 key, int access)h]j")}(hOint rvt_fast_reg_mr(struct rvt_qp *qp, struct ib_mr *ibmr, u32 key, int access)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMcubj:)}(h h]h }(hj-9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9hhhj,9hMcubj)}(hrvt_fast_reg_mrh]jN)}(hrvt_fast_reg_mrh]hrvt_fast_reg_mr}(hj?9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj,9hMcubj)}(h<(struct rvt_qp *qp, struct ib_mr *ibmr, u32 key, int access)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hj[9hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjW9ubj:)}(h h]h }(hjh9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjW9ubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjy9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjv9ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj{9modnameN classnameNjkjn)}jq]jt)}jgjA9sbc.rvt_fast_reg_mrasbuh1hhjW9ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjW9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW9ubjN)}(hqph]hqp}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjW9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS9ubj)}(hstruct ib_mr *ibmrh](j()}(hj+h]hstruct}(hj9hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj9ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubh)}(hhh]jN)}(hib_mrh]hib_mr}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]j9c.rvt_fast_reg_mrasbuh1hhj9ubj:)}(h h]h }(hj :hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjN)}(hibmrh]hibmr}(hj$:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS9ubj)}(hu32 keyh](h)}(hhh]jN)}(hu32h]hu32}(hj@:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=:ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjB:modnameN classnameNjkjn)}jq]j9c.rvt_fast_reg_mrasbuh1hhj9:ubj:)}(h h]h }(hj^:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9:ubjN)}(hkeyh]hkey}(hjl:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS9ubj)}(h int accessh](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubjN)}(haccessh]haccess}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS9ubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhj,9hMcubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj9hhhj,9hMcubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhj,9hMchj9hhubj)}(hhh]h)}(hfast register physical MRh]hfast register physical MR}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMchj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj,9hMcubeh}(h]h ](jefunctioneh"]h$]h&]jjejj:jj:jjjuh1jhhhj8hNhNubj)}(hX%**Parameters** ``struct rvt_qp *qp`` the queue pair where the work request comes from ``struct ib_mr *ibmr`` the memory region to be registered ``u32 key`` updated key for this memory region ``int access`` access flags for this memory region **Description** Returns 0 on success.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMghj:ubj)}(hhh](j)}(hG``struct rvt_qp *qp`` the queue pair where the work request comes from h](j)}(h``struct rvt_qp *qp``h]j )}(hj ;h]hstruct rvt_qp *qp}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMdhj;ubj)}(hhh]h)}(h0the queue pair where the work request comes fromh]h0the queue pair where the work request comes from}(hj%;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!;hMdhj";ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj!;hMdhj;ubj)}(h:``struct ib_mr *ibmr`` the memory region to be registered h](j)}(h``struct ib_mr *ibmr``h]j )}(hjE;h]hstruct ib_mr *ibmr}(hjG;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC;ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMehj?;ubj)}(hhh]h)}(h"the memory region to be registeredh]h"the memory region to be registered}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ;hMehj[;ubah}(h]h ]h"]h$]h&]uh1jhj?;ubeh}(h]h ]h"]h$]h&]uh1jhjZ;hMehj;ubj)}(h/``u32 key`` updated key for this memory region h](j)}(h ``u32 key``h]j )}(hj~;h]hu32 key}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|;ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMfhjx;ubj)}(hhh]h)}(h"updated key for this memory regionh]h"updated key for this memory region}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMfhj;ubah}(h]h ]h"]h$]h&]uh1jhjx;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMfhj;ubj)}(h3``int access`` access flags for this memory region h](j)}(h``int access``h]j )}(hj;h]h int access}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMghj;ubj)}(hhh]h)}(h#access flags for this memory regionh]h#access flags for this memory region}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMghj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMghj;ubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMihj:ubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j rvt_invalidate_rkey (C function)c.rvt_invalidate_rkeyhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h5int rvt_invalidate_rkey (struct rvt_qp *qp, u32 rkey)h]j")}(h4int rvt_invalidate_rkey(struct rvt_qp *qp, u32 rkey)h](j)}(hinth]hint}(hj7<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3<hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMubj:)}(h h]h }(hjF<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3<hhhjE<hMubj)}(hrvt_invalidate_rkeyh]jN)}(hrvt_invalidate_rkeyh]hrvt_invalidate_rkey}(hjX<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjT<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3<hhhjE<hMubj)}(h(struct rvt_qp *qp, u32 rkey)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hjt<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjp<ubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp<ubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hj<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj<modnameN classnameNjkjn)}jq]jt)}jgjZ<sbc.rvt_invalidate_rkeyasbuh1hhjp<ubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp<ubjN)}(hqph]hqp}(hj<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjp<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjl<ubj)}(hu32 rkeyh](h)}(hhh]jN)}(hu32h]hu32}(hj<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj<modnameN classnameNjkjn)}jq]j<c.rvt_invalidate_rkeyasbuh1hhj<ubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubjN)}(hrkeyh]hrkey}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjl<ubeh}(h]h ]h"]h$]h&]jjuh1jhj3<hhhjE<hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj/<hhhjE<hMubah}(h]j*<ah ](jjeh"]h$]h&]jj)jhuh1jhjE<hMhj,<hhubj)}(hhh]h)}(hinvalidate an MR rkeyh]hinvalidate an MR rkey}(hj?=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj<=hhubah}(h]h ]h"]h$]h&]uh1jhj,<hhhjE<hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjW=jjW=jjjuh1jhhhj8hNhNubj)}(h**Parameters** ``struct rvt_qp *qp`` queue pair associated with the invalidate op ``u32 rkey`` rkey to invalidate **Description** Returns 0 on success.h](h)}(h**Parameters**h]j)}(hja=h]h Parameters}(hjc=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_=ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj[=ubj)}(hhh](j)}(hC``struct rvt_qp *qp`` queue pair associated with the invalidate op h](j)}(h``struct rvt_qp *qp``h]j )}(hj=h]hstruct rvt_qp *qp}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~=ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjz=ubj)}(hhh]h)}(h,queue pair associated with the invalidate oph]h,queue pair associated with the invalidate op}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhjz=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjw=ubj)}(h ``u32 rkey`` rkey to invalidate h](j)}(h ``u32 rkey``h]j )}(hj=h]hu32 rkey}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj=ubj)}(hhh]h)}(hrkey to invalidateh]hrkey to invalidate}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjw=ubeh}(h]h ]h"]h$]h&]uh1jhj[=ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj[=ubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj[=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_lkey_ok (C function) c.rvt_lkey_okhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hint rvt_lkey_ok (struct rvt_lkey_table *rkt, struct rvt_pd *pd, struct rvt_sge *isge, struct rvt_sge *last_sge, struct ib_sge *sge, int acc)h]j")}(hint rvt_lkey_ok(struct rvt_lkey_table *rkt, struct rvt_pd *pd, struct rvt_sge *isge, struct rvt_sge *last_sge, struct ib_sge *sge, int acc)h](j)}(hinth]hint}(hj9>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5>hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMubj:)}(h h]h }(hjH>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5>hhhjG>hMubj)}(h rvt_lkey_okh]jN)}(h rvt_lkey_okh]h rvt_lkey_ok}(hjZ>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjV>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5>hhhjG>hMubj)}(h|(struct rvt_lkey_table *rkt, struct rvt_pd *pd, struct rvt_sge *isge, struct rvt_sge *last_sge, struct ib_sge *sge, int acc)h](j)}(hstruct rvt_lkey_table *rkth](j()}(hj+h]hstruct}(hjv>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjr>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr>ubh)}(hhh]jN)}(hrvt_lkey_tableh]hrvt_lkey_table}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj>modnameN classnameNjkjn)}jq]jt)}jgj\>sb c.rvt_lkey_okasbuh1hhjr>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr>ubjN)}(hrkth]hrkt}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjr>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubj)}(hstruct rvt_pd *pdh](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]jN)}(hrvt_pdh]hrvt_pd}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj?modnameN classnameNjkjn)}jq]j> c.rvt_lkey_okasbuh1hhj>ubj:)}(h h]h }(hj$?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjh]h*}(hj2?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjN)}(hpdh]hpd}(hj??hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubj)}(hstruct rvt_sge *isgeh](j()}(hj+h]hstruct}(hjX?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjT?ubj:)}(h h]h }(hje?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT?ubh)}(hhh]jN)}(hrvt_sgeh]hrvt_sge}(hjv?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjs?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjx?modnameN classnameNjkjn)}jq]j> c.rvt_lkey_okasbuh1hhjT?ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT?ubjN)}(hisgeh]hisge}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjT?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubj)}(hstruct rvt_sge *last_sgeh](j()}(hj+h]hstruct}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj?ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubh)}(hhh]jN)}(hrvt_sgeh]hrvt_sge}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj?modnameN classnameNjkjn)}jq]j> c.rvt_lkey_okasbuh1hhj?ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjN)}(hlast_sgeh]hlast_sge}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubj)}(hstruct ib_sge *sgeh](j()}(hj+h]hstruct}(hj8@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4@ubj:)}(h h]h }(hjE@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4@ubh)}(hhh]jN)}(hib_sgeh]hib_sge}(hjV@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjS@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjX@modnameN classnameNjkjn)}jq]j> c.rvt_lkey_okasbuh1hhj4@ubj:)}(h h]h }(hjt@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4@ubjN)}(hsgeh]hsge}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubj)}(hint acch](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubjN)}(hacch]hacc}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjn>ubeh}(h]h ]h"]h$]h&]jjuh1jhj5>hhhjG>hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj1>hhhjG>hMubah}(h]j,>ah ](jjeh"]h$]h&]jj)jhuh1jhjG>hMhj.>hhubj)}(hhh]h)}(h(check IB SGE for validity and initializeh]h(check IB SGE for validity and initialize}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj.>hhhjG>hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjAjjAjjjuh1jhhhj8hNhNubj)}(hX**Parameters** ``struct rvt_lkey_table *rkt`` table containing lkey to check SGE against ``struct rvt_pd *pd`` protection domain ``struct rvt_sge *isge`` outgoing internal SGE ``struct rvt_sge *last_sge`` last outgoing SGE written ``struct ib_sge *sge`` SGE to check ``int acc`` access flags **Description** Check the IB SGE for validity and initialize our internal version of it. Increments the reference count when a new sge is stored. **Return** 0 if compressed, 1 if added , otherwise returns -errno.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubj)}(hhh](j)}(hJ``struct rvt_lkey_table *rkt`` table containing lkey to check SGE against h](j)}(h``struct rvt_lkey_table *rkt``h]j )}(hj/Ah]hstruct rvt_lkey_table *rkt}(hj1AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Aubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj)Aubj)}(hhh]h)}(h*table containing lkey to check SGE againsth]h*table containing lkey to check SGE against}(hjHAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDAhMhjEAubah}(h]h ]h"]h$]h&]uh1jhj)Aubeh}(h]h ]h"]h$]h&]uh1jhjDAhMhj&Aubj)}(h(``struct rvt_pd *pd`` protection domain h](j)}(h``struct rvt_pd *pd``h]j )}(hjhAh]hstruct rvt_pd *pd}(hjjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfAubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjbAubj)}(hhh]h)}(hprotection domainh]hprotection domain}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}AhMhj~Aubah}(h]h ]h"]h$]h&]uh1jhjbAubeh}(h]h ]h"]h$]h&]uh1jhj}AhMhj&Aubj)}(h/``struct rvt_sge *isge`` outgoing internal SGE h](j)}(h``struct rvt_sge *isge``h]j )}(hjAh]hstruct rvt_sge *isge}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjAubj)}(hhh]h)}(houtgoing internal SGEh]houtgoing internal SGE}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj&Aubj)}(h7``struct rvt_sge *last_sge`` last outgoing SGE written h](j)}(h``struct rvt_sge *last_sge``h]j )}(hjAh]hstruct rvt_sge *last_sge}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjAubj)}(hhh]h)}(hlast outgoing SGE writtenh]hlast outgoing SGE written}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj&Aubj)}(h$``struct ib_sge *sge`` SGE to check h](j)}(h``struct ib_sge *sge``h]j )}(hjBh]hstruct ib_sge *sge}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Bubj)}(hhh]h)}(h SGE to checkh]h SGE to check}(hj,BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(BhMhj)Bubah}(h]h ]h"]h$]h&]uh1jhj Bubeh}(h]h ]h"]h$]h&]uh1jhj(BhMhj&Aubj)}(h``int acc`` access flags h](j)}(h ``int acc``h]j )}(hjLBh]hint acc}(hjNBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJBubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjFBubj)}(hhh]h)}(h access flagsh]h access flags}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaBhMhjbBubah}(h]h ]h"]h$]h&]uh1jhjFBubeh}(h]h ]h"]h$]h&]uh1jhjaBhMhj&Aubeh}(h]h ]h"]h$]h&]uh1jhj Aubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubh)}(hHCheck the IB SGE for validity and initialize our internal version of it.h]hHCheck the IB SGE for validity and initialize our internal version of it.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubh)}(h8Increments the reference count when a new sge is stored.h]h8Increments the reference count when a new sge is stored.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubh)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubh)}(h70 if compressed, 1 if added , otherwise returns -errno.h]h70 if compressed, 1 if added , otherwise returns -errno.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhj Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_rkey_ok (C function) c.rvt_rkey_okhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h_int rvt_rkey_ok (struct rvt_qp *qp, struct rvt_sge *sge, u32 len, u64 vaddr, u32 rkey, int acc)h]j")}(h^int rvt_rkey_ok(struct rvt_qp *qp, struct rvt_sge *sge, u32 len, u64 vaddr, u32 rkey, int acc)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM3ubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBhhhjChM3ubj)}(h rvt_rkey_okh]jN)}(h rvt_rkey_okh]h rvt_rkey_ok}(hj#ChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjChM3ubj)}(hO(struct rvt_qp *qp, struct rvt_sge *sge, u32 len, u64 vaddr, u32 rkey, int acc)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hj?ChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj;Cubj:)}(h h]h }(hjLChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;Cubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hj]ChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZCubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj_CmodnameN classnameNjkjn)}jq]jt)}jgj%Csb c.rvt_rkey_okasbuh1hhj;Cubj:)}(h h]h }(hj}ChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;Cubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;CubjN)}(hqph]hqp}(hjChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;Cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubj)}(hstruct rvt_sge *sgeh](j()}(hj+h]hstruct}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubh)}(hhh]jN)}(hrvt_sgeh]hrvt_sge}(hjChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjCmodnameN classnameNjkjn)}jq]jyC c.rvt_rkey_okasbuh1hhjCubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjN)}(hsgeh]hsge}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubj)}(hu32 lenh](h)}(hhh]jN)}(hu32h]hu32}(hj$DhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj!Dubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj&DmodnameN classnameNjkjn)}jq]jyC c.rvt_rkey_okasbuh1hhjDubj:)}(h h]h }(hjBDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubjN)}(hlenh]hlen}(hjPDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubj)}(h u64 vaddrh](h)}(hhh]jN)}(hu64h]hu64}(hjlDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjiDubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjnDmodnameN classnameNjkjn)}jq]jyC c.rvt_rkey_okasbuh1hhjeDubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeDubjN)}(hvaddrh]hvaddr}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubj)}(hu32 rkeyh](h)}(hhh]jN)}(hu32h]hu32}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjDmodnameN classnameNjkjn)}jq]jyC c.rvt_rkey_okasbuh1hhjDubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubjN)}(hrkeyh]hrkey}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubj)}(hint acch](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubjN)}(hacch]hacc}(hjEhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Cubeh}(h]h ]h"]h$]h&]jjuh1jhjBhhhjChM3ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjBhhhjChM3ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhjChM3hjBhhubj)}(hhh]h)}(h.check the IB virtual address, length, and RKEYh]h.check the IB virtual address, length, and RKEY}(hj?EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM3hjstruct rvt_dev_info *rvt_alloc_device(size_t size, int nports)h](j()}(hj+h]hstruct}(hjOhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjOhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK%ubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOhhhjOhK%ubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hjPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj PmodnameN classnameNjkjn)}jq]jt)}jgrvt_alloc_devicesbc.rvt_alloc_deviceasbuh1hhjOhhhjOhK%ubj:)}(h h]h }(hj)PhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOhhhjOhK%ubj)}(hjh]h*}(hj7PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhK%ubj)}(hrvt_alloc_deviceh]jN)}(hj&Ph]hrvt_alloc_device}(hjHPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhK%ubj)}(h(size_t size, int nports)h](j)}(h size_t sizeh](h)}(hhh]jN)}(hsize_th]hsize_t}(hjfPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjcPubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjhPmodnameN classnameNjkjn)}jq]j$Pc.rvt_alloc_deviceasbuh1hhj_Pubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_PubjN)}(hsizeh]hsize}(hjPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_Pubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[Pubj)}(h int nportsh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubjN)}(hnportsh]hnports}(hjPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[Pubeh}(h]h ]h"]h$]h&]jjuh1jhjOhhhjOhK%ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjOhhhjOhK%ubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jhjOhK%hjOhhubj)}(hhh]h)}(h allocate rdih]h allocate rdi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK%hjPhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjOhK%ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj Qjj Qjjjuh1jhhhj8hNhNubj)}(hX**Parameters** ``size_t size`` how big of a structure to allocate ``int nports`` number of ports to allocate array slots for **Description** Use IB core device alloc to allocate space for the rdi which is assumed to be inside of the ib_device. Any extra space that drivers require should be included in size. We also allocate a port array based on the number of ports. **Return** pointer to allocated rdih](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK)hj Qubj)}(hhh](j)}(h3``size_t size`` how big of a structure to allocate h](j)}(h``size_t size``h]j )}(hj2Qh]h size_t size}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Qubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK&hj,Qubj)}(hhh]h)}(h"how big of a structure to allocateh]h"how big of a structure to allocate}(hjKQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGQhK&hjHQubah}(h]h ]h"]h$]h&]uh1jhj,Qubeh}(h]h ]h"]h$]h&]uh1jhjGQhK&hj)Qubj)}(h;``int nports`` number of ports to allocate array slots for h](j)}(h``int nports``h]j )}(hjkQh]h int nports}(hjmQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiQubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK'hjeQubj)}(hhh]h)}(h+number of ports to allocate array slots forh]h+number of ports to allocate array slots for}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhK'hjQubah}(h]h ]h"]h$]h&]uh1jhjeQubeh}(h]h ]h"]h$]h&]uh1jhjQhK'hj)Qubeh}(h]h ]h"]h$]h&]uh1jhj Qubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK)hj Qubh)}(hUse IB core device alloc to allocate space for the rdi which is assumed to be inside of the ib_device. Any extra space that drivers require should be included in size.h]hUse IB core device alloc to allocate space for the rdi which is assumed to be inside of the ib_device. Any extra space that drivers require should be included in size.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK(hj Qubh)}(h;We also allocate a port array based on the number of ports.h]h;We also allocate a port array based on the number of ports.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK,hj Qubh)}(h **Return**h]j)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK.hj Qubh)}(hpointer to allocated rdih]hpointer to allocated rdi}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK/hj Qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_dealloc_device (C function)c.rvt_dealloc_devicehNtauh1jhj8hhhNhNubj)}(hhh](j)}(h2void rvt_dealloc_device (struct rvt_dev_info *rdi)h]j")}(h1void rvt_dealloc_device(struct rvt_dev_info *rdi)h](j)}(hvoidh]hvoid}(hj!RhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKBubj:)}(h h]h }(hj0RhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRhhhj/RhKBubj)}(hrvt_dealloc_deviceh]jN)}(hrvt_dealloc_deviceh]hrvt_dealloc_device}(hjBRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>Rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhj/RhKBubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j()}(hj+h]hstruct}(hj^RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjZRubj:)}(h h]h }(hjkRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZRubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hj|RhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjyRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj~RmodnameN classnameNjkjn)}jq]jt)}jgjDRsbc.rvt_dealloc_deviceasbuh1hhjZRubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZRubjN)}(hrdih]hrdi}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVRubah}(h]h ]h"]h$]h&]jjuh1jhjRhhhj/RhKBubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjRhhhj/RhKBubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhj/RhKBhjRhhubj)}(hhh]h)}(hdeallocate rdih]hdeallocate rdi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKBhjRhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhj/RhKBubeh}(h]h ](jefunctioneh"]h$]h&]jjejjRjjRjjjuh1jhhhj8hNhNubj)}(h**Parameters** ``struct rvt_dev_info *rdi`` structure to free **Description** Free a structure allocated with rvt_alloc_device()h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKFhjRubj)}(hhh]j)}(h/``struct rvt_dev_info *rdi`` structure to free h](j)}(h``struct rvt_dev_info *rdi``h]j )}(hj"Sh]hstruct rvt_dev_info *rdi}(hj$ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Subah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKChjSubj)}(hhh]h)}(hstructure to freeh]hstructure to free}(hj;ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ShKChj8Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ShKChjSubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j)}(hj]Sh]h Description}(hj_ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Subah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKEhjRubh)}(h2Free a structure allocated with rvt_alloc_device()h]h2Free a structure allocated with rvt_alloc_device()}(hjsShhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKDhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j rvt_register_device (C function)c.rvt_register_devicehNtauh1jhj8hhhNhNubj)}(hhh](j)}(h2int rvt_register_device (struct rvt_dev_info *rdi)h]j")}(h1int rvt_register_device(struct rvt_dev_info *rdi)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjShhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjShhhjShMubj)}(hrvt_register_deviceh]jN)}(hrvt_register_deviceh]hrvt_register_device}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j()}(hj+h]hstruct}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjSubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjSmodnameN classnameNjkjn)}jq]jt)}jgjSsbc.rvt_register_deviceasbuh1hhjSubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj)}(hjh]h*}(hj+ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjN)}(hrdih]hrdi}(hj8ThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjShMhjShhubj)}(hhh]h)}(hregister a driverh]hregister a driver}(hjbThhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj_Thhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjzTjjzTjjjuh1jhhhj8hNhNubj)}(h**Parameters** ``struct rvt_dev_info *rdi`` main dev structure for all of rdmavt operations **Description** It is up to drivers to allocate the rdi and fill in the appropriate information. **Return** 0 on success otherwise an errno.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj~Tubj)}(hhh]j)}(hM``struct rvt_dev_info *rdi`` main dev structure for all of rdmavt operations h](j)}(h``struct rvt_dev_info *rdi``h]j )}(hjTh]hstruct rvt_dev_info *rdi}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjTubj)}(hhh]h)}(h/main dev structure for all of rdmavt operationsh]h/main dev structure for all of rdmavt operations}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhj~Tubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj~Tubh)}(hPIt is up to drivers to allocate the rdi and fill in the appropriate information.h]hPIt is up to drivers to allocate the rdi and fill in the appropriate information.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj~Tubh)}(h **Return**h]j)}(hjUh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj~Tubh)}(h 0 on success otherwise an errno.h]h 0 on success otherwise an errno.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj~Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"rvt_unregister_device (C function)c.rvt_unregister_devicehNtauh1jhj8hhhNhNubj)}(hhh](j)}(h5void rvt_unregister_device (struct rvt_dev_info *rdi)h]j")}(h4void rvt_unregister_device(struct rvt_dev_info *rdi)h](j)}(hvoidh]hvoid}(hjJUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFUhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMOubj:)}(h h]h }(hjYUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFUhhhjXUhMOubj)}(hrvt_unregister_deviceh]jN)}(hrvt_unregister_deviceh]hrvt_unregister_device}(hjkUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFUhhhjXUhMOubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j()}(hj+h]hstruct}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjUubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjUmodnameN classnameNjkjn)}jq]jt)}jgjmUsbc.rvt_unregister_deviceasbuh1hhjUubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjN)}(hrdih]hrdi}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjFUhhhjXUhMOubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjBUhhhjXUhMOubah}(h]j=Uah ](jjeh"]h$]h&]jj)jhuh1jhjXUhMOhj?Uhhubj)}(hhh]h)}(hremove a driverh]hremove a driver}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMOhjVhhubah}(h]h ]h"]h$]h&]uh1jhj?UhhhjXUhMOubeh}(h]h ](jefunctioneh"]h$]h&]jjejj"Vjj"Vjjjuh1jhhhj8hNhNubj)}(h=**Parameters** ``struct rvt_dev_info *rdi`` rvt dev structh](h)}(h**Parameters**h]j)}(hj,Vh]h Parameters}(hj.VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Vubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMShj&Vubj)}(hhh]j)}(h+``struct rvt_dev_info *rdi`` rvt dev structh](j)}(h``struct rvt_dev_info *rdi``h]j )}(hjKVh]hstruct rvt_dev_info *rdi}(hjMVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIVubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMUhjEVubj)}(hhh]h)}(hrvt dev structh]hrvt dev struct}(hjdVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMPhjaVubah}(h]h ]h"]h$]h&]uh1jhjEVubeh}(h]h ]h"]h$]h&]uh1jhj`VhMUhjBVubah}(h]h ]h"]h$]h&]uh1jhj&Vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_init_port (C function)c.rvt_init_porthNtauh1jhj8hhhNhNubj)}(hhh](j)}(hfint rvt_init_port (struct rvt_dev_info *rdi, struct rvt_ibport *port, int port_index, u16 *pkey_table)h]j")}(heint rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port, int port_index, u16 *pkey_table)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMbubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVhhhjVhMbubj)}(h rvt_init_porth]jN)}(h rvt_init_porth]h rvt_init_port}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhjVhMbubj)}(hT(struct rvt_dev_info *rdi, struct rvt_ibport *port, int port_index, u16 *pkey_table)h](j)}(hstruct rvt_dev_info *rdih](j()}(hj+h]hstruct}(hjVhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjVubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]jt)}jgjVsbc.rvt_init_portasbuh1hhjVubj:)}(h h]h }(hj WhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubj)}(hjh]h*}(hj.WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjN)}(hrdih]hrdi}(hj;WhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hstruct rvt_ibport *porth](j()}(hj+h]hstruct}(hjTWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjPWubj:)}(h h]h }(hjaWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPWubh)}(hhh]jN)}(h rvt_ibporth]h rvt_ibport}(hjrWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoWubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjtWmodnameN classnameNjkjn)}jq]jWc.rvt_init_portasbuh1hhjPWubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPWubjN)}(hporth]hport}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hint port_indexh](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj:)}(h h]h }(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubjN)}(h port_indexh]h port_index}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hu16 *pkey_tableh](h)}(hhh]jN)}(hu16h]hu16}(hjWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]jWc.rvt_init_portasbuh1hhjWubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubj)}(hjh]h*}(hj(XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjN)}(h pkey_tableh]h pkey_table}(hj5XhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjVhhhjVhMbubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjVhhhjVhMbubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjVhMbhjVhhubj)}(hhh]h)}(h"init internal data for driver porth]h"init internal data for driver port}(hj_XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMbhj\Xhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjVhMbubeh}(h]h ](jefunctioneh"]h$]h&]jjejjwXjjwXjjjuh1jhhhj8hNhNubj)}(hXv**Parameters** ``struct rvt_dev_info *rdi`` rvt_dev_info struct ``struct rvt_ibport *port`` rvt port ``int port_index`` 0 based index of ports, different from IB core port num ``u16 *pkey_table`` pkey_table for **port** **Description** Keep track of a list of ports. No need to have a detach port. They persist until the driver goes away. **Return** always 0h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMfhj{Xubj)}(hhh](j)}(h1``struct rvt_dev_info *rdi`` rvt_dev_info struct h](j)}(h``struct rvt_dev_info *rdi``h]j )}(hjXh]hstruct rvt_dev_info *rdi}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMchjXubj)}(hhh]h)}(hrvt_dev_info structh]hrvt_dev_info struct}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMchjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMchjXubj)}(h%``struct rvt_ibport *port`` rvt port h](j)}(h``struct rvt_ibport *port``h]j )}(hjXh]hstruct rvt_ibport *port}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMdhjXubj)}(hhh]h)}(hrvt porth]hrvt port}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMdhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMdhjXubj)}(hK``int port_index`` 0 based index of ports, different from IB core port num h](j)}(h``int port_index``h]j )}(hjYh]hint port_index}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMehj Yubj)}(hhh]h)}(h70 based index of ports, different from IB core port numh]h70 based index of ports, different from IB core port num}(hj+YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'YhMehj(Yubah}(h]h ]h"]h$]h&]uh1jhj Yubeh}(h]h ]h"]h$]h&]uh1jhj'YhMehjXubj)}(h,``u16 *pkey_table`` pkey_table for **port** h](j)}(h``u16 *pkey_table``h]j )}(hjKYh]hu16 *pkey_table}(hjMYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIYubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMfhjEYubj)}(hhh]h)}(hpkey_table for **port**h](hpkey_table for }(hjdYhhhNhNubj)}(h**port**h]hport}(hjlYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdYubeh}(h]h ]h"]h$]h&]uh1hhj`YhMfhjaYubah}(h]h ]h"]h$]h&]uh1jhjEYubeh}(h]h ]h"]h$]h&]uh1jhj`YhMfhjXubeh}(h]h ]h"]h$]h&]uh1jhj{Xubh)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhhj{Xubh)}(hfKeep track of a list of ports. No need to have a detach port. They persist until the driver goes away.h]hfKeep track of a list of ports. No need to have a detach port. They persist until the driver goes away.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMghj{Xubh)}(h **Return**h]j)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMjhj{Xubh)}(halways 0h]halways 0}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMkhj{Xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_cq_enter (C function)c.rvt_cq_enterhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hJbool rvt_cq_enter (struct rvt_cq *cq, struct ib_wc *entry, bool solicited)h]j")}(hIbool rvt_cq_enter(struct rvt_cq *cq, struct ib_wc *entry, bool solicited)h](j)}(hjjh]hbool}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjYhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYhhhj ZhKubj)}(h rvt_cq_enterh]jN)}(h rvt_cq_enterh]h rvt_cq_enter}(hj ZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhj ZhKubj)}(h8(struct rvt_cq *cq, struct ib_wc *entry, bool solicited)h](j)}(hstruct rvt_cq *cqh](j()}(hj+h]hstruct}(hjs_lock held. **Return** return true on success, else return false if cq is full.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubj)}(hhh](j)}(h'``struct rvt_cq *cq`` completion queue h](j)}(h``struct rvt_cq *cq``h]j )}(hj[h]hstruct rvt_cq *cq}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubj)}(hhh]h)}(hcompletion queueh]hcompletion queue}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj[ubj)}(h5``struct ib_wc *entry`` work completion entry to add h](j)}(h``struct ib_wc *entry``h]j )}(hj[h]hstruct ib_wc *entry}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubj)}(hhh]h)}(hwork completion entry to addh]hwork completion entry to add}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj[ubj)}(h2``bool solicited`` true if **entry** is solicited h](j)}(h``bool solicited``h]j )}(hj\h]hbool solicited}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj\ubj)}(hhh]h)}(htrue if **entry** is solicitedh](htrue if }(hj/\hhhNhNubj)}(h **entry**h]hentry}(hj7\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/\ubh is solicited}(hj/\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+\hKhj,\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj+\hKhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hjc\h]h Description}(hje\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja\ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubh)}(h(This may be called with qp->s_lock held.h]h(This may be called with qp->s_lock held.}(hjy\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubh)}(h **Return**h]j)}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubh)}(h8return true on success, else return false if cq is full.h]h8return true on success, else return false if cq is full.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_error_qp (C function)c.rvt_error_qphNtauh1jhj8hhhNhNubj)}(hhh](j)}(h;int rvt_error_qp (struct rvt_qp *qp, enum ib_wc_status err)h]j")}(h:int rvt_error_qp(struct rvt_qp *qp, enum ib_wc_status err)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\hhhj\hMubj)}(h rvt_error_qph]jN)}(h rvt_error_qph]h rvt_error_qp}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj\hMubj)}(h*(struct rvt_qp *qp, enum ib_wc_status err)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hj ]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj]ubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hj*]hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj']ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,]modnameN classnameNjkjn)}jq]jt)}jgj\sbc.rvt_error_qpasbuh1hhj]ubj:)}(h h]h }(hjJ]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubj)}(hjh]h*}(hjX]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjN)}(hqph]hqp}(hje]hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(henum ib_wc_status errh](j()}(hj%h]henum}(hj~]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjz]ubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz]ubh)}(hhh]jN)}(h ib_wc_statush]h ib_wc_status}(hj]hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj]ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj]modnameN classnameNjkjn)}jq]jF]c.rvt_error_qpasbuh1hhjz]ubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz]ubjN)}(herrh]herr}(hj]hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjz]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj\hhhj\hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj\hMhj\hhubj)}(hhh]h)}(hput a QP into the error stateh]hput a QP into the error state}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj\hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj ^jj ^jjjuh1jhhhj8hNhNubj)}(hX**Parameters** ``struct rvt_qp *qp`` the QP to put into the error state ``enum ib_wc_status err`` the receive completion error to signal if a RWQE is active **Description** Flushes both send and receive work queues. **Return** true if last WQE event should be generated. The QP r_lock and s_lock should be held and interrupts disabled. If we are already in error state, just return.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj^ubj)}(hhh](j)}(h9``struct rvt_qp *qp`` the QP to put into the error state h](j)}(h``struct rvt_qp *qp``h]j )}(hj3^h]hstruct rvt_qp *qp}(hj5^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1^ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj-^ubj)}(hhh]h)}(h"the QP to put into the error stateh]h"the QP to put into the error state}(hjL^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH^hMhjI^ubah}(h]h ]h"]h$]h&]uh1jhj-^ubeh}(h]h ]h"]h$]h&]uh1jhjH^hMhj*^ubj)}(hU``enum ib_wc_status err`` the receive completion error to signal if a RWQE is active h](j)}(h``enum ib_wc_status err``h]j )}(hjl^h]henum ib_wc_status err}(hjn^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj^ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhjf^ubj)}(hhh]h)}(h:the receive completion error to signal if a RWQE is activeh]h:the receive completion error to signal if a RWQE is active}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjf^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj*^ubeh}(h]h ]h"]h$]h&]uh1jhj^ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj^ubh)}(h*Flushes both send and receive work queues.h]h*Flushes both send and receive work queues.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj^ubh)}(h **Return**h]j)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj^ubh)}(htrue if last WQE event should be generated. The QP r_lock and s_lock should be held and interrupts disabled. If we are already in error state, just return.h]htrue if last WQE event should be generated. The QP r_lock and s_lock should be held and interrupts disabled. If we are already in error state, just return.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_get_rwqe (C function)c.rvt_get_rwqehNtauh1jhj8hhhNhNubj)}(hhh](j)}(h5int rvt_get_rwqe (struct rvt_qp *qp, bool wr_id_only)h]j")}(h4int rvt_get_rwqe(struct rvt_qp *qp, bool wr_id_only)h](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj:)}(h h]h }(hj"_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_hhhj!_hM ubj)}(h rvt_get_rwqeh]jN)}(h rvt_get_rwqeh]h rvt_get_rwqe}(hj4_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj0_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhj!_hM ubj)}(h$(struct rvt_qp *qp, bool wr_id_only)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hjP_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjL_ubj:)}(h h]h }(hj]_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjL_ubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjn_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjk_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjp_modnameN classnameNjkjn)}jq]jt)}jgj6_sbc.rvt_get_rwqeasbuh1hhjL_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjL_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL_ubjN)}(hqph]hqp}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjL_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH_ubj)}(hbool wr_id_onlyh](j)}(hjjh]hbool}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubjN)}(h wr_id_onlyh]h wr_id_only}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH_ubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhj!_hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj _hhhj!_hM ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhj!_hM hj_hhubj)}(hhh]h)}(h%copy the next RWQE into the QP's RWQEh]h'copy the next RWQE into the QP’s RWQE}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj`hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj!_hM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj`jj`jjjuh1jhhhj8hNhNubj)}(h**Parameters** ``struct rvt_qp *qp`` the QP ``bool wr_id_only`` update qp->r_wr_id only, not qp->r_sge **Description** Return -1 if there is a local error, 0 if no RWQE is available, otherwise return 1. Can be called from interrupt level.h](h)}(h**Parameters**h]j)}(hj)`h]h Parameters}(hj+`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'`ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj#`ubj)}(hhh](j)}(h``struct rvt_qp *qp`` the QP h](j)}(h``struct rvt_qp *qp``h]j )}(hjH`h]hstruct rvt_qp *qp}(hjJ`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF`ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjB`ubj)}(hhh]h)}(hthe QPh]hthe QP}(hja`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]`hM hj^`ubah}(h]h ]h"]h$]h&]uh1jhjB`ubeh}(h]h ]h"]h$]h&]uh1jhj]`hM hj?`ubj)}(h;``bool wr_id_only`` update qp->r_wr_id only, not qp->r_sge h](j)}(h``bool wr_id_only``h]j )}(hj`h]hbool wr_id_only}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj{`ubj)}(hhh]h)}(h&update qp->r_wr_id only, not qp->r_sgeh]h&update qp->r_wr_id only, not qp->r_sge}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM hj`ubah}(h]h ]h"]h$]h&]uh1jhj{`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM hj?`ubeh}(h]h ]h"]h$]h&]uh1jhj#`ubh)}(h**Description**h]j)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj#`ubh)}(hSReturn -1 if there is a local error, 0 if no RWQE is available, otherwise return 1.h]hSReturn -1 if there is a local error, 0 if no RWQE is available, otherwise return 1.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj#`ubh)}(h#Can be called from interrupt level.h]h#Can be called from interrupt level.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj#`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_comm_est (C function)c.rvt_comm_esthNtauh1jhj8hhhNhNubj)}(hhh](j)}(h%void rvt_comm_est (struct rvt_qp *qp)h]j")}(h$void rvt_comm_est(struct rvt_qp *qp)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ahhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ahhhjahM ubj)}(h rvt_comm_esth]jN)}(h rvt_comm_esth]h rvt_comm_est}(hj1ahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj-aubah}(h]h ](jjeh"]h$]h&]jjuh1jhj ahhhjahM ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hjMahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjIaubj:)}(h h]h }(hjZahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIaubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjkahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhaubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmamodnameN classnameNjkjn)}jq]jt)}jgj3asbc.rvt_comm_estasbuh1hhjIaubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIaubjN)}(hqph]hqp}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjIaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEaubah}(h]h ]h"]h$]h&]jjuh1jhj ahhhjahM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjahhhjahM ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhjahM hjahhubj)}(hhh]h)}(hhandle trap with QP establishedh]hhandle trap with QP established}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjahhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjajjajjjuh1jhhhj8hNhNubj)}(h.**Parameters** ``struct rvt_qp *qp`` the QPh](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjaubj)}(hhh]j)}(h``struct rvt_qp *qp`` the QPh](j)}(h``struct rvt_qp *qp``h]j )}(hjbh]hstruct rvt_qp *qp}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj bubj)}(hhh]h)}(hthe QPh]hthe QP}(hj*bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj'bubah}(h]h ]h"]h$]h&]uh1jhj bubeh}(h]h ]h"]h$]h&]uh1jhj&bhM hjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_add_rnr_timer (C function)c.rvt_add_rnr_timerhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h4void rvt_add_rnr_timer (struct rvt_qp *qp, u32 aeth)h]j")}(h3void rvt_add_rnr_timer(struct rvt_qp *qp, u32 aeth)h](j)}(hvoidh]hvoid}(hjkbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjgbhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj:)}(h h]h }(hjzbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgbhhhjybhM ubj)}(hrvt_add_rnr_timerh]jN)}(hrvt_add_rnr_timerh]hrvt_add_rnr_timer}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjgbhhhjybhM ubj)}(h(struct rvt_qp *qp, u32 aeth)h](j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjbubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjbmodnameN classnameNjkjn)}jq]jt)}jgjbsbc.rvt_add_rnr_timerasbuh1hhjbubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjN)}(hqph]hqp}(hjchhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hu32 aethh](h)}(hhh]jN)}(hu32h]hu32}(hjchhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjcubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjcmodnameN classnameNjkjn)}jq]jbc.rvt_add_rnr_timerasbuh1hhjcubj:)}(h h]h }(hj;chhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubjN)}(haethh]haeth}(hjIchhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhjgbhhhjybhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjcbhhhjybhM ubah}(h]j^bah ](jjeh"]h$]h&]jj)jhuh1jhjybhM hj`bhhubj)}(hhh]h)}(h add/start an rnr timer on the QPh]h add/start an rnr timer on the QP}(hjschhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjpchhubah}(h]h ]h"]h$]h&]uh1jhj`bhhhjybhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjcjjcjjjuh1jhhhj8hNhNubj)}(ho**Parameters** ``struct rvt_qp *qp`` the QP ``u32 aeth`` aeth of RNR timeout, simulated aeth for loopbackh](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjcubj)}(hhh](j)}(h``struct rvt_qp *qp`` the QP h](j)}(h``struct rvt_qp *qp``h]j )}(hjch]hstruct rvt_qp *qp}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjcubj)}(hhh]h)}(hthe QPh]hthe QP}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjcubj)}(h=``u32 aeth`` aeth of RNR timeout, simulated aeth for loopbackh](j)}(h ``u32 aeth``h]j )}(hjch]hu32 aeth}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjcubj)}(hhh]h)}(h0aeth of RNR timeout, simulated aeth for loopbackh]h0aeth of RNR timeout, simulated aeth for loopback}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjdhM hjcubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_stop_rc_timers (C function)c.rvt_stop_rc_timershNtauh1jhj8hhhNhNubj)}(hhh](j)}(h+void rvt_stop_rc_timers (struct rvt_qp *qp)h]j")}(h*void rvt_stop_rc_timers(struct rvt_qp *qp)h](j)}(hvoidh]hvoid}(hjGdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCdhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj:)}(h h]h }(hjVdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCdhhhjUdhM ubj)}(hrvt_stop_rc_timersh]jN)}(hrvt_stop_rc_timersh]hrvt_stop_rc_timers}(hjhdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjddubah}(h]h ](jjeh"]h$]h&]jjuh1jhjCdhhhjUdhM ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j()}(hj+h]hstruct}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjdubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjdmodnameN classnameNjkjn)}jq]jt)}jgjjdsbc.rvt_stop_rc_timersasbuh1hhjdubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjN)}(hqph]hqp}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|dubah}(h]h ]h"]h$]h&]jjuh1jhjCdhhhjUdhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj?dhhhjUdhM ubah}(h]j:dah ](jjeh"]h$]h&]jj)jhuh1jhjUdhM hjqp with the current QP when the return value is 0. **Return** 0 - iter->qp is valid 1 - no more QPsh](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMm hjkubj)}(hhh]j)}(h*``struct rvt_qp_iter *iter`` the iterator h](j)}(h``struct rvt_qp_iter *iter``h]j )}(hj lh]hstruct rvt_qp_iter *iter}(hj"lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMj hjlubj)}(hhh]h)}(h the iteratorh]h the iterator}(hj9lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5lhMj hj6lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj5lhMj hjlubah}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j)}(hj[lh]h Description}(hj]lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYlubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMl hjkubh)}(hKFine grained QP iterator suitable for use with debugfs seq_file mechanisms.h]hKFine grained QP iterator suitable for use with debugfs seq_file mechanisms.}(hjqlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMk hjkubh)}(h@Updates iter->qp with the current QP when the return value is 0.h]h@Updates iter->qp with the current QP when the return value is 0.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMn hjkubh)}(h **Return**h]j)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMq hjkubh)}(h%0 - iter->qp is valid 1 - no more QPsh]h%0 - iter->qp is valid 1 - no more QPs}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMr hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_qp_iter (C function) c.rvt_qp_iterhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hXvoid rvt_qp_iter (struct rvt_dev_info *rdi, u64 v, void (*cb)(struct rvt_qp *qp, u64 v))h]j")}(hWvoid rvt_qp_iter(struct rvt_dev_info *rdi, u64 v, void (*cb)(struct rvt_qp *qp, u64 v))h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjlhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj:)}(h h]h }(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjlhhhjlhM ubj)}(h rvt_qp_iterh]jN)}(h rvt_qp_iterh]h rvt_qp_iter}(hjlhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjlhM ubj)}(hG(struct rvt_dev_info *rdi, u64 v, void (*cb)(struct rvt_qp *qp, u64 v))h](j)}(hstruct rvt_dev_info *rdih](j()}(hj+h]hstruct}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjmubj:)}(h h]h }(hj mhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubh)}(hhh]jN)}(h rvt_dev_infoh]h rvt_dev_info}(hj1mhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj.mubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj3mmodnameN classnameNjkjn)}jq]jt)}jgjlsb c.rvt_qp_iterasbuh1hhjmubj:)}(h h]h }(hjQmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj)}(hjh]h*}(hj_mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjN)}(hrdih]hrdi}(hjlmhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj mubj)}(hu64 vh](h)}(hhh]jN)}(hu64h]hu64}(hjmhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmmodnameN classnameNjkjn)}jq]jMm c.rvt_qp_iterasbuh1hhjmubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubjN)}(hjhh]hv}(hjmhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj mubj)}(h$void (*cb)(struct rvt_qp *qp, u64 v)h](j)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj)}(hjh]h(}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjN)}(hcbh]hcb}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubj)}(hj*h]h)}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h(}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj()}(hj+h]hstruct}(hj*nhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjmubj:)}(h h]h }(hj7nhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubh)}(hhh]jN)}(hrvt_qph]hrvt_qp}(hjHnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEnubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjJnmodnameN classnameNjkjn)}jq]jMm c.rvt_qp_iterasbuh1hhjmubj:)}(h h]h }(hjfnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj)}(hjh]h*}(hjtnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjN)}(hqph]hqp}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubj)}(hjh]h,}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubh)}(hhh]jN)}(hu64h]hu64}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjnmodnameN classnameNjkjn)}jq]jMm c.rvt_qp_iterasbuh1hhjmubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubjN)}(hjhh]hv}(hjnhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubj)}(hj*h]h)}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj mubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjlhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjlhhhjlhM ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhjlhM hjlhhubj)}(hhh]h)}(hiterate all QPsh]hiterate all QPs}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj ohhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj'ojj'ojjjuh1jhhhj8hNhNubj)}(hX**Parameters** ``struct rvt_dev_info *rdi`` rvt devinfo ``u64 v`` a 64-bit value ``void (*cb)(struct rvt_qp *qp, u64 v)`` a callback **Description** This provides a way for iterating all QPs. The **cb** is a user-defined callback and **v** is a 64-bit value passed to and relevant for processing in the cb. An example use case would be to alter QP processing based on criteria not part of the rvt_qp. The code has an internal iterator to simplify non seq_file use cases.h](h)}(h**Parameters**h]j)}(hj1oh]h Parameters}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/oubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj+oubj)}(hhh](j)}(h)``struct rvt_dev_info *rdi`` rvt devinfo h](j)}(h``struct rvt_dev_info *rdi``h]j )}(hjPoh]hstruct rvt_dev_info *rdi}(hjRohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNoubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjJoubj)}(hhh]h)}(h rvt devinfoh]h rvt devinfo}(hjiohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeohM hjfoubah}(h]h ]h"]h$]h&]uh1jhjJoubeh}(h]h ]h"]h$]h&]uh1jhjeohM hjGoubj)}(h``u64 v`` a 64-bit value h](j)}(h ``u64 v``h]j )}(hjoh]hu64 v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjoubj)}(hhh]h)}(ha 64-bit valueh]ha 64-bit value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjGoubj)}(h4``void (*cb)(struct rvt_qp *qp, u64 v)`` a callback h](j)}(h(``void (*cb)(struct rvt_qp *qp, u64 v)``h]j )}(hjoh]h$void (*cb)(struct rvt_qp *qp, u64 v)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjoubj)}(hhh]h)}(h a callbackh]h a callback}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjGoubeh}(h]h ]h"]h$]h&]uh1jhj+oubh)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj+oubh)}(h*This provides a way for iterating all QPs.h]h*This provides a way for iterating all QPs.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj+oubh)}(hThe **cb** is a user-defined callback and **v** is a 64-bit value passed to and relevant for processing in the cb. An example use case would be to alter QP processing based on criteria not part of the rvt_qp.h](hThe }(hj"phhhNhNubj)}(h**cb**h]hcb}(hj*phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"pubh is a user-defined callback and }(hj"phhhNhNubj)}(h**v**h]hv}(hjuubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chML hj:uubj)}(hhh]j)}(h&``struct rvt_qp *sqp`` the sending QP h](j)}(h``struct rvt_qp *sqp``h]j )}(hj_uh]hstruct rvt_qp *sqp}(hjauhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]uubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMI hjYuubj)}(hhh]h)}(hthe sending QPh]hthe sending QP}(hjxuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtuhMI hjuuubah}(h]h ]h"]h$]h&]uh1jhjYuubeh}(h]h ]h"]h$]h&]uh1jhjtuhMI hjVuubah}(h]h ]h"]h$]h&]uh1jhj:uubh)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMK hj:uubh)}(hX8This is called from rvt_do_send() to forward a WQE addressed to the same HFI Note that although we are single threaded due to the send engine, we still have to protect against post_send(). We don't have to worry about receive interrupts since this is a connected protocol and all packets will pass through here.h]hX:This is called from rvt_do_send() to forward a WQE addressed to the same HFI Note that although we are single threaded due to the send engine, we still have to protect against post_send(). We don’t have to worry about receive interrupts since this is a connected protocol and all packets will pass through here.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMJ hj:uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrvt_mcast_find (C function)c.rvt_mcast_findhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hWstruct rvt_mcast * rvt_mcast_find (struct rvt_ibport *ibp, union ib_gid *mgid, u16 lid)h]j")}(hUstruct rvt_mcast *rvt_mcast_find(struct rvt_ibport *ibp, union ib_gid *mgid, u16 lid)h](j()}(hj+h]hstruct}(hjuhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjuhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK^ubj:)}(h h]h }(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuhhhjuhK^ubh)}(hhh]jN)}(h rvt_mcasth]h rvt_mcast}(hjuhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjuubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjvmodnameN classnameNjkjn)}jq]jt)}jgrvt_mcast_findsbc.rvt_mcast_findasbuh1hhjuhhhjuhK^ubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuhhhjuhK^ubj)}(hjh]h*}(hj-vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhK^ubj)}(hrvt_mcast_findh]jN)}(hjvh]hrvt_mcast_find}(hj>vhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:vubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhK^ubj)}(h5(struct rvt_ibport *ibp, union ib_gid *mgid, u16 lid)h](j)}(hstruct rvt_ibport *ibph](j()}(hj+h]hstruct}(hjYvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjUvubj:)}(h h]h }(hjfvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUvubh)}(hhh]jN)}(h rvt_ibporth]h rvt_ibport}(hjwvhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtvubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjyvmodnameN classnameNjkjn)}jq]jvc.rvt_mcast_findasbuh1hhjUvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUvubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUvubjN)}(hibph]hibp}(hjvhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQvubj)}(hunion ib_gid *mgidh](j()}(hjh]hunion}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubh)}(hhh]jN)}(hib_gidh]hib_gid}(hjvhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjvubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjvmodnameN classnameNjkjn)}jq]jvc.rvt_mcast_findasbuh1hhjvubj:)}(h h]h }(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjN)}(hmgidh]hmgid}(hj whhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQvubj)}(hu16 lidh](h)}(hhh]jN)}(hu16h]hu16}(hjwmodnameN classnameNjkjn)}jq]jvc.rvt_mcast_findasbuh1hhj5wubj:)}(h h]h }(hjZwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5wubjN)}(hlidh]hlid}(hjhwhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQvubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhK^ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjuhhhjuhK^ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjuhK^hjuhhubj)}(hhh]h)}(h7search the global table for the given multicast GID/LIDh]h7search the global table for the given multicast GID/LID}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK^hjwhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhK^ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjwjjwjjjuh1jhhhj8hNhNubj)}(hX**Parameters** ``struct rvt_ibport *ibp`` the IB port structure ``union ib_gid *mgid`` the multicast GID to search for ``u16 lid`` the multicast LID portion of the multicast address (host order) **NOTE** It is valid to have 1 MLID with multiple MGIDs. It is not valid to have 1 MGID with multiple MLIDs. **Description** The caller is responsible for decrementing the reference count if found. **Return** NULL if not found.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKbhjwubj)}(hhh](j)}(h1``struct rvt_ibport *ibp`` the IB port structure h](j)}(h``struct rvt_ibport *ibp``h]j )}(hjwh]hstruct rvt_ibport *ibp}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKahjwubj)}(hhh]h)}(hthe IB port structureh]hthe IB port structure}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKahjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhKahjwubj)}(h7``union ib_gid *mgid`` the multicast GID to search for h](j)}(h``union ib_gid *mgid``h]j )}(hj xh]hunion ib_gid *mgid}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uZh1jhj xubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKbhjxubj)}(hhh]h)}(hthe multicast GID to search forh]hthe multicast GID to search for}(hj%xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!xhKbhj"xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj!xhKbhjwubj)}(hL``u16 lid`` the multicast LID portion of the multicast address (host order) h](j)}(h ``u16 lid``h]j )}(hjExh]hu16 lid}(hjGxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCxubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKchj?xubj)}(hhh]h)}(h?the multicast LID portion of the multicast address (host order)h]h?the multicast LID portion of the multicast address (host order)}(hj^xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZxhKchj[xubah}(h]h ]h"]h$]h&]uh1jhj?xubeh}(h]h ]h"]h$]h&]uh1jhjZxhKchjwubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**NOTE**h]j)}(hjxh]hNOTE}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~xubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKehjwubh)}(hdIt is valid to have 1 MLID with multiple MGIDs. It is not valid to have 1 MGID with multiple MLIDs.h]hdIt is valid to have 1 MLID with multiple MGIDs. It is not valid to have 1 MGID with multiple MLIDs.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK_hjwubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKbhjwubh)}(hHThe caller is responsible for decrementing the reference count if found.h]hHThe caller is responsible for decrementing the reference count if found.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKdhjwubh)}(h **Return**h]j)}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKfhjwubh)}(hNULL if not found.h]hNULL if not found.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKghjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8hhhNhNubeh}(h]rdma-verbs-transport-libraryah ]h"]rdma verbs transport libraryah$]h&]uh1hhhhhhhhK/ubh)}(hhh](h)}(hUpper Layer Protocolsh]hUpper Layer Protocols}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhKGubh)}(hhh](h)}(h iSCSI Extensions for RDMA (iSER)h]h iSCSI Extensions for RDMA (iSER)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhKJubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_data_buf (C struct)c.iser_data_bufhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h iser_data_bufh]j")}(hstruct iser_data_bufh](j()}(hj+h]hstruct}(hj=yhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj9yhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKubj:)}(h h]h }(hjKyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9yhhhjJyhKubj)}(h iser_data_bufh]jN)}(hj7yh]h iser_data_buf}(hj]yhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjYyubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9yhhhjJyhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj5yhhhjJyhKubah}(h]j0yah ](jjeh"]h$]h&]jj)jhuh1jhjJyhKhj2yhhubj)}(hhh]h)}(hiSER data bufferh]hiSER data buffer}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj|yhhubah}(h]h ]h"]h$]h&]uh1jhj2yhhhjJyhKubeh}(h]h ](jestructeh"]h$]h&]jjejjyjjyjjjuh1jhhhjyhNhNubj)}(hX4**Definition**:: struct iser_data_buf { struct scatterlist *sg; int size; unsigned long data_len; int dma_nents; }; **Members** ``sg`` pointer to the sg list ``size`` num entries of this sg ``data_len`` total buffer byte len ``dma_nents`` returned by dma_map_sgh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh:}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjyubh literal_block)}(hwstruct iser_data_buf { struct scatterlist *sg; int size; unsigned long data_len; int dma_nents; };h]hwstruct iser_data_buf { struct scatterlist *sg; int size; unsigned long data_len; int dma_nents; };}hjysbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjyubh)}(h **Members**h]j)}(hjyh]hMembers}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjyubj)}(hhh](j)}(h``sg`` pointer to the sg list h](j)}(h``sg``h]j )}(hjyh]hsg}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjyubj)}(hhh]h)}(hpointer to the sg listh]hpointer to the sg list}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjzhKhjyubj)}(h ``size`` num entries of this sg h](j)}(h``size``h]j )}(hj'zh]hsize}(hj)zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%zubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj!zubj)}(hhh]h)}(hnum entries of this sgh]hnum entries of this sg}(hj@zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhj͆ubj)}(hhh]h)}(h memory regionh]h memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhj͆ubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjʆubj)}(h"``sig_mr`` signature memory regionh](j)}(h ``sig_mr``h]j )}(hj h]hsig_mr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM>hjubj)}(hhh]h)}(hsignature memory regionh]hsignature memory region}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM?hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM>hjʆubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_fr_desc (C struct)c.iser_fr_deschNtauh1jhjyhhhNhNubj)}(hhh](j)}(h iser_fr_desch]j")}(hstruct iser_fr_desch](j()}(hj+h]hstruct}(hjfhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjbhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMEubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbhhhjshMEubj)}(h iser_fr_desch]jN)}(hj`h]h iser_fr_desc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjshMEubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj^hhhjshMEubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjshMEhj[hhubj)}(hhh]h)}(hFast registration descriptorh]hFast registration descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMFhjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjshMEubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX**Definition**:: struct iser_fr_desc { struct list_head list; struct iser_reg_resources rsc; bool sig_protected; struct list_head all_list; }; **Members** ``list`` entry in connection fastreg pool ``rsc`` data buffer registration resources ``sig_protected`` is region protected indicator ``all_list`` first and last list membersh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj̇hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȇubh:}(hjȇhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMJhjćubjy)}(hstruct iser_fr_desc { struct list_head list; struct iser_reg_resources rsc; bool sig_protected; struct list_head all_list; };h]hstruct iser_fr_desc { struct list_head list; struct iser_reg_resources rsc; bool sig_protected; struct list_head all_list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMLhjćubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMShjćubj)}(hhh](j)}(h*``list`` entry in connection fastreg pool h](j)}(h``list``h]j )}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMIhjubj)}(hhh]h)}(h entry in connection fastreg poolh]h entry in connection fastreg pool}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMIhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMIhj ubj)}(h+``rsc`` data buffer registration resources h](j)}(h``rsc``h]j )}(hjNh]hrsc}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMJhjHubj)}(hhh]h)}(h"data buffer registration resourcesh]h"data buffer registration resources}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMJhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMJhj ubj)}(h0``sig_protected`` is region protected indicator h](j)}(h``sig_protected``h]j )}(hjh]h sig_protected}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMKhjubj)}(hhh]h)}(his region protected indicatorh]his region protected indicator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhj ubj)}(h(``all_list`` first and last list membersh](j)}(h ``all_list``h]j )}(hjh]hall_list}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMKhjubj)}(hhh]h)}(hfirst and last list membersh]hfirst and last list members}(hjوhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMLhjֈubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՈhMKhj ubeh}(h]h ]h"]h$]h&]uh1jhjćubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_fr_pool (C struct)c.iser_fr_poolhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h iser_fr_poolh]j")}(hstruct iser_fr_poolh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMRubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj'hMRubj)}(h iser_fr_poolh]jN)}(hjh]h iser_fr_pool}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hMRubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj'hMRubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMRhjhhubj)}(hhh]h)}(h!connection fast registration poolh]h!connection fast registration pool}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMUhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMRubeh}(h]h ](jestructeh"]h$]h&]jjejjtjjtjjjuh1jhhhjyhNhNubj)}(hXA**Definition**:: struct iser_fr_pool { struct list_head list; spinlock_t lock; int size; struct list_head all_list; }; **Members** ``list`` list of fastreg descriptors ``lock`` protects fastreg pool ``size`` size of the pool ``all_list`` first and last list membersh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh:}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMYhjxubjy)}(hstruct iser_fr_pool { struct list_head list; spinlock_t lock; int size; struct list_head all_list; };h]hstruct iser_fr_pool { struct list_head list; spinlock_t lock; int size; struct list_head all_list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM[hjxubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMbhjxubj)}(hhh](j)}(h%``list`` list of fastreg descriptors h](j)}(h``list``h]j )}(hjɉh]hlist}(hjˉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjljubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMXhjÉubj)}(hhh]h)}(hlist of fastreg descriptorsh]hlist of fastreg descriptors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjމhMXhj߉ubah}(h]h ]h"]h$]h&]uh1jhjÉubeh}(h]h ]h"]h$]h&]uh1jhjމhMXhjubj)}(h``lock`` protects fastreg pool h](j)}(h``lock``h]j )}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMYhjubj)}(hhh]h)}(hprotects fastreg poolh]hprotects fastreg pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(h``size`` size of the pool h](j)}(h``size``h]j )}(hj;h]hsize}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMZhj5ubj)}(hhh]h)}(hsize of the poolh]hsize of the pool}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMZhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMZhjubj)}(h(``all_list`` first and last list membersh](j)}(h ``all_list``h]j )}(hjth]hall_list}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMZhjnubj)}(hhh]h)}(hfirst and last list membersh]hfirst and last list members}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM[hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubeh}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jib_conn (C struct) c.ib_connhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hib_connh]j")}(hstruct ib_connh](j()}(hj+h]hstruct}(hjΊhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjʊhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMaubj:)}(h h]h }(hj܊hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʊhhhjۊhMaubj)}(hib_connh]jN)}(hjȊh]hib_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjʊhhhjۊhMaubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjƊhhhjۊhMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjۊhMahjÊhhubj)}(hhh]h)}(hInfiniband related objectsh]hInfiniband related objects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMdhj hhubah}(h]h ]h"]h$]h&]uh1jhjÊhhhjۊhMaubeh}(h]h ](jestructeh"]h$]h&]jjejj(jj(jjjuh1jhhhjyhNhNubj)}(hX**Definition**:: struct ib_conn { struct rdma_cm_id *cma_id; struct ib_qp *qp; struct ib_cq *cq; u32 cq_size; struct iser_device *device; struct iser_fr_pool fr_pool; bool pi_support; struct ib_cqe reg_cqe; }; **Members** ``cma_id`` rdma_cm connection maneger handle ``qp`` Connection Queue-pair ``cq`` Connection completion queue ``cq_size`` The number of max outstanding completions ``device`` reference to iser device ``fr_pool`` connection fast registration pool ``pi_support`` Indicate device T10-PI support ``reg_cqe`` completion handlerh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh:}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhhj,ubjy)}(hX)struct ib_conn { struct rdma_cm_id *cma_id; struct ib_qp *qp; struct ib_cq *cq; u32 cq_size; struct iser_device *device; struct iser_fr_pool fr_pool; bool pi_support; struct ib_cqe reg_cqe; };h]hX)struct ib_conn { struct rdma_cm_id *cma_id; struct ib_qp *qp; struct ib_cq *cq; u32 cq_size; struct iser_device *device; struct iser_fr_pool fr_pool; bool pi_support; struct ib_cqe reg_cqe; };}hjMsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMjhj,ubh)}(h **Members**h]j)}(hj^h]hMembers}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMuhj,ubj)}(hhh](j)}(h-``cma_id`` rdma_cm connection maneger handle h](j)}(h ``cma_id``h]j )}(hj}h]hcma_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMghjwubj)}(hhh]h)}(h!rdma_cm connection maneger handleh]h!rdma_cm connection maneger handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMghjtubj)}(h``qp`` Connection Queue-pair h](j)}(h``qp``h]j )}(hjh]hqp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhhjubj)}(hhh]h)}(hConnection Queue-pairh]hConnection Queue-pair}(hjϋhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjˋhMhhj̋ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjˋhMhhjtubj)}(h#``cq`` Connection completion queue h](j)}(h``cq``h]j )}(hjh]hcq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMihjubj)}(hhh]h)}(hConnection completion queueh]hConnection completion queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjtubj)}(h6``cq_size`` The number of max outstanding completions h](j)}(h ``cq_size``h]j )}(hj(h]hcq_size}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMjhj"ubj)}(hhh]h)}(h)The number of max outstanding completionsh]h)The number of max outstanding completions}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMjhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMjhjtubj)}(h$``device`` reference to iser device h](j)}(h ``device``h]j )}(hjah]hdevice}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMkhj[ubj)}(hhh]h)}(hreference to iser deviceh]hreference to iser device}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMkhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMkhjtubj)}(h.``fr_pool`` connection fast registration pool h](j)}(h ``fr_pool``h]j )}(hjh]hfr_pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMlhjubj)}(hhh]h)}(h!connection fast registration poolh]h!connection fast registration pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjtubj)}(h.``pi_support`` Indicate device T10-PI support h](j)}(h``pi_support``h]j )}(hjӌh]h pi_support}(hjՌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjьubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMmhj͌ubj)}(hhh]h)}(hIndicate device T10-PI supporth]hIndicate device T10-PI support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhj͌ubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjtubj)}(h``reg_cqe`` completion handlerh](j)}(h ``reg_cqe``h]j )}(hj h]hreg_cqe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMmhjubj)}(hhh]h)}(hcompletion handlerh]hcompletion handler}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMnhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMmhjtubeh}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_conn (C struct) c.iser_connhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h iser_connh]j")}(hstruct iser_connh](j()}(hj+h]hstruct}(hjfhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjbhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMtubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbhhhjshMtubj)}(h iser_connh]jN)}(hj`h]h iser_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjshMtubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj^hhhjshMtubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjshMthj[hhubj)}(hhh]h)}(hiSER connection contexth]hiSER connection context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM{hjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjshMtubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX **Definition**:: struct iser_conn { struct ib_conn ib_conn; struct iscsi_conn *iscsi_conn; struct iscsi_endpoint *ep; enum iser_conn_state state; unsigned qp_max_recv_dtos; u16 max_cmds; char name[ISER_OBJECT_NAME_SIZE]; struct work_struct release_work; struct mutex state_mutex; struct completion stop_completion; struct completion ib_completion; struct completion up_completion; struct list_head conn_list; struct iser_login_desc login_desc; struct iser_rx_desc *rx_descs; u32 num_rx_descs; unsigned short scsi_sg_tablesize; unsigned short pages_per_mr; bool snd_w_inv; }; **Members** ``ib_conn`` connection RDMA resources ``iscsi_conn`` link to matching iscsi connection ``ep`` transport handle ``state`` connection logical state ``qp_max_recv_dtos`` maximum number of data outs, corresponds to max number of post recvs ``max_cmds`` maximum cmds allowed for this connection ``name`` connection peer portal ``release_work`` deferred work for release job ``state_mutex`` protects iser onnection state ``stop_completion`` conn_stop completion ``ib_completion`` RDMA cleanup completion ``up_completion`` connection establishment completed (state is ISER_CONN_UP) ``conn_list`` entry in ig conn list ``login_desc`` login descriptor ``rx_descs`` rx buffers array (cyclic buffer) ``num_rx_descs`` number of rx descriptors ``scsi_sg_tablesize`` scsi host sg_tablesize ``pages_per_mr`` maximum pages available for registration ``snd_w_inv`` connection uses remote invalidationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj̍hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȍubh:}(hjȍhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjčubjy)}(hXstruct iser_conn { struct ib_conn ib_conn; struct iscsi_conn *iscsi_conn; struct iscsi_endpoint *ep; enum iser_conn_state state; unsigned qp_max_recv_dtos; u16 max_cmds; char name[ISER_OBJECT_NAME_SIZE]; struct work_struct release_work; struct mutex state_mutex; struct completion stop_completion; struct completion ib_completion; struct completion up_completion; struct list_head conn_list; struct iser_login_desc login_desc; struct iser_rx_desc *rx_descs; u32 num_rx_descs; unsigned short scsi_sg_tablesize; unsigned short pages_per_mr; bool snd_w_inv; };h]hXstruct iser_conn { struct ib_conn ib_conn; struct iscsi_conn *iscsi_conn; struct iscsi_endpoint *ep; enum iser_conn_state state; unsigned qp_max_recv_dtos; u16 max_cmds; char name[ISER_OBJECT_NAME_SIZE]; struct work_struct release_work; struct mutex state_mutex; struct completion stop_completion; struct completion ib_completion; struct completion up_completion; struct list_head conn_list; struct iser_login_desc login_desc; struct iser_rx_desc *rx_descs; u32 num_rx_descs; unsigned short scsi_sg_tablesize; unsigned short pages_per_mr; bool snd_w_inv; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjčubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjčubj)}(hhh](j)}(h&``ib_conn`` connection RDMA resources h](j)}(h ``ib_conn``h]j )}(hjh]hib_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM~hjubj)}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM~hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM~hj ubj)}(h1``iscsi_conn`` link to matching iscsi connection h](j)}(h``iscsi_conn``h]j )}(hjNh]h iscsi_conn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjHubj)}(hhh]h)}(h!link to matching iscsi connectionh]h!link to matching iscsi connection}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhj ubj)}(h``ep`` transport handle h](j)}(h``ep``h]j )}(hjh]hep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(htransport handleh]htransport handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h#``state`` connection logical state h](j)}(h ``state``h]j )}(hjh]hstate}(hjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hconnection logical stateh]hconnection logical state}(hjَhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjՎhMhj֎ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՎhMhj ubj)}(hZ``qp_max_recv_dtos`` maximum number of data outs, corresponds to max number of post recvs h](j)}(h``qp_max_recv_dtos``h]j )}(hjh]hqp_max_recv_dtos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hDmaximum number of data outs, corresponds to max number of post recvsh]hDmaximum number of data outs, corresponds to max number of post recvs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h6``max_cmds`` maximum cmds allowed for this connection h](j)}(h ``max_cmds``h]j )}(hj3h]hmax_cmds}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj-ubj)}(hhh]h)}(h(maximum cmds allowed for this connectionh]h(maximum cmds allowed for this connection}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj ubj)}(h ``name`` connection peer portal h](j)}(h``name``h]j )}(hjlh]hname}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjfubj)}(hhh]h)}(hconnection peer portalh]hconnection peer portal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h/``release_work`` deferred work for release job h](j)}(h``release_work``h]j )}(hjh]h release_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hdeferred work for release jobh]hdeferred work for release job}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h.``state_mutex`` protects iser onnection state h](j)}(h``state_mutex``h]j )}(hjޏh]h state_mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj܏ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj؏ubj)}(hhh]h)}(hprotects iser onnection stateh]hprotects iser onnection state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj؏ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h)``stop_completion`` conn_stop completion h](j)}(h``stop_completion``h]j )}(hjh]hstop_completion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hconn_stop completionh]hconn_stop completion}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj ubj)}(h*``ib_completion`` RDMA cleanup completion h](j)}(h``ib_completion``h]j )}(hjPh]h ib_completion}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjJubj)}(hhh]h)}(hRDMA cleanup completionh]hRDMA cleanup completion}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhj ubj)}(hM``up_completion`` connection establishment completed (state is ISER_CONN_UP) h](j)}(h``up_completion``h]j )}(hjh]h up_completion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(h:connection establishment completed (state is ISER_CONN_UP)h]h:connection establishment completed (state is ISER_CONN_UP)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h$``conn_list`` entry in ig conn list h](j)}(h ``conn_list``h]j )}(hjÐh]h conn_list}(hjŐhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hentry in ig conn listh]hentry in ig conn list}(hjܐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjؐhMhjِubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؐhMhj ubj)}(h ``login_desc`` login descriptor h](j)}(h``login_desc``h]j )}(hjh]h login_desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hlogin descriptorh]hlogin descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h.``rx_descs`` rx buffers array (cyclic buffer) h](j)}(h ``rx_descs``h]j )}(hj5h]hrx_descs}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj/ubj)}(hhh]h)}(h rx buffers array (cyclic buffer)h]h rx buffers array (cyclic buffer)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj ubj)}(h*``num_rx_descs`` number of rx descriptors h](j)}(h``num_rx_descs``h]j )}(hjnh]h num_rx_descs}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjhubj)}(hhh]h)}(hnumber of rx descriptorsh]hnumber of rx descriptors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h-``scsi_sg_tablesize`` scsi host sg_tablesize h](j)}(h``scsi_sg_tablesize``h]j )}(hjh]hscsi_sg_tablesize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hscsi host sg_tablesizeh]hscsi host sg_tablesize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h:``pages_per_mr`` maximum pages available for registration h](j)}(h``pages_per_mr``h]j )}(hjh]h pages_per_mr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޑubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjڑubj)}(hhh]h)}(h(maximum pages available for registrationh]h(maximum pages available for registration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڑubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h1``snd_w_inv`` connection uses remote invalidationh](j)}(h ``snd_w_inv``h]j )}(hjh]h snd_w_inv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(h#connection uses remote invalidationh]h#connection uses remote invalidation}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjčubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiscsi_iser_task (C struct)c.iscsi_iser_taskhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hiscsi_iser_taskh]j")}(hstruct iscsi_iser_taskh](j()}(hj+h]hstruct}(hjshhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjohhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjohhhjhMubj)}(hiscsi_iser_taskh]jN)}(hjmh]hiscsi_iser_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhhubj)}(hhh]h)}(hiser task contexth]hiser task context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](jestructeh"]h$]h&]jjejj͒jj͒jjjuh1jhhhjyhNhNubj)}(hX**Definition**:: struct iscsi_iser_task { struct iser_tx_desc desc; struct iser_conn *iser_conn; enum iser_task_status status; struct scsi_cmnd *sc; int command_sent; int dir[ISER_DIRS_NUM]; struct iser_mem_reg rdma_reg[ISER_DIRS_NUM]; struct iser_data_buf data[ISER_DIRS_NUM]; struct iser_data_buf prot[ISER_DIRS_NUM]; }; **Members** ``desc`` TX descriptor ``iser_conn`` link to iser connection ``status`` current task status ``sc`` link to scsi command ``command_sent`` indicate if command was sent ``dir`` iser data direction ``rdma_reg`` task rdma registration desc ``data`` iser data buffer desc ``prot`` iser protection buffer desch](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjْhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՒubh:}(hjՒhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjђubjy)}(hXstruct iscsi_iser_task { struct iser_tx_desc desc; struct iser_conn *iser_conn; enum iser_task_status status; struct scsi_cmnd *sc; int command_sent; int dir[ISER_DIRS_NUM]; struct iser_mem_reg rdma_reg[ISER_DIRS_NUM]; struct iser_data_buf data[ISER_DIRS_NUM]; struct iser_data_buf prot[ISER_DIRS_NUM]; };h]hXstruct iscsi_iser_task { struct iser_tx_desc desc; struct iser_conn *iser_conn; enum iser_task_status status; struct scsi_cmnd *sc; int command_sent; int dir[ISER_DIRS_NUM]; struct iser_mem_reg rdma_reg[ISER_DIRS_NUM]; struct iser_data_buf data[ISER_DIRS_NUM]; struct iser_data_buf prot[ISER_DIRS_NUM]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjђubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjђubj)}(hhh](j)}(h``desc`` TX descriptor h](j)}(h``desc``h]j )}(hj"h]hdesc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(h TX descriptorh]h TX descriptor}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h&``iser_conn`` link to iser connection h](j)}(h ``iser_conn``h]j )}(hj[h]h iser_conn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjUubj)}(hhh]h)}(hlink to iser connectionh]hlink to iser connection}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(h``status`` current task status h](j)}(h ``status``h]j )}(hjh]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hcurrent task statush]hcurrent task status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``sc`` link to scsi command h](j)}(h``sc``h]j )}(hj͓h]hsc}(hjϓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˓ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjǓubj)}(hhh]h)}(hlink to scsi commandh]hlink to scsi command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǓubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``command_sent`` indicate if command was sent h](j)}(h``command_sent``h]j )}(hjh]h command_sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hindicate if command was senth]hindicate if command was sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``dir`` iser data direction h](j)}(h``dir``h]j )}(hj?h]hdir}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj9ubj)}(hhh]h)}(hiser data directionh]hiser data direction}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubj)}(h)``rdma_reg`` task rdma registration desc h](j)}(h ``rdma_reg``h]j )}(hjxh]hrdma_reg}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjrubj)}(hhh]h)}(htask rdma registration desch]htask rdma registration desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``data`` iser data buffer desc h](j)}(h``data``h]j )}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hiser data buffer desch]hiser data buffer desc}(hjʔhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƔhMhjǔubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƔhMhjubj)}(h$``prot`` iser protection buffer desch](j)}(h``prot``h]j )}(hjh]hprot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hiser protection buffer desch]hiser protection buffer desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjђubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_global (C struct) c.iser_globalhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h iser_globalh]j")}(hstruct iser_globalh](j()}(hj+h]hstruct}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj@hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@hhhjQhMubj)}(h iser_globalh]jN)}(hj>h]h iser_global}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjQhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj<hhhjQhMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhjQhMhj9hhubj)}(hhh]h)}(hiSER global contexth]hiSER global context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjQhMubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX**Definition**:: struct iser_global { struct mutex device_list_mutex; struct list_head device_list; struct mutex connlist_mutex; struct list_head connlist; struct kmem_cache *desc_cache; }; **Members** ``device_list_mutex`` protects device_list ``device_list`` iser devices global list ``connlist_mutex`` protects connlist ``connlist`` iser connections global list ``desc_cache`` kmem cache for tx dataouth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubjy)}(hstruct iser_global { struct mutex device_list_mutex; struct list_head device_list; struct mutex connlist_mutex; struct list_head connlist; struct kmem_cache *desc_cache; };h]hstruct iser_global { struct mutex device_list_mutex; struct list_head device_list; struct mutex connlist_mutex; struct list_head connlist; struct kmem_cache *desc_cache; };}hjÕsbah}(h]h ]h"]h$]h&]jjuh1jyhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubh)}(h **Members**h]j)}(hjԕh]hMembers}(hj֕hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҕubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh](j)}(h+``device_list_mutex`` protects device_list h](j)}(h``device_list_mutex``h]j )}(hjh]hdevice_list_mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hprotects device_listh]hprotects device_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``device_list`` iser devices global list h](j)}(h``device_list``h]j )}(hj,h]h device_list}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj&ubj)}(hhh]h)}(hiser devices global listh]hiser devices global list}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubj)}(h%``connlist_mutex`` protects connlist h](j)}(h``connlist_mutex``h]j )}(hjeh]hconnlist_mutex}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj_ubj)}(hhh]h)}(hprotects connlisth]hprotects connlist}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubj)}(h*``connlist`` iser connections global list h](j)}(h ``connlist``h]j )}(hjh]hconnlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubj)}(hhh]h)}(hiser connections global listh]hiser connections global list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``desc_cache`` kmem cache for tx dataouth](j)}(h``desc_cache``h]j )}(hjזh]h desc_cache}(hjٖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՖubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjіubj)}(hhh]h)}(hkmem cache for tx dataouth]hkmem cache for tx dataout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjіubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!iscsi_iser_pdu_alloc (C function)c.iscsi_iser_pdu_allochNtauh1jhjyhhhNhNubj)}(hhh](j)}(hBint iscsi_iser_pdu_alloc (struct iscsi_task *task, uint8_t opcode)h]j")}(hAint iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)h](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-hhhj?hKubj)}(hiscsi_iser_pdu_alloch]jN)}(hiscsi_iser_pdu_alloch]hiscsi_iser_pdu_alloc}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hKubj)}(h)(struct iscsi_task *task, uint8_t opcode)h](j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjjubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjTsbc.iscsi_iser_pdu_allocasbuh1hhjjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjN)}(htaskh]htask}(hjǗhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(huint8_t opcodeh](h)}(hhh]jN)}(huint8_th]huint8_t}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_pdu_allocasbuh1hhjܗubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjܗubjN)}(hopcodeh]hopcode}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjܗubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj?hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj)hhhj?hKubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj?hKhj&hhubj)}(hhh]h)}(hallocate an iscsi-iser PDUh]hallocate an iscsi-iser PDU}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhj6hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjQjjQjjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_task *task`` iscsi task ``uint8_t opcode`` iscsi command opcode **Description** Netes: This routine can't fail, just assign iscsi task hdr and max hdr size.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjUubj)}(hhh](j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjzh]hstruct iscsi_task *task}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjtubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubj)}(h(``uint8_t opcode`` iscsi command opcode h](j)}(h``uint8_t opcode``h]j )}(hjh]huint8_t opcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubj)}(hhh]h)}(hiscsi command opcodeh]hiscsi command opcode}(hj̘hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȘhKhjɘubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȘhKhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjUubj)}(hhh]j)}(hLNetes: This routine can't fail, just assign iscsi task hdr and max hdr size.h](j)}(h6Netes: This routine can't fail, just assign iscsi taskh]h8Netes: This routine can’t fail, just assign iscsi task}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubj)}(hhh]h)}(hhdr and max hdr size.h]hhdr and max hdr size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)iser_initialize_task_headers (C function)c.iser_initialize_task_headershNtauh1jhjyhhhNhNubj)}(hhh](j)}(hXint iser_initialize_task_headers (struct iscsi_task *task, struct iser_tx_desc *tx_desc)h]j")}(hWint iser_initialize_task_headers(struct iscsi_task *task, struct iser_tx_desc *tx_desc)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZhhhjlhKubj)}(hiser_initialize_task_headersh]jN)}(hiser_initialize_task_headersh]hiser_initialize_task_headers}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhKubj)}(h7(struct iscsi_task *task, struct iser_tx_desc *tx_desc)h](j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iser_initialize_task_headersasbuh1hhjubj:)}(h h]h }(hjٙhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iser_tx_desc *tx_desch](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h iser_tx_desch]h iser_tx_desc}(hj+hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj-modnameN classnameNjkjn)}jq]jՙc.iser_initialize_task_headersasbuh1hhj ubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(htx_desch]htx_desc}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjVhhhjlhKubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhKhjShhubj)}(hhh]h)}(hInitialize task headersh]hInitialize task headers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hXA**Parameters** ``struct iscsi_task *task`` iscsi task ``struct iser_tx_desc *tx_desc`` iser tx descriptor **Notes** This routine may race with iser teardown flow for scsi error handling TMFs. So for TMF we should acquire the state mutex to avoid dereferencing the IB device which may have already been terminated.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubj)}(hhh](j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjϚh]hstruct iscsi_task *task}(hjњhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͚ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjɚubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjɚubeh}(h]h ]h"]h$]h&]uh1jhjhKhjƚubj)}(h4``struct iser_tx_desc *tx_desc`` iser tx descriptor h](j)}(h ``struct iser_tx_desc *tx_desc``h]j )}(hjh]hstruct iser_tx_desc *tx_desc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubj)}(hhh]h)}(hiser tx descriptorh]hiser tx descriptor}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjƚubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hjCh]hNotes}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubh)}(hThis routine may race with iser teardown flow for scsi error handling TMFs. So for TMF we should acquire the state mutex to avoid dereferencing the IB device which may have already been terminated.h]hThis routine may race with iser teardown flow for scsi error handling TMFs. So for TMF we should acquire the state mutex to avoid dereferencing the IB device which may have already been terminated.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!iscsi_iser_task_init (C function)c.iscsi_iser_task_inithNtauh1jhjyhhhNhNubj)}(hhh](j)}(h2int iscsi_iser_task_init (struct iscsi_task *task)h]j")}(h1int iscsi_iser_task_init(struct iscsi_task *task)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hiscsi_iser_task_inith]jN)}(hiscsi_iser_task_inith]hiscsi_iser_task_init}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjśhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjқhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iscsi_iser_task_initasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhjhKhj}hhubj)}(hhh]h)}(hInitialize iscsi-iser taskh]hInitialize iscsi-iser task}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjEhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj`jj`jjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_task *task`` iscsi task **Description** Initialize the task for the scsi command or mgmt command. **Return** Returns zero on success or -ENOMEM when failing to init task headers (dma mapping error).h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjdubj)}(hhh]j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjh]hstruct iscsi_task *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hjĜh]h Description}(hjƜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjœubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjdubh)}(h9Initialize the task for the scsi command or mgmt command.h]h9Initialize the task for the scsi command or mgmt command.}(hjڜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjdubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjdubh)}(hYReturns zero on success or -ENOMEM when failing to init task headers (dma mapping error).h]hYReturns zero on success or -ENOMEM when failing to init task headers (dma mapping error).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chKhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"iscsi_iser_mtask_xmit (C function)c.iscsi_iser_mtask_xmithNtauh1jhjyhhhNhNubj)}(hhh](j)}(hLint iscsi_iser_mtask_xmit (struct iscsi_conn *conn, struct iscsi_task *task)h]j")}(hKint iscsi_iser_mtask_xmit(struct iscsi_conn *conn, struct iscsi_task *task)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,hhhj>hMubj)}(hiscsi_iser_mtask_xmith]jN)}(hiscsi_iser_mtask_xmith]hiscsi_iser_mtask_xmit}(hjQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj>hMubj)}(h2(struct iscsi_conn *conn, struct iscsi_task *task)h](j)}(hstruct iscsi_conn *connh](j()}(hj+h]hstruct}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjiubj:)}(h h]h }(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubh)}(hhh]jN)}(h iscsi_connh]h iscsi_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjSsbc.iscsi_iser_mtask_xmitasbuh1hhjiubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubjN)}(hconnh]hconn}(hjƝhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjߝhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj۝ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj۝ubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_mtask_xmitasbuh1hhj۝ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj۝ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۝ubjN)}(htaskh]htask}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj۝ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jhj>hMhj%hhubj)}(hhh]h)}(h xmit management (immediate) taskh]h xmit management (immediate) task}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjxjjxjjjuh1jhhhjyhNhNubj)}(hX**Parameters** ``struct iscsi_conn *conn`` iscsi connection ``struct iscsi_task *task`` task management task **Notes** The function can return -EAGAIN in which case caller must call it again later, or recover. '0' return code means successful xmit.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj|ubj)}(hhh](j)}(h-``struct iscsi_conn *conn`` iscsi connection h](j)}(h``struct iscsi_conn *conn``h]j )}(hjh]hstruct iscsi_conn *conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct iscsi_task *task`` task management task h](j)}(h``struct iscsi_task *task``h]j )}(hjڞh]hstruct iscsi_task *task}(hjܞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؞ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjԞubj)}(hhh]h)}(htask management taskh]htask management task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԞubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj|ubjYD)}(hThe function can return -EAGAIN in which case caller must call it again later, or recover. '0' return code means successful xmit.h]h)}(hThe function can return -EAGAIN in which case caller must call it again later, or recover. '0' return code means successful xmit.h]hThe function can return -EAGAIN in which case caller must call it again later, or recover. ‘0’ return code means successful xmit.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj+ubah}(h]h ]h"]h$]h&]uh1jXDhj=hMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!iscsi_iser_task_xmit (C function)c.iscsi_iser_task_xmithNtauh1jhjyhhhNhNubj)}(hhh](j)}(h2int iscsi_iser_task_xmit (struct iscsi_task *task)h]j")}(h1int iscsi_iser_task_xmit(struct iscsi_task *task)h](j)}(hinth]hint}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM7ubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`hhhjrhM7ubj)}(hiscsi_iser_task_xmith]jN)}(hiscsi_iser_task_xmith]hiscsi_iser_task_xmit}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjrhM7ubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iscsi_iser_task_xmitasbuh1hhjubj:)}(h h]h }(hjߟhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhM7ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj\hhhjrhM7ubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhM7hjYhhubj)}(hhh]h)}(hxmit iscsi-iser taskh]hxmit iscsi-iser task}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM7hj!hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhM7ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj<jj<jjjuh1jhhhjyhNhNubj)}(hu**Parameters** ``struct iscsi_task *task`` iscsi task **Return** zero on success or escalates $error on failure.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM;hj@ubj)}(hhh]j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjeh]hstruct iscsi_task *task}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM8hj_ubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM8hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM8hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hj@ubh)}(h/zero on success or escalates $error on failure.h]h/zero on success or escalates $error on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$iscsi_iser_cleanup_task (C function)c.iscsi_iser_cleanup_taskhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h6void iscsi_iser_cleanup_task (struct iscsi_task *task)h]j")}(h5void iscsi_iser_cleanup_task(struct iscsi_task *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMaubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMaubj)}(hiscsi_iser_cleanup_taskh]jN)}(hiscsi_iser_cleanup_taskh]hiscsi_iser_cleanup_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMaubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjBmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iscsi_iser_cleanup_taskasbuh1hhjubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hj{hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjݠhhhjhMaubah}(h]jؠah ](jjeh"]h$]h&]jj)jhuh1jhjhMahjڠhhubj)}(hhh]h)}(hcleanup an iscsi-iser taskh]hcleanup an iscsi-iser task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMahjhhubah}(h]h ]h"]h$]h&]uh1jhjڠhhhjhMaubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_task *task`` iscsi task **Notes** In case the RDMA device is already NULL (might have been removed in DEVICE_REMOVAL CM event it will bail-out without doing dma unmapping.h](h)}(h**Parameters**h]j)}(hjǡh]h Parameters}(hjɡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjšubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMehjubj)}(hhh]j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjh]hstruct iscsi_task *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMbhjubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjݡubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hj!h]hNotes}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMdhjubj)}(hhh]j)}(hIn case the RDMA device is already NULL (might have been removed in DEVICE_REMOVAL CM event it will bail-out without doing dma unmapping.h](j)}(h3In case the RDMA device is already NULL (might haveh]h3In case the RDMA device is already NULL (might have}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMehj:ubj)}(hhh]h)}(hUbeen removed in DEVICE_REMOVAL CM event it will bail-out without doing dma unmapping.h]hUbeen removed in DEVICE_REMOVAL CM event it will bail-out without doing dma unmapping.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMehjMubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjLhMehj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(iscsi_iser_check_protection (C function)c.iscsi_iser_check_protectionhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hJu8 iscsi_iser_check_protection (struct iscsi_task *task, sector_t *sector)h]j")}(hIu8 iscsi_iser_check_protection(struct iscsi_task *task, sector_t *sector)h](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgiscsi_iser_check_protectionsbc.iscsi_iser_check_protectionasbuh1hhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hiscsi_iser_check_protectionh]jN)}(hjh]hiscsi_iser_check_protection}(hjǢhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjâubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h+(struct iscsi_task *task, sector_t *sector)h](j)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjޢubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjޢubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_check_protectionasbuh1hhjޢubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjޢubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubjN)}(htaskh]htask}(hj9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjޢubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjڢubj)}(hsector_t *sectorh](h)}(hhh]jN)}(hsector_th]hsector_t}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]jc.iscsi_iser_check_protectionasbuh1hhjNubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjN)}(hsectorh]hsector}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjڢubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h,check protection information status of task.h]h,check protection information status of task.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjУjjУjjjuh1jhhhjyhNhNubj)}(hX**Parameters** ``struct iscsi_task *task`` iscsi task ``sector_t *sector`` error sector if exsists (output) **Return** zero if no data-integrity errors have occurred 0x1: data-integrity error occurred in the guard-block 0x2: data-integrity error occurred in the reference tag 0x3: data-integrity error occurred in the application tag **Description** In addition the error sector is marked.h](h)}(h**Parameters**h]j)}(hjڣh]h Parameters}(hjܣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjأubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjԣubj)}(hhh](j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j )}(hjh]hstruct iscsi_task *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``sector_t *sector`` error sector if exsists (output) h](j)}(h``sector_t *sector``h]j )}(hj2h]hsector_t *sector}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj,ubj)}(hhh]h)}(h error sector if exsists (output)h]h error sector if exsists (output)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhjԣubh)}(h **Return**h]j)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjԣubh)}(hzero if no data-integrity errors have occurred 0x1: data-integrity error occurred in the guard-block 0x2: data-integrity error occurred in the reference tag 0x3: data-integrity error occurred in the application tagh]hzero if no data-integrity errors have occurred 0x1: data-integrity error occurred in the guard-block 0x2: data-integrity error occurred in the reference tag 0x3: data-integrity error occurred in the application tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjԣubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjԣubjYD)}(h'In addition the error sector is marked.h]h)}(hjh]h'In addition the error sector is marked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubah}(h]h ]h"]h$]h&]uh1jXDhjhMhjԣubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#iscsi_iser_conn_create (C function)c.iscsi_iser_conn_createhNtauh1jhjyhhhNhNubj)}(hhh](j)}(histruct iscsi_cls_conn * iscsi_iser_conn_create (struct iscsi_cls_session *cls_session, uint32_t conn_idx)h]j")}(hgstruct iscsi_cls_conn *iscsi_iser_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjޤhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjޤhhhjhMubh)}(hhh]jN)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgiscsi_iser_conn_createsbc.iscsi_iser_conn_createasbuh1hhjޤhhhjhMubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjޤhhhjhMubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޤhhhjhMubj)}(hiscsi_iser_conn_createh]jN)}(hjh]hiscsi_iser_conn_create}(hjAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjޤhhhjhMubj)}(h:(struct iscsi_cls_session *cls_session, uint32_t conn_idx)h](j)}(h%struct iscsi_cls_session *cls_sessionh](j()}(hj+h]hstruct}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjXubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubh)}(hhh]jN)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjzhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjwubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj|modnameN classnameNjkjn)}jq]jc.iscsi_iser_conn_createasbuh1hhjXubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjN)}(h cls_sessionh]h cls_session}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(huint32_t conn_idxh](h)}(hhh]jN)}(huint32_th]huint32_t}(hjϥhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj̥ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjѥmodnameN classnameNjkjn)}jq]jc.iscsi_iser_conn_createasbuh1hhjȥubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjȥubjN)}(hconn_idxh]hconn_idx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjȥubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubeh}(h]h ]h"]h$]h&]jjuh1jhjޤhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjڤhhhjhMubah}(h]jդah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjפhhubj)}(hhh]h)}(h"create a new iscsi-iser connectionh]h"create a new iscsi-iser connection}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jhjפhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj=jj=jjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi class connection ``uint32_t conn_idx`` connection index within the session (for MCS) **Return** iscsi_cls_conn when iscsi_conn_setup succeeds or NULL otherwise.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjAubj)}(hhh](j)}(hA``struct iscsi_cls_session *cls_session`` iscsi class connection h](j)}(h)``struct iscsi_cls_session *cls_session``h]j )}(hjfh]h%struct iscsi_cls_session *cls_session}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj`ubj)}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj]ubj)}(hD``uint32_t conn_idx`` connection index within the session (for MCS) h](j)}(h``uint32_t conn_idx``h]j )}(hjh]huint32_t conn_idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(h-connection index within the session (for MCS)h]h-connection index within the session (for MCS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h **Return**h]j)}(hjڦh]hReturn}(hjܦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjئubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjAubh)}(h@iscsi_cls_conn when iscsi_conn_setup succeeds or NULL otherwise.h]h@iscsi_cls_conn when iscsi_conn_setup succeeds or NULL otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!iscsi_iser_conn_bind (C function)c.iscsi_iser_conn_bindhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hint iscsi_iser_conn_bind (struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, uint64_t transport_eph, int is_leading)h]j")}(hint iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, uint64_t transport_eph, int is_leading)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj-hMubj)}(hiscsi_iser_conn_bindh]jN)}(hiscsi_iser_conn_bindh]hiscsi_iser_conn_bind}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj-hMubj)}(hp(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, uint64_t transport_eph, int is_leading)h](j)}(h%struct iscsi_cls_session *cls_sessionh](j()}(hj+h]hstruct}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjXubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubh)}(hhh]jN)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjzhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjwubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj|modnameN classnameNjkjn)}jq]jt)}jgjBsbc.iscsi_iser_conn_bindasbuh1hhjXubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjN)}(h cls_sessionh]h cls_session}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(hstruct iscsi_cls_conn *cls_connh](j()}(hj+h]hstruct}(hjΧhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjʧubj:)}(h h]h }(hjۧhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʧubh)}(hhh]jN)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_conn_bindasbuh1hhjʧubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʧubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʧubjN)}(hcls_connh]hcls_conn}(hj%hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjʧubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(huint64_t transport_ephh](h)}(hhh]jN)}(huint64_th]huint64_t}(hjAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjCmodnameN classnameNjkjn)}jq]jc.iscsi_iser_conn_bindasbuh1hhj:ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubjN)}(h transport_ephh]h transport_eph}(hjmhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(hint is_leadingh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h is_leadingh]h is_leading}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj-hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj-hMhjhhubj)}(hhh]h)}(h)bind iscsi and iser connection structuresh]h)bind iscsi and iser connection structures}(hj̨hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjɨhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj-hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi class session ``struct iscsi_cls_conn *cls_conn`` iscsi class connection ``uint64_t transport_eph`` transport end-point handle ``int is_leading`` indicate if this is the session leading connection (MCS) **Return** zero on success, $error if iscsi_conn_bind fails and -EINVAL in case end-point doesn't exists anymore or iser connection state is not UP (teardown already started).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh](j)}(h>``struct iscsi_cls_session *cls_session`` iscsi class session h](j)}(h)``struct iscsi_cls_session *cls_session``h]j )}(hj h]h%struct iscsi_cls_session *cls_session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(hiscsi class sessionh]hiscsi class session}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h;``struct iscsi_cls_conn *cls_conn`` iscsi class connection h](j)}(h#``struct iscsi_cls_conn *cls_conn``h]j )}(hjFh]hstruct iscsi_cls_conn *cls_conn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj@ubj)}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubj)}(h6``uint64_t transport_eph`` transport end-point handle h](j)}(h``uint64_t transport_eph``h]j )}(hjh]huint64_t transport_eph}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubj)}(hhh]h)}(htransport end-point handleh]htransport end-point handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hL``int is_leading`` indicate if this is the session leading connection (MCS) h](j)}(h``int is_leading``h]j )}(hjh]hint is_leading}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(h8indicate if this is the session leading connection (MCS)h]h8indicate if this is the session leading connection (MCS)}(hjѩhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjͩhMhjΩubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͩhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubh)}(hzero on success, $error if iscsi_conn_bind fails and -EINVAL in case end-point doesn't exists anymore or iser connection state is not UP (teardown already started).h]hzero on success, $error if iscsi_conn_bind fails and -EINVAL in case end-point doesn’t exists anymore or iser connection state is not UP (teardown already started).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"iscsi_iser_conn_start (C function)c.iscsi_iser_conn_starthNtauh1jhjyhhhNhNubj)}(hhh](j)}(h;int iscsi_iser_conn_start (struct iscsi_cls_conn *cls_conn)h]j")}(h:int iscsi_iser_conn_start(struct iscsi_cls_conn *cls_conn)h](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4hhhjFhMubj)}(hiscsi_iser_conn_starth]jN)}(hiscsi_iser_conn_starth]hiscsi_iser_conn_start}(hjYhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjFhMubj)}(h!(struct iscsi_cls_conn *cls_conn)h]j)}(hstruct iscsi_cls_conn *cls_connh](j()}(hj+h]hstruct}(hjuhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubh)}(hhh]jN)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj[sbc.iscsi_iser_conn_startasbuh1hhjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjN)}(hcls_connh]hcls_conn}(hjΪhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubah}(h]h ]h"]h$]h&]jjuh1jhj4hhhjFhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj0hhhjFhMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhjFhMhj-hhubj)}(hhh]h)}(hstart iscsi-iser connectionh]hstart iscsi-iser connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjFhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX **Parameters** ``struct iscsi_cls_conn *cls_conn`` iscsi class connection **Notes** Here iser intialize (or re-initialize) stop_completion as from this point iscsi must call conn_stop in session/connection teardown so iser transport must wait for it.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]j)}(h;``struct iscsi_cls_conn *cls_conn`` iscsi class connection h](j)}(h#``struct iscsi_cls_conn *cls_conn``h]j )}(hj9h]hstruct iscsi_cls_conn *cls_conn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj3ubj)}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hjth]hNotes}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]j)}(hHere iser intialize (or re-initialize) stop_completion as from this point iscsi must call conn_stop in session/connection teardown so iser transport must wait for it.h](j)}(h9Here iser intialize (or re-initialize) stop_completion ash]h9Here iser intialize (or re-initialize) stop_completion as}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(hlfrom this point iscsi must call conn_stop in session/connection teardown so iser transport must wait for it.h]hlfrom this point iscsi must call conn_stop in session/connection teardown so iser transport must wait for it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!iscsi_iser_conn_stop (C function)c.iscsi_iser_conn_stophNtauh1jhjyhhhNhNubj)}(hhh](j)}(hEvoid iscsi_iser_conn_stop (struct iscsi_cls_conn *cls_conn, int flag)h]j")}(hDvoid iscsi_iser_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj߫hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj߫hhhjhMubj)}(hiscsi_iser_conn_stoph]jN)}(hiscsi_iser_conn_stoph]hiscsi_iser_conn_stop}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj߫hhhjhMubj)}(h+(struct iscsi_cls_conn *cls_conn, int flag)h](j)}(hstruct iscsi_cls_conn *cls_connh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hiscsi_cls_connh]hiscsi_cls_conn}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@modnameN classnameNjkjn)}jq]jt)}jgjsbc.iscsi_iser_conn_stopasbuh1hhjubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hcls_connh]hcls_conn}(hjyhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint flagh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hflagh]hflag}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj߫hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj۫hhhjhMubah}(h]j֫ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjثhhubj)}(hhh]h)}(hstop iscsi-iser connectionh]hstop iscsi-iser connection}(hjجhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjլhhubah}(h]h ]h"]h$]h&]uh1jhjثhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX}**Parameters** ``struct iscsi_cls_conn *cls_conn`` iscsi class connection ``int flag`` indicate if recover or terminate (passed as is) **Notes** Calling iscsi_conn_stop might theoretically race with DEVICE_REMOVAL event and dereference a previously freed RDMA device handle, so we call it under iser the state lock to protect against this kind of race.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjubj)}(hhh](j)}(h;``struct iscsi_cls_conn *cls_conn`` iscsi class connection h](j)}(h#``struct iscsi_cls_conn *cls_conn``h]j )}(hjh]hstruct iscsi_cls_conn *cls_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjubj)}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubj)}(h=``int flag`` indicate if recover or terminate (passed as is) h](j)}(h ``int flag``h]j )}(hjRh]hint flag}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjLubj)}(hhh]h)}(h/indicate if recover or terminate (passed as is)h]h/indicate if recover or terminate (passed as is)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjubj)}(hhh]j)}(hCalling iscsi_conn_stop might theoretically race with DEVICE_REMOVAL event and dereference a previously freed RDMA device handle, so we call it under iser the state lock to protect against this kind of race.h](j)}(h5Calling iscsi_conn_stop might theoretically race withh]h5Calling iscsi_conn_stop might theoretically race with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjubj)}(hhh]h)}(hDEVICE_REMOVAL event and dereference a previously freed RDMA device handle, so we call it under iser the state lock to protect against this kind of race.h]hDEVICE_REMOVAL event and dereference a previously freed RDMA device handle, so we call it under iser the state lock to protect against this kind of race.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'iscsi_iser_session_destroy (C function)c.iscsi_iser_session_destroyhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hGvoid iscsi_iser_session_destroy (struct iscsi_cls_session *cls_session)h]j")}(hFvoid iscsi_iser_session_destroy(struct iscsi_cls_session *cls_session)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM-ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hM-ubj)}(hiscsi_iser_session_destroyh]jN)}(hiscsi_iser_session_destroyh]hiscsi_iser_session_destroy}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM-ubj)}(h'(struct iscsi_cls_session *cls_session)h]j)}(h%struct iscsi_cls_session *cls_sessionh](j()}(hj+h]hstruct}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj6ubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubh)}(hhh]jN)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjZmodnameN classnameNjkjn)}jq]jt)}jgj sbc.iscsi_iser_session_destroyasbuh1hhj6ubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjN)}(h cls_sessionh]h cls_session}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hM-ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hM-ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hM-hjhhubj)}(hhh]h)}(hdestroy iscsi-iser sessionh]hdestroy iscsi-iser session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM-hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM-ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjծjjծjjjuh1jhhhjyhNhNubj)}(h~**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi class session **Description** Removes and free iscsi host.h](h)}(h**Parameters**h]j)}(hj߮h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݮubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM1hjٮubj)}(hhh]j)}(h>``struct iscsi_cls_session *cls_session`` iscsi class session h](j)}(h)``struct iscsi_cls_session *cls_session``h]j )}(hjh]h%struct iscsi_cls_session *cls_session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM.hjubj)}(hhh]h)}(hiscsi class sessionh]hiscsi class session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjٮubh)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM0hjٮubh)}(hRemoves and free iscsi host.h]hRemoves and free iscsi host.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM/hjٮubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&iscsi_iser_session_create (C function)c.iscsi_iser_session_createhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hstruct iscsi_cls_session * iscsi_iser_session_create (struct iscsi_endpoint *ep, uint16_t cmds_max, uint16_t qdepth, uint32_t initial_cmdsn)h]j")}(hstruct iscsi_cls_session *iscsi_iser_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, uint16_t qdepth, uint32_t initial_cmdsn)h](j()}(hj+h]hstruct}(hj~hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjzhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMNubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzhhhjhMNubh)}(hhh]jN)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgiscsi_iser_session_createsbc.iscsi_iser_session_createasbuh1hhjzhhhjhMNubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzhhhjhMNubj)}(hjh]h*}(hj̯hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjhMNubj)}(hiscsi_iser_session_createh]jN)}(hjh]hiscsi_iser_session_create}(hjݯhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjٯubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjhMNubj)}(hW(struct iscsi_endpoint *ep, uint16_t cmds_max, uint16_t qdepth, uint32_t initial_cmdsn)h](j)}(hstruct iscsi_endpoint *eph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hiscsi_endpointh]hiscsi_endpoint}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_session_createasbuh1hhjubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(heph]hep}(hjOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint16_t cmds_maxh](h)}(hhh]jN)}(huint16_th]huint16_t}(hjkhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmmodnameN classnameNjkjn)}jq]jc.iscsi_iser_session_createasbuh1hhjdubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubjN)}(hcmds_maxh]hcmds_max}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint16_t qdepthh](h)}(hhh]jN)}(huint16_th]huint16_t}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_session_createasbuh1hhjubj:)}(h h]h }(hjѰhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hqdepthh]hqdepth}(hj߰hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t initial_cmdsnh](h)}(hhh]jN)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.iscsi_iser_session_createasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h initial_cmdsnh]h initial_cmdsn}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhMNubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjvhhhjhMNubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjhMNhjshhubj)}(hhh]h)}(hcreate an iscsi-iser sessionh]hcreate an iscsi-iser session}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMNhjNhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMNubeh}(h]h ](jefunctioneh"]h$]h&]jjejjijjijjjuh1jhhhjyhNhNubj)}(hX`**Parameters** ``struct iscsi_endpoint *ep`` iscsi end-point handle ``uint16_t cmds_max`` maximum commands in this session ``uint16_t qdepth`` session command queue depth ``uint32_t initial_cmdsn`` initiator command sequnce number **Description** Allocates and adds a scsi host, expose DIF supprot if exists, and sets up an iscsi session.h](h)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMRhjmubj)}(hhh](j)}(h5``struct iscsi_endpoint *ep`` iscsi end-point handle h](j)}(h``struct iscsi_endpoint *ep``h]j )}(hjh]hstruct iscsi_endpoint *ep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMOhjubj)}(hhh]h)}(hiscsi end-point handleh]hiscsi end-point handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h7``uint16_t cmds_max`` maximum commands in this session h](j)}(h``uint16_t cmds_max``h]j )}(hj˱h]huint16_t cmds_max}(hjͱhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɱubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMPhjűubj)}(hhh]h)}(h maximum commands in this sessionh]h maximum commands in this session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjűubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h0``uint16_t qdepth`` session command queue depth h](j)}(h``uint16_t qdepth``h]j )}(hjh]huint16_t qdepth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMQhjubj)}(hhh]h)}(hsession command queue depthh]hsession command queue depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h<``uint32_t initial_cmdsn`` initiator command sequnce number h](j)}(h``uint32_t initial_cmdsn``h]j )}(hj=h]huint32_t initial_cmdsn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMRhj7ubj)}(hhh]h)}(h initiator command sequnce numberh]h initiator command sequnce number}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMRhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjmubh)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMThjmubh)}(h[Allocates and adds a scsi host, expose DIF supprot if exists, and sets up an iscsi session.h]h[Allocates and adds a scsi host, expose DIF supprot if exists, and sets up an iscsi session.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMShjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"iscsi_iser_ep_connect (C function)c.iscsi_iser_ep_connecthNtauh1jhjyhhhNhNubj)}(hhh](j)}(htstruct iscsi_endpoint * iscsi_iser_ep_connect (struct Scsi_Host *shost, struct sockaddr *dst_addr, int non_blocking)h]j")}(hrstruct iscsi_endpoint *iscsi_iser_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr, int non_blocking)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM ubj:)}(h h]h }(hj˲hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjʲhM ubh)}(hhh]jN)}(hiscsi_endpointh]hiscsi_endpoint}(hjܲhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjٲubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj޲modnameN classnameNjkjn)}jq]jt)}jgiscsi_iser_ep_connectsbc.iscsi_iser_ep_connectasbuh1hhjhhhjʲhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjʲhM ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʲhM ubj)}(hiscsi_iser_ep_connecth]jN)}(hjh]hiscsi_iser_ep_connect}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjʲhM ubj)}(hF(struct Scsi_Host *shost, struct sockaddr *dst_addr, int non_blocking)h](j)}(hstruct Scsi_Host *shosth](j()}(hj+h]hstruct}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj3ubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubh)}(hhh]jN)}(h Scsi_Hosth]h Scsi_Host}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjWmodnameN classnameNjkjn)}jq]jc.iscsi_iser_ep_connectasbuh1hhj3ubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjN)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hstruct sockaddr *dst_addrh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsockaddrh]hsockaddr}(hjųhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj³ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjdzmodnameN classnameNjkjn)}jq]jc.iscsi_iser_ep_connectasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hdst_addrh]hdst_addr}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hint non_blockingh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h non_blockingh]h non_blocking}(hj3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjʲhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjʲhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjʲhM hjhhubj)}(hhh]h)}(h&Initiate iSER connection establishmenth]h&Initiate iSER connection establishment}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʲhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjujjujjjuh1jhhhjyhNhNubj)}(hX6**Parameters** ``struct Scsi_Host *shost`` scsi_host ``struct sockaddr *dst_addr`` destination address ``int non_blocking`` indicate if routine can block **Description** Allocate an iscsi endpoint, an iser_conn structure and bind them. After that start RDMA connection establishment via rdma_cm. We don't allocate iser_conn embedded in iscsi_endpoint since in teardown the endpoint will be destroyed at ep_disconnect while iser_conn will cleanup its resources asynchronuously. **Return** iscsi_endpoint created by iscsi layer or ERR_PTR(error) if fails.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubj)}(hhh](j)}(h&``struct Scsi_Host *shost`` scsi_host -h](j)}(h``struct Scsi_Host *shost``h]j )}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjubj)}(hhh]h)}(h scsi_hosth]h scsi_host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h2``struct sockaddr *dst_addr`` destination address h](j)}(h``struct sockaddr *dst_addr``h]j )}(hj״h]hstruct sockaddr *dst_addr}(hjٴhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjմubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjѴubj)}(hhh]h)}(hdestination addressh]hdestination address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjѴubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``int non_blocking`` indicate if routine can block h](j)}(h``int non_blocking``h]j )}(hjh]hint non_blocking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhj ubj)}(hhh]h)}(hindicate if routine can blockh]hindicate if routine can block}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubh)}(hX2Allocate an iscsi endpoint, an iser_conn structure and bind them. After that start RDMA connection establishment via rdma_cm. We don't allocate iser_conn embedded in iscsi_endpoint since in teardown the endpoint will be destroyed at ep_disconnect while iser_conn will cleanup its resources asynchronuously.h]hX4Allocate an iscsi endpoint, an iser_conn structure and bind them. After that start RDMA connection establishment via rdma_cm. We don’t allocate iser_conn embedded in iscsi_endpoint since in teardown the endpoint will be destroyed at ep_disconnect while iser_conn will cleanup its resources asynchronuously.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubh)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubh)}(hAiscsi_endpoint created by iscsi layer or ERR_PTR(error) if fails.h]hAiscsi_endpoint created by iscsi layer or ERR_PTR(error) if fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiscsi_iser_ep_poll (C function)c.iscsi_iser_ep_pollhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hBint iscsi_iser_ep_poll (struct iscsi_endpoint *ep, int timeout_ms)h]j")}(hAint iscsi_iser_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:ubj:)}(h h]h }(hjƵhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjŵhM:ubj)}(hiscsi_iser_ep_pollh]jN)}(hiscsi_iser_ep_pollh]hiscsi_iser_ep_poll}(hjصhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjԵubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjŵhM:ubj)}(h+(struct iscsi_endpoint *ep, int timeout_ms)h](j)}(hstruct iscsi_endpoint *eph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hiscsi_endpointh]hiscsi_endpoint}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjڵsbc.iscsi_iser_ep_pollasbuh1hhjubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(heph]hep}(hjMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint timeout_msh](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjbubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbubjN)}(h timeout_msh]h timeout_ms}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjŵhM:ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjŵhM:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjŵhM:hjhhubj)}(hhh]h)}(h2poll for iser connection establishment to completeh]h2poll for iser connection establishment to complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjŵhM:ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjĶjjĶjjjuh1jhhhjyhNhNubj)}(hX**Parameters** ``struct iscsi_endpoint *ep`` iscsi endpoint (created at ep_connect) ``int timeout_ms`` polling timeout allowed in ms. **Description** This routine boils down to waiting for up_completion signaling that cma_id got CONNECTED event. **Return** 1 if succeeded in connection establishment, 0 if timeout expired (libiscsi will retry will kick in) or -1 if interrupted by signal or more likely iser connection state transitioned to TEMINATING or DOWN during the wait period.h](h)}(h**Parameters**h]j)}(hjζh]h Parameters}(hjжhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̶ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM>hjȶubj)}(hhh](j)}(hE``struct iscsi_endpoint *ep`` iscsi endpoint (created at ep_connect) h](j)}(h``struct iscsi_endpoint *ep``h]j )}(hjh]hstruct iscsi_endpoint *ep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM;hjubj)}(hhh]h)}(h&iscsi endpoint (created at ep_connect)h]h&iscsi endpoint (created at ep_connect)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h2``int timeout_ms`` polling timeout allowed in ms. h](j)}(h``int timeout_ms``h]j )}(hj&h]hint timeout_ms}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM<hj ubj)}(hhh]h)}(hpolling timeout allowed in ms.h]hpolling timeout allowed in ms.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM<hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM<hjubeh}(h]h ]h"]h$]h&]uh1jhjȶubh)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM>hjȶubh)}(h_This routine boils down to waiting for up_completion signaling that cma_id got CONNECTED event.h]h_This routine boils down to waiting for up_completion signaling that cma_id got CONNECTED event.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM=hjȶubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM@hjȶubh)}(h1 if succeeded in connection establishment, 0 if timeout expired (libiscsi will retry will kick in) or -1 if interrupted by signal or more likely iser connection state transitioned to TEMINATING or DOWN during the wait period.h]h1 if succeeded in connection establishment, 0 if timeout expired (libiscsi will retry will kick in) or -1 if interrupted by signal or more likely iser connection state transitioned to TEMINATING or DOWN during the wait period.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMAhjȶubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_iser_ep_disconnect (C function)c.iscsi_iser_ep_disconnecthNtauh1jhjyhhhNhNubj)}(hhh](j)}(h9void iscsi_iser_ep_disconnect (struct iscsi_endpoint *ep)h]j")}(h8void iscsi_iser_ep_disconnect(struct iscsi_endpoint *ep)h](j)}(hvoidh]hvoid}(hjͷhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjɷhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMaubj:)}(h h]h }(hjܷhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjɷhhhj۷hMaubj)}(hiscsi_iser_ep_disconnecth]jN)}(hiscsi_iser_ep_disconnecth]hiscsi_iser_ep_disconnect}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjɷhhhj۷hMaubj)}(h(struct iscsi_endpoint *ep)h]j)}(hstruct iscsi_endpoint *eph](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hiscsi_endpointh]hiscsi_endpoint}(hj(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj*modnameN classnameNjkjn)}jq]jt)}jgjsbc.iscsi_iser_ep_disconnectasbuh1hhjubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(heph]hep}(hjchhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjɷhhhj۷hMaubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjŷhhhj۷hMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj۷hMahj·hhubj)}(hhh]h)}(h$Initiate connection teardown processh]h$Initiate connection teardown process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMahjhhubah}(h]h ]h"]h$]h&]uh1jhj·hhhj۷hMaubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hXJ**Parameters** ``struct iscsi_endpoint *ep`` iscsi endpoint handle **Description** This routine is not blocked by iser and RDMA termination process completion as we queue a deffered work for iser/RDMA destruction and cleanup or actually call it immediately in case we didn't pass iscsi conn bind/start stage, thus it is safe.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMehjubj)}(hhh]j)}(h4``struct iscsi_endpoint *ep`` iscsi endpoint handle h](j)}(h``struct iscsi_endpoint *ep``h]j )}(hjθh]hstruct iscsi_endpoint *ep}(hjиhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̸ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMbhjȸubj)}(hhh]h)}(hiscsi endpoint handleh]hiscsi endpoint handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjȸubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjŸubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMdhjubh)}(hThis routine is not blocked by iser and RDMA termination process completion as we queue a deffered work for iser/RDMA destruction and cleanup or actually call it immediately in case we didn't pass iscsi conn bind/start stage, thus it is safe.h]hThis routine is not blocked by iser and RDMA termination process completion as we queue a deffered work for iser/RDMA destruction and cleanup or actually call it immediately in case we didn’t pass iscsi conn bind/start stage, thus it is safe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_send_command (C function)c.iser_send_commandhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hHint iser_send_command (struct iscsi_conn *conn, struct iscsi_task *task)h]j")}(hGint iser_send_command(struct iscsi_conn *conn, struct iscsi_task *task)h](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJhhhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMQubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJhhhj\hMQubj)}(hiser_send_commandh]jN)}(hiser_send_commandh]hiser_send_command}(hjohhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj\hMQubj)}(h2(struct iscsi_conn *conn, struct iscsi_task *task)h](j)}(hstruct iscsi_conn *connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_connh]h iscsi_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjqsbc.iser_send_commandasbuh1hhjubj:)}(h h]h }(hjɹhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj׹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hconnh]hconn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jŹc.iser_send_commandasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hjThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj\hMQubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjFhhhj\hMQubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhj\hMQhjChhubj)}(hhh]h)}(hsend command PDUh]hsend command PDU}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMQhj{hhubah}(h]h ]h"]h$]h&]uh1jhjChhhj\hMQubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_conn *conn`` link to matching iscsi connection ``struct iscsi_task *task`` SCSI command taskh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMUhjubj)}(hhh](j)}(h>``struct iscsi_conn *conn`` link to matching iscsi connection h](j)}(h``struct iscsi_conn *conn``h]j )}(hjh]hstruct iscsi_conn *conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMRhjubj)}(hhh]h)}(h!link to matching iscsi connectionh]h!link to matching iscsi connection}(hjغhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԺhMRhjպubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԺhMRhjubj)}(h-``struct iscsi_task *task`` SCSI command taskh](j)}(h``struct iscsi_task *task``h]j )}(hjh]hstruct iscsi_task *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMThjubj)}(hhh]h)}(hSCSI command taskh]hSCSI command task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMThjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_send_data_out (C function)c.iser_send_data_outhNtauh1jhjyhhhNhNubj)}(hhh](j)}(haint iser_send_data_out (struct iscsi_conn *conn, struct iscsi_task *task, struct iscsi_data *hdr)h]j")}(h`int iser_send_data_out(struct iscsi_conn *conn, struct iscsi_task *task, struct iscsi_data *hdr)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjNhhhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNhhhj`hMubj)}(hiser_send_data_outh]jN)}(hiser_send_data_outh]hiser_send_data_out}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj`hMubj)}(hJ(struct iscsi_conn *conn, struct iscsi_task *task, struct iscsi_data *hdr)h](j)}(hstruct iscsi_conn *connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_connh]h iscsi_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjusbc.iser_send_data_outasbuh1hhjubj:)}(h h]h }(hjͻhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjۻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hconnh]hconn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iscsi_task *taskh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj!modnameN classnameNjkjn)}jq]jɻc.iser_send_data_outasbuh1hhjubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(htaskh]htask}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iscsi_data *hdrh](j()}(hj+h]hstruct}(hjqhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjmubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubh)}(hhh]jN)}(h iscsi_datah]h iscsi_data}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jɻc.iser_send_data_outasbuh1hhjmubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjN)}(hhdrh]hhdr}(hjȼhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhj`hMhjGhhubj)}(hhh]h)}(hsend data out PDUh]hsend data out PDU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct iscsi_conn *conn`` link to matching iscsi connection ``struct iscsi_task *task`` SCSI command task ``struct iscsi_data *hdr`` pointer to the LLD's iSCSI message headerh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjubj)}(hhh](j)}(h>``struct iscsi_conn *conn`` link to matching iscsi connection h](j)}(h``struct iscsi_conn *conn``h]j )}(hj3h]hstruct iscsi_conn *conn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhj-ubj)}(hhh]h)}(h!link to matching iscsi connectionh]h!link to matching iscsi connection}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h.``struct iscsi_task *task`` SCSI command task h](j)}(h``struct iscsi_task *task``h]j )}(hjlh]hstruct iscsi_task *task}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjfubj)}(hhh]h)}(hSCSI command taskh]hSCSI command task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubj)}(hD``struct iscsi_data *hdr`` pointer to the LLD's iSCSI message headerh](j)}(h``struct iscsi_data *hdr``h]j )}(hjh]hstruct iscsi_data *hdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjubj)}(hhh]h)}(h)pointer to the LLD's iSCSI message headerh]h+pointer to the LLD’s iSCSI message header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$iser_alloc_fastreg_pool (C function)c.iser_alloc_fastreg_poolhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h[int iser_alloc_fastreg_pool (struct ib_conn *ib_conn, unsigned cmds_max, unsigned int size)h]j")}(hZint iser_alloc_fastreg_pool(struct ib_conn *ib_conn, unsigned cmds_max, unsigned int size)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hKubj)}(hiser_alloc_fastreg_poolh]jN)}(hiser_alloc_fastreg_poolh]hiser_alloc_fastreg_pool}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKubj)}(h?(struct ib_conn *ib_conn, unsigned cmds_max, unsigned int size)h](j)}(hstruct ib_conn *ib_connh](j()}(hj+h]hstruct}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj8ubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubh)}(hhh]jN)}(hib_connh]hib_conn}(hjZhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj\modnameN classnameNjkjn)}jq]jt)}jgj"sbc.iser_alloc_fastreg_poolasbuh1hhj8ubj:)}(h h]h }(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjN)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hunsigned cmds_maxh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hcmds_maxh]hcmds_max}(hjʾhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj߾ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj߾ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj߾ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj߾ubjN)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj߾ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKhjhhubj)}(hhh]h)}(hICreates pool of fast_reg descriptors for fast registration work requests.h]hICreates pool of fast_reg descriptors for fast registration work requests.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjBhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](jefunctioneh"]h$]h&]jjejj]jj]jjjuh1jhhhjyhNhNubj)}(hX**Parameters** ``struct ib_conn *ib_conn`` connection RDMA resources ``unsigned cmds_max`` max number of SCSI commands for this connection ``unsigned int size`` max number of pages per map request **Return** 0 on success, or errno code on failureh](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjaubj)}(hhh](j)}(h6``struct ib_conn *ib_conn`` connection RDMA resources h](j)}(h``struct ib_conn *ib_conn``h]j )}(hjh]hstruct ib_conn *ib_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjubj)}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubj)}(hF``unsigned cmds_max`` max number of SCSI commands for this connection h](j)}(h``unsigned cmds_max``h]j )}(hjh]hunsigned cmds_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjubj)}(hhh]h)}(h/max number of SCSI commands for this connectionh]h/max number of SCSI commands for this connection}(hjؿhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԿhKhjտubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԿhKhj}ubj)}(h:``unsigned int size`` max number of pages per map request h](j)}(h``unsigned int size``h]j )}(hjh]hunsigned int size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjubj)}(hhh]h)}(h#max number of pages per map requesth]h#max number of pages per map request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h **Return**h]j)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjaubh)}(h&0 on success, or errno code on failureh]h&0 on success, or errno code on failure}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#iser_free_fastreg_pool (C function)c.iser_free_fastreg_poolhNtauh1jhjyhhhNhNubj)}(hhh](j)}(h5void iser_free_fastreg_pool (struct ib_conn *ib_conn)h]j")}(h4void iser_free_fastreg_pool(struct ib_conn *ib_conn)h](j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjthhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjthhhjhKubj)}(hiser_free_fastreg_poolh]jN)}(hiser_free_fastreg_poolh]hiser_free_fastreg_pool}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhKubj)}(h(struct ib_conn *ib_conn)h]j)}(hstruct ib_conn *ib_connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iser_free_fastreg_poolasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjthhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjphhhjhKubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjmhhubj)}(hhh]h)}(h)releases the pool of fast_reg descriptorsh]h)releases the pool of fast_reg descriptors}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhj5hhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhKubeh}(h]h ](jefunctioneh"]h$]h&]jjejjPjjPjjjuh1jhhhjyhNhNubj)}(hG**Parameters** ``struct ib_conn *ib_conn`` connection RDMA resourcesh](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjTubj)}(hhh]j)}(h5``struct ib_conn *ib_conn`` connection RDMA resourcesh](j)}(h``struct ib_conn *ib_conn``h]j )}(hjyh]hstruct ib_conn *ib_conn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjsubj)}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"iser_free_ib_conn_res (C function)c.iser_free_ib_conn_reshNtauh1jhjyhhhNhNubj)}(hhh](j)}(hFvoid iser_free_ib_conn_res (struct iser_conn *iser_conn, bool destroy)h]j")}(hEvoid iser_free_ib_conn_res(struct iser_conn *iser_conn, bool destroy)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMjubj)}(hiser_free_ib_conn_resh]jN)}(hiser_free_ib_conn_resh]hiser_free_ib_conn_res}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMjubj)}(h+(struct iser_conn *iser_conn, bool destroy)h](j)}(hstruct iser_conn *iser_connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h iser_connh]h iser_conn}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj0modnameN classnameNjkjn)}jq]jt)}jgjsbc.iser_free_ib_conn_resasbuh1hhj ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(h iser_connh]h iser_conn}(hjihhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool destroyh](j)}(hjjh]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubjN)}(hdestroyh]hdestroy}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMjubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMjubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMjhjhhubj)}(hhh]h)}(hrelease IB related resourcesh]hrelease IB related resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMjhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMjubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hX}**Parameters** ``struct iser_conn *iser_conn`` iser connection struct ``bool destroy`` indicator if we need to try to release the iser device and memory regoins pool (only iscsi shutdown and DEVICE_REMOVAL will use this). **Description** This routine is called with the iser state mutex held so the cm_id removal is out of here. It is Safe to be invoked multiple times.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMnhjubj)}(hhh](j)}(h7``struct iser_conn *iser_conn`` iser connection struct h](j)}(h``struct iser_conn *iser_conn``h]j )}(hjh]hstruct iser_conn *iser_conn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMkhjubj)}(hhh]h)}(hiser connection structh]hiser connection struct}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubj)}(h``bool destroy`` indicator if we need to try to release the iser device and memory regoins pool (only iscsi shutdown and DEVICE_REMOVAL will use this). h](j)}(h``bool destroy``h]j )}(hjAh]h bool destroy}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMnhj;ubj)}(hhh]h)}(hindicator if we need to try to release the iser device and memory regoins pool (only iscsi shutdown and DEVICE_REMOVAL will use this).h]hindicator if we need to try to release the iser device and memory regoins pool (only iscsi shutdown and DEVICE_REMOVAL will use this).}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMlhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMnhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMphjubh)}(hThis routine is called with the iser state mutex held so the cm_id removal is out of here. It is Safe to be invoked multiple times.h]hThis routine is called with the iser state mutex held so the cm_id removal is out of here. It is Safe to be invoked multiple times.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_conn_release (C function)c.iser_conn_releasehNtauh1jhjyhhhNhNubj)}(hhh](j)}(h4void iser_conn_release (struct iser_conn *iser_conn)h]j")}(h3void iser_conn_release(struct iser_conn *iser_conn)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hiser_conn_releaseh]jN)}(hiser_conn_releaseh]hiser_conn_release}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iser_conn *iser_conn)h]j)}(hstruct iser_conn *iser_connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h iser_connh]h iser_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iser_conn_releaseasbuh1hhjubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h iser_connh]h iser_conn}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h3Frees all conn objects and deallocs conn descriptorh]h3Frees all conn objects and deallocs conn descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hI**Parameters** ``struct iser_conn *iser_conn`` iSER connection contexth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubj)}(hhh]j)}(h7``struct iser_conn *iser_conn`` iSER connection contexth](j)}(h``struct iser_conn *iser_conn``h]j )}(hjh]hstruct iser_conn *iser_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubj)}(hhh]h)}(hiSER connection contexth]hiSER connection context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j iser_conn_terminate (C function)c.iser_conn_terminatehNtauh1jhjyhhhNhNubj)}(hhh](j)}(h5int iser_conn_terminate (struct iser_conn *iser_conn)h]j")}(h4int iser_conn_terminate(struct iser_conn *iser_conn)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj+hMubj)}(hiser_conn_terminateh]jN)}(hiser_conn_terminateh]hiser_conn_terminate}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hMubj)}(h(struct iser_conn *iser_conn)h]j)}(hstruct iser_conn *iser_connh](j()}(hj+h]hstruct}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjVubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubh)}(hhh]jN)}(h iser_connh]h iser_conn}(hjxhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjuubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjzmodnameN classnameNjkjn)}jq]jt)}jgj@sbc.iser_conn_terminateasbuh1hhjVubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjN)}(h iser_connh]h iser_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj+hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hMhjhhubj)}(hhh]h)}(hItriggers start of the disconnect procedures and waits for them to be doneh]hItriggers start of the disconnect procedures and waits for them to be done}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(hx**Parameters** ``struct iser_conn *iser_conn`` iSER connection context **Description** Called with state mutex heldh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubj)}(hhh]j)}(h8``struct iser_conn *iser_conn`` iSER connection context h](j)}(h``struct iser_conn *iser_conn``h]j )}(hjh]hstruct iser_conn *iser_conn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubj)}(hhh]h)}(hiSER connection contexth]hiSER connection context}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubh)}(hCalled with state mutex heldh]hCalled with state mutex held}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jiser_post_send (C function)c.iser_post_sendhNtauh1jhjyhhhNhNubj)}(hhh](j)}(hJint iser_post_send (struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc)h]j")}(hIint iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMSubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMSubj)}(hiser_post_sendh]jN)}(hiser_post_sendh]hiser_post_send}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMSubj)}(h7(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc)h](j)}(hstruct ib_conn *ib_connh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.iser_post_sendasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hib_connh]hib_conn}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iser_tx_desc *tx_desch](j()}(hj+h]hstruct}(hjMhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjIubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubh)}(hhh]jN)}(h iser_tx_desch]h iser_tx_desc}(hjkhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmmodnameN classnameNjkjn)}jq]jc.iser_post_sendasbuh1hhjIubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjN)}(htx_desch]htx_desc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMShjhhubj)}(hhh]h)}(hInitiate a Send DTO operationh]hInitiate a Send DTO operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMShjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMSubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjyhNhNubj)}(h**Parameters** ``struct ib_conn *ib_conn`` connection RDMA resources ``struct iser_tx_desc *tx_desc`` iSER TX descriptor **Return** 0 on success, -1 on failureh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMWhjubj)}(hhh](j)}(h6``struct ib_conn *ib_conn`` connection RDMA resources h](j)}(h``struct ib_conn *ib_conn``h]j )}(hjh]hstruct ib_conn *ib_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMThj ubj)}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMThj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMThjubj)}(h4``struct iser_tx_desc *tx_desc`` iSER TX descriptor h](j)}(h ``struct iser_tx_desc *tx_desc``h]j )}(hjHh]hstruct iser_tx_desc *tx_desc}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMUhjBubj)}(hhh]h)}(hiSER TX descriptorh]hiSER TX descriptor}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMUhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMUhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMWhjubh)}(h0 on success, -1 on failureh]h0 on success, -1 on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMWhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjyhhhNhNubeh}(h]iscsi-extensions-for-rdma-iserah ]h"] iscsi extensions for rdma (iser)ah$]h&]uh1hhjyhhhhhKJubh)}(hhh](h)}(h,InfiniBand SCSI RDMA protocol target supporth]h,InfiniBand SCSI RDMA protocol target support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK`ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_command_state (C enum)c.srpt_command_statehNtauh1jhjhhhNhNubj)}(hhh](j)}(hsrpt_command_stateh]j")}(henum srpt_command_stateh](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hsrpt_command_stateh]jN)}(hjh]hsrpt_command_state}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h"SCSI command state managed by SRPTh]h"SCSI command state managed by SRPT}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jeenumeh"]h$]h&]jjejj;jj;jjjuh1jhhhjhNhNubj)}(hXb**Constants** ``SRPT_STATE_NEW`` New command arrived and is being processed. ``SRPT_STATE_NEED_DATA`` Processing a write or bidir command and waiting for data arrival. ``SRPT_STATE_DATA_IN`` Data for the write or bidir command arrived and is being processed. ``SRPT_STATE_CMD_RSP_SENT`` SRP_RSP for SRP_CMD has been sent. ``SRPT_STATE_MGMT`` Processing a SCSI task management command. ``SRPT_STATE_MGMT_RSP_SENT`` SRP_RSP for SRP_TSK_MGMT has been sent. ``SRPT_STATE_DONE`` Command processing finished successfully, command processing has been aborted or command processing failed.h](h)}(h **Constants**h]j)}(hjEh]h Constants}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj?ubj)}(hhh](j)}(h?``SRPT_STATE_NEW`` New command arrived and is being processed. h](j)}(h``SRPT_STATE_NEW``h]j )}(hjdh]hSRPT_STATE_NEW}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj^ubj)}(hhh]h)}(h+New command arrived and is being processed.h]h+New command arrived and is being processed.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhKhj[ubj)}(h[``SRPT_STATE_NEED_DATA`` Processing a write or bidir command and waiting for data arrival. h](j)}(h``SRPT_STATE_NEED_DATA``h]j )}(hjh]hSRPT_STATE_NEED_DATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hAProcessing a write or bidir command and waiting for data arrival.h]hAProcessing a write or bidir command and waiting for data arrival.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj[ubj)}(h[``SRPT_STATE_DATA_IN`` Data for the write or bidir command arrived and is being processed. h](j)}(h``SRPT_STATE_DATA_IN``h]j )}(hjh]hSRPT_STATE_DATA_IN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hCData for the write or bidir command arrived and is being processed.h]hCData for the write or bidir command arrived and is being processed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj[ubj)}(h?``SRPT_STATE_CMD_RSP_SENT`` SRP_RSP for SRP_CMD has been sent. h](j)}(h``SRPT_STATE_CMD_RSP_SENT``h]j )}(hjh]hSRPT_STATE_CMD_RSP_SENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj ubj)}(hhh]h)}(h"SRP_RSP for SRP_CMD has been sent.h]h"SRP_RSP for SRP_CMD has been sent.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj[ubj)}(h?``SRPT_STATE_MGMT`` Processing a SCSI task management command. h](j)}(h``SRPT_STATE_MGMT``h]j )}(hjJh]hSRPT_STATE_MGMT}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjDubj)}(hhh]h)}(h*Processing a SCSI task management command.h]h*Processing a SCSI task management command.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhj[ubj)}(hE``SRPT_STATE_MGMT_RSP_SENT`` SRP_RSP for SRP_TSK_MGMT has been sent. h](j)}(h``SRPT_STATE_MGMT_RSP_SENT``h]j )}(hjh]hSRPT_STATE_MGMT_RSP_SENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj}ubj)}(hhh]h)}(h'SRP_RSP for SRP_TSK_MGMT has been sent.h]h'SRP_RSP for SRP_TSK_MGMT has been sent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj[ubj)}(h``SRPT_STATE_DONE`` Command processing finished successfully, command processing has been aborted or command processing failed.h](j)}(h``SRPT_STATE_DONE``h]j )}(hjh]hSRPT_STATE_DONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hkCommand processing finished successfully, command processing has been aborted or command processing failed.h]hkCommand processing finished successfully, command processing has been aborted or command processing failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_ioctx (C struct) c.srpt_ioctxhNtauh1jhjhhhNhNubj)}(hhh](j)}(h srpt_ioctxh]j")}(hstruct srpt_ioctxh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj#hKubj)}(h srpt_ioctxh]jN)}(hjh]h srpt_ioctx}(hj6hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj#hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj#hKhj hhubj)}(hhh]h)}(h#shared SRPT I/O context informationh]h#shared SRPT I/O context information}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjUhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hKubeh}(h]h ](jestructeh"]h$]h&]jjejjpjjpjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_ioctx { struct ib_cqe cqe; void *buf; dma_addr_t dma; uint32_t offset; uint32_t index; }; **Members** ``cqe`` Completion queue element. ``buf`` Pointer to the buffer. ``dma`` DMA address of the buffer. ``offset`` Offset of the first byte in **buf** and **dma** that is actually used. ``index`` Index of the I/O context in its ioctx_ring array.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh:}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjtubjy)}(hstruct srpt_ioctx { struct ib_cqe cqe; void *buf; dma_addr_t dma; uint32_t offset; uint32_t index; };h]hstruct srpt_ioctx { struct ib_cqe cqe; void *buf; dma_addr_t dma; uint32_t offset; uint32_t index; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjtubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjtubj)}(hhh](j)}(h"``cqe`` Completion queue element. h](j)}(h``cqe``h]j )}(hjh]hcqe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hCompletion queue element.h]hCompletion queue element.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``buf`` Pointer to the buffer. h](j)}(h``buf``h]j )}(hjh]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hPointer to the buffer.h]hPointer to the buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h#``dma`` DMA address of the buffer. h](j)}(h``dma``h]j )}(hj7h]hdma}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj1ubj)}(hhh]h)}(hDMA address of the buffer.h]hDMA address of the buffer.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhKhjubj)}(hR``offset`` Offset of the first byte in **buf** and **dma** that is actually used. h](j)}(h ``offset``h]j )}(hjph]hoffset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjjubj)}(hhh]h)}(hFOffset of the first byte in **buf** and **dma** that is actually used.h](hOffset of the first byte in }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**dma**h]hdma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh that is actually used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h;``index`` Index of the I/O context in its ioctx_ring array.h](j)}(h ``index``h]j )}(hjh]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h1Index of the I/O context in its ioctx_ring array.h]h1Index of the I/O context in its ioctx_ring array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_recv_ioctx (C struct)c.srpt_recv_ioctxhNtauh1jhjhhhNhNubj)}(hhh](j)}(hsrpt_recv_ioctxh]j")}(hstruct srpt_recv_ioctxh](j()}(hj+h]hstruct}(hj'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#hhhj4hKubj)}(hsrpt_recv_ioctxh]jN)}(hj!h]hsrpt_recv_ioctx}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj4hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj4hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj4hKhjhhubj)}(hhh]h)}(hSRPT receive I/O contexth]hSRPT receive I/O context}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hKubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX-**Definition**:: struct srpt_recv_ioctx { struct srpt_ioctx ioctx; struct list_head wait_list; int byte_len; }; **Members** ``ioctx`` See above. ``wait_list`` Node for insertion in srpt_rdma_ch.cmd_wait_list. ``byte_len`` Number of bytes in **ioctx.buf**.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubjy)}(hwstruct srpt_recv_ioctx { struct srpt_ioctx ioctx; struct list_head wait_list; int byte_len; };h]hwstruct srpt_recv_ioctx { struct srpt_ioctx ioctx; struct list_head wait_list; int byte_len; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh](j)}(h``ioctx`` See above. h](j)}(h ``ioctx``h]j )}(hjh]hioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h See above.h]h See above.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h@``wait_list`` Node for insertion in srpt_rdma_ch.cmd_wait_list. h](j)}(h ``wait_list``h]j )}(hjh]h wait_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj ubj)}(hhh]h)}(h1Node for insertion in srpt_rdma_ch.cmd_wait_list.h]h1Node for insertion in srpt_rdma_ch.cmd_wait_list.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjubj)}(h.``byte_len`` Number of bytes in **ioctx.buf**.h](j)}(h ``byte_len``h]j )}(hjHh]hbyte_len}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjBubj)}(hhh]h)}(h!Number of bytes in **ioctx.buf**.h](hNumber of bytes in }(hjahhhNhNubj)}(h **ioctx.buf**h]h ioctx.buf}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_send_ioctx (C struct)c.srpt_send_ioctxhNtauh1jhjhhhNhNubj)}(hhh](j)}(hsrpt_send_ioctxh]j")}(hstruct srpt_send_ioctxh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hsrpt_send_ioctxh]jN)}(hjh]hsrpt_send_ioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hSRPT send I/O contexth]hSRPT send I/O context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_send_ioctx { struct srpt_ioctx ioctx; struct srpt_rdma_ch *ch; struct srpt_recv_ioctx *recv_ioctx; struct srpt_rw_ctx s_rw_ctx; struct srpt_rw_ctx *rw_ctxs; struct scatterlist imm_sg; struct ib_cqe rdma_cqe; enum srpt_command_state state; struct se_cmd cmd; u8 n_rdma; u8 n_rw_ctx; bool queue_status_only; u8 sense_data[TRANSPORT_SENSE_BUFFER]; }; **Members** ``ioctx`` See above. ``ch`` Channel pointer. ``recv_ioctx`` Receive I/O context associated with this send I/O context. Only used for processing immediate data. ``s_rw_ctx`` **rw_ctxs** points here if only a single rw_ctx is needed. ``rw_ctxs`` RDMA read/write contexts. ``imm_sg`` Scatterlist for immediate data. ``rdma_cqe`` RDMA completion queue element. ``state`` I/O context state. ``cmd`` Target core command data structure. ``n_rdma`` Number of work requests needed to transfer this ioctx. ``n_rw_ctx`` Size of rw_ctxs array. ``queue_status_only`` Send a SCSI status back to the initiator but no data. ``sense_data`` Sense data to be sent to the initiator.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubjy)}(hXstruct srpt_send_ioctx { struct srpt_ioctx ioctx; struct srpt_rdma_ch *ch; struct srpt_recv_ioctx *recv_ioctx; struct srpt_rw_ctx s_rw_ctx; struct srpt_rw_ctx *rw_ctxs; struct scatterlist imm_sg; struct ib_cqe rdma_cqe; enum srpt_command_state state; struct se_cmd cmd; u8 n_rdma; u8 n_rw_ctx; bool queue_status_only; u8 sense_data[TRANSPORT_SENSE_BUFFER]; };h]hXstruct srpt_send_ioctx { struct srpt_ioctx ioctx; struct srpt_rdma_ch *ch; struct srpt_recv_ioctx *recv_ioctx; struct srpt_rw_ctx s_rw_ctx; struct srpt_rw_ctx *rw_ctxs; struct scatterlist imm_sg; struct ib_cqe rdma_cqe; enum srpt_command_state state; struct se_cmd cmd; u8 n_rdma; u8 n_rw_ctx; bool queue_status_only; u8 sense_data[TRANSPORT_SENSE_BUFFER]; };}hj3sbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubh)}(h **Members**h]j)}(hjDh]hMembers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh](j)}(h``ioctx`` See above. h](j)}(h ``ioctx``h]j )}(hjch]hioctx}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj]ubj)}(hhh]h)}(h See above.h]h See above.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjZubj)}(h``ch`` Channel pointer. h](j)}(h``ch``h]j )}(hjh]hch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hChannel pointer.h]hChannel pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hs``recv_ioctx`` Receive I/O context associated with this send I/O context. Only used for processing immediate data. h](j)}(h``recv_ioctx``h]j )}(hjh]h recv_ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hcReceive I/O context associated with this send I/O context. Only used for processing immediate data.h]hcReceive I/O context associated with this send I/O context. Only used for processing immediate data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hH``s_rw_ctx`` **rw_ctxs** points here if only a single rw_ctx is needed. h](j)}(h ``s_rw_ctx``h]j )}(hjh]hs_rw_ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj ubj)}(hhh]h)}(h:**rw_ctxs** points here if only a single rw_ctx is needed.h](j)}(h **rw_ctxs**h]hrw_ctxs}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh/ points here if only a single rw_ctx is needed.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjZubj)}(h&``rw_ctxs`` RDMA read/write contexts. h](j)}(h ``rw_ctxs``h]j )}(hjVh]hrw_ctxs}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjPubj)}(hhh]h)}(hRDMA read/write contexts.h]hRDMA read/write contexts.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjZubj)}(h+``imm_sg`` Scatterlist for immediate data. h](j)}(h ``imm_sg``h]j )}(hjh]himm_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hScatterlist for immediate data.h]hScatterlist for immediate data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h,``rdma_cqe`` RDMA completion queue element. h](j)}(h ``rdma_cqe``h]j )}(hjh]hrdma_cqe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hRDMA completion queue element.h]hRDMA completion queue element.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h``state`` I/O context state. h](j)}(h ``state``h]j )}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hI/O context state.h]hI/O context state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h,``cmd`` Target core command data structure. h](j)}(h``cmd``h]j )}(hj:h]hcmd}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj4ubj)}(hhh]h)}(h#Target core command data structure.h]h#Target core command data structure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjZubj)}(hB``n_rdma`` Number of work requests needed to transfer this ioctx. h](j)}(h ``n_rdma``h]j )}(hjsh]hn_rdma}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjmubj)}(hhh]h)}(h6Number of work requests needed to transfer this ioctx.h]h6Number of work requests needed to transfer this ioctx.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h$``n_rw_ctx`` Size of rw_ctxs array. h](j)}(h ``n_rw_ctx``h]j )}(hjh]hn_rw_ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(hSize of rw_ctxs array.h]hSize of rw_ctxs array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hL``queue_status_only`` Send a SCSI status back to the initiator but no data. h](j)}(h``queue_status_only``h]j )}(hjh]hqueue_status_only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h5Send a SCSI status back to the initiator but no data.h]h5Send a SCSI status back to the initiator but no data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h6``sense_data`` Sense data to be sent to the initiator.h](j)}(h``sense_data``h]j )}(hjh]h sense_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h'Sense data to be sent to the initiator.h]h'Sense data to be sent to the initiator.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjZubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jrdma_ch_state (C enum)c.rdma_ch_statehNtauh1jhjhhhNhNubj)}(hhh](j)}(h rdma_ch_stateh]j")}(henum rdma_ch_stateh](j()}(hj%h]henum}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjthhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjthhhjhKubj)}(h rdma_ch_stateh]jN)}(hjrh]h rdma_ch_state}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjphhhjhKubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjmhhubj)}(hhh]h)}(hSRP channel stateh]hSRP channel state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhKubeh}(h]h ](jeenumeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hXr**Constants** ``CH_CONNECTING`` QP is in RTR state; waiting for RTU. ``CH_LIVE`` QP is in RTS state. ``CH_DISCONNECTING`` DREQ has been sent and waiting for DREP or DREQ has been received. ``CH_DRAINING`` DREP has been received or waiting for DREP timed out and last work request has been queued. ``CH_DISCONNECTED`` Last completion has been received.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh](j)}(h7``CH_CONNECTING`` QP is in RTR state; waiting for RTU. h](j)}(h``CH_CONNECTING``h]j )}(hjh]h CH_CONNECTING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h$QP is in RTR state; waiting for RTU.h]h$QP is in RTR state; waiting for RTU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``CH_LIVE`` QP is in RTS state. h](j)}(h ``CH_LIVE``h]j )}(hj4h]hCH_LIVE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubj)}(hhh]h)}(hQP is in RTS state.h]hQP is in RTS state.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhjubj)}(hX``CH_DISCONNECTING`` DREQ has been sent and waiting for DREP or DREQ has been received. h](j)}(h``CH_DISCONNECTING``h]j )}(hjmh]hCH_DISCONNECTING}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjgubj)}(hhh]h)}(hBDREQ has been sent and waiting for DREP or DREQ has been received.h]hBDREQ has been sent and waiting for DREP or DREQ has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hl``CH_DRAINING`` DREP has been received or waiting for DREP timed out and last work request has been queued. h](j)}(h``CH_DRAINING``h]j )}(hjh]h CH_DRAINING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h[DREP has been received or waiting for DREP timed out and last work request has been queued.h]h[DREP has been received or waiting for DREP timed out and last work request has been queued.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h6``CH_DISCONNECTED`` Last completion has been received.h](j)}(h``CH_DISCONNECTED``h]j )}(hjh]hCH_DISCONNECTED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h"Last completion has been received.h]h"Last completion has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_rdma_ch (C struct)c.srpt_rdma_chhNtauh1jhjhhhNhNubj)}(hhh](j)}(h srpt_rdma_chh]j")}(hstruct srpt_rdma_chh](j()}(hj+h]hstruct}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7hhhjHhMubj)}(h srpt_rdma_chh]jN)}(hj5h]h srpt_rdma_ch}(hj[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjHhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj3hhhjHhMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjHhMhj0hhubj)}(hhh]h)}(h RDMA channelh]h RDMA channel}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjzhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjHhMubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hXL **Definition**:: struct srpt_rdma_ch { struct srpt_nexus *nexus; struct ib_qp *qp; union { struct { struct ib_cm_id *cm_id; } ib_cm; struct { struct rdma_cm_id *cm_id; } rdma_cm; }; struct ib_cq *cq; u32 cq_size; struct ib_cqe zw_cqe; struct rcu_head rcu; struct kref kref; struct completion *closed; int rq_size; u32 max_rsp_size; atomic_t sq_wr_avail; struct srpt_port *sport; int max_ti_iu_len; atomic_t req_lim; atomic_t req_lim_delta; u16 imm_data_offset; spinlock_t spinlock; enum rdma_ch_state state; struct kmem_cache *rsp_buf_cache; struct srpt_send_ioctx **ioctx_ring; struct kmem_cache *req_buf_cache; struct srpt_recv_ioctx **ioctx_recv_ring; struct list_head list; struct list_head cmd_wait_list; uint16_t pkey; bool using_rdma_cm; bool processing_wait_list; struct se_session *sess; u8 sess_name[40]; struct work_struct release_work; }; **Members** ``nexus`` I_T nexus this channel is associated with. ``qp`` IB queue pair used for communicating over this channel. ``{unnamed_union}`` anonymous ``ib_cm`` See below. ``ib_cm.cm_id`` IB CM ID associated with the channel. ``rdma_cm`` See below. ``rdma_cm.cm_id`` RDMA CM ID associated with the channel. ``cq`` IB completion queue for this channel. ``cq_size`` Number of CQEs in **cq**. ``zw_cqe`` Zero-length write CQE. ``rcu`` RCU head. ``kref`` kref for this channel. ``closed`` Completion object that will be signaled as soon as a new channel object with the same identity can be created. ``rq_size`` IB receive queue size. ``max_rsp_size`` Maximum size of an RSP response message in bytes. ``sq_wr_avail`` number of work requests available in the send queue. ``sport`` pointer to the information of the HCA port used by this channel. ``max_ti_iu_len`` maximum target-to-initiator information unit length. ``req_lim`` request limit: maximum number of requests that may be sent by the initiator without having received a response. ``req_lim_delta`` Number of credits not yet sent back to the initiator. ``imm_data_offset`` Offset from start of SRP_CMD for immediate data. ``spinlock`` Protects free_list and state. ``state`` channel state. See also enum rdma_ch_state. ``rsp_buf_cache`` kmem_cache for **ioctx_ring**. ``ioctx_ring`` Send ring. ``req_buf_cache`` kmem_cache for **ioctx_recv_ring**. ``ioctx_recv_ring`` Receive I/O context ring. ``list`` Node in srpt_nexus.ch_list. ``cmd_wait_list`` List of SCSI commands that arrived before the RTU event. This list contains struct srpt_ioctx elements and is protected against concurrent modification by the cm_id spinlock. ``pkey`` P_Key of the IB partition for this SRP channel. ``using_rdma_cm`` Whether the RDMA/CM or IB/CM is used for this channel. ``processing_wait_list`` Whether or not cmd_wait_list is being processed. ``sess`` Session information associated with this SRP channel. ``sess_name`` Session name. ``release_work`` Allows scheduling of srpt_release_channel().h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubjy)}(hXzstruct srpt_rdma_ch { struct srpt_nexus *nexus; struct ib_qp *qp; union { struct { struct ib_cm_id *cm_id; } ib_cm; struct { struct rdma_cm_id *cm_id; } rdma_cm; }; struct ib_cq *cq; u32 cq_size; struct ib_cqe zw_cqe; struct rcu_head rcu; struct kref kref; struct completion *closed; int rq_size; u32 max_rsp_size; atomic_t sq_wr_avail; struct srpt_port *sport; int max_ti_iu_len; atomic_t req_lim; atomic_t req_lim_delta; u16 imm_data_offset; spinlock_t spinlock; enum rdma_ch_state state; struct kmem_cache *rsp_buf_cache; struct srpt_send_ioctx **ioctx_ring; struct kmem_cache *req_buf_cache; struct srpt_recv_ioctx **ioctx_recv_ring; struct list_head list; struct list_head cmd_wait_list; uint16_t pkey; bool using_rdma_cm; bool processing_wait_list; struct se_session *sess; u8 sess_name[40]; struct work_struct release_work; };h]hXzstruct srpt_rdma_ch { struct srpt_nexus *nexus; struct ib_qp *qp; union { struct { struct ib_cm_id *cm_id; } ib_cm; struct { struct rdma_cm_id *cm_id; } rdma_cm; }; struct ib_cq *cq; u32 cq_size; struct ib_cqe zw_cqe; struct rcu_head rcu; struct kref kref; struct completion *closed; int rq_size; u32 max_rsp_size; atomic_t sq_wr_avail; struct srpt_port *sport; int max_ti_iu_len; atomic_t req_lim; atomic_t req_lim_delta; u16 imm_data_offset; spinlock_t spinlock; enum rdma_ch_state state; struct kmem_cache *rsp_buf_cache; struct srpt_send_ioctx **ioctx_ring; struct kmem_cache *req_buf_cache; struct srpt_recv_ioctx **ioctx_recv_ring; struct list_head list; struct list_head cmd_wait_list; uint16_t pkey; bool using_rdma_cm; bool processing_wait_list; struct se_session *sess; u8 sess_name[40]; struct work_struct release_work; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM*hjubj)}(hhh](j)}(h5``nexus`` I_T nexus this channel is associated with. h](j)}(h ``nexus``h]j )}(hjh]hnexus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h*I_T nexus this channel is associated with.h]h*I_T nexus this channel is associated with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h?``qp`` IB queue pair used for communicating over this channel. h](j)}(h``qp``h]j )}(hj#h]hqp}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h7IB queue pair used for communicating over this channel.h]h7IB queue pair used for communicating over this channel.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j )}(hj\h]h{unnamed_union}}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjVubj)}(hhh]h)}(h anonymoush]h anonymous}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjubj)}(h``ib_cm`` See below. h](j)}(h ``ib_cm``h]j )}(hjh]hib_cm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjubj)}(hhh]h)}(h See below.h]h See below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h6``ib_cm.cm_id`` IB CM ID associated with the channel. h](j)}(h``ib_cm.cm_id``h]j )}(hjh]h ib_cm.cm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h%IB CM ID associated with the channel.h]h%IB CM ID associated with the channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``rdma_cm`` See below. h](j)}(h ``rdma_cm``h]j )}(hjh]hrdma_cm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h See below.h]h See below.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``rdma_cm.cm_id`` RDMA CM ID associated with the channel. h](j)}(h``rdma_cm.cm_id``h]j )}(hj@h]h rdma_cm.cm_id}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj:ubj)}(hhh]h)}(h'RDMA CM ID associated with the channel.h]h'RDMA CM ID associated with the channel.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjubj)}(h-``cq`` IB completion queue for this channel. h](j)}(h``cq``h]j )}(hjyh]hcq}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjsubj)}(hhh]h)}(h%IB completion queue for this channel.h]h%IB completion queue for this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``cq_size`` Number of CQEs in **cq**. h](j)}(h ``cq_size``h]j )}(hjh]hcq_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hNumber of CQEs in **cq**.h](hNumber of CQEs in }(hjhhhNhNubj)}(h**cq**h]hcq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``zw_cqe`` Zero-length write CQE. h](j)}(h ``zw_cqe``h]j )}(hjh]hzw_cqe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hZero-length write CQE.h]hZero-length write CQE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``rcu`` RCU head. h](j)}(h``rcu``h]j )}(hj6h]hrcu}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj0ubj)}(hhh]h)}(h RCU head.h]h RCU head.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubj)}(h ``kref`` kref for this channel. h](j)}(h``kref``h]j )}(hjoh]hkref}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjiubj)}(hhh]h)}(hkref for this channel.h]hkref for this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hz``closed`` Completion object that will be signaled as soon as a new channel object with the same identity can be created. h](j)}(h ``closed``h]j )}(hjh]hclosed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjubj)}(hhh]h)}(hnCompletion object that will be signaled as soon as a new channel object with the same identity can be created.h]hnCompletion object that will be signaled as soon as a new channel object with the same identity can be created.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h#``rq_size`` IB receive queue size. h](j)}(h ``rq_size``h]j )}(hjh]hrq_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjubj)}(hhh]h)}(hIB receive queue size.h]hIB receive queue size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hC``max_rsp_size`` Maximum size of an RSP response message in bytes. h](j)}(h``max_rsp_size``h]j )}(hjh]h max_rsp_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjubj)}(hhh]h)}(h1Maximum size of an RSP response message in bytes.h]h1Maximum size of an RSP response message in bytes.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM hjubj)}(hE``sq_wr_avail`` number of work requests available in the send queue. h](j)}(h``sq_wr_avail``h]j )}(hjTh]h sq_wr_avail}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjNubj)}(hhh]h)}(h4number of work requests available in the send queue.h]h4number of work requests available in the send queue.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM hjubj)}(hK``sport`` pointer to the information of the HCA port used by this channel. h](j)}(h ``sport``h]j )}(hjh]hsport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h@pointer to the information of the HCA port used by this channel.h]h@pointer to the information of the HCA port used by this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``max_ti_iu_len`` maximum target-to-initiator information unit length. h](j)}(h``max_ti_iu_len``h]j )}(hjh]h max_ti_iu_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h4maximum target-to-initiator information unit length.h]h4maximum target-to-initiator information unit length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h|``req_lim`` request limit: maximum number of requests that may be sent by the initiator without having received a response. h](j)}(h ``req_lim``h]j )}(hjh]hreq_lim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(horequest limit: maximum number of requests that may be sent by the initiator without having received a response.h]horequest limit: maximum number of requests that may be sent by the initiator without having received a response.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``req_lim_delta`` Number of credits not yet sent back to the initiator. h](j)}(h``req_lim_delta``h]j )}(hj:h]h req_lim_delta}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj4ubj)}(hhh]h)}(h5Number of credits not yet sent back to the initiator.h]h5Number of credits not yet sent back to the initiator.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(hE``imm_data_offset`` Offset from start of SRP_CMD for immediate data. h](j)}(h``imm_data_offset``h]j )}(hjsh]himm_data_offset}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjmubj)}(hhh]h)}(h0Offset from start of SRP_CMD for immediate data.h]h0Offset from start of SRP_CMD for immediate data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``spinlock`` Protects free_list and state. h](j)}(h ``spinlock``h]j )}(hjh]hspinlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hProtects free_list and state.h]hProtects free_list and state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``state`` channel state. See also enum rdma_ch_state. h](j)}(h ``state``h]j )}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h+channel state. See also enum rdma_ch_state.h]h+channel state. See also enum rdma_ch_state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``rsp_buf_cache`` kmem_cache for **ioctx_ring**. h](j)}(h``rsp_buf_cache``h]j )}(hjh]h rsp_buf_cache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hkmem_cache for **ioctx_ring**.h](hkmem_cache for }(hj7hhhNhNubj)}(h**ioctx_ring**h]h ioctx_ring}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h``ioctx_ring`` Send ring. h](j)}(h``ioctx_ring``h]j )}(hjih]h ioctx_ring}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjcubj)}(hhh]h)}(h Send ring.h]h Send ring.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubj)}(h6``req_buf_cache`` kmem_cache for **ioctx_recv_ring**. h](j)}(h``req_buf_cache``h]j )}(hjh]h req_buf_cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h#kmem_cache for **ioctx_recv_ring**.h](hkmem_cache for }(hjhhhNhNubj)}(h**ioctx_recv_ring**h]hioctx_recv_ring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``ioctx_recv_ring`` Receive I/O context ring. h](j)}(h``ioctx_recv_ring``h]j )}(hjh]hioctx_recv_ring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hReceive I/O context ring.h]hReceive I/O context ring.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``list`` Node in srpt_nexus.ch_list. h](j)}(h``list``h]j )}(hj&h]hlist}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj ubj)}(hhh]h)}(hNode in srpt_nexus.ch_list.h]hNode in srpt_nexus.ch_list.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h``cmd_wait_list`` List of SCSI commands that arrived before the RTU event. This list contains struct srpt_ioctx elements and is protected against concurrent modification by the cm_id spinlock. h](j)}(h``cmd_wait_list``h]j )}(hj_h]h cmd_wait_list}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjYubj)}(hhh]h)}(hList of SCSI commands that arrived before the RTU event. This list contains struct srpt_ioctx elements and is protected against concurrent modification by the cm_id spinlock.h]hList of SCSI commands that arrived before the RTU event. This list contains struct srpt_ioctx elements and is protected against concurrent modification by the cm_id spinlock.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubj)}(h9``pkey`` P_Key of the IB partition for this SRP channel. h](j)}(h``pkey``h]j )}(hjh]hpkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjubj)}(hhh]h)}(h/P_Key of the IB partition for this SRP channel.h]h/P_Key of the IB partition for this SRP channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hI``using_rdma_cm`` Whether the RDMA/CM or IB/CM is used for this channel. h](j)}(h``using_rdma_cm``h]j )}(hjh]h using_rdma_cm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h6Whether the RDMA/CM or IB/CM is used for this channel.h]h6Whether the RDMA/CM or IB/CM is used for this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``processing_wait_list`` Whether or not cmd_wait_list is being processed. h](j)}(h``processing_wait_list``h]j )}(hj h]hprocessing_wait_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h0Whether or not cmd_wait_list is being processed.h]h0Whether or not cmd_wait_list is being processed.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h?``sess`` Session information associated with this SRP channel. h](j)}(h``sess``h]j )}(hjDh]hsess}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM!hj>ubj)}(hhh]h)}(h5Session information associated with this SRP channel.h]h5Session information associated with this SRP channel.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM!hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM!hjubj)}(h``sess_name`` Session name. h](j)}(h ``sess_name``h]j )}(hj}h]h sess_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM"hjwubj)}(hhh]h)}(h Session name.h]h Session name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h=``release_work`` Allows scheduling of srpt_release_channel().h](j)}(h``release_work``h]j )}(hjh]h release_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM"hjubj)}(hhh]h)}(h,Allows scheduling of srpt_release_channel().h]h,Allows scheduling of srpt_release_channel().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_nexus (C struct) c.srpt_nexushNtauh1jhjhhhNhNubj)}(hhh](j)}(h srpt_nexush]j")}(hstruct srpt_nexush](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj hhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM)ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhjhM)ubj)}(h srpt_nexush]jN)}(hj h]h srpt_nexus}(hj0hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhM)ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM)hjhhubj)}(hhh]h)}(h I_T nexush]h I_T nexus}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMNhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM)ubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_nexus { struct rcu_head rcu; struct list_head entry; struct list_head ch_list; u8 i_port_id[16]; u8 t_port_id[16]; }; **Members** ``rcu`` RCU head for this data structure. ``entry`` srpt_port.nexus_list list node. ``ch_list`` struct srpt_rdma_ch list. Protected by srpt_port.mutex. ``i_port_id`` 128-bit initiator port identifier copied from SRP_LOGIN_REQ. ``t_port_id`` 128-bit target port identifier copied from SRP_LOGIN_REQ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMRhjnubjy)}(hstruct srpt_nexus { struct rcu_head rcu; struct list_head entry; struct list_head ch_list; u8 i_port_id[16]; u8 t_port_id[16]; };h]hstruct srpt_nexus { struct rcu_head rcu; struct list_head entry; struct list_head ch_list; u8 i_port_id[16]; u8 t_port_id[16]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMThjnubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM\hjnubj)}(hhh](j)}(h*``rcu`` RCU head for this data structure. h](j)}(h``rcu``h]j )}(hjh]hrcu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMPhjubj)}(hhh]h)}(h!RCU head for this data structure.h]h!RCU head for this data structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h*``entry`` srpt_port.nexus_list list node. h](j)}(h ``entry``h]j )}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMQhjubj)}(hhh]h)}(hsrpt_port.nexus_list list node.h]hsrpt_port.nexus_list list node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMQhjubj)}(hD``ch_list`` struct srpt_rdma_ch list. Protected by srpt_port.mutex. h](j)}(h ``ch_list``h]j )}(hj1h]hch_list}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMRhj+ubj)}(hhh]h)}(h7struct srpt_rdma_ch list. Protected by srpt_port.mutex.h]h7struct srpt_rdma_ch list. Protected by srpt_port.mutex.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMRhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMRhjubj)}(hK``i_port_id`` 128-bit initiator port identifier copied from SRP_LOGIN_REQ. h](j)}(h ``i_port_id``h]j )}(hjjh]h i_port_id}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMShjdubj)}(hhh]h)}(h<128-bit initiator port identifier copied from SRP_LOGIN_REQ.h]h<128-bit initiator port identifier copied from SRP_LOGIN_REQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(hG``t_port_id`` 128-bit target port identifier copied from SRP_LOGIN_REQ.h](j)}(h ``t_port_id``h]j )}(hjh]h t_port_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMShjubj)}(hhh]h)}(h9128-bit target port identifier copied from SRP_LOGIN_REQ.h]h9128-bit target port identifier copied from SRP_LOGIN_REQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_port_attrib (C struct)c.srpt_port_attribhNtauh1jhjhhhNhNubj)}(hhh](j)}(hsrpt_port_attribh]j")}(hstruct srpt_port_attribh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMZubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hMZubj)}(hsrpt_port_attribh]jN)}(hjh]hsrpt_port_attrib}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMZubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hMZubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMZhjhhubj)}(hhh]h)}(hattributes for SRPT porth]hattributes for SRPT port}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM^hj<hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMZubeh}(h]h ](jestructeh"]h$]h&]jjejjWjjWjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_port_attrib { u32 srp_max_rdma_size; u32 srp_max_rsp_size; u32 srp_sq_size; bool use_srq; }; **Members** ``srp_max_rdma_size`` Maximum size of SRP RDMA transfers for new connections. ``srp_max_rsp_size`` Maximum size of SRP response messages in bytes. ``srp_sq_size`` Shared receive queue (SRQ) size. ``use_srq`` Whether or not to use SRQ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhj[ubjy)}(hxstruct srpt_port_attrib { u32 srp_max_rdma_size; u32 srp_max_rsp_size; u32 srp_sq_size; bool use_srq; };h]hxstruct srpt_port_attrib { u32 srp_max_rdma_size; u32 srp_max_rsp_size; u32 srp_sq_size; bool use_srq; };}hj|sbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMdhj[ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMkhj[ubj)}(hhh](j)}(hN``srp_max_rdma_size`` Maximum size of SRP RDMA transfers for new connections. h](j)}(h``srp_max_rdma_size``h]j )}(hjh]hsrp_max_rdma_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM`hjubj)}(hhh]h)}(h7Maximum size of SRP RDMA transfers for new connections.h]h7Maximum size of SRP RDMA transfers for new connections.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubj)}(hE``srp_max_rsp_size`` Maximum size of SRP response messages in bytes. h](j)}(h``srp_max_rsp_size``h]j )}(hjh]hsrp_max_rsp_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMahjubj)}(hhh]h)}(h/Maximum size of SRP response messages in bytes.h]h/Maximum size of SRP response messages in bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(h1``srp_sq_size`` Shared receive queue (SRQ) size. h](j)}(h``srp_sq_size``h]j )}(hjh]h srp_sq_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhjubj)}(hhh]h)}(h Shared receive queue (SRQ) size.h]h Shared receive queue (SRQ) size.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMbhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMbhjubj)}(h&``use_srq`` Whether or not to use SRQ.h](j)}(h ``use_srq``h]j )}(hjWh]huse_srq}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhjQubj)}(hhh]h)}(hWhether or not to use SRQ.h]hWhether or not to use SRQ.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMchjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMbhjubeh}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_tpg (C struct) c.srpt_tpghNtauh1jhjhhhNhNubj)}(hhh](j)}(hsrpt_tpgh]j")}(hstruct srpt_tpgh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMiubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMiubj)}(hsrpt_tpgh]jN)}(hjh]hsrpt_tpg}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMiubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMiubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMihjhhubj)}(hhh]h)}(h0information about a single "target portal group"h]h4information about a single “target portal group”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMlhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMiubeh}(h]h ](jestructeh"]h$]h&]jjejj jj jjjuh1jhhhjhNhNubj)}(hX0**Definition**:: struct srpt_tpg { struct list_head entry; struct srpt_port_id *sport_id; struct se_portal_group tpg; }; **Members** ``entry`` Entry in **sport_id->tpg_list**. ``sport_id`` Port name this TPG is associated with. ``tpg`` LIO TPG data structure.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphjubjy)}(hstruct srpt_tpg { struct list_head entry; struct srpt_port_id *sport_id; struct se_portal_group tpg; };h]hstruct srpt_tpg { struct list_head entry; struct srpt_port_id *sport_id; struct se_portal_group tpg; };}hj0sbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMrhjubh)}(h **Members**h]j)}(hjAh]hMembers}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMxhjubj)}(hhh](j)}(h+``entry`` Entry in **sport_id->tpg_list**. h](j)}(h ``entry``h]j )}(hj`h]hentry}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMnhjZubj)}(hhh]h)}(h Entry in **sport_id->tpg_list**.h](h Entry in }(hjyhhhNhNubj)}(h**sport_id->tpg_list**h]hsport_id->tpg_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMnhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMnhjWubj)}(h4``sport_id`` Port name this TPG is associated with. h](j)}(h ``sport_id``h]j )}(hjh]hsport_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMohjubj)}(hhh]h)}(h&Port name this TPG is associated with.h]h&Port name this TPG is associated with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjWubj)}(h``tpg`` LIO TPG data structure.h](j)}(h``tpg``h]j )}(hjh]htpg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMohjubj)}(hhh]h)}(hLIO TPG data structure.h]hLIO TPG data structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjWubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMshjhhubh)}(h}Zero or more target portal groups are associated with each port name (srpt_port_id). With each TPG an ACL list is associated.h]h}Zero or more target portal groups are associated with each port name (srpt_port_id). With each TPG an ACL list is associated.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_port_id (C struct)c.srpt_port_idhNtauh1jhjhhhNhNubj)}(hhh](j)}(h srpt_port_idh]j")}(hstruct srpt_port_idh](j()}(hj+h]hstruct}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjahhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMvubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjahhhjrhMvubj)}(h srpt_port_idh]jN)}(hj_h]h srpt_port_id}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjrhMvubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj]hhhjrhMvubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhjrhMvhjZhhubj)}(hhh]h)}(hLIO RDMA port informationh]hLIO RDMA port information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM{hjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjrhMvubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_port_id { struct mutex mutex; struct list_head tpg_list; struct se_wwn wwn; char name[64]; }; **Members** ``mutex`` Protects **tpg_list** changes. ``tpg_list`` TPGs associated with the RDMA port name. ``wwn`` WWN associated with the RDMA port name. ``name`` ASCII representation of the port name.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubjy)}(hstruct srpt_port_id { struct mutex mutex; struct list_head tpg_list; struct se_wwn wwn; char name[64]; };h]hstruct srpt_port_id { struct mutex mutex; struct list_head tpg_list; struct se_wwn wwn; char name[64]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh](j)}(h)``mutex`` Protects **tpg_list** changes. h](j)}(h ``mutex``h]j )}(hjh]hmutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM}hjubj)}(hhh]h)}(hProtects **tpg_list** changes.h](h Protects }(hj-hhhNhNubj)}(h **tpg_list**h]htpg_list}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh changes.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hM}hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hM}hj ubj)}(h6``tpg_list`` TPGs associated with the RDMA port name. h](j)}(h ``tpg_list``h]j )}(hj_h]htpg_list}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM~hjYubj)}(hhh]h)}(h(TPGs associated with the RDMA port name.h]h(TPGs associated with the RDMA port name.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM~hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM~hj ubj)}(h0``wwn`` WWN associated with the RDMA port name. h](j)}(h``wwn``h]j )}(hjh]hwwn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h'WWN associated with the RDMA port name.h]h'WWN associated with the RDMA port name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h/``name`` ASCII representation of the port name.h](j)}(h``name``h]j )}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h&ASCII representation of the port name.h]h&ASCII representation of the port name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjhhubh)}(hMultiple sysfs directories can be associated with a single RDMA port. This data structure represents a single (port, name) pair.h]hMultiple sysfs directories can be associated with a single RDMA port. This data structure represents a single (port, name) pair.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_port (C struct) c.srpt_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(h srpt_porth]j")}(hstruct srpt_porth](j()}(hj+h]hstruct}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNhhhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNhhhj_hMubj)}(h srpt_porth]jN)}(hjLh]h srpt_port}(hjrhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjJhhhj_hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhj_hMhjGhhubj)}(hhh]h)}(hSRPT RDMA port informationh]hSRPT RDMA port information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj_hMubeh}(h]h ](jestructeh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct srpt_port { struct srpt_device *sdev; struct ib_mad_agent *mad_agent; bool enabled; u8 port; u32 sm_lid; u32 lid; union ib_gid gid; struct work_struct work; char guid_name[64]; struct srpt_port_id *guid_id; char gid_name[64]; struct srpt_port_id *gid_id; struct srpt_port_attrib port_attrib; atomic_t refcount; struct completion *freed_channels; struct mutex mutex; struct list_head nexus_list; }; **Members** ``sdev`` backpointer to the HCA information. ``mad_agent`` per-port management datagram processing information. ``enabled`` Whether or not this target port is enabled. ``port`` one-based port number. ``sm_lid`` cached value of the port's sm_lid. ``lid`` cached value of the port's lid. ``gid`` cached value of the port's gid. ``work`` work structure for refreshing the aforementioned cached values. ``guid_name`` port name in GUID format. ``guid_id`` LIO target port information for the port name in GUID format. ``gid_name`` port name in GID format. ``gid_id`` LIO target port information for the port name in GID format. ``port_attrib`` Port attributes that can be accessed through configfs. ``refcount`` Number of objects associated with this port. ``freed_channels`` Completion that will be signaled once **refcount** becomes 0. ``mutex`` Protects nexus_list. ``nexus_list`` Nexus list. See also srpt_nexus.entry.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubjy)}(hXstruct srpt_port { struct srpt_device *sdev; struct ib_mad_agent *mad_agent; bool enabled; u8 port; u32 sm_lid; u32 lid; union ib_gid gid; struct work_struct work; char guid_name[64]; struct srpt_port_id *guid_id; char gid_name[64]; struct srpt_port_id *gid_id; struct srpt_port_attrib port_attrib; atomic_t refcount; struct completion *freed_channels; struct mutex mutex; struct list_head nexus_list; };h]hXstruct srpt_port { struct srpt_device *sdev; struct ib_mad_agent *mad_agent; bool enabled; u8 port; u32 sm_lid; u32 lid; union ib_gid gid; struct work_struct work; char guid_name[64]; struct srpt_port_id *guid_id; char gid_name[64]; struct srpt_port_id *gid_id; struct srpt_port_attrib port_attrib; atomic_t refcount; struct completion *freed_channels; struct mutex mutex; struct list_head nexus_list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jyhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh](j)}(h-``sdev`` backpointer to the HCA information. h](j)}(h``sdev``h]j )}(hjh]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h#backpointer to the HCA information.h]h#backpointer to the HCA information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``mad_agent`` per-port management datagram processing information. h](j)}(h ``mad_agent``h]j )}(hj:h]h mad_agent}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj4ubj)}(hhh]h)}(h4per-port management datagram processing information.h]h4per-port management datagram processing information.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h8``enabled`` Whether or not this target port is enabled. h](j)}(h ``enabled``h]j )}(hjsh]henabled}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjmubj)}(hhh]h)}(h+Whether or not this target port is enabled.h]h+Whether or not this target port is enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``port`` one-based port number. h](j)}(h``port``h]j )}(hjh]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hone-based port number.h]hone-based port number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``sm_lid`` cached value of the port's sm_lid. h](j)}(h ``sm_lid``h]j )}(hjh]hsm_lid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h"cached value of the port's sm_lid.h]h$cached value of the port’s sm_lid.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``lid`` cached value of the port's lid. h](j)}(h``lid``h]j )}(hjh]hlid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hcached value of the port's lid.h]h!cached value of the port’s lid.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h(``gid`` cached value of the port's gid. h](j)}(h``gid``h]j )}(hjWh]hgid}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjQubj)}(hhh]h)}(hcached value of the port's gid.h]h!cached value of the port’s gid.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(hI``work`` work structure for refreshing the aforementioned cached values. h](j)}(h``work``h]j )}(hjh]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h?work structure for refreshing the aforementioned cached values.h]h?work structure for refreshing the aforementioned cached values.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``guid_name`` port name in GUID format. h](j)}(h ``guid_name``h]j )}(hjh]h guid_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(hport name in GUID format.h]hport name in GUID format.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``guid_id`` LIO target port information for the port name in GUID format. h](j)}(h ``guid_id``h]j )}(hjh]hguid_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjubj)}(hhh]h)}(h=LIO target port information for the port name in GUID format.h]h=LIO target port information for the port name in GUID format.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``gid_name`` port name in GID format. h](j)}(h ``gid_name``h]j )}(hj;h]hgid_name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj5ubj)}(hhh]h)}(hport name in GID format.h]hport name in GID format.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubj)}(hH``gid_id`` LIO target port information for the port name in GID format. h](j)}(h ``gid_id``h]j )}(hjth]hgid_id}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhk/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjnubj)}(hhh]h)}(hubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj:ubj)}(hhh]h)}(h'Description of the event that occurred.h]h'Description of the event that occurred.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h ``void *ptr`` SRPT RDMA channel.h](j)}(h ``void *ptr``h]j )}(hjyh]h void *ptr}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjsubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_set_ioc (C function)c.srpt_set_iochNtauh1jhjhhhNhNubj)}(hhh](j)}(h2void srpt_set_ioc (u8 *c_list, u32 slot, u8 value)h]j")}(h1void srpt_set_ioc(u8 *c_list, u32 slot, u8 value)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM2ubj)}(h srpt_set_ioch]jN)}(h srpt_set_ioch]h srpt_set_ioc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM2ubj)}(h (u8 *c_list, u32 slot, u8 value)h](j)}(h u8 *c_listh](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_set_iocasbuh1hhj ubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(hc_listh]hc_list}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 sloth](h)}(hhh]jN)}(hu32h]hu32}(hjjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjgubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjlmodnameN classnameNjkjn)}jq]j/c.srpt_set_iocasbuh1hhjcubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubjN)}(hsloth]hslot}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 valueh](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j/c.srpt_set_iocasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM2ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM2ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM2hjhhubj)}(hhh]h)}(h!initialize a IOUnitInfo structureh]h!initialize a IOUnitInfo structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM2ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``u8 *c_list`` controller list. ``u32 slot`` one-based slot number. ``u8 value`` four-bit value. **Description** Copies the lowest four bits of value in element slot of the array of four bit elements called c_list (controller list). The index slot is one-based.h](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM6hj$ubj)}(hhh](j)}(h ``u8 *c_list`` controller list. h](j)}(h``u8 *c_list``h]j )}(hjIh]h u8 *c_list}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3hjCubj)}(hhh]h)}(hcontroller list.h]hcontroller list.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM3hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM3hj@ubj)}(h$``u32 slot`` one-based slot number. h](j)}(h ``u32 slot``h]j )}(hjh]hu32 slot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4hj|ubj)}(hhh]h)}(hone-based slot number.h]hone-based slot number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj@ubj)}(h``u8 value`` four-bit value. h](j)}(h ``u8 value``h]j )}(hjh]hu8 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hjubj)}(hhh]h)}(hfour-bit value.h]hfour-bit value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM7hj$ubh)}(hCopies the lowest four bits of value in element slot of the array of four bit elements called c_list (controller list). The index slot is one-based.h]hCopies the lowest four bits of value in element slot of the array of four bit elements called c_list (controller list). The index slot is one-based.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM6hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%srpt_get_class_port_info (C function)c.srpt_get_class_port_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(h5void srpt_get_class_port_info (struct ib_dm_mad *mad)h]j")}(h4void srpt_get_class_port_info(struct ib_dm_mad *mad)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMJubj:)}(h h]h }(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7hhhjIhMJubj)}(hsrpt_get_class_port_infoh]jN)}(hsrpt_get_class_port_infoh]hsrpt_get_class_port_info}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjIhMJubj)}(h(struct ib_dm_mad *mad)h]j)}(hstruct ib_dm_mad *madh](j()}(hj+h]hstruct}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjtubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubh)}(hhh]jN)}(h ib_dm_madh]h ib_dm_mad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj^sbc.srpt_get_class_port_infoasbuh1hhjtubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjN)}(hmadh]hmad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubah}(h]h ]h"]h$]h&]jjuh1jhj7hhhjIhMJubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj3hhhjIhMJubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjIhMJhj0hhubj)}(hhh]h)}(h+copy ClassPortInfo to a management datagramh]h+copy ClassPortInfo to a management datagram}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMJubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_CLASS_PORT_INFO. **Description** See also section 16.3.3.1 ClassPortInfo in the InfiniBand Architecture Specification.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMNhjubj)}(hhh]j)}(h]``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_CLASS_PORT_INFO. h](j)}(h``struct ib_dm_mad *mad``h]j )}(hj<h]hstruct ib_dm_mad *mad}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMKhj6ubj)}(hhh]h)}(hBDatagram that will be sent as response to DM_ATTR_CLASS_PORT_INFO.h]hBDatagram that will be sent as response to DM_ATTR_CLASS_PORT_INFO.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMMhjubh)}(hUSee also section 16.3.3.1 ClassPortInfo in the InfiniBand Architecture Specification.h]hUSee also section 16.3.3.1 ClassPortInfo in the InfiniBand Architecture Specification.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_get_iou (C function)c.srpt_get_iouhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)void srpt_get_iou (struct ib_dm_mad *mad)h]j")}(h(void srpt_get_iou(struct ib_dm_mad *mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM^ubj)}(h srpt_get_iouh]jN)}(h srpt_get_iouh]h srpt_get_iou}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM^ubj)}(h(struct ib_dm_mad *mad)h]j)}(hstruct ib_dm_mad *madh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_dm_madh]h ib_dm_mad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_get_iouasbuh1hhjubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmadh]hmad}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM^ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM^ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM^hjhhubj)}(hhh]h)}(h)write IOUnitInfo to a management datagramh]h)write IOUnitInfo to a management datagram}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^hjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_IOU_INFO. **Description** See also section 16.3.3.3 IOUnitInfo in the InfiniBand Architecture Specification. See also section B.7, table B.6 in the SRP r16a document.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMbhjubj)}(hhh]j)}(hV``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_IOU_INFO. h](j)}(h``struct ib_dm_mad *mad``h]j )}(hjh]hstruct ib_dm_mad *mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_hjubj)}(hhh]h)}(h;Datagram that will be sent as response to DM_ATTR_IOU_INFO.h]h;Datagram that will be sent as response to DM_ATTR_IOU_INFO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMahjubh)}(hSee also section 16.3.3.3 IOUnitInfo in the InfiniBand Architecture Specification. See also section B.7, table B.6 in the SRP r16a document.h]hSee also section 16.3.3.3 IOUnitInfo in the InfiniBand Architecture Specification. See also section B.7, table B.6 in the SRP r16a document.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_get_ioc (C function)c.srpt_get_iochNtauh1jhjhhhNhNubj)}(hhh](j)}(hLvoid srpt_get_ioc (struct srpt_port *sport, u32 slot, struct ib_dm_mad *mad)h]j")}(hKvoid srpt_get_ioc(struct srpt_port *sport, u32 slot, struct ib_dm_mad *mad)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMwubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9hhhjKhMwubj)}(h srpt_get_ioch]jN)}(h srpt_get_ioch]h srpt_get_ioc}(hj^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjKhMwubj)}(h:(struct srpt_port *sport, u32 slot, struct ib_dm_mad *mad)h](j)}(hstruct srpt_port *sporth](j()}(hj+h]hstruct}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjvubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubh)}(hhh]jN)}(h srpt_porth]h srpt_port}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgj`sbc.srpt_get_iocasbuh1hhjvubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjN)}(hsporth]hsport}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubj)}(hu32 sloth](h)}(hhh]jN)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_get_iocasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hsloth]hslot}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubj)}(hstruct ib_dm_mad *madh](j()}(hj+h]hstruct}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj0ubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubh)}(hhh]jN)}(h ib_dm_madh]h ib_dm_mad}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjOubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjTmodnameN classnameNjkjn)}jq]jc.srpt_get_iocasbuh1hhj0ubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjN)}(hmadh]hmad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhMwubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj5hhhjKhMwubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjKhMwhj2hhubj)}(hhh]h)}(h2write IOControllerprofile to a management datagramh]h2write IOControllerprofile to a management datagram}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMwhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhMwubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_port *sport`` HCA port through which the MAD has been received. ``u32 slot`` Slot number specified in DM_ATTR_IOC_PROFILE query. ``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_IOC_PROFILE. **Description** See also section 16.3.3.4 IOControllerProfile in the InfiniBand Architecture Specification. See also section B.7, table B.7 in the SRP r16a document.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM{hjubj)}(hhh](j)}(hN``struct srpt_port *sport`` HCA port through which the MAD has been received. h](j)}(h``struct srpt_port *sport``h]j )}(hjh]hstruct srpt_port *sport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMxhjubj)}(hhh]h)}(h1HCA port through which the MAD has been received.h]h1HCA port through which the MAD has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMxhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMxhjubj)}(hA``u32 slot`` Slot number specified in DM_ATTR_IOC_PROFILE query. h](j)}(h ``u32 slot``h]j )}(hj/h]hu32 slot}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMyhj)ubj)}(hhh]h)}(h3Slot number specified in DM_ATTR_IOC_PROFILE query.h]h3Slot number specified in DM_ATTR_IOC_PROFILE query.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMyhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMyhjubj)}(hY``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_IOC_PROFILE. h](j)}(h``struct ib_dm_mad *mad``h]j )}(hjhh]hstruct ib_dm_mad *mad}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMzhjbubj)}(hhh]h)}(h>Datagram that will be sent as response to DM_ATTR_IOC_PROFILE.h]h>Datagram that will be sent as response to DM_ATTR_IOC_PROFILE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMzhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMzhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM|hjubh)}(hSee also section 16.3.3.4 IOControllerProfile in the InfiniBand Architecture Specification. See also section B.7, table B.7 in the SRP r16a document.h]hSee also section 16.3.3.4 IOControllerProfile in the InfiniBand Architecture Specification. See also section B.7, table B.7 in the SRP r16a document.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!srpt_get_svc_entries (C function)c.srpt_get_svc_entrieshNtauh1jhjhhhNhNubj)}(hhh](j)}(hWvoid srpt_get_svc_entries (u64 ioc_guid, u16 slot, u8 hi, u8 lo, struct ib_dm_mad *mad)h]j")}(hVvoid srpt_get_svc_entries(u64 ioc_guid, u16 slot, u8 hi, u8 lo, struct ib_dm_mad *mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hsrpt_get_svc_entriesh]jN)}(hsrpt_get_svc_entriesh]hsrpt_get_svc_entries}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h=(u64 ioc_guid, u16 slot, u8 hi, u8 lo, struct ib_dm_mad *mad)h](j)}(h u64 ioc_guidh](h)}(hhh]jN)}(hu64h]hu64}(hj(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj%ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj*modnameN classnameNjkjn)}jq]jt)}jgj sbc.srpt_get_svc_entriesasbuh1hhj!ubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubjN)}(hioc_guidh]hioc_guid}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 sloth](h)}(hhh]jN)}(hu16h]hu16}(hjrhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjoubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjtmodnameN classnameNjkjn)}jq]jDc.srpt_get_svc_entriesasbuh1hhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubjN)}(hsloth]hslot}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 hih](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jDc.srpt_get_svc_entriesasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hhih]hhi}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 loh](h)}(hhh]jN)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jDc.srpt_get_svc_entriesasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hloh]hlo}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_dm_mad *madh](j()}(hj+h]hstruct}(hjGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubh)}(hhh]jN)}(h ib_dm_madh]h ib_dm_mad}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjgmodnameN classnameNjkjn)}jq]jDc.srpt_get_svc_entriesasbuh1hhjCubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjN)}(hmadh]hmad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h-write ServiceEntries to a management datagramh]h-write ServiceEntries to a management datagram}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``u64 ioc_guid`` I/O controller GUID to use in reply. ``u16 slot`` I/O controller number. ``u8 hi`` End of the range of service entries to be specified in the reply. ``u8 lo`` Start of the range of service entries to be specified in the reply.. ``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_SVC_ENTRIES. **Description** See also section 16.3.3.5 ServiceEntries in the InfiniBand Architecture Specification. See also section B.7, table B.8 in the SRP r16a document.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(h6``u64 ioc_guid`` I/O controller GUID to use in reply. h](j)}(h``u64 ioc_guid``h]j )}(hj h]h u64 ioc_guid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h$I/O controller GUID to use in reply.h]h$I/O controller GUID to use in reply.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``u16 slot`` I/O controller number. h](j)}(h ``u16 slot``h]j )}(hjBh]hu16 slot}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj<ubj)}(hhh]h)}(hI/O controller number.h]hI/O controller number.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(hL``u8 hi`` End of the range of service entries to be specified in the reply. h](j)}(h ``u8 hi``h]j )}(hj{h]hu8 hi}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjuubj)}(hhh]h)}(hAEnd of the range of service entries to be specified in the reply.h]hAEnd of the range of service entries to be specified in the reply.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``u8 lo`` Start of the range of service entries to be specified in the reply.. h](j)}(h ``u8 lo``h]j )}(hjh]hu8 lo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(hDStart of the range of service entries to be specified in the reply..h]hDStart of the range of service entries to be specified in the reply..}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hY``struct ib_dm_mad *mad`` Datagram that will be sent as response to DM_ATTR_SVC_ENTRIES. h](j)}(h``struct ib_dm_mad *mad``h]j )}(hjh]hstruct ib_dm_mad *mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h>Datagram that will be sent as response to DM_ATTR_SVC_ENTRIES.h]h>Datagram that will be sent as response to DM_ATTR_SVC_ENTRIES.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubh)}(hSee also section 16.3.3.5 ServiceEntries in the InfiniBand Architecture Specification. See also section B.7, table B.8 in the SRP r16a document.h]hSee also section 16.3.3.5 ServiceEntries in the InfiniBand Architecture Specification. See also section B.7, table B.8 in the SRP r16a document.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!srpt_mgmt_method_get (C function)c.srpt_mgmt_method_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(hbvoid srpt_mgmt_method_get (struct srpt_port *sp, struct ib_mad *rq_mad, struct ib_dm_mad *rsp_mad)h]j")}(havoid srpt_mgmt_method_get(struct srpt_port *sp, struct ib_mad *rq_mad, struct ib_dm_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjihhhj{hMubj)}(hsrpt_mgmt_method_geth]jN)}(hsrpt_mgmt_method_geth]hsrpt_mgmt_method_get}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhj{hMubj)}(hH(struct srpt_port *sp, struct ib_mad *rq_mad, struct ib_dm_mad *rsp_mad)h](j)}(hstruct srpt_port *sph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_porth]h srpt_port}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_mgmt_method_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsph]hsp}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_mad *rq_madh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_madh]hib_mad}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj<modnameN classnameNjkjn)}jq]jc.srpt_mgmt_method_getasbuh1hhjubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hrq_madh]hrq_mad}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_dm_mad *rsp_madh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h ib_dm_madh]h ib_dm_mad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_mgmt_method_getasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjehhhj{hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1jhj{hMhjbhhubj)}(hhh]h)}(h&process a received management datagramh]h&process a received management datagram}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj%jj%jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_port *sp`` HCA port through which the MAD has been received. ``struct ib_mad *rq_mad`` received MAD. ``struct ib_dm_mad *rsp_mad`` response MAD.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj)ubj)}(hhh](j)}(hK``struct srpt_port *sp`` HCA port through which the MAD has been received. h](j)}(h``struct srpt_port *sp``h]j )}(hjNh]hstruct srpt_port *sp}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjHubj)}(hhh]h)}(h1HCA port through which the MAD has been received.h]h1HCA port through which the MAD has been received.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubj)}(h(``struct ib_mad *rq_mad`` received MAD. h](j)}(h``struct ib_mad *rq_mad``h]j )}(hjh]hstruct ib_mad *rq_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h received MAD.h]h received MAD.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjEubj)}(h+``struct ib_dm_mad *rsp_mad`` response MAD.h](j)}(h``struct ib_dm_mad *rsp_mad``h]j )}(hjh]hstruct ib_dm_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h response MAD.h]h response MAD.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"srpt_mad_send_handler (C function)c.srpt_mad_send_handlerhNtauh1jhjhhhNhNubj)}(hhh](j)}(hZvoid srpt_mad_send_handler (struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h]j")}(hYvoid srpt_mad_send_handler(struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj(hMubj)}(hsrpt_mad_send_handlerh]jN)}(hsrpt_mad_send_handlerh]hsrpt_mad_send_handler}(hj;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj(hMubj)}(h?(struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h](j)}(hstruct ib_mad_agent *mad_agenth](j()}(hj+h]hstruct}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjSubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubh)}(hhh]jN)}(h ib_mad_agenth]h ib_mad_agent}(hjuhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjrubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjwmodnameN classnameNjkjn)}jq]jt)}jgj=sbc.srpt_mad_send_handlerasbuh1hhjSubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjN)}(h mad_agenth]h mad_agent}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hstruct ib_mad_send_wc *mad_wch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_mad_send_wch]hib_mad_send_wc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_mad_send_handlerasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hmad_wch]hmad_wc}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj(hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhjhhubj)}(hhh]h)}(hMAD send completion callbackh]hMAD send completion callback}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjbjjbjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_mad_agent *mad_agent`` Return value of ib_register_mad_agent(). ``struct ib_mad_send_wc *mad_wc`` Work completion reporting that the MAD has been sent.h](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjfubj)}(hhh](j)}(hL``struct ib_mad_agent *mad_agent`` Return value of ib_register_mad_agent(). h](j)}(h"``struct ib_mad_agent *mad_agent``h]j )}(hjh]hstruct ib_mad_agent *mad_agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h(Return value of ib_register_mad_agent().h]h(Return value of ib_register_mad_agent().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hW``struct ib_mad_send_wc *mad_wc`` Work completion reporting that the MAD has been sent.h](j)}(h!``struct ib_mad_send_wc *mad_wc``h]j )}(hjh]hstruct ib_mad_send_wc *mad_wc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]h)}(h5Work completion reporting that the MAD has been sent.h]h5Work completion reporting that the MAD has been sent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"srpt_mad_recv_handler (C function)c.srpt_mad_recv_handlerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h|void srpt_mad_recv_handler (struct ib_mad_agent *mad_agent, struct ib_mad_send_buf *send_buf, struct ib_mad_recv_wc *mad_wc)h]j")}(h{void srpt_mad_recv_handler(struct ib_mad_agent *mad_agent, struct ib_mad_send_buf *send_buf, struct ib_mad_recv_wc *mad_wc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj,hMubj)}(hsrpt_mad_recv_handlerh]jN)}(hsrpt_mad_recv_handlerh]hsrpt_mad_recv_handler}(hj?hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hMubj)}(ha(struct ib_mad_agent *mad_agent, struct ib_mad_send_buf *send_buf, struct ib_mad_recv_wc *mad_wc)h](j)}(hstruct ib_mad_agent *mad_agenth](j()}(hj+h]hstruct}(hj[hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjWubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubh)}(hhh]jN)}(h ib_mad_agenth]h ib_mad_agent}(hjyhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjvubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj{modnameN classnameNjkjn)}jq]jt)}jgjAsbc.srpt_mad_recv_handlerasbuh1hhjWubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjN)}(h mad_agenth]h mad_agent}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h struct ib_mad_send_buf *send_bufh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hib_mad_send_bufh]hib_mad_send_buf}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_mad_recv_handlerasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsend_bufh]hsend_buf}(hj$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hstruct ib_mad_recv_wc *mad_wch](j()}(hj+h]hstruct}(hj=hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj9ubj:)}(h h]h }(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubh)}(hhh]jN)}(hib_mad_recv_wch]hib_mad_recv_wc}(hj[hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj]modnameN classnameNjkjn)}jq]jc.srpt_mad_recv_handlerasbuh1hhj9ubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjN)}(hmad_wch]hmad_wc}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj,hMhjhhubj)}(hhh]h)}(hMAD reception callback functionh]hMAD reception callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_mad_agent *mad_agent`` Return value of ib_register_mad_agent(). ``struct ib_mad_send_buf *send_buf`` Not used. ``struct ib_mad_recv_wc *mad_wc`` Work completion reporting that a MAD has been received.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(hL``struct ib_mad_agent *mad_agent`` Return value of ib_register_mad_agent(). h](j)}(h"``struct ib_mad_agent *mad_agent``h]j )}(hjh]hstruct ib_mad_agent *mad_agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h(Return value of ib_register_mad_agent().h]h(Return value of ib_register_mad_agent().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``struct ib_mad_send_buf *send_buf`` Not used. h](j)}(h$``struct ib_mad_send_buf *send_buf``h]j )}(hj8h]h struct ib_mad_send_buf *send_buf}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj2ubj)}(hhh]h)}(h Not used.h]h Not used.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubj)}(hY``struct ib_mad_recv_wc *mad_wc`` Work completion reporting that a MAD has been received.h](j)}(h!``struct ib_mad_recv_wc *mad_wc``h]j )}(hjqh]hstruct ib_mad_recv_wc *mad_wc}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjkubj)}(hhh]h)}(h7Work completion reporting that a MAD has been received.h]h7Work completion reporting that a MAD has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_refresh_port (C function)c.srpt_refresh_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(h/int srpt_refresh_port (struct srpt_port *sport)h]j")}(h.int srpt_refresh_port(struct srpt_port *sport)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM_ubj)}(hsrpt_refresh_porth]jN)}(hsrpt_refresh_porth]hsrpt_refresh_port}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM_ubj)}(h(struct srpt_port *sport)h]j)}(hstruct srpt_port *sporth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_porth]h srpt_port}(hj&hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj(modnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_refresh_portasbuh1hhjubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsporth]hsport}(hjahhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM_ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM_ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM_hjhhubj)}(hhh]h)}(hconfigure a HCA porth]hconfigure a HCA port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM_ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hXH**Parameters** ``struct srpt_port *sport`` SRPT HCA port. **Description** Enable InfiniBand management datagram processing, update the cached sm_lid, lid and gid values, and register a callback function for processing MADs on the specified port. **Note** It is safe to call this function more than once for the same port.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMchjubj)}(hhh]j)}(h+``struct srpt_port *sport`` SRPT HCA port. h](j)}(h``struct srpt_port *sport``h]j )}(hjh]hstruct srpt_port *sport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM`hjubj)}(hhh]h)}(hSRPT HCA port.h]hSRPT HCA port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMbhjubh)}(hEnable InfiniBand management datagram processing, update the cached sm_lid, lid and gid values, and register a callback function for processing MADs on the specified port.h]hEnable InfiniBand management datagram processing, update the cached sm_lid, lid and gid values, and register a callback function for processing MADs on the specified port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMahjubh)}(h**Note**h]j)}(hj.h]hNote}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMehjubh)}(hBIt is safe to call this function more than once for the same port.h]hBIt is safe to call this function more than once for the same port.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&srpt_unregister_mad_agent (C function)c.srpt_unregister_mad_agenthNtauh1jhjhhhNhNubj)}(hhh](j)}(hGvoid srpt_unregister_mad_agent (struct srpt_device *sdev, int port_cnt)h]j")}(hFvoid srpt_unregister_mad_agent(struct srpt_device *sdev, int port_cnt)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjohhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjohhhjhMubj)}(hsrpt_unregister_mad_agenth]jN)}(hsrpt_unregister_mad_agenth]hsrpt_unregister_mad_agent}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhMubj)}(h((struct srpt_device *sdev, int port_cnt)h](j)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_unregister_mad_agentasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsdevh]hsdev}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int port_cnth](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hport_cnth]hport_cnt}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhhubj)}(hhh]h)}(h!unregister MAD callback functionsh]h!unregister MAD callback functions}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_device *sdev`` SRPT HCA pointer. ``int port_cnt`` number of ports with registered MAD **Note** It is safe to call this function more than once for the same device.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j )}(hjh]hstruct srpt_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``int port_cnt`` number of ports with registered MAD h](j)}(h``int port_cnt``h]j )}(hjh]h int port_cnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h#number of ports with registered MADh]h#number of ports with registered MAD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Note**h]j)}(hj h]hNote}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubh)}(hDIt is safe to call this function more than once for the same device.h]hDIt is safe to call this function more than once for the same device.}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_alloc_ioctx (C function)c.srpt_alloc_ioctxhNtauh1jhjhhhNhNubj)}(hhh](j)}(hstruct srpt_ioctx * srpt_alloc_ioctx (struct srpt_device *sdev, int ioctx_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h]j")}(hstruct srpt_ioctx *srpt_alloc_ioctx(struct srpt_device *sdev, int ioctx_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j()}(hj+h]hstruct}(hjb hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj^ hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjp hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ hhhjo hMubh)}(hhh]jN)}(h srpt_ioctxh]h srpt_ioctx}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~ ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgsrpt_alloc_ioctxsbc.srpt_alloc_ioctxasbuh1hhj^ hhhjo hMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ hhhjo hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ hhhjo hMubj)}(hsrpt_alloc_ioctxh]jN)}(hj h]hsrpt_alloc_ioctx}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^ hhhjo hMubj)}(he(struct srpt_device *sdev, int ioctx_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j c.srpt_alloc_ioctxasbuh1hhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(hsdevh]hsdev}(hj3 hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hint ioctx_sizeh](j)}(hinth]hint}(hjL hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjH ubj:)}(h h]h }(hjZ hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjH ubjN)}(h ioctx_sizeh]h ioctx_size}(hjh hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjH ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct kmem_cache *buf_cacheh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj} ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj} ubh)}(hhh]jN)}(h kmem_cacheh]h kmem_cache}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j c.srpt_alloc_ioctxasbuh1hhj} ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj} ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} ubjN)}(h buf_cacheh]h buf_cache}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj} ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j c.srpt_alloc_ioctxasbuh1hhj ubj:)}(h h]h }(hj- hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubjN)}(hdirh]hdir}(hj; hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj^ hhhjo hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjZ hhhjo hMubah}(h]jU ah ](jjeh"]h$]h&]jj)jhuh1jhjo hMhjW hhubj)}(hhh]h)}(h%allocate a SRPT I/O context structureh]h%allocate a SRPT I/O context structure}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjb hhubah}(h]h ]h"]h$]h&]uh1jhjW hhhjo hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj} jj} jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_device *sdev`` SRPT HCA pointer. ``int ioctx_size`` I/O context size. ``struct kmem_cache *buf_cache`` I/O buffer cache. ``enum dma_data_direction dir`` DMA data direction.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj ubj)}(hhh](j)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j )}(hj h]hstruct srpt_device *sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj ubj)}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h%``int ioctx_size`` I/O context size. h](j)}(h``int ioctx_size``h]j )}(hj h]hint ioctx_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj ubj)}(hhh]h)}(hI/O context size.h]hI/O context size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j )}(hj h]hstruct kmem_cache *buf_cache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj ubj)}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hMhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hMhj ubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j )}(hjQ h]henum dma_data_direction dir}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjK ubj)}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jhjf hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_free_ioctx (C function)c.srpt_free_ioctxhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvoid srpt_free_ioctx (struct srpt_device *sdev, struct srpt_ioctx *ioctx, struct kmem_cache *buf_cache, enum dma_data_direction dir)h]j")}(hvoid srpt_free_ioctx(struct srpt_device *sdev, struct srpt_ioctx *ioctx, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj hMubj)}(hsrpt_free_ioctxh]jN)}(hsrpt_free_ioctxh]hsrpt_free_ioctx}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(ho(struct srpt_device *sdev, struct srpt_ioctx *ioctx, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgj sbc.srpt_free_ioctxasbuh1hhj ubj:)}(h h]h }(hj& hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(hsdevh]hsdev}(hjA hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct srpt_ioctx *ioctxh](j()}(hj+h]hstruct}(hjZ hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjV ubj:)}(h h]h }(hjg hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV ubh)}(hhh]jN)}(h srpt_ioctxh]h srpt_ioctx}(hjx hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhju ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjz modnameN classnameNjkjn)}jq]j" c.srpt_free_ioctxasbuh1hhjV ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubjN)}(hioctxh]hioctx}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjV ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct kmem_cache *buf_cacheh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(h kmem_cacheh]h kmem_cache}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]j" c.srpt_free_ioctxasbuh1hhj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(h buf_cacheh]h buf_cache}(hj!hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj6ubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjUubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjZmodnameN classnameNjkjn)}jq]j" c.srpt_free_ioctxasbuh1hhj6ubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubjN)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h!free a SRPT I/O context structureh]h!free a SRPT I/O context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_device *sdev`` SRPT HCA pointer. ``struct srpt_ioctx *ioctx`` I/O context pointer. ``struct kmem_cache *buf_cache`` I/O buffer cache. ``enum dma_data_direction dir`` DMA data direction.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j )}(hjh]hstruct srpt_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``struct srpt_ioctx *ioctx`` I/O context pointer. h](j)}(h``struct srpt_ioctx *ioctx``h]j )}(hj(h]hstruct srpt_ioctx *ioctx}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj"ubj)}(hhh]h)}(hI/O context pointer.h]hI/O context pointer.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j )}(hjah]hstruct kmem_cache *buf_cache}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj[ubj)}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j )}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"srpt_alloc_ioctx_ring (C function)c.srpt_alloc_ioctx_ringhNtauh1jhjhhhNhNubj)}(hhh](j)}(hstruct srpt_ioctx ** srpt_alloc_ioctx_ring (struct srpt_device *sdev, int ring_size, int ioctx_size, struct kmem_cache *buf_cache, int alignment_offset, enum dma_data_direction dir)h]j")}(hstruct srpt_ioctx **srpt_alloc_ioctx_ring(struct srpt_device *sdev, int ring_size, int ioctx_size, struct kmem_cache *buf_cache, int alignment_offset, enum dma_data_direction dir)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubh)}(hhh]jN)}(h srpt_ioctxh]h srpt_ioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgsrpt_alloc_ioctx_ringsbc.srpt_alloc_ioctx_ringasbuh1hhjhhhjhMubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hsrpt_alloc_ioctx_ringh]jN)}(hj1h]hsrpt_alloc_ioctx_ring}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct srpt_device *sdev, int ring_size, int ioctx_size, struct kmem_cache *buf_cache, int alignment_offset, enum dma_data_direction dir)h](j)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hj{hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j/c.srpt_alloc_ioctx_ringasbuh1hhjwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjN)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h int ring_sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h ring_sizeh]h ring_size}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hint ioctx_sizeh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(h ioctx_sizeh]h ioctx_size}(hj<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct kmem_cache *buf_cacheh](j()}(hj+h]hstruct}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjQubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubh)}(hhh]jN)}(h kmem_cacheh]h kmem_cache}(hjshhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjpubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjumodnameN classnameNjkjn)}jq]j/c.srpt_alloc_ioctx_ringasbuh1hhjQubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjN)}(h buf_cacheh]h buf_cache}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hint alignment_offseth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(halignment_offseth]halignment_offset}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j/c.srpt_alloc_ioctx_ringasbuh1hhjubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hdirh]hdir}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h.allocate a ring of SRPT I/O context structuresh]h.allocate a ring of SRPT I/O context structures}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_device *sdev`` Device to allocate the I/O context ring for. ``int ring_size`` Number of elements in the I/O context ring. ``int ioctx_size`` I/O context size. ``struct kmem_cache *buf_cache`` I/O buffer cache. ``int alignment_offset`` Offset in each ring buffer at which the SRP information unit starts. ``enum dma_data_direction dir`` DMA data direction.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(hJ``struct srpt_device *sdev`` Device to allocate the I/O context ring for. h](j)}(h``struct srpt_device *sdev``h]j )}(hjh]hstruct srpt_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h,Device to allocate the I/O context ring for.h]h,Device to allocate the I/O context ring for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``int ring_size`` Number of elements in the I/O context ring. h](j)}(h``int ring_size``h]j )}(hjh]h int ring_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(h+Number of elements in the I/O context ring.h]h+Number of elements in the I/O context ring.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``int ioctx_size`` I/O context size. h](j)}(h``int ioctx_size``h]j )}(hj!h]hint ioctx_size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh]h)}(hI/O context size.h]hI/O context size.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j )}(hjZh]hstruct kmem_cache *buf_cache}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjTubj)}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubj)}(h^``int alignment_offset`` Offset in each ring buffer at which the SRP information unit starts. h](j)}(h``int alignment_offset``h]j )}(hjh]hint alignment_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]h)}(hDOffset in each ring buffer at which the SRP information unit starts.h]hDOffset in each ring buffer at which the SRP information unit starts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j )}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!srpt_free_ioctx_ring (C function)c.srpt_free_ioctx_ringhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvoid srpt_free_ioctx_ring (struct srpt_ioctx **ioctx_ring, struct srpt_device *sdev, int ring_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h]j")}(hvoid srpt_free_ioctx_ring(struct srpt_ioctx **ioctx_ring, struct srpt_device *sdev, int ring_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#hhhj5hM/ubj)}(hsrpt_free_ioctx_ringh]jN)}(hsrpt_free_ioctx_ringh]hsrpt_free_ioctx_ring}(hjHhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj5hM/ubj)}(h(struct srpt_ioctx **ioctx_ring, struct srpt_device *sdev, int ring_size, struct kmem_cache *buf_cache, enum dma_data_direction dir)h](j)}(hstruct srpt_ioctx **ioctx_ringh](j()}(hj+h]hstruct}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj`ubj:)}(h h]h }(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubh)}(hhh]jN)}(h srpt_ioctxh]h srpt_ioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjJsbc.srpt_free_ioctx_ringasbuh1hhj`ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjN)}(h ioctx_ringh]h ioctx_ring}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_free_ioctx_ringasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hsdevh]hsdev}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(h int ring_sizeh](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubjN)}(h ring_sizeh]h ring_size}(hjohhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hstruct kmem_cache *buf_cacheh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h kmem_cacheh]h kmem_cache}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_free_ioctx_ringasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(h buf_cacheh]h buf_cache}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(henum dma_data_direction dirh](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_free_ioctx_ringasbuh1hhjubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hdirh]hdir}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj5hM/ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj5hM/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj5hM/hjhhubj)}(hhh]h)}(h,free the ring of SRPT I/O context structuresh]h,free the ring of SRPT I/O context structures}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hM/ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_ioctx **ioctx_ring`` I/O context ring to be freed. ``struct srpt_device *sdev`` SRPT HCA pointer. ``int ring_size`` Number of ring elements. ``struct kmem_cache *buf_cache`` I/O buffer cache. ``enum dma_data_direction dir`` DMA data direction.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3hjubj)}(hhh](j)}(hA``struct srpt_ioctx **ioctx_ring`` I/O context ring to be freed. h](j)}(h"``struct srpt_ioctx **ioctx_ring``h]j )}(hjh]hstruct srpt_ioctx **ioctx_ring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0hjubj)}(hhh]h)}(hI/O context ring to be freed.h]hI/O context ring to be freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j )}(hjh]hstruct srpt_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1hjubj)}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(h+``int ring_size`` Number of ring elements. h](j)}(h``int ring_size``h]j )}(hjh]h int ring_size}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2hjubj)}(hhh]h)}(hNumber of ring elements.h]hNumber of ring elements.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM2hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM2hjubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j )}(hjXh]hstruct kmem_cache *buf_cache}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3hjRubj)}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM3hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM3hjubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j )}(hjh]henum dma_data_direction dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hjubj)}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_set_cmd_state (C function)c.srpt_set_cmd_statehNtauh1jhjhhhNhNubj)}(hhh](j)}(hgenum srpt_command_state srpt_set_cmd_state (struct srpt_send_ioctx *ioctx, enum srpt_command_state new)h]j")}(hfenum srpt_command_state srpt_set_cmd_state(struct srpt_send_ioctx *ioctx, enum srpt_command_state new)h](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMFubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMFubh)}(hhh]jN)}(hsrpt_command_stateh]hsrpt_command_state}(hj hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj modnameN classnameNjkjn)}jq]jt)}jgsrpt_set_cmd_statesbc.srpt_set_cmd_stateasbuh1hhjhhhjhMFubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMFubj)}(hsrpt_set_cmd_stateh]jN)}(hj(h]hsrpt_set_cmd_state}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMFubj)}(h<(struct srpt_send_ioctx *ioctx, enum srpt_command_state new)h](j)}(hstruct srpt_send_ioctx *ioctxh](j()}(hj+h]hstruct}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjTubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjvhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjsubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjxmodnameN classnameNjkjn)}jq]j&c.srpt_set_cmd_stateasbuh1hhjTubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjN)}(hioctxh]hioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(henum srpt_command_state newh](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsrpt_command_stateh]hsrpt_command_state}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]j&c.srpt_set_cmd_stateasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMFhjhhubj)}(hhh]h)}(hset the state of a SCSI commandh]hset the state of a SCSI command}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMFhj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](jefunctioneh"]h$]h&]jjejjTjjTjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_send_ioctx *ioctx`` Send I/O context. ``enum srpt_command_state new`` New I/O context state. **Description** Does not modify the state of aborted commands. Returns the previous command state.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMJhjXubj)}(hhh](j)}(h4``struct srpt_send_ioctx *ioctx`` Send I/O context. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j )}(hj}h]hstruct srpt_send_ioctx *ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMGhjwubj)}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjtubj)}(h7``enum srpt_command_state new`` New I/O context state. h](j)}(h``enum srpt_command_state new``h]j )}(hjh]henum srpt_command_state new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMHhjubj)}(hhh]h)}(hNew I/O context state.h]hNew I/O context state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMJhjXubh)}(hRDoes not modify the state of aborted commands. Returns the previous command state.h]hRDoes not modify the state of aborted commands. Returns the previous command state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMIhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(srpt_test_and_set_cmd_state (C function)c.srpt_test_and_set_cmd_statehNtauh1jhjhhhNhNubj)}(hhh](j)}(hzbool srpt_test_and_set_cmd_state (struct srpt_send_ioctx *ioctx, enum srpt_command_state old, enum srpt_command_state new)h]j")}(hybool srpt_test_and_set_cmd_state(struct srpt_send_ioctx *ioctx, enum srpt_command_state old, enum srpt_command_state new)h](j)}(hjjh]hbool}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMZubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2hhhjChMZubj)}(hsrpt_test_and_set_cmd_stateh]jN)}(hsrpt_test_and_set_cmd_stateh]hsrpt_test_and_set_cmd_state}(hjVhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj2hhhjChMZubj)}(hY(struct srpt_send_ioctx *ioctx, enum srpt_command_state old, enum srpt_command_state new)h](j)}(hstruct srpt_send_ioctx *ioctxh](j()}(hj+h]hstruct}(hjrhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjnubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjXsbc.srpt_test_and_set_cmd_stateasbuh1hhjnubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjN)}(hioctxh]hioctx}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(henum srpt_command_state oldh](j()}(hj%h]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(hsrpt_command_stateh]hsrpt_command_state}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jc.srpt_test_and_set_cmd_stateasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubjN)}(holdh]hold}(hj.hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(henum srpt_command_state newh](j()}(hj%h]henum}(hjGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubh)}(hhh]jN)}(hsrpt_command_stateh]hsrpt_command_state}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjgmodnameN classnameNjkjn)}jq]jc.srpt_test_and_set_cmd_stateasbuh1hhjCubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubjN)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhj2hhhjChMZubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj.hhhjChMZubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jhjChMZhj+hhubj)}(hhh]h)}(h#test and set the state of a commandh]h#test and set the state of a command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMZhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjChMZubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_send_ioctx *ioctx`` Send I/O context. ``enum srpt_command_state old`` Current I/O context state. ``enum srpt_command_state new`` New I/O context state. **Description** Returns true if and only if the previous command state was equal to 'old'.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^hjubj)}(hhh](j)}(h4``struct srpt_send_ioctx *ioctx`` Send I/O context. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j )}(hjh]hstruct srpt_send_ioctx *ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM[hjubj)}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h;``enum srpt_command_state old`` Current I/O context state. h](j)}(h``enum srpt_command_state old``h]j )}(hj5h]henum srpt_command_state old}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM\hj/ubj)}(hhh]h)}(hCurrent I/O context state.h]hCurrent I/O context state.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM\hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM\hjubj)}(h7``enum srpt_command_state new`` New I/O context state. h](j)}(h``enum srpt_command_state new``h]j )}(hjnh]henum srpt_command_state new}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM]hjhubj)}(hhh]h)}(hNew I/O context state.h]hNew I/O context state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_hjubh)}(hJReturns true if and only if the previous command state was equal to 'old'.h]hNReturns true if and only if the previous command state was equal to ‘old’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_post_recv (C function)c.srpt_post_recvhNtauh1jhjhhhNhNubj)}(hhh](j)}(heint srpt_post_recv (struct srpt_device *sdev, struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *ioctx)h]j")}(hdint srpt_post_recv(struct srpt_device *sdev, struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *ioctx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMsubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMsubj)}(hsrpt_post_recvh]jN)}(hsrpt_post_recvh]hsrpt_post_recv}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMsubj)}(hR(struct srpt_device *sdev, struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *ioctx)h](j)}(hstruct srpt_device *sdevh](j()}(hj+h]hstruct}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj'ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hjIhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjKmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_post_recvasbuh1hhj'ubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjN)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jec.srpt_post_recvasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hchh]hch}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(hstruct srpt_recv_ioctx *ioctxh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]jN)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hj+hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj-modnameN classnameNjkjn)}jq]jec.srpt_post_recvasbuh1hhj ubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjN)}(hioctxh]hioctx}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMsubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMshjhhubj)}(hhh]h)}(hpost an IB receive requesth]hpost an IB receive request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMsubeh}(h]h ](jefunctioneh"]h$]h&]jjejjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_device *sdev`` SRPT HCA pointer. ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. ``struct srpt_recv_ioctx *ioctx`` Receive I/O context pointer.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMwhjubj)}(hhh](j)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j )}(hjh]hstruct srpt_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMthjubj)}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hjh]hstruct srpt_rdma_ch *ch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMuhjubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjubj)}(h>``struct srpt_recv_ioctx *ioctx`` Receive I/O context pointer.h](j)}(h!``struct srpt_recv_ioctx *ioctx``h]j )}(hjAh]hstruct srpt_recv_ioctx *ioctx}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMwhj;ubj)}(hhh]h)}(hReceive I/O context pointer.h]hReceive I/O context pointer.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMvhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"srpt_zerolength_write (C function)c.srpt_zerolength_writehNtauh1jhjhhhNhNubj)}(hhh](j)}(h3int srpt_zerolength_write (struct srpt_rdma_ch *ch)h]j")}(h2int srpt_zerolength_write(struct srpt_rdma_ch *ch)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hsrpt_zerolength_writeh]jN)}(hsrpt_zerolength_writeh]hsrpt_zerolength_write}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjmodnameN classnameNjkjn)}jq]jt)}jgjsbc.srpt_zerolength_writeasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjh]h*}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjN)}(hchh]hch}(hj1 hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h perform a zero-length RDMA writeh]h perform a zero-length RDMA write}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjX hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjs jjs jjjuh1jhhhjhNhNubj)}(hX<**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. **Description** A quote from the InfiniBand specification: C9-88: For an HCA responder using Reliable Connection service, for each zero-length RDMA READ or WRITE request, the R_Key shall not be validated, even if the request includes Immediate data.h](h)}(h**Parameters**h]j)}(hj} h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjw ubj)}(hhh]j)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj h]hstruct srpt_rdma_ch *ch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj ubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjw ubh)}(hA quote from the InfiniBand specification: C9-88: For an HCA responder using Reliable Connection service, for each zero-length RDMA READ or WRITE request, the R_Key shall not be validated, even if the request includes Immediate data.h]hA quote from the InfiniBand specification: C9-88: For an HCA responder using Reliable Connection service, for each zero-length RDMA READ or WRITE request, the R_Key shall not be validated, even if the request includes Immediate data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjw ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_get_desc_tbl (C function)c.srpt_get_desc_tblhNtauh1jhjhhhNhNubj)}(hhh](j)}(hint srpt_get_desc_tbl (struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *ioctx, struct srp_cmd *srp_cmd, enum dma_data_direction *dir, struct scatterlist **sg, unsigned int *sg_cnt, u64 *data_len, u16 imm_data_offset)h]j")}(hint srpt_get_desc_tbl(struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *ioctx, struct srp_cmd *srp_cmd, enum dma_data_direction *dir, struct scatterlist **sg, unsigned int *sg_cnt, u64 *data_len, u16 imm_data_offset)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM#ubj:)}(h h]h }(hj+!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!hhhj*!hM#ubj)}(hsrpt_get_desc_tblh]jN)}(hsrpt_get_desc_tblh]hsrpt_get_desc_tbl}(hj=!hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj*!hM#ubj)}(h(struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *ioctx, struct srp_cmd *srp_cmd, enum dma_data_direction *dir, struct scatterlist **sg, unsigned int *sg_cnt, u64 *data_len, u16 imm_data_offset)h](j)}(h"struct srpt_recv_ioctx *recv_ioctxh](j()}(hj+h]hstruct}(hjY!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjU!ubj:)}(h h]h }(hjf!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjU!ubh)}(hhh]jN)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hjw!hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjt!ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjy!modnameN classnameNjkjn)}jq]jt)}jgj?!sbc.srpt_get_desc_tblasbuh1hhjU!ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjU!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU!ubjN)}(h recv_ioctxh]h recv_ioctx}(hj!hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjU!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(hstruct srpt_send_ioctx *ioctxh](j()}(hj+h]hstruct}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hj!hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj!ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj!modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhj!ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjN)}(hioctxh]hioctx}(hj""hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(hstruct srp_cmd *srp_cmdh](j()}(hj+h]hstruct}(hj;"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7"ubj:)}(h h]h }(hjH"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7"ubh)}(hhh]jN)}(hsrp_cmdh]hsrp_cmd}(hjY"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjV"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj["modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhj7"ubj:)}(h h]h }(hjw"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7"ubjN)}(hsrp_cmdh]hsrp_cmd}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(henum dma_data_direction *dirh](j()}(hj%h]henum}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubh)}(hhh]jN)}(hdma_data_directionh]hdma_data_direction}(hj"hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj"modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhj"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjN)}(hdirh]hdir}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(hstruct scatterlist **sgh](j()}(hj+h]hstruct}(hj#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj#ubj:)}(h h]h }(hj(#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubh)}(hhh]jN)}(h scatterlisth]h scatterlist}(hj9#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj6#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj;#modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhj#ubj:)}(h h]h }(hjW#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hjh]h*}(hje#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]h*}(hjr#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjN)}(hsgh]hsg}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(hunsigned int *sg_cnth](j)}(hunsignedh]hunsigned}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hinth]hint}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjN)}(hsg_cnth]hsg_cnt}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(h u64 *data_lenh](h)}(hhh]jN)}(hu64h]hu64}(hj#hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj#modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhj#ubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hjh]h*}(hj%$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjN)}(hdata_lenh]hdata_len}(hj2$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubj)}(hu16 imm_data_offseth](h)}(hhh]jN)}(hu16h]hu16}(hjN$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjK$ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjP$modnameN classnameNjkjn)}jq]j!c.srpt_get_desc_tblasbuh1hhjG$ubj:)}(h h]h }(hjl$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG$ubjN)}(himm_data_offseth]himm_data_offset}(hjz$hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjG$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ!ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj*!hM#ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj!hhhj*!hM#ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj*!hM#hj!hhubj)}(hhh]h)}(h/parse the data descriptors of a SRP_CMD requesth]h/parse the data descriptors of a SRP_CMD request}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM#hj$hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj*!hM#ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj$jj$jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_recv_ioctx *recv_ioctx`` I/O context associated with the received command **srp_cmd**. ``struct srpt_send_ioctx *ioctx`` I/O context that will be used for responding to the initiator. ``struct srp_cmd *srp_cmd`` Pointer to the SRP_CMD request data. ``enum dma_data_direction *dir`` Pointer to the variable to which the transfer direction will be written. ``struct scatterlist **sg`` [out] scatterlist for the parsed SRP_CMD. ``unsigned int *sg_cnt`` [out] length of **sg**. ``u64 *data_len`` Pointer to the variable to which the total data length of all descriptors in the SRP_CMD request will be written. ``u16 imm_data_offset`` [in] Offset in SRP_CMD requests at which immediate data starts. **Description** This function initializes ioctx->nrbuf and ioctx->r_bufs. Returns -EINVAL when the SRP_CMD request contains inconsistent descriptors; -ENOMEM when memory allocation fails and zero upon success.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM'hj$ubj)}(hhh](j)}(he``struct srpt_recv_ioctx *recv_ioctx`` I/O context associated with the received command **srp_cmd**. h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j )}(hj$h]h"struct srpt_recv_ioctx *recv_ioctx}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM$hj$ubj)}(hhh]h)}(h=I/O context associated with the received command **srp_cmd**.h](h1I/O context associated with the received command }(hj$hhhNhNubj)}(h **srp_cmd**h]hsrp_cmd}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hM$hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM$hj$ubj)}(ha``struct srpt_send_ioctx *ioctx`` I/O context that will be used for responding to the initiator. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j )}(hj0%h]hstruct srpt_send_ioctx *ioctx}(hj2%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM%hj*%ubj)}(hhh]h)}(h>I/O context that will be used for responding to the initiator.h]h>I/O context that will be used for responding to the initiator.}(hjI%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE%hM%hjF%ubah}(h]h ]h"]h$]h&]uh1jhj*%ubeh}(h]h ]h"]h$]h&]uh1jhjE%hM%hj$ubj)}(hA``struct srp_cmd *srp_cmd`` Pointer to the SRP_CMD request data. h](j)}(h``struct srp_cmd *srp_cmd``h]j )}(hji%h]hstruct srp_cmd *srp_cmd}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM&hjc%ubj)}(hhh]h)}(h$Pointer to the SRP_CMD request data.h]h$Pointer to the SRP_CMD request data.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~%hM&hj%ubah}(h]h ]h"]h$]h&]uh1jhjc%ubeh}(h]h ]h"]h$]h&]uh1jhj~%hM&hj$ubj)}(hj``enum dma_data_direction *dir`` Pointer to the variable to which the transfer direction will be written. h](j)}(h ``enum dma_data_direction *dir``h]j )}(hj%h]henum dma_data_direction *dir}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM(hj%ubj)}(hhh]h)}(hHPointer to the variable to which the transfer direction will be written.h]hHPointer to the variable to which the transfer direction will be written.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM'hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM(hj$ubj)}(hF``struct scatterlist **sg`` [out] scatterlist for the parsed SRP_CMD. h](j)}(h``struct scatterlist **sg``h]j )}(hj%h]hstruct scatterlist **sg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM)hj%ubj)}(hhh]h)}(h)[out] scatterlist for the parsed SRP_CMD.h]h)[out] scatterlist for the parsed SRP_CMD.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM)hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM)hj$ubj)}(h1``unsigned int *sg_cnt`` [out] length of **sg**. h](j)}(h``unsigned int *sg_cnt``h]j )}(hj&h]hunsigned int *sg_cnt}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM*hj&ubj)}(hhh]h)}(h[out] length of **sg**.h](h[out] length of }(hj.&hhhNhNubj)}(h**sg**h]hsg}(hj6&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.&ubh.}(hj.&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*&hM*hj+&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj*&hM*hj$ubj)}(h``u64 *data_len`` Pointer to the variable to which the total data length of all descriptors in the SRP_CMD request will be written. h](j)}(h``u64 *data_len``h]j )}(hj`&h]h u64 *data_len}(hjb&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM,hjZ&ubj)}(hhh]h)}(hqPointer to the variable to which the total data length of all descriptors in the SRP_CMD request will be written.h]hqPointer to the variable to which the total data length of all descriptors in the SRP_CMD request will be written.}(hjy&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM+hjv&ubah}(h]h ]h"]h$]h&]uh1jhjZ&ubeh}(h]h ]h"]h$]h&]uh1jhju&hM,hj$ubj)}(hX``u16 imm_data_offset`` [in] Offset in SRP_CMD requests at which immediate data starts. h](j)}(h``u16 imm_data_offset``h]j )}(hj&h]hu16 imm_data_offset}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM.hj&ubj)}(hhh]h)}(h?[in] Offset in SRP_CMD requests at which immediate data starts.h]h?[in] Offset in SRP_CMD requests at which immediate data starts.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM-hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM.hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0hj$ubh)}(h9This function initializes ioctx->nrbuf and ioctx->r_bufs.h]h9This function initializes ioctx->nrbuf and ioctx->r_bufs.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/hj$ubh)}(hReturns -EINVAL when the SRP_CMD request contains inconsistent descriptors; -ENOMEM when memory allocation fails and zero upon success.h]hReturns -EINVAL when the SRP_CMD request contains inconsistent descriptors; -ENOMEM when memory allocation fails and zero upon success.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_init_ch_qp (C function)c.srpt_init_ch_qphNtauh1jhjhhhNhNubj)}(hhh](j)}(h?int srpt_init_ch_qp (struct srpt_rdma_ch *ch, struct ib_qp *qp)h]j")}(h>int srpt_init_ch_qp(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hinth]hint}(hj*'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj9'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&'hhhj8'hMubj)}(hsrpt_init_ch_qph]jN)}(hsrpt_init_ch_qph]hsrpt_init_ch_qp}(hjK'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjG'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&'hhhj8'hMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hjg'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjc'ubj:)}(h h]h }(hjt'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjc'ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]jt)}jgjM'sbc.srpt_init_ch_qpasbuh1hhjc'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjc'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc'ubjN)}(hchh]hch}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjc'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_'ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hj'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj'hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj'modnameN classnameNjkjn)}jq]j'c.srpt_init_ch_qpasbuh1hhj'ubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj)}(hjh]h*}(hj#(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjN)}(hqph]hqp}(hj0(hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_'ubeh}(h]h ]h"]h$]h&]jjuh1jhj&'hhhj8'hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj"'hhhj8'hMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj8'hMhj'hhubj)}(hhh]h)}(h initialize queue pair attributesh]h initialize queue pair attributes}(hjZ(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjW(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj8'hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjr(jjr(jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. ``struct ib_qp *qp`` Queue pair pointer. **Description** Initialized the attributes of queue pair 'qp' by allowing local write, remote read and remote write. Also transitions 'qp' to state IB_QPS_INIT.h](h)}(h**Parameters**h]j)}(hj|(h]h Parameters}(hj~(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz(ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjv(ubj)}(hhh](j)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj(h]hstruct srpt_rdma_ch *ch}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj(ubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj(ubj)}(h)``struct ib_qp *qp`` Queue pair pointer. h](j)}(h``struct ib_qp *qp``h]j )}(hj(h]hstruct ib_qp *qp}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj(ubj)}(hhh]h)}(hQueue pair pointer.h]hQueue pair pointer.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhjv(ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj )ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjv(ubh)}(hInitialized the attributes of queue pair 'qp' by allowing local write, remote read and remote write. Also transitions 'qp' to state IB_QPS_INIT.h]hInitialized the attributes of queue pair ‘qp’ by allowing local write, remote read and remote write. Also transitions ‘qp’ to state IB_QPS_INIT.}(hj%)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjv(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_ch_qp_rtr (C function)c.srpt_ch_qp_rtrhNtauh1jhjhhhNhNubj)}(hhh](j)}(h>int srpt_ch_qp_rtr (struct srpt_rdma_ch *ch, struct ib_qp *qp)h]j")}(h=int srpt_ch_qp_rtr(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hinth]hint}(hjT)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjc)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP)hhhjb)hMubj)}(hsrpt_ch_qp_rtrh]jN)}(hsrpt_ch_qp_rtrh]hsrpt_ch_qp_rtr}(hju)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjq)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjP)hhhjb)hMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj)modnameN classnameNjkjn)}jq]jt)}jgjw)sbc.srpt_ch_qp_rtrasbuh1hhj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjN)}(hchh]hch}(hj)hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]jN)}(hib_qph]hib_qp}(hj!*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj*ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj#*modnameN classnameNjkjn)}jq]j)c.srpt_ch_qp_rtrasbuh1hhj)ubj:)}(h h]h }(hj?*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hjh]h*}(hjM*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjN)}(hqph]hqp}(hjZ*hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhjP)hhhjb)hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjL)hhhjb)hMubah}(h]jG)ah ](jjeh"]h$]h&]jj)jhuh1jhjb)hMhjI)hhubj)}(hhh]h)}(h9change the state of a channel to 'ready to receive' (RTR)h]h=change the state of a channel to ‘ready to receive’ (RTR)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjI)hhhjb)hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj*jj*jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` channel of the queue pair. ``struct ib_qp *qp`` queue pair to change the state of. **Description** Returns zero upon success and a negative value upon failure. **Note** currently a struct ib_qp_attr takes 136 bytes on a 64-bit system. If this structure ever becomes larger, it might be necessary to allocate it dynamically instead of on the stack.h](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj*ubj)}(hhh](j)}(h7``struct srpt_rdma_ch *ch`` channel of the queue pair. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj*h]hstruct srpt_rdma_ch *ch}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj*ubj)}(hhh]h)}(hchannel of the queue pair.h]hchannel of the queue pair.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubj)}(h8``struct ib_qp *qp`` queue pair to change the state of. h](j)}(h``struct ib_qp *qp``h]j )}(hj*h]hstruct ib_qp *qp}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj*ubj)}(hhh]h)}(h"queue pair to change the state of.h]h"queue pair to change the state of.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j)}(hj9+h]h Description}(hj;+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7+ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj*ubh)}(hint srpt_ch_qp_rts (struct srpt_rdma_ch *ch, struct ib_qp *qp)h]j")}(h=int srpt_ch_qp_rts(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj+hMubj)}(hsrpt_ch_qp_rtsh]jN)}(hsrpt_ch_qp_rtsh]hsrpt_ch_qp_rts}(hj+hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj+ubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,modnameN classnameNjkjn)}jq]jt)}jgj+sbc.srpt_ch_qp_rtsasbuh1hhj+ubj:)}(h h]h }(hj ,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubj)}(hjh]h*}(hj.,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjN)}(hchh]hch}(hj;,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hstruct ib_qp *qph](j()}(hj+h]hstruct}(hjT,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjP,ubj:)}(h h]h }(hja,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP,ubh)}(hhh]jN)}(hib_qph]hib_qp}(hjr,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjo,ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjt,modnameN classnameNjkjn)}jq]j,c.srpt_ch_qp_rtsasbuh1hhjP,ubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP,ubjN)}(hqph]hqp}(hj,hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjP,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hMhj+hhubj)}(hhh]h)}(h6change the state of a channel to 'ready to send' (RTS)h]h:change the state of a channel to ‘ready to send’ (RTS)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj,jj,jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` channel of the queue pair. ``struct ib_qp *qp`` queue pair to change the state of. **Description** Returns zero upon success and a negative value upon failure. **Note** currently a struct ib_qp_attr takes 136 bytes on a 64-bit system. If this structure ever becomes larger, it might be necessary to allocate it dynamically instead of on the stack.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj,ubj)}(hhh](j)}(h7``struct srpt_rdma_ch *ch`` channel of the queue pair. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj-h]hstruct srpt_rdma_ch *ch}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj-ubj)}(hhh]h)}(hchannel of the queue pair.h]hchannel of the queue pair.}(hj/-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+-hMhj,-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj+-hMhj -ubj)}(h8``struct ib_qp *qp`` queue pair to change the state of. h](j)}(h``struct ib_qp *qp``h]j )}(hjO-h]hstruct ib_qp *qp}(hjQ-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjI-ubj)}(hhh]h)}(h"queue pair to change the state of.h]h"queue pair to change the state of.}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd-hMhje-ubah}(h]h ]h"]h$]h&]uh1jhjI-ubeh}(h]h ]h"]h$]h&]uh1jhjd-hMhj -ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj,ubh)}(h2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMeubj:)}(h h]h }(hjQ2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>2hhhjP2hMeubj)}(hsrpt_rdma_read_doneh]jN)}(hsrpt_rdma_read_doneh]hsrpt_rdma_read_done}(hjc2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>2hhhjP2hMeubj)}(h$(struct ib_cq *cq, struct ib_wc *wc)h](j)}(hstruct ib_cq *cqh](j()}(hj+h]hstruct}(hj2hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{2ubh)}(hhh]jN)}(hib_cqh]hib_cq}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj2modnameN classnameNjkjn)}jq]jt)}jgje2sbc.srpt_rdma_read_doneasbuh1hhj{2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{2ubjN)}(hcqh]hcq}(hj2hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj{2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjw2ubj)}(hstruct ib_wc *wch](j()}(hj+h]hstruct}(hj2hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubh)}(hhh]jN)}(hib_wch]hib_wc}(hj3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj 3ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj3modnameN classnameNjkjn)}jq]j2c.srpt_rdma_read_doneasbuh1hhj2ubj:)}(h h]h }(hj-3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubj)}(hjh]h*}(hj;3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjN)}(hwch]hwc}(hjH3hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjw2ubeh}(h]h ]h"]h$]h&]jjuh1jhj>2hhhjP2hMeubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:2hhhjP2hMeubah}(h]j52ah ](jjeh"]h$]h&]jj)jhuh1jhjP2hMehj72hhubj)}(hhh]h)}(hRDMA read completion callbackh]hRDMA read completion callback}(hjr3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMehjo3hhubah}(h]h ]h"]h$]h&]uh1jhj72hhhjP2hMeubeh}(h]h ](jefunctioneh"]h$]h&]jjejj3jj3jjjuh1jhhhjhNhNubj)}(hXf**Parameters** ``struct ib_cq *cq`` Completion queue. ``struct ib_wc *wc`` Work completion. **Description** XXX: what is now target_execute_cmd used to be asynchronous, and unmapping the data that has been transferred via IB RDMA had to be postponed until the check_stop_free() callback. None of this is necessary anymore and needs to be cleaned up.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMihj3ubj)}(hhh](j)}(h'``struct ib_cq *cq`` Completion queue. h](j)}(h``struct ib_cq *cq``h]j )}(hj3h]hstruct ib_cq *cq}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMfhj3ubj)}(hhh]h)}(hCompletion queue.h]hCompletion queue.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMfhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMfhj3ubj)}(h&``struct ib_wc *wc`` Work completion. h](j)}(h``struct ib_wc *wc``h]j )}(hj3h]hstruct ib_wc *wc}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMghj3ubj)}(hhh]h)}(hWork completion.h]hWork completion.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMghj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMghj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hj'4h]h Description}(hj)4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%4ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMihj3ubh)}(hXXX: what is now target_execute_cmd used to be asynchronous, and unmapping the data that has been transferred via IB RDMA had to be postponed until the check_stop_free() callback. None of this is necessary anymore and needs to be cleaned up.h]hXXX: what is now target_execute_cmd used to be asynchronous, and unmapping the data that has been transferred via IB RDMA had to be postponed until the check_stop_free() callback. None of this is necessary anymore and needs to be cleaned up.}(hj=4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_build_cmd_rsp (C function)c.srpt_build_cmd_rsphNtauh1jhjhhhNhNubj)}(hhh](j)}(hdint srpt_build_cmd_rsp (struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u64 tag, int status)h]j")}(hcint srpt_build_cmd_rsp(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u64 tag, int status)h](j)}(hinth]hint}(hjl4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjh4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj{4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjh4hhhjz4hMubj)}(hsrpt_build_cmd_rsph]jN)}(hsrpt_build_cmd_rsph]hsrpt_build_cmd_rsp}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjh4hhhjz4hMubj)}(hM(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u64 tag, int status)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4ubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj4hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj4modnameN classnameNjkjn)}jq]jt)}jgj4sbc.srpt_build_cmd_rspasbuh1hhj4ubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjN)}(hchh]hch}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hstruct srpt_send_ioctx *ioctxh](j()}(hj+h]hstruct}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5ubj:)}(h h]h }(hj(5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hj95hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj65ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj;5modnameN classnameNjkjn)}jq]j4c.srpt_build_cmd_rspasbuh1hhj5ubj:)}(h h]h }(hjW5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubj)}(hjh]h*}(hje5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjN)}(hioctxh]hioctx}(hjr5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(hu64 tagh](h)}(hhh]jN)}(hu64h]hu64}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj5modnameN classnameNjkjn)}jq]j4c.srpt_build_cmd_rspasbuh1hhj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubjN)}(htagh]htag}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h int statush](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubjN)}(hstatush]hstatus}(hj5hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjh4hhhjz4hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjd4hhhjz4hMubah}(h]j_4ah ](jjeh"]h$]h&]jj)jhuh1jhjz4hMhja4hhubj)}(hhh]h)}(hbuild a SRP_RSP responseh]hbuild a SRP_RSP response}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhja4hhhjz4hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj16jj16jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` RDMA channel through which the request has been received. ``struct srpt_send_ioctx *ioctx`` I/O context associated with the SRP_CMD request. The response will be built in the buffer ioctx->buf points at and hence this function will overwrite the request data. ``u64 tag`` tag of the request for which this response is being generated. ``int status`` value for the STATUS field of the SRP_RSP information unit. **Description** Returns the size in bytes of the SRP_RSP response. An SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response. See also SPC-2 for more information about sense data.h](h)}(h**Parameters**h]j)}(hj;6h]h Parameters}(hj=6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj96ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj56ubj)}(hhh](j)}(hV``struct srpt_rdma_ch *ch`` RDMA channel through which the request has been received. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hjZ6h]hstruct srpt_rdma_ch *ch}(hj\6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjT6ubj)}(hhh]h)}(h9RDMA channel through which the request has been received.h]h9RDMA channel through which the request has been received.}(hjs6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo6hMhjp6ubah}(h]h ]h"]h$]h&]uh1jhjT6ubeh}(h]h ]h"]h$]h&]uh1jhjo6hMhjQ6ubj)}(h``struct srpt_send_ioctx *ioctx`` I/O context associated with the SRP_CMD request. The response will be built in the buffer ioctx->buf points at and hence this function will overwrite the request data. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j )}(hj6h]hstruct srpt_send_ioctx *ioctx}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubj)}(hhh]h)}(hI/O context associated with the SRP_CMD request. The response will be built in the buffer ioctx->buf points at and hence this function will overwrite the request data.h]hI/O context associated with the SRP_CMD request. The response will be built in the buffer ioctx->buf points at and hence this function will overwrite the request data.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjQ6ubj)}(hK``u64 tag`` tag of the request for which this response is being generated. h](j)}(h ``u64 tag``h]j )}(hj6h]hu64 tag}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubj)}(hhh]h)}(h>tag of the request for which this response is being generated.h]h>tag of the request for which this response is being generated.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjQ6ubj)}(hK``int status`` value for the STATUS field of the SRP_RSP information unit. h](j)}(h``int status``h]j )}(hj7h]h int status}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj7ubj)}(hhh]h)}(h;value for the STATUS field of the SRP_RSP information unit.h]h;value for the STATUS field of the SRP_RSP information unit.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjQ6ubeh}(h]h ]h"]h$]h&]uh1jhj56ubh)}(h**Description**h]j)}(hjA7h]h Description}(hjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?7ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj56ubh)}(h2Returns the size in bytes of the SRP_RSP response.h]h2Returns the size in bytes of the SRP_RSP response.}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj56ubh)}(hAn SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response. See also SPC-2 for more information about sense data.h]hAn SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response. See also SPC-2 for more information about sense data.}(hjf7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj56ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#srpt_build_tskmgmt_rsp (C function)c.srpt_build_tskmgmt_rsphNtauh1jhjhhhNhNubj)}(hhh](j)}(hiint srpt_build_tskmgmt_rsp (struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u8 rsp_code, u64 tag)h]j")}(hhint srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u8 rsp_code, u64 tag)h](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7hhhj7hMubj)}(hsrpt_build_tskmgmt_rsph]jN)}(hsrpt_build_tskmgmt_rsph]hsrpt_build_tskmgmt_rsp}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj7hMubj)}(hN(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u8 rsp_code, u64 tag)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj7hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj7modnameN classnameNjkjn)}jq]jt)}jgj7sbc.srpt_build_tskmgmt_rspasbuh1hhj7ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjN)}(hchh]hch}(hj+8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct srpt_send_ioctx *ioctxh](j()}(hj+h]hstruct}(hjD8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj@8ubj:)}(h h]h }(hjQ8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@8ubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjb8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjd8modnameN classnameNjkjn)}jq]j 8c.srpt_build_tskmgmt_rspasbuh1hhj@8ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@8ubjN)}(hioctxh]hioctx}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u8 rsp_codeh](h)}(hhh]jN)}(hu8h]hu8}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj8modnameN classnameNjkjn)}jq]j 8c.srpt_build_tskmgmt_rspasbuh1hhj8ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubjN)}(hrsp_codeh]hrsp_code}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hu64 tagh](h)}(hhh]jN)}(hu64h]hu64}(hj8hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj9modnameN classnameNjkjn)}jq]j 8c.srpt_build_tskmgmt_rspasbuh1hhj8ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubjN)}(htagh]htag}(hj+9hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj7hhhj7hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhj7hhubj)}(hhh]h)}(h build a task management responseh]h build a task management response}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjR9hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjm9jjm9jjjuh1jhhhjhNhNubj)}(hX/**Parameters** ``struct srpt_rdma_ch *ch`` RDMA channel through which the request has been received. ``struct srpt_send_ioctx *ioctx`` I/O context in which the SRP_RSP response will be built. ``u8 rsp_code`` RSP_CODE that will be stored in the response. ``u64 tag`` Tag of the request for which this response is being generated. **Description** Returns the size in bytes of the SRP_RSP response. An SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response.h](h)}(h**Parameters**h]j)}(hjw9h]h Parameters}(hjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju9ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjq9ubj)}(hhh](j)}(hV``struct srpt_rdma_ch *ch`` RDMA channel through which the request has been received. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj9h]hstruct srpt_rdma_ch *ch}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj9ubj)}(hhh]h)}(h9RDMA channel through which the request has been received.h]h9RDMA channel through which the request has been received.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h[``struct srpt_send_ioctx *ioctx`` I/O context in which the SRP_RSP response will be built. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j )}(hj9h]hstruct srpt_send_ioctx *ioctx}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj9ubj)}(hhh]h)}(h8I/O context in which the SRP_RSP response will be built.h]h8I/O context in which the SRP_RSP response will be built.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h>``u8 rsp_code`` RSP_CODE that will be stored in the response. h](j)}(h``u8 rsp_code``h]j )}(hj:h]h u8 rsp_code}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj:ubj)}(hhh]h)}(h-RSP_CODE that will be stored in the response.h]h-RSP_CODE that will be stored in the response.}(hj!:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj9ubj)}(hK``u64 tag`` Tag of the request for which this response is being generated. h](j)}(h ``u64 tag``h]j )}(hjA:h]hu64 tag}(hjC:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj;:ubj)}(hhh]h)}(h>Tag of the request for which this response is being generated.h]h>Tag of the request for which this response is being generated.}(hjZ:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV:hMhjW:ubah}(h]h ]h"]h$]h&]uh1jhj;:ubeh}(h]h ]h"]h$]h&]uh1jhjV:hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhjq9ubh)}(h**Description**h]j)}(hj|:h]h Description}(hj~:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz:ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjq9ubh)}(h2Returns the size in bytes of the SRP_RSP response.h]h2Returns the size in bytes of the SRP_RSP response.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjq9ubh)}(hAn SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response.h]hAn SRP_RSP response contains a SCSI status or service response. See also section 6.9 in the SRP r16a document for the format of an SRP_RSP response.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjq9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_handle_cmd (C function)c.srpt_handle_cmdhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvvoid srpt_handle_cmd (struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h]j")}(huvoid srpt_handle_cmd(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:hhhj:hM ubj)}(hsrpt_handle_cmdh]jN)}(hsrpt_handle_cmdh]hsrpt_handle_cmd}(hj:hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhj:hM ubj)}(ha(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj ;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ;ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ;ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj+;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(;ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj-;modnameN classnameNjkjn)}jq]jt)}jgj:sbc.srpt_handle_cmdasbuh1hhj ;ubj:)}(h h]h }(hjK;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ;ubj)}(hjh]h*}(hjY;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ;ubjN)}(hchh]hch}(hjf;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj ;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j()}(hj+h]hstruct}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{;ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{;ubh)}(hhh]jN)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hj;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj;modnameN classnameNjkjn)}jq]jG;c.srpt_handle_cmdasbuh1hhj{;ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{;ubjN)}(h recv_ioctxh]h recv_ioctx}(hj;hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj{;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h"struct srpt_send_ioctx *send_ioctxh](j()}(hj+h]hstruct}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj;ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hj <hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj <ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj<modnameN classnameNjkjn)}jq]jG;c.srpt_handle_cmdasbuh1hhj;ubj:)}(h h]h }(hj+<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubj)}(hjh]h*}(hj9<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjN)}(h send_ioctxh]h send_ioctx}(hjF<hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhj:hhhj:hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:hhhj:hM ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1jhj:hM hj:hhubj)}(hhh]h)}(h"process a SRP_CMD information unith]h"process a SRP_CMD information unit}(hjp<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjm<hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj<jj<jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. ``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. ``struct srpt_send_ioctx *send_ioctx`` Send I/O context.h](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj<ubj)}(hhh](j)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj<h]hstruct srpt_rdma_ch *ch}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj<ubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hj<ubj)}(h<``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j )}(hj<h]h"struct srpt_recv_ioctx *recv_ioctx}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj<ubj)}(hhh]h)}(hReceive I/O context.h]hReceive I/O context.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(h8``struct srpt_send_ioctx *send_ioctx`` Send I/O context.h](j)}(h&``struct srpt_send_ioctx *send_ioctx``h]j )}(hj#=h]h"struct srpt_send_ioctx *send_ioctx}(hj%=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj=ubj)}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hj<=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj9=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj8=hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!srpt_handle_tsk_mgmt (C function)c.srpt_handle_tsk_mgmthNtauh1jhjhhhNhNubj)}(hhh](j)}(h{void srpt_handle_tsk_mgmt (struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h]j")}(hzvoid srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h](j)}(hvoidh]hvoid}(hj}=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjy=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMdubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjy=hhhj=hMdubj)}(hsrpt_handle_tsk_mgmth]jN)}(hsrpt_handle_tsk_mgmth]hsrpt_handle_tsk_mgmt}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjy=hhhj=hMdubj)}(ha(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx, struct srpt_send_ioctx *send_ioctx)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj=hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj=ubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj=hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj=modnameN classnameNjkjn)}jq]jt)}jgj=sbc.srpt_handle_tsk_mgmtasbuh1hhj=ubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjN)}(hchh]hch}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j()}(hj+h]hstruct}(hj,>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj(>ubj:)}(h h]h }(hj9>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(>ubh)}(hhh]jN)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hjJ>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjG>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjL>modnameN classnameNjkjn)}jq]j=c.srpt_handle_tsk_mgmtasbuh1hhj(>ubj:)}(h h]h }(hjh>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(>ubj)}(hjh]h*}(hjv>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(>ubjN)}(h recv_ioctxh]h recv_ioctx}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h"struct srpt_send_ioctx *send_ioctxh](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]jN)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj>modnameN classnameNjkjn)}jq]j=c.srpt_handle_tsk_mgmtasbuh1hhj>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjN)}(h send_ioctxh]h send_ioctx}(hj>hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhjy=hhhj=hMdubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhju=hhhj=hMdubah}(h]jp=ah ](jjeh"]h$]h&]jj)jhuh1jhj=hMdhjr=hhubj)}(hhh]h)}(h'process a SRP_TSK_MGMT information unith]h'process a SRP_TSK_MGMT information unit}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMdhj?hhubah}(h]h ]h"]h$]h&]uh1jhjr=hhhj=hMdubeh}(h]h ](jefunctioneh"]h$]h&]jjejj5?jj5?jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. ``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. ``struct srpt_send_ioctx *send_ioctx`` Send I/O context. **Description** Returns 0 if and only if the request will be processed by the target core. For more information about SRP_TSK_MGMT information units, see also section 6.7 in the SRP r16a document.h](h)}(h**Parameters**h]j)}(hj??h]h Parameters}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=?ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhhj9?ubj)}(hhh](j)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hj^?h]hstruct srpt_rdma_ch *ch}(hj`?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMehjX?ubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjw?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs?hMehjt?ubah}(h]h ]h"]h$]h&]uh1jhjX?ubeh}(h]h ]h"]h$]h&]uh1jhjs?hMehjU?ubj)}(h<``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j )}(hj?h]h"struct srpt_recv_ioctx *recv_ioctx}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMfhj?ubj)}(hhh]h)}(hReceive I/O context.h]hReceive I/O context.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMfhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMfhjU?ubj)}(h9``struct srpt_send_ioctx *send_ioctx`` Send I/O context. h](j)}(h&``struct srpt_send_ioctx *send_ioctx``h]j )}(hj?h]h"struct srpt_send_ioctx *send_ioctx}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMghj?ubj)}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMghj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMghjU?ubeh}(h]h ]h"]h$]h&]uh1jhj9?ubh)}(h**Description**h]j)}(hj @h]h Description}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj @ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMihj9?ubh)}(hJReturns 0 if and only if the request will be processed by the target core.h]hJReturns 0 if and only if the request will be processed by the target core.}(hj!@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhhj9?ubh)}(hiFor more information about SRP_TSK_MGMT information units, see also section 6.7 in the SRP r16a document.h]hiFor more information about SRP_TSK_MGMT information units, see also section 6.7 in the SRP r16a document.}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMjhj9?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_handle_new_iu (C function)c.srpt_handle_new_iuhNtauh1jhjhhhNhNubj)}(hhh](j)}(hUbool srpt_handle_new_iu (struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx)h]j")}(hTbool srpt_handle_new_iu(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx)h](j)}(hjjh]hbool}(hj_@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[@hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjm@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[@hhhjl@hMubj)}(hsrpt_handle_new_iuh]jN)}(hsrpt_handle_new_iuh]hsrpt_handle_new_iu}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj{@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[@hhhjl@hMubj)}(h=(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx)h](j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj@modnameN classnameNjkjn)}jq]jt)}jgj@sbc.srpt_handle_new_iuasbuh1hhj@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjN)}(hchh]hch}(hj@hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j()}(hj+h]hstruct}(hj AhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj Aubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Aubh)}(hhh]jN)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hj+AhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj(Aubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj-AmodnameN classnameNjkjn)}jq]j@c.srpt_handle_new_iuasbuh1hhj Aubj:)}(h h]h }(hjIAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Aubj)}(hjh]h*}(hjWAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj AubjN)}(h recv_ioctxh]h recv_ioctx}(hjdAhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubeh}(h]h ]h"]h$]h&]jjuh1jhj[@hhhjl@hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjW@hhhjl@hMubah}(h]jR@ah ](jjeh"]h$]h&]jj)jhuh1jhjl@hMhjT@hhubj)}(hhh]h)}(h)process a newly received information unith]h)process a newly received information unit}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhjT@hhhjl@hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjAjjAjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct srpt_rdma_ch *ch`` RDMA channel through which the information unit has been received. ``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context associated with the information unit.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjAubj)}(hhh](j)}(h_``struct srpt_rdma_ch *ch`` RDMA channel through which the information unit has been received. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hjAh]hstruct srpt_rdma_ch *ch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjAubj)}(hhh]h)}(hBRDMA channel through which the information unit has been received.h]hBRDMA channel through which the information unit has been received.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h```struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context associated with the information unit.h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j )}(hjBh]h"struct srpt_recv_ioctx *recv_ioctx}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjBubj)}(hhh]h)}(h9Receive I/O context associated with the information unit.h]h9Receive I/O context associated with the information unit.}(hj!BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_send_done (C function)c.srpt_send_donehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8void srpt_send_done (struct ib_cq *cq, struct ib_wc *wc)h]j")}(h7void srpt_send_done(struct ib_cq *cq, struct ib_wc *wc)h](j)}(hvoidh]hvoid}(hjbBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^Bhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjqBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^BhhhjpBhMubj)}(hsrpt_send_doneh]jN)}(hsrpt_send_doneh]hsrpt_send_done}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^BhhhjpBhMubj)}(h$(struct ib_cq *cq, struct ib_wc *wc)h](j)}(hstruct ib_cq *cqh](j()}(hj+h]hstruct}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjBubj:)}(h h]h }(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubh)}(hhh]jN)}(hib_cqh]hib_cq}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjBmodnameN classnameNjkjn)}jq]jt)}jgjBsbc.srpt_send_doneasbuh1hhjBubj:)}(h h]h }(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjN)}(hcqh]hcq}(hjBhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(hstruct ib_wc *wch](j()}(hj+h]hstruct}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj Cubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Cubh)}(hhh]jN)}(hib_wch]hib_wc}(hj/ChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,Cubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj1CmodnameN classnameNjkjn)}jq]jBc.srpt_send_doneasbuh1hhj Cubj:)}(h h]h }(hjMChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Cubj)}(hjh]h*}(hj[ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj CubjN)}(hwch]hwc}(hjhChhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj Cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubeh}(h]h ]h"]h$]h&]jjuh1jhj^BhhhjpBhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjZBhhhjpBhMubah}(h]jUBah ](jjeh"]h$]h&]jj)jhuh1jhjpBhMhjWBhhubj)}(hhh]h)}(hsend completion callbackh]hsend completion callback}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjWBhhhjpBhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjCjjCjjjuh1jhhhjhNhNubj)}(hXI**Parameters** ``struct ib_cq *cq`` Completion queue. ``struct ib_wc *wc`` Work completion. **Note** Although this has not yet been observed during tests, at least in theory it is possible that the srpt_get_send_ioctx() call invoked by srpt_handle_new_iu() fails. This is possible because the req_lim_delta value in each response is set to one, and it is possible that this response makes the initiator send a new request before the send completion for that response has been processed. This could e.g. happen if the call to srpt_put_send_iotcx() is delayed because of a higher priority interrupt or if IB retransmission causes generation of the send completion to be delayed. Incoming information units for which srpt_get_send_ioctx() fails are queued on cmd_wait_list. The code below processes these delayed requests one at a time.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjCubj)}(hhh](j)}(h'``struct ib_cq *cq`` Completion queue. h](j)}(h``struct ib_cq *cq``h]j )}(hjCh]hstruct ib_cq *cq}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjCubj)}(hhh]h)}(hCompletion queue.h]hCompletion queue.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjCubj)}(h&``struct ib_wc *wc`` Work completion. h](j)}(h``struct ib_wc *wc``h]j )}(hj Dh]hstruct ib_wc *wc}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjDubj)}(hhh]h)}(hWork completion.h]hWork completion.}(hj%DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!DhM hj"Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj!DhM hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Note**h]j)}(hjGDh]hNote}(hjIDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEDubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjCubh)}(hXAlthough this has not yet been observed during tests, at least in theory it is possible that the srpt_get_send_ioctx() call invoked by srpt_handle_new_iu() fails. This is possible because the req_lim_delta value in each response is set to one, and it is possible that this response makes the initiator send a new request before the send completion for that response has been processed. This could e.g. happen if the call to srpt_put_send_iotcx() is delayed because of a higher priority interrupt or if IB retransmission causes generation of the send completion to be delayed. Incoming information units for which srpt_get_send_ioctx() fails are queued on cmd_wait_list. The code below processes these delayed requests one at a time.h]hXAlthough this has not yet been observed during tests, at least in theory it is possible that the srpt_get_send_ioctx() call invoked by srpt_handle_new_iu() fails. This is possible because the req_lim_delta value in each response is set to one, and it is possible that this response makes the initiator send a new request before the send completion for that response has been processed. This could e.g. happen if the call to srpt_put_send_iotcx() is delayed because of a higher priority interrupt or if IB retransmission causes generation of the send completion to be delayed. Incoming information units for which srpt_get_send_ioctx() fails are queued on cmd_wait_list. The code below processes these delayed requests one at a time.}(hj]DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_create_ch_ib (C function)c.srpt_create_ch_ibhNtauh1jhjhhhNhNubj)}(hhh](j)}(h/int srpt_create_ch_ib (struct srpt_rdma_ch *ch)h]j")}(h.int srpt_create_ch_ib(struct srpt_rdma_ch *ch)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5ubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDhhhjDhM5ubj)}(hsrpt_create_ch_ibh]jN)}(hsrpt_create_ch_ibh]hsrpt_create_ch_ib}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhM5ubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjDubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjDhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjDmodnameN classnameNjkjn)}jq]jt)}jgjDsbc.srpt_create_ch_ibasbuh1hhjDubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjN)}(hchh]hch}(hj"EhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhM5ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjDhhhjDhM5ubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhjDhM5hjDhhubj)}(hhh]h)}(h)create receive and send completion queuesh]h)create receive and send completion queues}(hjLEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hjIEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhM5ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjdEjjdEjjjuh1jhhhjhNhNubj)}(h@**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel.h](h)}(h**Parameters**h]j)}(hjnEh]h Parameters}(hjpEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlEubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM9hjhEubj)}(hhh]j)}(h.``struct srpt_rdma_ch *ch`` SRPT RDMA channel.h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hjEh]hstruct srpt_rdma_ch *ch}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM;hjEubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM6hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM;hjEubah}(h]h ]h"]h$]h&]uh1jhjhEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_close_ch (C function)c.srpt_close_chhNtauh1jhjhhhNhNubj)}(hhh](j)}(h,bool srpt_close_ch (struct srpt_rdma_ch *ch)h]j")}(h+bool srpt_close_ch(struct srpt_rdma_ch *ch)h](j)}(hjjh]hbool}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEhhhjEhMubj)}(h srpt_close_chh]jN)}(h srpt_close_chh]h srpt_close_ch}(hjFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjEhMubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hj#FhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjFubj:)}(h h]h }(hj0FhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjAFhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj>Fubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjCFmodnameN classnameNjkjn)}jq]jt)}jgj Fsbc.srpt_close_chasbuh1hhjFubj:)}(h h]h }(hjaFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubj)}(hjh]h*}(hjoFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjN)}(hchh]hch}(hj|FhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhjEhhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjEhhhjEhMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhjEhhubj)}(hhh]h)}(hclose a RDMA channelh]hclose a RDMA channel}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjFjjFjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. **Description** Make sure all resources associated with the channel will be deallocated at an appropriate time. Returns true if and only if the channel state has been modified into CH_DRAINING.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFubj)}(hhh]j)}(h/``struct srpt_rdma_ch *ch`` SRPT RDMA channel. h](j)}(h``struct srpt_rdma_ch *ch``h]j )}(hjFh]hstruct srpt_rdma_ch *ch}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFubj)}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hj"Gh]h Description}(hj$GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFubh)}(h_Make sure all resources associated with the channel will be deallocated at an appropriate time.h]h_Make sure all resources associated with the channel will be deallocated at an appropriate time.}(hj8GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFubh)}(hQReturns true if and only if the channel state has been modified into CH_DRAINING.h]hQReturns true if and only if the channel state has been modified into CH_DRAINING.}(hjGGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_cm_req_recv (C function)c.srpt_cm_req_recvhNtauh1jhjhhhNhNubj)}(hhh](j)}(hint srpt_cm_req_recv (struct srpt_device *const sdev, struct ib_cm_id *ib_cm_id, struct rdma_cm_id *rdma_cm_id, u8 port_num, __be16 pkey, const struct srp_login_req *req, const char *src_addr)h]j")}(hint srpt_cm_req_recv(struct srpt_device *const sdev, struct ib_cm_id *ib_cm_id, struct rdma_cm_id *rdma_cm_id, u8 port_num, __be16 pkey, const struct srp_login_req *req, const char *src_addr)h](j)}(hinth]hint}(hjvGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrGhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrGhhhjGhMubj)}(hsrpt_cm_req_recvh]jN)}(hsrpt_cm_req_recvh]hsrpt_cm_req_recv}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrGhhhjGhMubj)}(h(struct srpt_device *const sdev, struct ib_cm_id *ib_cm_id, struct rdma_cm_id *rdma_cm_id, u8 port_num, __be16 pkey, const struct srp_login_req *req, const char *src_addr)h](j)}(hstruct srpt_device *const sdevh](j()}(hj+h]hstruct}(hjGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubh)}(hhh]jN)}(h srpt_deviceh]h srpt_device}(hjGhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjGmodnameN classnameNjkjn)}jq]jt)}jgjGsbc.srpt_cm_req_recvasbuh1hhjGubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj()}(hjh]hconst}(hj HhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjGubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubjN)}(hsdevh]hsdev}(hj'HhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hstruct ib_cm_id *ib_cm_idh](j()}(hj+h]hstruct}(hj@HhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjLubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj:Lubj)}(hhh]h)}(hQGID (IB/CM) or IP address (RDMA/CM) of the port that submitted the login request.h]hQGID (IB/CM) or IP address (RDMA/CM) of the port that submitted the login request.}(hjYLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjVLubah}(h]h ]h"]h$]h&]uh1jhj:Lubeh}(h]h ]h"]h$]h&]uh1jhjULhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hj|Lh]h Description}(hj~LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzLubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjJubh)}(hOwnership of the cm_id is transferred to the target session if this function returns zero. Otherwise the caller remains the owner of cm_id.h]hOwnership of the cm_id is transferred to the target session if this function returns zero. Otherwise the caller remains the owner of cm_id.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_cm_rtu_recv (C function)c.srpt_cm_rtu_recvhNtauh1jhjhhhNhNubj)}(hhh](j)}(h/void srpt_cm_rtu_recv (struct srpt_rdma_ch *ch)h]j")}(h.void srpt_cm_rtu_recv(struct srpt_rdma_ch *ch)h](j)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMc ubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLhhhjLhMc ubj)}(hsrpt_cm_rtu_recvh]jN)}(hsrpt_cm_rtu_recvh]hsrpt_cm_rtu_recv}(hjLhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhjLhMc ubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j()}(hj+h]hstruct}(hjLhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjLubj:)}(h h]h }(hj MhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubh)}(hhh]jN)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjMhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjMubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjMmodnameN classnameNjkjn)}jq]jt)}jgjLsbc.srpt_cm_rtu_recvasbuh1hhjLubj:)}(h h]h }(hjNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj:)}(h h]h }(hjQNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>NhhhjPNhM ubj)}(hsrpt_cm_handlerh]jN)}(hsrpt_cm_handlerh]hsrpt_cm_handler}(hjcNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_Nubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>NhhhjPNhM ubj)}(h9(struct ib_cm_id *cm_id, const struct ib_cm_event *event)h](j)}(hstruct ib_cm_id *cm_idh](j()}(hj+h]hstruct}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{Nubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{Nubh)}(hhh]jN)}(hib_cm_idh]hib_cm_id}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjNmodnameN classnameNjkjn)}jq]jt)}jgjeNsbc.srpt_cm_handlerasbuh1hhj{Nubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{Nubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{NubjN)}(hcm_idh]hcm_id}(hjNhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj{Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwNubj)}(hconst struct ib_cm_event *eventh](j()}(hjh]hconst}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj()}(hj+h]hstruct}(hj OhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubh)}(hhh]jN)}(h ib_cm_eventh]h ib_cm_event}(hj*OhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj'Oubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj,OmodnameN classnameNjkjn)}jq]jNc.srpt_cm_handlerasbuh1hhjNubj:)}(h h]h }(hjHOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj)}(hjh]h*}(hjVOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjN)}(heventh]hevent}(hjcOhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwNubeh}(h]h ]h"]h$]h&]jjuh1jhj>NhhhjPNhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:NhhhjPNhM ubah}(h]j5Nah ](jjeh"]h$]h&]jj)jhuh1jhjPNhM hj7Nhhubj)}(hhh]h)}(h'IB connection manager callback functionh]h'IB connection manager callback function}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOhhubah}(h]h ]h"]h$]h&]uh1jhj7NhhhjPNhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjOjjOjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ib_cm_id *cm_id`` IB/CM connection identifier. ``const struct ib_cm_event *event`` IB/CM event. **Description** A non-zero return value will cause the caller destroy the CM ID. **Note** srpt_cm_handler() must only return a non-zero value when transferring ownership of the cm_id to a channel by srpt_cm_req_recv() failed. Returning a non-zero value in any other case will trigger a race with the ib_destroy_cm_id() call in srpt_release_channel().h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubj)}(hhh](j)}(h8``struct ib_cm_id *cm_id`` IB/CM connection identifier. h](j)}(h``struct ib_cm_id *cm_id``h]j )}(hjOh]hstruct ib_cm_id *cm_id}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubj)}(hhh]h)}(hIB/CM connection identifier.h]hIB/CM connection identifier.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM hjOubj)}(h1``const struct ib_cm_event *event`` IB/CM event. h](j)}(h#``const struct ib_cm_event *event``h]j )}(hjPh]hconst struct ib_cm_event *event}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjPubj)}(hhh]h)}(h IB/CM event.h]h IB/CM event.}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hjBPh]h Description}(hjDPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Pubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubh)}(h@A non-zero return value will cause the caller destroy the CM ID.h]h@A non-zero return value will cause the caller destroy the CM ID.}(hjXPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubh)}(h**Note**h]j)}(hjiPh]hNote}(hjkPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgPubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubh)}(hXsrpt_cm_handler() must only return a non-zero value when transferring ownership of the cm_id to a channel by srpt_cm_req_recv() failed. Returning a non-zero value in any other case will trigger a race with the ib_destroy_cm_id() call in srpt_release_channel().h]hXsrpt_cm_handler() must only return a non-zero value when transferring ownership of the cm_id to a channel by srpt_cm_req_recv() failed. Returning a non-zero value in any other case will trigger a race with the ib_destroy_cm_id() call in srpt_release_channel().}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j srpt_queue_response (C function)c.srpt_queue_responsehNtauh1jhjhhhNhNubj)}(hhh](j)}(h-void srpt_queue_response (struct se_cmd *cmd)h]j")}(h,void srpt_queue_response(struct se_cmd *cmd)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0 ubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPhhhjPhM0 ubj)}(hsrpt_queue_responseh]jN)}(hsrpt_queue_responseh]hsrpt_queue_response}(hjPhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjPhM0 ubj)}(h(struct se_cmd *cmd)h]j)}(hstruct se_cmd *cmdh](j()}(hj+h]hstruct}(hjPhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjPubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubh)}(hhh]jN)}(hse_cmdh]hse_cmd}(hj QhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjQubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj QmodnameN classnameNjkjn)}jq]jt)}jgjPsbc.srpt_queue_responseasbuh1hhjPubj:)}(h h]h }(hj)QhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubj)}(hjh]h*}(hj7QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjN)}(hcmdh]hcmd}(hjDQhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhM0 ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjPhhhjPhM0 ubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjPhM0 hjPhhubj)}(hhh]h)}(h'transmit the response to a SCSI commandh]h'transmit the response to a SCSI command}(hjnQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0 hjkQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhM0 ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjQjjQjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct se_cmd *cmd`` SCSI target command. **Description** Callback function called by the TCM core. Must not block since it can be invoked on the context of the IB completion handler.h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4 hjQubj)}(hhh]j)}(h,``struct se_cmd *cmd`` SCSI target command. h](j)}(h``struct se_cmd *cmd``h]j )}(hjQh]hstruct se_cmd *cmd}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1 hjQubj)}(hhh]h)}(hSCSI target command.h]hSCSI target command.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM1 hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM1 hjQubah}(h]h ]h"]h$]h&]uh1jhjQubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3 hjQubh)}(h}Callback function called by the TCM core. Must not block since it can be invoked on the context of the IB completion handler.h]h}Callback function called by the TCM core. Must not block since it can be invoked on the context of the IB completion handler.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2 hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_release_sport (C function)c.srpt_release_sporthNtauh1jhjhhhNhNubj)}(hhh](j)}(h0int srpt_release_sport (struct srpt_port *sport)h]j")}(h/int srpt_release_sport(struct srpt_port *sport)h](j)}(hinth]hint}(hj/RhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+Rhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj:)}(h h]h }(hj>RhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+Rhhhj=RhM ubj)}(hsrpt_release_sporth]jN)}(hsrpt_release_sporth]hsrpt_release_sport}(hjPRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjLRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+Rhhhj=RhM ubj)}(h(struct srpt_port *sport)h]j)}(hstruct srpt_port *sporth](j()}(hj+h]hstruct}(hjlRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhRubj:)}(h h]h }(hjyRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhRubh)}(hhh]jN)}(h srpt_porth]h srpt_port}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjRubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjRmodnameN classnameNjkjn)}jq]jt)}jgjRRsbc.srpt_release_sportasbuh1hhjhRubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubjN)}(hsporth]hsport}(hjRhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjhRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdRubah}(h]h ]h"]h$]h&]jjuh1jhj+Rhhhj=RhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj'Rhhhj=RhM ubah}(h]j"Rah ](jjeh"]h$]h&]jj)jhuh1jhj=RhM hj$Rhhubj)}(hhh]h)}(h.disable login and wait for associated channelsh]h.disable login and wait for associated channels}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjRhhubah}(h]h ]h"]h$]h&]uh1jhj$Rhhhj=RhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjSjjSjjjuh1jhhhjhNhNubj)}(h<**Parameters** ``struct srpt_port *sport`` SRPT HCA port.h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj Subj)}(hhh]j)}(h*``struct srpt_port *sport`` SRPT HCA port.h](j)}(h``struct srpt_port *sport``h]j )}(hj0Sh]hstruct srpt_port *sport}(hj2ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Subah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj*Subj)}(hhh]h)}(hSRPT HCA port.h]hSRPT HCA port.}(hjIShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjFSubah}(h]h ]h"]h$]h&]uh1jhj*Subeh}(h]h ]h"]h$]h&]uh1jhjEShM hj'Subah}(h]h ]h"]h$]h&]uh1jhj Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_lookup_port (C function)c.srpt_lookup_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(h;struct port_and_port_id srpt_lookup_port (const char *name)h]j")}(h:struct port_and_port_id srpt_lookup_port(const char *name)h](j()}(hj+h]hstruct}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjShhhjShM ubh)}(hhh]jN)}(hport_and_port_idh]hport_and_port_id}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjSmodnameN classnameNjkjn)}jq]jt)}jgsrpt_lookup_portsbc.srpt_lookup_portasbuh1hhjShhhjShM ubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjShhhjShM ubj)}(hsrpt_lookup_porth]jN)}(hjSh]hsrpt_lookup_port}(hjShhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShM ubj)}(h(const char *name)h]j)}(hconst char *nameh](j()}(hjh]hconst}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjSubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj)}(hcharh]hchar}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubj:)}(h h]h }(hj ThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj)}(hjh]h*}(hj.ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjN)}(hnameh]hname}(hj;ThhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjShhhjShM ubah}(h]j}Sah ](jjeh"]h$]h&]jj)jhuh1jhjShM hjShhubj)}(hhh]h)}(hLook up an RDMA port by nameh]hLook up an RDMA port by name}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjbThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj}Tjj}Tjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const char *name`` ASCII port name **Description** Increments the RDMA port reference count if an RDMA port pointer is returned. The caller must drop that reference count by calling srpt_port_put_ref().h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjTubj)}(hhh]j)}(h%``const char *name`` ASCII port name h](j)}(h``const char *name``h]j )}(hjTh]hconst char *name}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjTubj)}(hhh]h)}(hASCII port nameh]hASCII port name}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjTubh)}(hIncrements the RDMA port reference count if an RDMA port pointer is returned. The caller must drop that reference count by calling srpt_port_put_ref().h]hIncrements the RDMA port reference count if an RDMA port pointer is returned. The caller must drop that reference count by calling srpt_port_put_ref().}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_add_one (C function)c.srpt_add_onehNtauh1jhjhhhNhNubj)}(hhh](j)}(h+int srpt_add_one (struct ib_device *device)h]j")}(h*int srpt_add_one(struct ib_device *device)h](j)}(hinth]hint}(hj&UhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"Uhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj:)}(h h]h }(hj5UhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"Uhhhj4UhM ubj)}(h srpt_add_oneh]jN)}(h srpt_add_oneh]h srpt_add_one}(hjGUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjCUubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"Uhhhj4UhM ubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j()}(hj+h]hstruct}(hjcUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj_Uubj:)}(h h]h }(hjpUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_Uubh)}(hhh]jN)}(h ib_deviceh]h ib_device}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj~Uubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjUmodnameN classnameNjkjn)}jq]jt)}jgjIUsbc.srpt_add_oneasbuh1hhj_Uubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_Uubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_UubjN)}(hdeviceh]hdevice}(hjUhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_Uubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[Uubah}(h]h ]h"]h$]h&]jjuh1jhj"Uhhhj4UhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjUhhhj4UhM ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhj4UhM hjUhhubj)}(hhh]h)}(h,InfiniBand device addition callback functionh]h,InfiniBand device addition callback function}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjUhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhj4UhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjUjjUjjjuh1jhhhjhNhNubj)}(h?**Parameters** ``struct ib_device *device`` Describes a HCA.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjVubj)}(hhh]j)}(h-``struct ib_device *device`` Describes a HCA.h](j)}(h``struct ib_device *device``h]j )}(hj'Vh]hstruct ib_device *device}(hj)VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Vubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj!Vubj)}(hhh]h)}(hDescribes a HCA.h]hDescribes a HCA.}(hj@VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj=Vubah}(h]h ]h"]h$]h&]uh1jhj!Vubeh}(h]h ]h"]h$]h&]uh1jhjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,Wubj)}(hjh]h*}(hjLWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,WubjN)}(h client_datah]h client_data}(hjYWhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj,Wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhj}VhhhjVhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjyVhhhjVhM ubah}(h]jtVah ](jjeh"]h$]h&]jj)jhuh1jhjVhM hjvVhhubj)}(hhh]h)}(h+InfiniBand device removal callback functionh]h+InfiniBand device removal callback function}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjWhhubah}(h]h ]h"]h$]h&]uh1jhjvVhhhjVhM ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjWjjWjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_device *device`` Describes a HCA. ``void *client_data`` The value passed as the third argument to ib_set_client_data().h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjWubj)}(hhh](j)}(h.``struct ib_device *device`` Describes a HCA. h](j)}(h``struct ib_device *device``h]j )}(hjWh]hstruct ib_device *device}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjWubj)}(hhh]h)}(hDescribes a HCA.h]hDescribes a HCA.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubj)}(hU``void *client_data`` The value passed as the third argument to ib_set_client_data().h](j)}(h``void *client_data``h]j )}(hjWh]hvoid *client_data}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjWubj)}(hhh]h)}(h?The value passed as the third argument to ib_set_client_data().h]h?The value passed as the third argument to ib_set_client_data().}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhM hjWubeh}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_close_session (C function)c.srpt_close_sessionhNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void srpt_close_session (struct se_session *se_sess)h]j")}(h3void srpt_close_session(struct se_session *se_sess)h](j)}(hvoidh]hvoid}(hjWXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSXhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM[ ubj:)}(h h]h }(hjfXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSXhhhjeXhM[ ubj)}(hsrpt_close_sessionh]jN)}(hsrpt_close_sessionh]hsrpt_close_session}(hjxXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjtXubah}(h]h ](jjeh"]h$]h&]jjuh1jhjSXhhhjeXhM[ ubj)}(h(struct se_session *se_sess)h]j)}(hstruct se_session *se_sessh](j()}(hj+h]hstruct}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjXubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubh)}(hhh]jN)}(h se_sessionh]h se_session}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjXmodnameN classnameNjkjn)}jq]jt)}jgjzXsbc.srpt_close_sessionasbuh1hhjXubj:)}(h h]h }(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjN)}(hse_sessh]hse_sess}(hjXhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjSXhhhjeXhM[ ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjOXhhhjeXhM[ ubah}(h]jJXah ](jjeh"]h$]h&]jj)jhuh1jhjeXhM[ hjLXhhubj)}(hhh]h)}(hforcibly close a sessionh]hforcibly close a session}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM[ hjYhhubah}(h]h ]h"]h$]h&]uh1jhjLXhhhjeXhM[ ubeh}(h]h ](jefunctioneh"]h$]h&]jjejj/Yjj/Yjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct se_session *se_sess`` SCSI target session. **Description** Callback function invoked by the TCM core to clean up sessions associated with a node ACL when the user invokes rmdir /sys/kernel/config/target/$driver/$port/$tpg/acls/$i_port_idh](h)}(h**Parameters**h]j)}(hj9Yh]h Parameters}(hj;YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Yubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_ hj3Yubj)}(hhh]j)}(h4``struct se_session *se_sess`` SCSI target session. h](j)}(h``struct se_session *se_sess``h]j )}(hjXYh]hstruct se_session *se_sess}(hjZYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM\ hjRYubj)}(hhh]h)}(hSCSI target session.h]hSCSI target session.}(hjqYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmYhM\ hjnYubah}(h]h ]h"]h$]h&]uh1jhjRYubeh}(h]h ]h"]h$]h&]uh1jhjmYhM\ hjOYubah}(h]h ]h"]h$]h&]uh1jhj3Yubh)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^ hj3Yubh)}(hCallback function invoked by the TCM core to clean up sessions associated with a node ACL when the user invokes rmdir /sys/kernel/config/target/$driver/$port/$tpg/acls/$i_port_idh]hCallback function invoked by the TCM core to clean up sessions associated with a node ACL when the user invokes rmdir /sys/kernel/config/target/$driver/$port/$tpg/acls/$i_port_id}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM] hj3Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!srpt_parse_i_port_id (C function)c.srpt_parse_i_port_idhNtauh1jhjhhhNhNubj)}(hhh](j)}(h=int srpt_parse_i_port_id (u8 i_port_id[16], const char *name)h]j")}(h\ubj)}(hconst char *nameh](j()}(hjh]hconst}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj\ubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubj)}(hcharh]hchar}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\ubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjN)}(hnameh]hname}(hj\hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>\ubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj[hhhj[hMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jhj[hMhj[hhubj)}(hhh]h)}(hPconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port/$tpgh]hPconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port/$tpg}(hj$]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj!]hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj<]jj<]jjjuh1jhhhjhNhNubj)}(hd**Parameters** ``struct se_wwn *wwn`` Corresponds to $driver/$port. ``const char *name`` $tpg.h](h)}(h**Parameters**h]j)}(hjF]h]h Parameters}(hjH]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD]ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj@]ubj)}(hhh](j)}(h5``struct se_wwn *wwn`` Corresponds to $driver/$port. h](j)}(h``struct se_wwn *wwn``h]j )}(hje]h]hstruct se_wwn *wwn}(hjg]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj_]ubj)}(hhh]h)}(hCorresponds to $driver/$port.h]hCorresponds to $driver/$port.}(hj~]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz]hMhj{]ubah}(h]h ]h"]h$]h&]uh1jhj_]ubeh}(h]h ]h"]h$]h&]uh1jhjz]hMhj\]ubj)}(h``const char *name`` $tpg.h](j)}(h``const char *name``h]j )}(hj]h]hconst char *name}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj]ubj)}(hhh]h)}(h$tpg.h]h$tpg.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj\]ubeh}(h]h ]h"]h$]h&]uh1jhj@]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_drop_tpg (C function)c.srpt_drop_tpghNtauh1jhjhhhNhNubj)}(hhh](j)}(h0void srpt_drop_tpg (struct se_portal_group *tpg)h]j")}(h/void srpt_drop_tpg(struct se_portal_group *tpg)h](j)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]hhhj^hMubj)}(h srpt_drop_tpgh]jN)}(h srpt_drop_tpgh]h srpt_drop_tpg}(hj^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhj^hMubj)}(h(struct se_portal_group *tpg)h]j)}(hstruct se_portal_group *tpgh](j()}(hj+h]hstruct}(hj5^hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj1^ubj:)}(h h]h }(hjB^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1^ubh)}(hhh]jN)}(hse_portal_grouph]hse_portal_group}(hjS^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjP^ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjU^modnameN classnameNjkjn)}jq]jt)}jgj^sbc.srpt_drop_tpgasbuh1hhj1^ubj:)}(h h]h }(hjs^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1^ubjN)}(htpgh]htpg}(hj^hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj1^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-^ubah}(h]h ]h"]h$]h&]jjuh1jhj]hhhj^hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj]hhhj^hMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhj^hMhj]hhubj)}(hhh]h)}(hPconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port/$tpgh]hPconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port/$tpg}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj^hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj^jj^jjjuh1jhhhjhNhNubj)}(hT**Parameters** ``struct se_portal_group *tpg`` Target portal group to deregister.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj^ubj)}(hhh]j)}(hB``struct se_portal_group *tpg`` Target portal group to deregister.h](j)}(h``struct se_portal_group *tpg``h]j )}(hj^h]hstruct se_portal_group *tpg}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj^ubj)}(hhh]h)}(h"Target portal group to deregister.h]h"Target portal group to deregister.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_make_tport (C function)c.srpt_make_tporthNtauh1jhjhhhNhNubj)}(hhh](j)}(hqstruct se_wwn * srpt_make_tport (struct target_fabric_configfs *tf, struct config_group *group, const char *name)h]j")}(hostruct se_wwn *srpt_make_tport(struct target_fabric_configfs *tf, struct config_group *group, const char *name)h](j()}(hj+h]hstruct}(hjS_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjO_hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hja_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjO_hhhj`_hMubh)}(hhh]jN)}(hse_wwnh]hse_wwn}(hjr_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjo_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjt_modnameN classnameNjkjn)}jq]jt)}jgsrpt_make_tportsbc.srpt_make_tportasbuh1hhjO_hhhj`_hMubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjO_hhhj`_hMubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO_hhhj`_hMubj)}(hsrpt_make_tporth]jN)}(hj_h]hsrpt_make_tport}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjO_hhhj`_hMubj)}(hQ(struct target_fabric_configfs *tf, struct config_group *group, const char *name)h](j)}(h!struct target_fabric_configfs *tfh](j()}(hj+h]hstruct}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj_ubj:)}(h h]h }(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubh)}(hhh]jN)}(htarget_fabric_configfsh]htarget_fabric_configfs}(hj_hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj_modnameN classnameNjkjn)}jq]j_c.srpt_make_tportasbuh1hhj_ubj:)}(h h]h }(hj `hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjN)}(htfh]htf}(hj$`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hstruct config_group *grouph](j()}(hj+h]hstruct}(hj=`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj9`ubj:)}(h h]h }(hjJ`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9`ubh)}(hhh]jN)}(h config_grouph]h config_group}(hj[`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjX`ubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj]`modnameN classnameNjkjn)}jq]j_c.srpt_make_tportasbuh1hhj9`ubj:)}(h h]h }(hjy`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubjN)}(hgrouph]hgroup}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj9`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hconst char *nameh](j()}(hjh]hconst}(hj`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj`ubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubj)}(hcharh]hchar}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjN)}(hnameh]hname}(hj`hhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhjO_hhhj`_hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjK_hhhj`_hMubah}(h]jF_ah ](jjeh"]h$]h&]jj)jhuh1jhj`_hMhjH_hhubj)}(hhh]h)}(hKconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$porth]hKconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhjH_hhhj`_hMubeh}(h]h ](jefunctioneh"]h$]h&]jjejj3ajj3ajjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct target_fabric_configfs *tf`` Not used. ``struct config_group *group`` Not used. ``const char *name`` $port.h](h)}(h**Parameters**h]j)}(hj=ah]h Parameters}(hj?ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;aubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj7aubj)}(hhh](j)}(h0``struct target_fabric_configfs *tf`` Not used. h](j)}(h%``struct target_fabric_configfs *tf``h]j )}(hj\ah]h!struct target_fabric_configfs *tf}(hj^ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjVaubj)}(hhh]h)}(h Not used.h]h Not used.}(hjuahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqahMhjraubah}(h]h ]h"]h$]h&]uh1jhjVaubeh}(h]h ]h"]h$]h&]uh1jhjqahMhjSaubj)}(h)``struct config_group *group`` Not used. h](j)}(h``struct config_group *group``h]j )}(hjah]hstruct config_group *group}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubj)}(hhh]h)}(h Not used.h]h Not used.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjSaubj)}(h``const char *name`` $port.h](j)}(h``const char *name``h]j )}(hjah]hconst char *name}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubj)}(hhh]h)}(h$port.h]h$port.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjSaubeh}(h]h ]h"]h$]h&]uh1jhj7aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_drop_tport (C function)c.srpt_drop_tporthNtauh1jhjhhhNhNubj)}(hhh](j)}(h)void srpt_drop_tport (struct se_wwn *wwn)h]j")}(h(void srpt_drop_tport(struct se_wwn *wwn)h](j)}(hvoidh]hvoid}(hj(bhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$bhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj:)}(h h]h }(hj7bhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$bhhhj6bhMubj)}(hsrpt_drop_tporth]jN)}(hsrpt_drop_tporth]hsrpt_drop_tport}(hjIbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjEbubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$bhhhj6bhMubj)}(h(struct se_wwn *wwn)h]j)}(hstruct se_wwn *wwnh](j()}(hj+h]hstruct}(hjebhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjabubj:)}(h h]h }(hjrbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjabubh)}(hhh]jN)}(hse_wwnh]hse_wwn}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjbubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetjbmodnameN classnameNjkjn)}jq]jt)}jgjKbsbc.srpt_drop_tportasbuh1hhjabubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjabubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjabubjN)}(hwwnh]hwwn}(hjbhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjabubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]bubah}(h]h ]h"]h$]h&]jjuh1jhj$bhhhj6bhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj bhhhj6bhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj6bhMhjbhhubj)}(hhh]h)}(hKconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$porth]hKconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj6bhMubeh}(h]h ](jefunctioneh"]h$]h&]jjejjcjjcjjjuh1jhhhjhNhNubj)}(h/**Parameters** ``struct se_wwn *wwn`` $port.h](h)}(h**Parameters**h]j)}(hj ch]h Parameters}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjcubj)}(hhh]j)}(h``struct se_wwn *wwn`` $port.h](j)}(h``struct se_wwn *wwn``h]j )}(hj)ch]hstruct se_wwn *wwn}(hj+chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj#cubj)}(hhh]h)}(h$port.h]h$port.}(hjBchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj?cubah}(h]h ]h"]h$]h&]uh1jhj#cubeh}(h]h ]h"]h$]h&]uh1jhj>chM hj cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrpt_init_module (C function)c.srpt_init_modulehNtauh1jhjhhhNhNubj)}(hhh](j)}(hint srpt_init_module (void)h]j")}(hint srpt_init_module(void)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_ubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjchhhjchM_ubj)}(hsrpt_init_moduleh]jN)}(hsrpt_init_moduleh]hsrpt_init_module}(hjchhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjchM_ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]noemphjjuh1jhjcubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjchM_ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj{chhhjchM_ubah}(h]jvcah ](jjeh"]h$]h&]jj)jhuh1jhjchM_hjxchhubj)}(hhh]h)}(hkernel module initializationh]hkernel module initialization}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_hjchhubah}(h]h ]h"]h$]h&]uh1jhjxchhhjchM_ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjdjjdjjjuh1jhhhjhNhNubj)}(hX'**Parameters** ``void`` no arguments **Note** Since ib_register_client() registers callback functions, and since at least one of these callback functions (srpt_add_one()) calls target core functions, this driver must be registered with the target core before ib_register_client() is called.h](h)}(h**Parameters**h]j)}(hj dh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj dubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMchjdubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j )}(hj+dh]hvoid}(hj-dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhj%dubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjDdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@dhKhjAdubah}(h]h ]h"]h$]h&]uh1jhj%dubeh}(h]h ]h"]h$]h&]uh1jhj@dhKhj"dubah}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Note**h]j)}(hjfdh]hNote}(hjhdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjddubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjdubh)}(hSince ib_register_client() registers callback functions, and since at least one of these callback functions (srpt_add_one()) calls target core functions, this driver must be registered with the target core before ib_register_client() is called.h]hSince ib_register_client() registers callback functions, and since at least one of these callback functions (srpt_add_one()) calls target core functions, this driver must be registered with the target core before ib_register_client() is called.}(hj|dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/srpt/ib_srpt.chMahjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h],infiniband-scsi-rdma-protocol-target-supportah ]h"],infiniband scsi rdma protocol target supportah$]h&]uh1hhjyhhhhhK`ubh)}(hhh](h)}(h/iSCSI Extensions for RDMA (iSER) target supporth]h/iSCSI Extensions for RDMA (iSER) target support}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhKiubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!isert_conn_terminate (C function)c.isert_conn_terminatehNtauh1jhjdhhhNhNubj)}(hhh](j)}(h9void isert_conn_terminate (struct isert_conn *isert_conn)h]j")}(h8void isert_conn_terminate(struct isert_conn *isert_conn)h](j)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM8ubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdhhhjdhM8ubj)}(hisert_conn_terminateh]jN)}(hisert_conn_terminateh]hisert_conn_terminate}(hjdhhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjdhM8ubj)}(h(struct isert_conn *isert_conn)h]j)}(hstruct isert_conn *isert_connh](j()}(hj+h]hstruct}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjdubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubh)}(hhh]jN)}(h isert_connh]h isert_conn}(hjehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjeubah}(h]h ]h"]h$]h&] refdomainjereftypejg reftargetj!emodnameN classnameNjkjn)}jq]jt)}jgjdsbc.isert_conn_terminateasbuh1hhjdubj:)}(h h]h }(hj?ehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubj)}(hjh]h*}(hjMehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjN)}(h isert_connh]h isert_conn}(hjZehhhNhNubah}(h]h ]jZah"]h$]h&]uh1jMhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubah}(h]h ]h"]h$]h&]jjuh1jhjdhhhjdhM8ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjdhhhjdhM8ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhjdhM8hjdhhubj)}(hhh]h)}(hInitiate connection terminationh]hInitiate connection termination}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM8hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM8ubeh}(h]h ](jefunctioneh"]h$]h&]jjejjejjejjjuh1jhhhjdhNhNubj)}(hXX**Parameters** ``struct isert_conn *isert_conn`` isert connection struct **Notes** In case the connection state is BOUND, move state to TEMINATING and start teardown sequence (rdma_disconnect). In case the connection state is UP, complete flush as well. This routine must be called with mutex held. Thus it is safe to call multiple times.h](h)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM<hjeubj)}(hhh]j)}(h:``struct isert_conn *isert_conn`` isert connection struct h](j)}(h!``struct isert_conn *isert_conn``h]j )}(hjeh]hstruct isert_conn *isert_conn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM9hjeubj)}(hhh]h)}(hisert connection structh]hisert connection struct}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM9hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehM9hjeubah}(h]h ]h"]h$]h&]uh1jhjeubh)}(h **Notes**h]j)}(hjfh]hNotes}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM;hjeubh)}(hIn case the connection state is BOUND, move state to TEMINATING and start teardown sequence (rdma_disconnect). In case the connection state is UP, complete flush as well.h]hIn case the connection state is BOUND, move state to TEMINATING and start teardown sequence (rdma_disconnect). In case the connection state is UP, complete flush as well.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM;hjeubh)}(hTThis routine must be called with mutex held. Thus it is safe to call multiple times.h]hTThis routine must be called with mutex held. Thus it is safe to call multiple times.}(hj%fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/isert/ib_isert.chM?hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)isert_put_unsol_pending_cmds (C function)c.isert_put_unsol_pending_cmdshNtauh1jhjdhhhNhNubj)}(hhh](j)}(h,jC,j-j-j 1j%1j3j 3j4j4j7j7j=j=jCEjHEjLjLjWQj\QjUjUjZjZj_j_jdjdjmgjrgjjjjjmjmjnjnj4pj9pjrjrj.tj3tjhvjmvj]yjbyjzj{j|j|j-~j2~jjj>jCj΂jӂjsjxjjjujzj2j7jjj~jj֒jےjjjjjjjjjjj jjjj j%j@jEjjjjjjjjjjjjjPjUj!j&j>jCjjjjjjjjj(j-j,j1jjj$j)j7j<jjjjj_jdjj jcjhjjjjjjjjjjj j jjjjjjjjjjj"j"j&j&jv*j{*j+j+j-j.jo1jt1jv5j{5jxj8j9j9j*<j/<j,>j1>jBjBj7Gj