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]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_requesthNtauh1hhhhhhNhNubhdesc)}(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}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhi/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&]uh1j%hjhhhj$hKaubh)}(hhh]h desc_sig_name)}(hiwpm_nlmsg_requesth]hiwpm_nlmsg_request}(hj;hhhNhNubah}(h]h ]nah"]h$]h&]uh1j9hj6ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj=modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jX ASTIdentifier)}jSiwpm_get_nlmsg_requestsbc.iwpm_get_nlmsg_requestasbuh1hhjhhhj$hKaubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj$hKaubhdesc_sig_punctuation)}(h*h]h*}(hjvhhhNhNubah}(h]h ]pah"]h$]h&]uh1jthjhhhj$hKaubh desc_name)}(hiwpm_get_nlmsg_requesth]j:)}(hjch]hiwpm_get_nlmsg_request}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjhhhj$hKaubhdesc_parameterlist)}(h*(__u32 nlmsg_seq, u8 nl_client, gfp_t gfp)h](hdesc_parameter)}(h__u32 nlmsg_seqh](h)}(hhh]j:)}(h__u32h]h__u32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jac.iwpm_get_nlmsg_requestasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h nlmsg_seqh]h nlmsg_seq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 nl_clienth](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jac.iwpm_get_nlmsg_requestasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h nl_clienth]h nl_client}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h gfp_t gfph](h)}(hhh]j:)}(hgfp_th]hgfp_t}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjCmodnameN classnameNjWjZ)}j]]jac.iwpm_get_nlmsg_requestasbuh1hhj:ubj&)}(h h]h }(hj_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubj:)}(hgfph]hgfp}(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj$hKaubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j sphinx_line_type declaratorhj hhhj$hKaubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj$hKahjhhubh 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&]uh1jhjhhhj$hKaubeh}(h]h ](jQfunctioneh"]h$]h&]domainjQobjtypejdesctypejnoindex 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}(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.hhKbhjubh definition)}(hhh]h)}(h&Sequence number of the netlink messageh]h&Sequence number of the netlink message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKbhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKbhjubj)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j)}(hj/h]h u8 nl_client}(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.hhKchj)ubj )}(hhh]h)}(hThe index of the netlink clienth]hThe index of the netlink client}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKchjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKchjubj)}(hK``gfp_t gfp`` Indicates how the memory for the request should be allocated h](j)}(h ``gfp_t gfp``h]j)}(hjhh]h gfp_t gfp}(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.hhKdhjbubj )}(hhh]h)}(hhhhjShKsubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhjShKshj;hhubj)}(hhh]h)}(h0Find netlink message request in the request listh]h0Find netlink message request in the request list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKshjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjShKsubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj1jj1jjjuh1jhhhhhNhNubj)}(h**Parameters** ``__u32 echo_seq`` Sequence number of the netlink request to find **Description** Returns the found netlink message request, if not found, returns NULLh](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKwhj5ubj)}(hhh]j)}(hB``__u32 echo_seq`` Sequence number of the netlink request to find h](j)}(h``__u32 echo_seq``h]j)}(hjZh]h__u32 echo_seq}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKthjTubj )}(hhh]h)}(h.Sequence number of the netlink request to findh]h.Sequence number of the netlink request to find}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKthjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohKthjQubah}(h]h ]h"]h$]h&]uh1jhj5ubh)}(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.hhKvhj5ubh)}(hEReturns the found netlink message request, if not found, returns NULLh]hEReturns the found netlink message request, if not found, returns NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKuhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#iwpm_wait_complete_req (C function)c.iwpm_wait_complete_reqhNtauh1hhhhhhNhNubj)}(hhh](j)}(hEint iwpm_wait_complete_req (struct iwpm_nlmsg_request *nlmsg_request)h]j)}(hDint iwpm_wait_complete_req(struct iwpm_nlmsg_request *nlmsg_request)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhK|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhK|ubj)}(hiwpm_wait_complete_reqh]j:)}(hiwpm_wait_complete_reqh]hiwpm_wait_complete_req}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK|ubj)}(h*(struct iwpm_nlmsg_request *nlmsg_request)h]j)}(h(struct iwpm_nlmsg_request *nlmsg_requesth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiwpm_nlmsg_requesth]hiwpm_nlmsg_request}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj7modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_wait_complete_reqasbuh1hhjubj&)}(h h]h }(hjUhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h nlmsg_requesth]h nlmsg_request}(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK|ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhK|ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK|hjhhubj)}(hhh]h)}(h)Block while servicing the netlink requesth]h)Block while servicing the netlink request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhK|hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK|ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct iwpm_nlmsg_request *nlmsg_request`` Netlink message request to service **Description** Wakes up, after the request is completed or expired Returns 0 if the request is complete without errorh](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)}(hP``struct iwpm_nlmsg_request *nlmsg_request`` Netlink message request to service h](j)}(h,``struct iwpm_nlmsg_request *nlmsg_request``h]j)}(hjh]h(struct iwpm_nlmsg_request *nlmsg_request}(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.hhK}hjubj )}(hhh]h)}(h"Netlink message request to serviceh]h"Netlink message request to service}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK}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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubh)}(hfWakes up, after the request is completed or expired Returns 0 if the request is complete without errorh]hfWakes up, after the request is completed or expired Returns 0 if the request is complete without error}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhK~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiwpm_get_nlmsg_seq (C function)c.iwpm_get_nlmsg_seqhNtauh1hhhhhhNhNubj)}(hhh](j)}(hint iwpm_get_nlmsg_seq (void)h]j)}(hint iwpm_get_nlmsg_seq(void)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj&)}(h h]h }(hjjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWhhhjihKubj)}(hiwpm_get_nlmsg_seqh]j:)}(hiwpm_get_nlmsg_seqh]hiwpm_get_nlmsg_seq}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjihKubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjWhhhjihKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjShhhjihKubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhjihKhjPhhubj)}(hhh]h)}(hHGet the sequence number for a netlink message to send to the port mapperh]hHGet the sequence number for a netlink message to send to the 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&]uh1jhjPhhhjihKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hn**Parameters** ``void`` no arguments **Description** Returns the sequence number for the netlink message.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:13: ./drivers/infiniband/core/iwpm_util.hhKhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj h]hvoid}(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)}(h no argumentsh]h no arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjubh)}(h4Returns the sequence number for the netlink message.h]h4Returns the sequence number for the netlink message.}(hjT hhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!iwpm_add_remote_info (C function)c.iwpm_add_remote_infohNtauh1hhhhhhNhNubj)}(hhh](j)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj;ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"iwpm_get_registration (C function)c.iwpm_get_registrationhNtauh1hhhhhhNhNubj)}(hhh](j)}(h(u32 iwpm_get_registration (u8 nl_client)h]j)}(h'u32 iwpm_get_registration(u8 nl_client)h](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSiwpm_get_registrationsbc.iwpm_get_registrationasbuh1hhj{hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{hhhjhKubj)}(hiwpm_get_registrationh]j:)}(hjh]hiwpm_get_registration}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhjhKubj)}(h(u8 nl_client)h]j)}(h u8 nl_clienth](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.iwpm_get_registrationasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h nl_clienth]h nl_client}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjthhubj)}(hhh]h)}(hGet the client registrationh]hGet the client registration}(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&]uh1jhjthhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjBjjBjjjuh1jhhhhhNhNubj)}(hy**Parameters** ``u8 nl_client`` The index of the netlink client **Description** Returns the client registration typeh](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjFubj)}(hhh]j)}(h1``u8 nl_client`` The index of the netlink client h](j)}(h``u8 nl_client``h]j)}(hjkh]h u8 nl_client}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjeubj )}(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&]uh1j hjeubeh}(h]h ]h"]h$]h&]uh1jhjhKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubh)}(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.hhKhjFubh)}(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.hhKhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiwpm_send_mapinfo (C function)c.iwpm_send_mapinfohNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_send_mapinfoh]j:)}(hiwpm_send_mapinfoh]hiwpm_send_mapinfo}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(u8 nl_client, int iwpm_pid)h](j)}(h u8 nl_clienth](h)}(hhh]j:)}(hu8h]hu8}(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_send_mapinfoasbuh1hhj$ubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubj:)}(h nl_clienth]h nl_client}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int iwpm_pidh](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnubj:)}(hiwpm_pidh]hiwpm_pid}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubeh}(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)}(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&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(hjh]h u8 nl_client}(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)}(hThe index of the netlink clienth]hThe index of the netlink client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h7``int iwpm_pid`` The pid of the user space port mapper h](j)}(h``int iwpm_pid``h]j)}(hj2h]h int iwpm_pid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjHubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#iwpm_mapinfo_available (C function)c.iwpm_mapinfo_availablehNtauh1hhhhhhNhNubj)}(hhh](j)}(h!int iwpm_mapinfo_available (void)h]j)}(h int iwpm_mapinfo_available(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_mapinfo_availableh]j:)}(hiwpm_mapinfo_availableh]hiwpm_mapinfo_available}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]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}(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 ](jQfunctioneh"]h$]h&]jjQjj1jj1jjjuh1jhhhhhNhNubj)}(h|**Parameters** ``void`` no arguments **Description** Returns 1 if mapping information is available, otherwise returns 0h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj5ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjZh]hvoid}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjTubj )}(hhh]h)}(h no argumentsh]h no arguments}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubh)}(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.hhKhj5ubh)}(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.hhKhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"iwpm_compare_sockaddr (C function)c.iwpm_compare_sockaddrhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_compare_sockaddrh]j:)}(hiwpm_compare_sockaddrh]hiwpm_compare_sockaddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsockaddr_storageh]hsockaddr_storage}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj7modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_compare_sockaddrasbuh1hhjubj&)}(h h]h }(hjUhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h a_sockaddrh]h a_sockaddr}(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct sockaddr_storage *b_sockaddrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsockaddr_storageh]hsockaddr_storage}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jQc.iwpm_compare_sockaddrasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h b_sockaddrh]h b_sockaddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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$Compare two sockaddr storage structsh]h$Compare two sockaddr storage structs}(hj hhhNhNubah}(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 ](jQfunctioneh"]h$]h&]jjQjj"jj"jjjuh1jhhhhhNhNubj)}(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}(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.hhKhj&ubj)}(hhh](j)}(hB``struct sockaddr_storage *a_sockaddr`` first sockaddr to compare h](j)}(h'``struct sockaddr_storage *a_sockaddr``h]j)}(hjKh]h#struct sockaddr_storage *a_sockaddr}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjEubj )}(hhh]h)}(hfirst sockaddr to compareh]hfirst sockaddr to compare}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjBubj)}(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.hhKhj~ubj )}(hhh]h)}(hsecond sockaddr to compareh]hsecond sockaddr to compare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjBubeh}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%iwpm_validate_nlmsg_attr (C function)c.iwpm_validate_nlmsg_attrhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_validate_nlmsg_attrh]j:)}(hiwpm_validate_nlmsg_attrh]hiwpm_validate_nlmsg_attr}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h&(struct nlattr *nltb[], int nla_count)h](j)}(hstruct nlattr *nltb[]h](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=ubh)}(hhh]j:)}(hnlattrh]hnlattr}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjamodnameN classnameNjWjZ)}j]]j`)}jSj'sbc.iwpm_validate_nlmsg_attrasbuh1hhj=ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj=ubj:)}(hnltbh]hnltb}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubju)}(h[h]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj=ubju)}(h]h]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(h int nla_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h nla_counth]h nla_count}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h!Check for NULL netlink attributesh]h!Check for NULL netlink attributes}(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 ](jQfunctioneh"]h$]h&]jjQjj-jj-jjjuh1jhhhhhNhNubj)}(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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhj1ubj)}(hhh](j)}(hK``struct nlattr *nltb[]`` Holds address of each netlink message attributes h](j)}(h``struct nlattr *nltb[]``h]j)}(hjVh]hstruct nlattr *nltb[]}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjPubj )}(hhh]h)}(h0Holds address of each netlink message attributesh]h0Holds address of each netlink message attributes}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKhjlubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjMubj)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(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.hhKhj1ubh)}(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.hhKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiwpm_create_nlmsg (C function)c.iwpm_create_nlmsghNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj hhhjhKubh)}(hhh]j:)}(hsk_buffh]hsk_buff}(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj0modnameN classnameNjWjZ)}j]]j`)}jSiwpm_create_nlmsgsbc.iwpm_create_nlmsgasbuh1hhj hhhjhKubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj hhhjhKubju)}(hjxh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj hhhjhKubj)}(hiwpm_create_nlmsgh]j:)}(hjLh]hiwpm_create_nlmsg}(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhKubj)}(h1(u32 nl_op, struct nlmsghdr **nlh, int nl_client)h](j)}(h u32 nl_oph](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jJc.iwpm_create_nlmsgasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hnl_oph]hnl_op}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct nlmsghdr **nlhh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hnlmsghdrh]hnlmsghdr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jJc.iwpm_create_nlmsgasbuh1hhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjxh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hnlhh]hnlh}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int nl_clienth](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubj:)}(h nl_clienth]h nl_client}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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&]uh1j hjubeh}(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)}(hjh]hstruct nlmsghdr **nlh}(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)}(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&]uh1hhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h2``int nl_client`` The index of the netlink client h](j)}(h``int nl_client``h]j)}(hjGh]h int nl_client}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjAubj )}(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&]uh1j hjAubeh}(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)}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiwpm_parse_nlmsg (C function)c.iwpm_parse_nlmsghNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_parse_nlmsgh]j:)}(hiwpm_parse_nlmsgh]hiwpm_parse_nlmsg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hnetlink_callbackh]hnetlink_callback}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj$modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_parse_nlmsgasbuh1hhjubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcbh]hcb}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint policy_maxh](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjrubj:)}(h policy_maxh]h policy_max}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%const struct nla_policy *nlmsg_policyh](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h nla_policyh]h nla_policy}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j>c.iwpm_parse_nlmsgasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h nlmsg_policyh]h nlmsg_policy}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct nlattr *nltb[]h](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubj&)}(h h]h }(hjDhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3ubh)}(hhh]j:)}(hnlattrh]hnlattr}(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjWmodnameN classnameNjWjZ)}j]]j>c.iwpm_parse_nlmsgasbuh1hhj3ubj&)}(h h]h }(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj3ubj:)}(hnltbh]hnltb}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubju)}(hjh]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj3ubju)}(hjh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *msg_typeh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmsg_typeh]hmsg_type}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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}(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 ](jQfunctioneh"]h$]h&]jjQjjGjjGjjjuh1jhhhhhNhNubj)}(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)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjKubj)}(hhh](j)}(h;``struct netlink_callback *cb`` Netlink callback structure h](j)}(h``struct netlink_callback *cb``h]j)}(hjph]hstruct netlink_callback *cb}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjjubj )}(hhh]h)}(hNetlink callback structureh]hNetlink callback structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjgubj)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjgubj)}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjgubj)}(hD``struct nlattr *nltb[]`` Array to store policy_max parsed elements h](j)}(h``struct nlattr *nltb[]``h]j)}(hjh]hstruct nlattr *nltb[]}(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)Array to store policy_max parsed elementsh]h)Array to store policy_max parsed elements}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjgubj)}(h1``const char *msg_type`` Type of netlink message h](j)}(h``const char *msg_type``h]j)}(hjTh]hconst char *msg_type}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjNubj )}(hhh]h)}(hType of netlink messageh]hType of netlink message}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(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.hhKhjKubh)}(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.hhKhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h iwpm_print_sockaddr (C function)c.iwpm_print_sockaddrhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_print_sockaddrh]j:)}(hiwpm_print_sockaddrh]hiwpm_print_sockaddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h.(struct sockaddr_storage *sockaddr, char *msg)h](j)}(h!struct sockaddr_storage *sockaddrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hsockaddr_storageh]hsockaddr_storage}(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj1modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_print_sockaddrasbuh1hhj ubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hsockaddrh]hsockaddr}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h char *msgh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmsgh]hmsg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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$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 ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hq**Parameters** ``struct sockaddr_storage *sockaddr`` Socket address to print ``char *msg`` Message to printh](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>``struct sockaddr_storage *sockaddr`` Socket address to print h](j)}(h%``struct sockaddr_storage *sockaddr``h]j)}(hjh]h!struct sockaddr_storage *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)}(hSocket address to printh]hSocket address to print}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjubj)}(h``char *msg`` Message to printh](j)}(h ``char *msg``h]j)}(hjPh]h char *msg}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjJubj )}(hhh]h)}(hMessage to printh]hMessage to print}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhKhjfubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiwpm_send_hello (C function)c.iwpm_send_hellohNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hiwpm_send_helloh]j:)}(hiwpm_send_helloh]hiwpm_send_hello}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h-(u8 nl_client, int iwpm_pid, u16 abi_version)h](j)}(h u8 nl_clienth](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iwpm_send_helloasbuh1hhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h nl_clienth]h nl_client}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int iwpm_pidh](j)}(hinth]hint}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubj&)}(h h]h }(hj? hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj- ubj:)}(hiwpm_pidh]hiwpm_pid}(hjM hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj- ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 abi_versionh](h)}(hhh]j:)}(hu16h]hu16}(hji hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjf ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjk modnameN classnameNjWjZ)}j]]j c.iwpm_send_helloasbuh1hhjb ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjb ubj:)}(h abi_versionh]h abi_version}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb 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 ](jQfunctioneh"]h$]h&]jjQjj 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&]uh1j hj 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)}(hj9!h]h int iwpm_pid}(hj;!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7!ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhj3!ubj )}(hhh]h)}(h%The pid of the user space port mapperh]h%The pid of the user space port mapper}(hjR!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN!hMhjO!ubah}(h]h ]h"]h$]h&]uh1j hj3!ubeh}(h]h ]h"]h$]h&]uh1jhjN!hMhj ubj)}(h-``u16 abi_version`` The kernel's abi_version h](j)}(h``u16 abi_version``h]j)}(hjr!h]hu16 abi_version}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp!ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:13: ./drivers/infiniband/core/iwpm_util.hhMhjl!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&]uh1j hjl!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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_process_cq_direct (C function)c.ib_process_cq_directhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hj!hhhj"hK}ubj)}(hib_process_cq_directh]j:)}(hib_process_cq_directh]hib_process_cq_direct}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj"hK}ubj)}(h(struct ib_cq *cq, int budget)h](j)}(hstruct ib_cq *cqh](j)}(hjh]hstruct}(hj/"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+"ubj&)}(h h]h }(hj<"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+"ubh)}(hhh]j:)}(hib_cqh]hib_cq}(hjM"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJ"ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjO"modnameN classnameNjWjZ)}j]]j`)}jSj"sbc.ib_process_cq_directasbuh1hhj+"ubj&)}(h h]h }(hjm"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+"ubju)}(hjxh]h*}(hj{"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj+"ubj:)}(hcqh]hcq}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'"ubj)}(h int budgeth](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubj:)}(hbudgeth]hbudget}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"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 ](jQfunctioneh"]h$]h&]jjQjj"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~hj"#ubj )}(hhh]h)}(h CQ to processh]h CQ to process}(hjA#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=#hK~hj>#ubah}(h]h ]h"]h$]h&]uh1j hj"#ubeh}(h]h ]h"]h$]h&]uh1jhj=#hK~hj#ubj)}(h*``int budget`` number of CQEs to poll for h](j)}(h``int budget``h]j)}(hja#h]h int budget}(hjc#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)}(hnumber of CQEs to poll forh]hnumber of CQEs to poll for}(hjz#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv#hKhjw#ubah}(h]h ]h"]h$]h&]uh1j hj[#ubeh}(h]h ]h"]h$]h&]uh1jhjv#hKhj#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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__ib_alloc_cq (C function)c.__ib_alloc_cqhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKubj&)}(h h]h }(hj($hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$hhhj'$hKubh)}(hhh]j:)}(hib_cqh]hib_cq}(hj9$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6$ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj;$modnameN classnameNjWjZ)}j]]j`)}jS __ib_alloc_cqsbc.__ib_alloc_cqasbuh1hhj$hhhj'$hKubj&)}(h h]h }(hjZ$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$hhhj'$hKubju)}(hjxh]h*}(hjh$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj$hhhj'$hKubj)}(h __ib_alloc_cqh]j:)}(hjW$h]h __ib_alloc_cq}(hjy$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hju$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)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj$modnameN classnameNjWjZ)}j]]jU$c.__ib_alloc_cqasbuh1hhj$ubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubju)}(hjxh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj$ubj:)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h void *privateh](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubju)}(hjxh]h*}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj%ubj:)}(hprivateh]hprivate}(hj-%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h int nr_cqeh](j)}(hinth]hint}(hjF%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB%ubj&)}(h h]h }(hjT%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjB%ubj:)}(hnr_cqeh]hnr_cqe}(hjb%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjB%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hint comp_vectorh](j)}(hinth]hint}(hj{%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjw%ubj:)}(h comp_vectorh]h comp_vector}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjw%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(henum ib_poll_context poll_ctxh](j)}(henumh]henum}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubh)}(hhh]j:)}(hib_poll_contexth]hib_poll_context}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]jU$c.__ib_alloc_cqasbuh1hhj%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubj:)}(hpoll_ctxh]hpoll_ctx}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hconst char *callerh](j)}(hjh]hconst}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj&)}(h h]h }(hj!&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubj)}(hcharh]hchar}(hj/&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj&)}(h h]h }(hj=&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubju)}(hjxh]h*}(hjK&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj&ubj:)}(hcallerh]hcaller}(hjX&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&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 ](jQfunctioneh"]h$]h&]jjQjj&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&]uh1j hj&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&]uh1j hj&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)}(hj5'h]h int nr_cqe}(hj7'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3'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)}(hnumber of CQEs to allocateh]hnumber of CQEs to allocate}(hjN'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ'hKhjK'ubah}(h]h ]h"]h$]h&]uh1j hj/'ubeh}(h]h ]h"]h$]h&]uh1jhjJ'hKhj&ubj)}(h7``int comp_vector`` HCA completion vectors for this CQ h](j)}(h``int comp_vector``h]j)}(hjn'h]hint comp_vector}(hjp'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chKhjh'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&]uh1j hjh'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&]uh1j hj'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&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj&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)}(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.}(hj1(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__ib_alloc_cq_any (C function)c.__ib_alloc_cq_anyhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj`(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\(hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMubj&)}(h h]h }(hjn(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\(hhhjm(hMubh)}(hhh]j:)}(hib_cqh]hib_cq}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj(modnameN classnameNjWjZ)}j]]j`)}jS__ib_alloc_cq_anysbc.__ib_alloc_cq_anyasbuh1hhj\(hhhjm(hMubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\(hhhjm(hMubju)}(hjxh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj\(hhhjm(hMubj)}(h__ib_alloc_cq_anyh]j:)}(hj(h]h__ib_alloc_cq_any}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\(hhhjm(hMubj)}(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)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj(modnameN classnameNjWjZ)}j]]j(c.__ib_alloc_cq_anyasbuh1hhj(ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(ubju)}(hjxh]h*}(hj$)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj(ubj:)}(hdevh]hdev}(hj1)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h void *privateh](j)}(hvoidh]hvoid}(hjJ)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF)ubj&)}(h h]h }(hjX)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjF)ubju)}(hjxh]h*}(hjf)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjF)ubj:)}(hprivateh]hprivate}(hjs)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjF)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h int nr_cqeh](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubj:)}(hnr_cqeh]hnr_cqe}(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(henum ib_poll_context poll_ctxh](j)}(hj%h]henum}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubh)}(hhh]j:)}(hib_poll_contexth]hib_poll_context}(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj)modnameN classnameNjWjZ)}j]]j(c.__ib_alloc_cq_anyasbuh1hhj)ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubj:)}(hpoll_ctxh]hpoll_ctx}(hj *hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hconst char *callerh](j)}(hjh]hconst}(hj$*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj *ubj&)}(h h]h }(hj1*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj *ubj)}(hcharh]hchar}(hj?*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj *ubj&)}(h h]h }(hjM*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj *ubju)}(hjxh]h*}(hj[*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj *ubj:)}(hcallerh]hcaller}(hjh*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj *ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhj\(hhhjm(hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjX(hhhjm(hMubah}(h]jS(ah ](jjeh"]h$]h&]jj)jhuh1jhjm(hMhjU(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.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjU(hhhjm(hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj*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&]uh1j hj*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}(hj%+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!+hM!hj"+ubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhj!+hM!hj*ubj)}(h*``int nr_cqe`` number of CQEs to allocate h](j)}(h``int nr_cqe``h]j)}(hjE+h]h int nr_cqe}(hjG+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC+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)}(hnumber of CQEs to allocateh]hnumber of CQEs to allocate}(hj^+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ+hM"hj[+ubah}(h]h ]h"]h$]h&]uh1j hj?+ubeh}(h]h ]h"]h$]h&]uh1jhjZ+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#hjx+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&]uh1j hjx+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&]uh1j hj+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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_free_cq (C function) c.ib_free_cqhNtauh1hhhhhhNhNubj)}(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}(hj7,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3,hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM;ubj&)}(h h]h }(hjF,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3,hhhjE,hM;ubj)}(h ib_free_cqh]j:)}(h ib_free_cqh]h ib_free_cq}(hjX,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3,hhhjE,hM;ubj)}(h(struct ib_cq *cq)h]j)}(hstruct ib_cq *cqh](j)}(hjh]hstruct}(hjt,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjp,ubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjp,ubh)}(hhh]j:)}(hib_cqh]hib_cq}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj,modnameN classnameNjWjZ)}j]]j`)}jSjZ,sb c.ib_free_cqasbuh1hhjp,ubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjp,ubju)}(hjxh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjp,ubj:)}(hcqh]hcq}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjl,ubah}(h]h ]h"]h$]h&]jjuh1jhj3,hhhjE,hM;ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj/,hhhjE,hM;ubah}(h]j*,ah ](jjeh"]h$]h&]jj)jhuh1jhjE,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,,hhhjE,hM;ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj-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.chM?hj-ubj)}(hhh]j)}(h.``struct ib_cq *cq`` completion queue to free.h](j)}(h``struct ib_cq *cq``h]j)}(hj8-h]hstruct ib_cq *cq}(hj:-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6-ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMAhj2-ubj )}(hhh]h)}(hcompletion queue to free.h]hcompletion queue to free.}(hjQ-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chM<hjN-ubah}(h]h ]h"]h$]h&]uh1j hj2-ubeh}(h]h ]h"]h$]h&]uh1jhjM-hMAhj/-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_cq_pool_get (C function)c.ib_cq_pool_gethNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-hhhj-hMubh)}(hhh]j:)}(hib_cqh]hib_cq}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-modnameN classnameNjWjZ)}j]]j`)}jSib_cq_pool_getsbc.ib_cq_pool_getasbuh1hhj-hhhj-hMubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-hhhj-hMubju)}(hjxh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj-hhhj-hMubj)}(hib_cq_pool_geth]j:)}(hj-h]hib_cq_pool_get}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-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)}(hjh]hstruct}(hj .hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj*.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'.ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj,.modnameN classnameNjWjZ)}j]]j-c.ib_cq_pool_getasbuh1hhj.ubj&)}(h h]h }(hjH.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubju)}(hjxh]h*}(hjV.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.ubj:)}(hdevh]hdev}(hjc.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hunsigned int nr_cqeh](j)}(hunsignedh]hunsigned}(hj|.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx.ubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjx.ubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx.ubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjx.ubj:)}(hnr_cqeh]hnr_cqe}(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjx.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hint comp_vector_hinth](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubj:)}(hcomp_vector_hinth]hcomp_vector_hint}(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(henum ib_poll_context poll_ctxh](j)}(hj%h]henum}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubh)}(hhh]j:)}(hib_poll_contexth]hib_poll_context}(hj /hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"/modnameN classnameNjWjZ)}j]]j-c.ib_cq_pool_getasbuh1hhj.ubj&)}(h h]h }(hj>/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubj:)}(hpoll_ctxh]hpoll_ctx}(hjL/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.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.}(hjv/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjs/hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj/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&]uh1j hj/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)}(hj/h]hunsigned int nr_cqe}(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)}(hnumber of needed cqe entriesh]hnumber of needed cqe entries}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1j hj/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.chMhj#0ubj )}(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}(hjB0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj?0ubah}(h]h ]h"]h$]h&]uh1j hj#0ubeh}(h]h ]h"]h$]h&]uh1jhj>0hMhj/ubj)}(h5``enum ib_poll_context poll_ctx`` cq polling context h](j)}(h!``enum ib_poll_context poll_ctx``h]j)}(hjc0h]henum ib_poll_context poll_ctx}(hje0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja0ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhj]0ubj )}(hhh]h)}(hcq polling contexth]hcq polling context}(hj|0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx0hMhjy0ubah}(h]h ]h"]h$]h&]uh1j hj]0ubeh}(h]h ]h"]h$]h&]uh1jhjx0hMhj/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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_cq_pool_put (C function)c.ib_cq_pool_puthNtauh1hhhhhhNhNubj)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMubj&)}(h h]h }(hj(1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1hhhj'1hMubj)}(hib_cq_pool_puth]j:)}(hib_cq_pool_puth]hib_cq_pool_put}(hj:1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj61ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhj'1hMubj)}(h'(struct ib_cq *cq, unsigned int nr_cqe)h](j)}(hstruct ib_cq *cqh](j)}(hjh]hstruct}(hjV1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjR1ubj&)}(h h]h }(hjc1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjR1ubh)}(hhh]j:)}(hib_cqh]hib_cq}(hjt1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjq1ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjv1modnameN classnameNjWjZ)}j]]j`)}jSj<1sbc.ib_cq_pool_putasbuh1hhjR1ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjR1ubju)}(hjxh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjR1ubj:)}(hcqh]hcq}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjR1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN1ubj)}(hunsigned int nr_cqeh](j)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubj)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubj:)}(hnr_cqeh]hnr_cqe}(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN1ubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhj'1hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj1hhhj'1hMubah}(h]j 1ah ](jjeh"]h$]h&]jj)jhuh1jhj'1hMhj1hhubj)}(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&]uh1jhj1hhhj'1hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjB2jjB2jjjuh1jhhhhhNhNubj)}(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)}(hjL2h]h Parameters}(hjN2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhjF2ubj)}(hhh](j)}(h'``struct ib_cq *cq`` The CQ to return. h](j)}(h``struct ib_cq *cq``h]j)}(hjk2h]hstruct ib_cq *cq}(hjm2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji2ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:16: ./drivers/infiniband/core/cq.chMhje2ubj )}(hhh]h)}(hThe CQ to return.h]hThe CQ to return.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1j hje2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjb2ubj)}(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&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjb2ubeh}(h]h ]h"]h$]h&]uh1jhjF2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_cm_listen (C function)c.ib_cm_listenhNtauh1hhhhhhNhNubj)}(hhh](j)}(h4ubj)}(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&]uh1jhj~4ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhjz4ubj )}(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&]uh1j hjz4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj>4ubeh}(h]h ]h"]h$]h&]uh1jhj"4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h ib_cm_insert_listen (C function)c.ib_cm_insert_listenhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4hhhj4hMubh)}(hhh]j:)}(hib_cm_idh]hib_cm_id}(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj4modnameN classnameNjWjZ)}j]]j`)}jSib_cm_insert_listensbc.ib_cm_insert_listenasbuh1hhj4hhhj4hMubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4hhhj4hMubju)}(hjxh]h*}(hj(5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj4hhhj4hMubj)}(hib_cm_insert_listenh]j:)}(hj5h]hib_cm_insert_listen}(hj95hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj55ubah}(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)}(hjh]hstruct}(hjT5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP5ubj&)}(h h]h }(hja5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjP5ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjr5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjo5ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjt5modnameN classnameNjWjZ)}j]]j5c.ib_cm_insert_listenasbuh1hhjP5ubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjP5ubju)}(hjxh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjP5ubj:)}(hdeviceh]hdevice}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjL5ubj)}(hib_cm_handler cm_handlerh](h)}(hhh]j:)}(h ib_cm_handlerh]h ib_cm_handler}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj5modnameN classnameNjWjZ)}j]]j5c.ib_cm_insert_listenasbuh1hhj5ubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj5ubj:)}(h cm_handlerh]h cm_handler}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjL5ubj)}(h__be64 service_idh](h)}(hhh]j:)}(h__be64h]h__be64}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 6ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj6modnameN classnameNjWjZ)}j]]j5c.ib_cm_insert_listenasbuh1hhj6ubj&)}(h h]h }(hj-6hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubj:)}(h service_idh]h service_id}(hj;6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjL5ubeh}(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.}(hje6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhjb6hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj}6jj}6jjjuh1jhhhhhNhNubj)}(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&]uh1j hj6ubeh}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(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)}(hj7h]h__be64 service_id}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj7ubj )}(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.}(hj27hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:19: ./drivers/infiniband/core/cm.chMhj/7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj.7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hjU7h]h Description}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS7ubah}(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.}(hjk7hhhNhNubah}(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.}(hjz7hhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_rw_ctx_init (C function)c.rdma_rw_ctx_inithNtauh1hhhhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhj7hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7hhhj7hMubj)}(hrdma_rw_ctx_inith]j:)}(hrdma_rw_ctx_inith]hrdma_rw_ctx_init}(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj7hMubj)}(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)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7ubh)}(hhh]j:)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj8modnameN classnameNjWjZ)}j]]j`)}jSj7sbc.rdma_rw_ctx_initasbuh1hhj7ubj&)}(h h]h }(hj$8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7ubju)}(hjxh]h*}(hj28hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj7ubj:)}(hctxh]hctx}(hj?8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjX8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjT8ubj&)}(h h]h }(hje8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjT8ubh)}(hhh]j:)}(hib_qph]hib_qp}(hjv8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjs8ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjx8modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhjT8ubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjT8ubju)}(hjxh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjT8ubj:)}(hqph]hqp}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj8modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj8ubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubj:)}(hport_numh]hport_num}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct scatterlist *sgh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj 9ubj&)}(h h]h }(hj9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj 9ubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hj.9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+9ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj09modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj 9ubj&)}(h h]h }(hjL9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj 9ubju)}(hjxh]h*}(hjZ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj 9ubj:)}(hsgh]hsg}(hjg9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 sg_cnth](h)}(hhh]j:)}(hu32h]hu32}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj9modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj|9ubj&)}(h h]h }(hj9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|9ubj:)}(hsg_cnth]hsg_cnt}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u32 sg_offseth](h)}(hhh]j:)}(hu32h]hu32}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj9modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj9ubj&)}(h h]h }(hj9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubj:)}(h sg_offseth]h sg_offset}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hu64 remote_addrh](h)}(hhh]j:)}(hu64h]hu64}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj:modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj :ubj&)}(h h]h }(hj1:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj :ubj:)}(h remote_addrh]h remote_addr}(hj?:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj :ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hu32 rkeyh](h)}(hhh]j:)}(hu32h]hu32}(hj[:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjX:ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj]:modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhjT:ubj&)}(h h]h }(hjy:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjT:ubj:)}(hrkeyh]hrkey}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(henum dma_data_direction dirh](j)}(hj%h]henum}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj&)}(h h]h }(hj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj:modnameN classnameNjWjZ)}j]]j 8c.rdma_rw_ctx_initasbuh1hhj:ubj&)}(h h]h }(hj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubj:)}(hdirh]hdir}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubeh}(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$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.chMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj,;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)}(hj6;h]h Parameters}(hj8;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4;ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj0;ubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to initialize h](j)}(h``struct rdma_rw_ctx *ctx``h]j)}(hjU;h]hstruct rdma_rw_ctx *ctx}(hjW;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS;ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjO;ubj )}(hhh]h)}(hcontext to initializeh]hcontext to initialize}(hjn;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj;hMhjk;ubah}(h]h ]h"]h$]h&]uh1j hjO;ubeh}(h]h ]h"]h$]h&]uh1jhjj;hMhjL;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.chMhj;ubj )}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjL;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.chMhj;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;hMhj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjL;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.chMhj;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<hMhj<ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjL;ubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j)}(hj9<h]h u32 sg_cnt}(hj;<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7<ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj3<ubj )}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjR<hhhNhNubj)}(h**sg**h]hsg}(hjZ<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR<ubeh}(h]h ]h"]h$]h&]uh1hhjN<hMhjO<ubah}(h]h ]h"]h$]h&]uh1j hj3<ubeh}(h]h ]h"]h$]h&]uh1jhjN<hMhjL;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.chMhjz<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<hMhj<ubah}(h]h ]h"]h$]h&]uh1j hjz<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjL;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.chMhj<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<hMhj<ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjL;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.chMhj =ubj )}(hhh]h)}(hremote key to operate onh]hremote key to operate on}(hj+=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'=hMhj(=ubah}(h]h ]h"]h$]h&]uh1j hj =ubeh}(h]h ]h"]h$]h&]uh1jhj'=hMhjL;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)}(hjK=h]henum dma_data_direction dir}(hjM=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI=ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjE=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}(hjh=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd=ubh for RDMA WRITE, }(hjd=hhhNhNubj)}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjz=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd=ubh for RDMA READ}(hjd=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`=hMhja=ubah}(h]h ]h"]h$]h&]uh1j hjE=ubeh}(h]h ]h"]h$]h&]uh1jhj`=hMhjL;ubeh}(h]h ]h"]h$]h&]uh1jhj0;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!hj0;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 hj0;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'rdma_rw_ctx_signature_init (C function)c.rdma_rw_ctx_signature_inithNtauh1hhhhhhNhNubj)}(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}(hj=hhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hj=hhhj=hM\ubj)}(hrdma_rw_ctx_signature_inith]j:)}(hrdma_rw_ctx_signature_inith]hrdma_rw_ctx_signature_init}(hj >hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>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, struct ib_sig_attrs *sig_attrs, u64 remote_addr, u32 rkey, enum dma_data_direction dir)h](j)}(hstruct rdma_rw_ctx *ctxh](j)}(hjh]hstruct}(hj(>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$>ubj&)}(h h]h }(hj5>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$>ubh)}(hhh]j:)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjF>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjC>ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjH>modnameN classnameNjWjZ)}j]]j`)}jSj>sbc.rdma_rw_ctx_signature_initasbuh1hhj$>ubj&)}(h h]h }(hjf>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$>ubju)}(hjxh]h*}(hjt>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj$>ubj:)}(hctxh]hctx}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>ubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj>ubh)}(hhh]j:)}(hib_qph]hib_qp}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj>modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj>ubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj>ubju)}(hjxh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj>ubj:)}(hqph]hqp}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hj ?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj?modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj?ubj&)}(h h]h }(hj+?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?ubj:)}(hport_numh]hport_num}(hj9?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hstruct scatterlist *sgh](j)}(hjh]hstruct}(hjR?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjN?ubj&)}(h h]h }(hj_?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjN?ubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjp?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjr?modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhjN?ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjN?ubju)}(hjxh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjN?ubj:)}(hsgh]hsg}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjN?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(h u32 sg_cnth](h)}(hhh]j:)}(hu32h]hu32}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj?modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj?ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?ubj:)}(hsg_cnth]hsg_cnt}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hstruct scatterlist *prot_sgh](j)}(hjh]hstruct}(hj @hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hj(@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj*@modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj@ubj&)}(h h]h }(hjF@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubju)}(hjxh]h*}(hjT@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj@ubj:)}(hprot_sgh]hprot_sg}(hja@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hu32 prot_sg_cnth](h)}(hhh]j:)}(hu32h]hu32}(hj}@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj@modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhjv@ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjv@ubj:)}(h prot_sg_cnth]h prot_sg_cnt}(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjv@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hstruct ib_sig_attrs *sig_attrsh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubh)}(hhh]j:)}(h ib_sig_attrsh]h ib_sig_attrs}(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj@modnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj@ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubju)}(hjxh]h*}(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj@ubj:)}(h sig_attrsh]h sig_attrs}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hu64 remote_addrh](h)}(hhh]j:)}(hu64h]hu64}(hj5AhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2Aubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj7AmodnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhj.Aubj&)}(h h]h }(hjSAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.Aubj:)}(h remote_addrh]h remote_addr}(hjaAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(hu32 rkeyh](h)}(hhh]j:)}(hu32h]hu32}(hj}AhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzAubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhjvAubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvAubj:)}(hrkeyh]hrkey}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj >ubj)}(henum dma_data_direction dirh](j)}(hj%h]henum}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jb>c.rdma_rw_ctx_signature_initasbuh1hhjAubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubj:)}(hdirh]hdir}(hj BhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubeh}(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.initialize a RW context with signature offloadh]h.initialize a RW context with signature offload}(hj6BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM\hj3Bhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj=hM\ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjNBjjNBjjjuh1jhhhhhNhNubj)}(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)}(hjXBh]h Parameters}(hjZBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVBubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM`hjRBubj)}(hhh](j)}(h2``struct rdma_rw_ctx *ctx`` context to initialize h](j)}(h``struct rdma_rw_ctx *ctx``h]j)}(hjwBh]hstruct rdma_rw_ctx *ctx}(hjyBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuBubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM]hjqBubj )}(hhh]h)}(hcontext to initializeh]hcontext to initialize}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM]hjBubah}(h]h ]h"]h$]h&]uh1j hjqBubeh}(h]h ]h"]h$]h&]uh1jhjBhM]hjnBubj)}(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.chM^hjBubj )}(hhh]h)}(hqueue pair to operate onh]hqueue pair to operate on}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM^hjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM^hjnBubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j)}(hjBh]h u32 port_num}(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.chM_hjBubj )}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM_hjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM_hjnBubj)}(h=``struct scatterlist *sg`` scatterlist to READ/WRITE from/to h](j)}(h``struct scatterlist *sg``h]j)}(hj"Ch]hstruct scatterlist *sg}(hj$ChhhNhNubah}(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.chM`hjCubj )}(hhh]h)}(h!scatterlist to READ/WRITE from/toh]h!scatterlist to READ/WRITE from/to}(hj;ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ChM`hj8Cubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj7ChM`hjnBubj)}(h+``u32 sg_cnt`` number of entries in **sg** h](j)}(h``u32 sg_cnt``h]j)}(hj[Ch]h u32 sg_cnt}(hj]ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYCubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMahjUCubj )}(hhh]h)}(hnumber of entries in **sg**h](hnumber of entries in }(hjtChhhNhNubj)}(h**sg**h]hsg}(hj|ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtCubeh}(h]h ]h"]h$]h&]uh1hhjpChMahjqCubah}(h]h ]h"]h$]h&]uh1j hjUCubeh}(h]h ]h"]h$]h&]uh1jhjpChMahjnBubj)}(hY``struct scatterlist *prot_sg`` scatterlist to READ/WRITE protection information from/to 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.chMbhjCubj )}(hhh]h)}(h8scatterlist to READ/WRITE protection information from/toh]h8scatterlist to READ/WRITE protection information from/to}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMbhjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjChMbhjnBubj)}(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}(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.chMchjCubj )}(hhh]h)}(h number of entries in **prot_sg**h](hnumber of entries in }(hjChhhNhNubj)}(h **prot_sg**h]hprot_sg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1hhjChMchjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjChMchjnBubj)}(hC``struct ib_sig_attrs *sig_attrs`` signature offloading algorithms h](j)}(h"``struct ib_sig_attrs *sig_attrs``h]j)}(hj"Dh]hstruct ib_sig_attrs *sig_attrs}(hj$DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Dubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMdhjDubj )}(hhh]h)}(hsignature offloading algorithmsh]hsignature offloading algorithms}(hj;DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7DhMdhj8Dubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhj7DhMdhjnBubj)}(hH``u64 remote_addr`` remote address to read/write (relative to **rkey**) h](j)}(h``u64 remote_addr``h]j)}(hj[Dh]hu64 remote_addr}(hj]DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYDubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMehjUDubj )}(hhh]h)}(h3remote address to read/write (relative to **rkey**)h](h*remote address to read/write (relative to }(hjtDhhhNhNubj)}(h**rkey**h]hrkey}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtDubh)}(hjtDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpDhMehjqDubah}(h]h ]h"]h$]h&]uh1j hjUDubeh}(h]h ]h"]h$]h&]uh1jhjpDhMehjnBubj)}(h&``u32 rkey`` remote key to operate on h](j)}(h ``u32 rkey``h]j)}(hjDh]hu32 rkey}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMfhjDubj )}(hhh]h)}(hremote key to operate onh]hremote key to operate on}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMfhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMfhjnBubj)}(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)}(hjDh]henum dma_data_direction dir}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMghjDubj )}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh for RDMA WRITE, }(hjDhhhNhNubj)}(h``DMA_FROM_DEVICE``h]hDMA_FROM_DEVICE}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh for RDMA READ}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMghjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMghjnBubeh}(h]h ]h"]h$]h&]uh1jhjRBubh)}(h**Description**h]j)}(hj:Eh]h Description}(hj``struct ib_cqe *cqe`` completion queue entry for the last WR h](j)}(h``struct ib_cqe *cqe``h]j)}(hjHh]hstruct ib_cqe *cqe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhjHubj )}(hhh]h)}(h&completion queue entry for the last WRh]h&completion queue entry for the last WR}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjJHubj)}(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)}(hj7Ih]hstruct ib_send_wr *chain_wr}(hj9IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Iubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj1Iubj )}(hhh]h)}(h WR to append to the posted chainh]h WR to append to the posted chain}(hjPIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLIhMhjMIubah}(h]h ]h"]h$]h&]uh1j hj1Iubeh}(h]h ]h"]h$]h&]uh1jhjLIhMhjJHubeh}(h]h ]h"]h$]h&]uh1jhj.Hubh)}(h**Description**h]j)}(hjrIh]h Description}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpIubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj.Hubh)}(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 }(hjIhhhNhNubj)}(h**ctx**h]hctx}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh<, as well as any memory registration operations needed. If }(hjIhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubhQ is non-NULL the WR it points to will be appended to the chain of WRs posted. If }(hjIhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh is not set }(hjIhhhNhNubj)}(h**cqe**h]hcqe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh? must be set so that the caller gets a completion notification.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMhj.Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_rw_ctx_post (C function)c.rdma_rw_ctx_posthNtauh1hhhhhhNhNubj)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjIhhhj JhMubj)}(hrdma_rw_ctx_posth]j:)}(hrdma_rw_ctx_posth]hrdma_rw_ctx_post}(hj JhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhj JhMubj)}(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)}(hjh]hstruct}(hj``struct ib_cqe *cqe`` completion queue entry for the last WR h](j)}(h``struct ib_cqe *cqe``h]j)}(hjCMh]hstruct ib_cqe *cqe}(hjEMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAMubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM"hj=Mubj )}(hhh]h)}(h&completion queue entry for the last WRh]h&completion queue entry for the last WR}(hj\MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXMhM"hjYMubah}(h]h ]h"]h$]h&]uh1j hj=Mubeh}(h]h ]h"]h$]h&]uh1jhjXMhM"hjLubj)}(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)}(hj|Mh]hstruct ib_send_wr *chain_wr}(hj~MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzMubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM#hjvMubj )}(hhh]h)}(h WR to append to the posted chainh]h WR to append to the posted chain}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM#hjMubah}(h]h ]h"]h$]h&]uh1j hjvMubeh}(h]h ]h"]h$]h&]uh1jhjMhM#hjLubeh}(h]h ]h"]h$]h&]uh1jhjsLubh)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM%hjsLubh)}(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 }(hjMhhhNhNubj)}(h**ctx**h]hctx}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh<, as well as any memory registration operations needed. If }(hjMhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubhR is non-NULL the WR it points to will be appended to the chain of WRs posted. If }(hjMhhhNhNubj)}(h **chain_wr**h]hchain_wr}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh is not set }(hjMhhhNhNubj)}(h**cqe**h]hcqe}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh? must be set so that the caller gets a completion notification.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM$hjsLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h rdma_rw_ctx_destroy (C function)c.rdma_rw_ctx_destroyhNtauh1hhhhhhNhNubj)}(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}(hjDNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Nhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM6ubj&)}(h h]h }(hjSNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@NhhhjRNhM6ubj)}(hrdma_rw_ctx_destroyh]j:)}(hrdma_rw_ctx_destroyh]hrdma_rw_ctx_destroy}(hjeNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@NhhhjRNhM6ubj)}(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)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}Nubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}Nubh)}(hhh]j:)}(h rdma_rw_ctxh]h rdma_rw_ctx}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjNmodnameN classnameNjWjZ)}j]]j`)}jSjgNsbc.rdma_rw_ctx_destroyasbuh1hhj}Nubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}Nubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj}Nubj:)}(hctxh]hctx}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyNubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjNubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjNubh)}(hhh]j:)}(hib_qph]hib_qp}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjOmodnameN classnameNjWjZ)}j]]jNc.rdma_rw_ctx_destroyasbuh1hhjNubj&)}(h h]h }(hj/OhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjNubju)}(hjxh]h*}(hj=OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjNubj:)}(hqph]hqp}(hjJOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyNubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hjfOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcOubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhOmodnameN classnameNjWjZ)}j]]jNc.rdma_rw_ctx_destroyasbuh1hhj_Oubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_Oubj:)}(hport_numh]hport_num}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_Oubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyNubj)}(hstruct scatterlist *sgh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjOmodnameN classnameNjWjZ)}j]]jNc.rdma_rw_ctx_destroyasbuh1hhjOubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOubju)}(hjxh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjOubj:)}(hsgh]hsg}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyNubj)}(h u32 sg_cnth](h)}(hhh]j:)}(hu32h]hu32}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj PmodnameN classnameNjWjZ)}j]]jNc.rdma_rw_ctx_destroyasbuh1hhjPubj&)}(h h]h }(hjYmodnameN classnameNjWjZ)}j]]jYc.rdma_rw_mr_factorasbuh1hhj5Yubj&)}(h h]h }(hjZYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj5Yubj:)}(hport_numh]hport_num}(hjhYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5Yubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubj)}(hunsigned int maxpagesh](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Yubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}Yubj)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Yubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}Yubj:)}(hmaxpagesh]hmaxpages}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}Yubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubeh}(h]h ]h"]h$]h&]jjuh1jhjjXhhhj|XhMwubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjfXhhhj|XhMwubah}(h]jaXah ](jjeh"]h$]h&]jj)jhuh1jhj|XhMwhjcXhhubj)}(hhh]h)}(h+return number of MRs required for a payloadh]h+return number of MRs required for a payload}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMwhjYhhubah}(h]h ]h"]h$]h&]uh1jhjcXhhhj|XhMwubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjYjjYjjjuh1jhhhhhNhNubj)}(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)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM{hjYubj)}(hhh](j)}(h<``struct ib_device *device`` device handling the connection h](j)}(h``struct ib_device *device``h]j)}(hj$Zh]hstruct ib_device *device}(hj&ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Zubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMxhjZubj )}(hhh]h)}(hdevice handling the connectionh]hdevice handling the connection}(hj=ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ZhMxhj:Zubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhj9ZhMxhjZubj)}(h;``u32 port_num`` port num to which the connection is bound h](j)}(h``u32 port_num``h]j)}(hj]Zh]h u32 port_num}(hj_ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Zubah}(h]h ]h"]h$]h&]uah1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMyhjWZubj )}(hhh]h)}(h)port num to which the connection is boundh]h)port num to which the connection is bound}(hjvZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrZhMyhjsZubah}(h]h ]h"]h$]h&]uh1j hjWZubeh}(h]h ]h"]h$]h&]uh1jhjrZhMyhjZubj)}(h@``unsigned int maxpages`` maximum payload pages per rdma_rw_ctx h](j)}(h``unsigned int maxpages``h]j)}(hjZh]hunsigned int maxpages}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chMzhjZubj )}(hhh]h)}(h%maximum payload pages per rdma_rw_ctxh]h%maximum payload pages per rdma_rw_ctx}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMzhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMzhjZubeh}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM|hjYubh)}(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 }(hjZhhhNhNubj)}(h**maxpayload**h]h maxpayload}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh 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.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:22: ./drivers/infiniband/core/rw.chM{hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"rdma_dev_access_netns (C function)c.rdma_dev_access_netnshNtauh1hhhhhhNhNubj)}(hhh](j)}(hObool rdma_dev_access_netns (const struct ib_device *dev, const struct net *net)h]j)}(hNbool rdma_dev_access_netns(const struct ib_device *dev, const struct net *net)h](j)}(hboolh]hbool}(hj([hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$[hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKubj&)}(h h]h }(hj7[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$[hhhj6[hKubj)}(hrdma_dev_access_netnsh]j:)}(hrdma_dev_access_netnsh]hrdma_dev_access_netns}(hjI[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjE[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$[hhhj6[hKubj)}(h4(const struct ib_device *dev, const struct net *net)h](j)}(hconst struct ib_device *devh](j)}(hjh]hconst}(hje[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhja[ubj&)}(h h]h }(hjr[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja[ubj)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhja[ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja[ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[modnameN classnameNjWjZ)}j]]j`)}jSjK[sbc.rdma_dev_access_netnsasbuh1hhja[ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja[ubju)}(hjxh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthja[ubj:)}(hdevh]hdev}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hja[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj][ubj)}(hconst struct net *neth](j)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubj)}(hjh]hstruct}(hj \hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[ubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubh)}(hhh]j:)}(hneth]hnet}(hj+\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(\ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-\modnameN classnameNjWjZ)}j]]j[c.rdma_dev_access_netnsasbuh1hhj[ubj&)}(h h]h }(hjI\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubju)}(hjxh]h*}(hjW\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj[ubj:)}(hneth]hnet}(hjd\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj][ubeh}(h]h ]h"]h$]h&]jjuh1jhj$[hhhj6[hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj [hhhj6[hKubah}(h]jh ](jjeh"]h$]h&]jj)jhuh1jhj6[hKhj[hhubj)}(hhh]h)}(hTReturn whether an rdma device can be accessed from a specified net namespace or not.h]hTReturn whether an rdma device can be accessed from a specified net namespace or not.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj6[hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj\jj\jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``const struct ib_device *dev`` Pointer to rdma device which needs to be checked ``const struct net *net`` Pointer to net namesapce for which access to be checked **Description** When the rdma device is in shared mode, it ignores the net namespace. When the rdma device is exclusive to a net namespace, rdma device net namespace is checked against the specified one.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.chKhj\ubj)}(hhh](j)}(hQ``const struct ib_device *dev`` Pointer to rdma device which needs to be checked h](j)}(h``const struct ib_device *dev``h]j)}(hj\h]hconst struct 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.chKhj\ubj )}(hhh]h)}(h0Pointer to rdma device which needs to be checkedh]h0Pointer to rdma device which needs to be checked}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj\ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hKhj\ubj)}(hR``const struct net *net`` Pointer to net namesapce for which access to be checked h](j)}(h``const struct net *net``h]j)}(hj]h]hconst struct net *net}(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.chKhj]ubj )}(hhh]h)}(h7Pointer to net namesapce for which access to be checkedh]h7Pointer to net namesapce for which access to be checked}(hj!]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1j hj]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&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj\ubh)}(hWhen the rdma device is in shared mode, it ignores the net namespace. When the rdma device is exclusive to a net namespace, rdma device net namespace is checked against the specified one.h]hWhen the rdma device is in shared mode, it ignores the net namespace. When the rdma device is exclusive to a net namespace, rdma device net namespace is checked against the specified one.}(hjY]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!rdma_dev_has_raw_cap (C function)c.rdma_dev_has_raw_caphNtauh1hhhhhhNhNubj)}(hhh](j)}(h7bool rdma_dev_has_raw_cap (const struct ib_device *dev)h]j)}(h6bool rdma_dev_has_raw_cap(const struct ib_device *dev)h](j)}(hj*[h]hbool}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]hhhj]hKubj)}(hrdma_dev_has_raw_caph]j:)}(hrdma_dev_has_raw_caph]hrdma_dev_has_raw_cap}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhj]hKubj)}(h(const struct ib_device *dev)h]j)}(hconst struct ib_device *devh](j)}(hjh]hconst}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubj)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj]modnameN classnameNjWjZ)}j]]j`)}jSj]sbc.rdma_dev_has_raw_capasbuh1hhj]ubj&)}(h h]h }(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubju)}(hjxh]h*}(hj+^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj]ubj:)}(hdevh]hdev}(hj8^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(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)}(hJReturns whether a specified rdma device has CAP_NET_RAW capability or not.h]hJReturns whether a specified rdma device has CAP_NET_RAW capability or not.}(hjb^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj_^hhubah}(h]h ]h"]h$]h&]uh1jhj}]hhhj]hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjz^jjz^jjjuh1jhhhhhNhNubj)}(hXF**Parameters** ``const struct ib_device *dev`` Pointer to rdma device whose capability to be checked **Description** Returns 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](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.chKhj~^ubj)}(hhh]j)}(hV``const struct ib_device *dev`` Pointer to rdma device whose capability to be checked h](j)}(h``const struct ib_device *dev``h]j)}(hj^h]hconst struct 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.chKhj^ubj )}(hhh]h)}(h5Pointer to rdma device whose capability to be checkedh]h5Pointer to rdma device whose capability to be checked}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKhj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj^ubah}(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.chKhj~^ubh)}(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.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chKhj~^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_device_put (C function)c.ib_device_puthNtauh1hhhhhhNhNubj)}(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}(hj#_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMSubj&)}(h h]h }(hj2_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_hhhj1_hMSubj)}(h ib_device_puth]j:)}(h ib_device_puth]h ib_device_put}(hjD_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhj1_hMSubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hj`_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\_ubj&)}(h h]h }(hjm_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\_ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj~_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{_ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj_modnameN classnameNjWjZ)}j]]j`)}jSjF_sbc.ib_device_putasbuh1hhj\_ubj&)}(h h]h }(hj_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\_ubju)}(hjxh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj\_ubj:)}(hdeviceh]hdevice}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjX_ubah}(h]h ]h"]h$]h&]jjuh1jhj_hhhj1_hMSubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj_hhhj1_hMSubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhj1_hMShj_hhubj)}(hhh]h)}(hRelease IB device referenceh]hRelease IB device reference}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMShj_hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj1_hMSubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj_jj_jjjuh1jhhhhhNhNubj)}(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)}(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.chMWhj_ubj)}(hhh]j)}(hC``struct ib_device *device`` device whose reference to be released 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.chMThj`ubj )}(hhh]h)}(h%device whose reference to be releasedh]h%device whose reference to be released}(hj=`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9`hMThj:`ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj9`hMThj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h**Description**h]j)}(hj_`h]h Description}(hja`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.chMVhj_ubh)}(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.}(hju`hhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"ib_device_get_by_name (C function)c.ib_device_get_by_namehNtauh1hhhhhhNhNubj)}(hhh](j)}(hZstruct ib_device * ib_device_get_by_name (const char *name, enum rdma_driver_id driver_id)h]j)}(hXstruct ib_device *ib_device_get_by_name(const char *name, enum rdma_driver_id driver_id)h](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMmubj&)}(h h]h }(hj`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`hhhj`hMmubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj`modnameN classnameNjWjZ)}j]]j`)}jSib_device_get_by_namesbc.ib_device_get_by_nameasbuh1hhj`hhhj`hMmubj&)}(h h]h }(hj`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`hhhj`hMmubju)}(hjxh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj`hhhj`hMmubj)}(hib_device_get_by_nameh]j:)}(hj`h]hib_device_get_by_name}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hMmubj)}(h1(const char *name, enum rdma_driver_id driver_id)h](j)}(hconst char *nameh](j)}(hjh]hconst}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjaubj&)}(h h]h }(hj+ahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaubj)}(hcharh]hchar}(hj9ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj&)}(h h]h }(hjGahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaubju)}(hjxh]h*}(hjUahhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjaubj:)}(hnameh]hname}(hjbahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(henum rdma_driver_id driver_idh](j)}(hj%h]henum}(hj{ahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwaubj&)}(h h]h }(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwaubh)}(hhh]j:)}(hrdma_driver_idh]hrdma_driver_id}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjamodnameN classnameNjWjZ)}j]]j`c.ib_device_get_by_nameasbuh1hhjwaubj&)}(h h]h }(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwaubj:)}(h driver_idh]h driver_id}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubeh}(h]h ]h"]h$]h&]jjuh1jhj`hhhj`hMmubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj`hhhj`hMmubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1jhj`hMmhj`hhubj)}(hhh]h)}(hFind an IB device by nameh]hFind an IB device by name}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMmhjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMmubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjbjjbjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``const char *name`` The name to look for ``enum rdma_driver_id driver_id`` The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all) **Description** Find and hold an ib_device by its name. The caller must call ib_device_put() on the returned pointer.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMqhj bubj)}(hhh](j)}(h*``const char *name`` The name to look for h](j)}(h``const char *name``h]j)}(hj0bh]hconst char *name}(hj2bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.bubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMnhj*bubj )}(hhh]h)}(hThe name to look forh]hThe name to look for}(hjIbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEbhMnhjFbubah}(h]h ]h"]h$]h&]uh1j hj*bubeh}(h]h ]h"]h$]h&]uh1jhjEbhMnhj'bubj)}(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)}(hjibh]henum rdma_driver_id driver_id}(hjkbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgbubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMohjcbubj )}(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)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~bhMohjbubah}(h]h ]h"]h$]h&]uh1j hjcbubeh}(h]h ]h"]h$]h&]uh1jhj~bhMohj'bubeh}(h]h ]h"]h$]h&]uh1jhj bubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMqhj bubh)}(heFind and hold an ib_device by its name. The caller must call ib_device_put() on the returned pointer.h]heFind and hold an ib_device by its name. The caller must call ib_device_put() on the returned pointer.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMphj bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h_ib_alloc_device (C function)c._ib_alloc_devicehNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjbhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMIubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbhhhjbhMIubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj cmodnameN classnameNjWjZ)}j]]j`)}jS_ib_alloc_devicesbc._ib_alloc_deviceasbuh1hhjbhhhjbhMIubj&)}(h h]h }(hj)chhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbhhhjbhMIubju)}(hjxh]h*}(hj7chhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjbhhhjbhMIubj)}(h_ib_alloc_deviceh]j:)}(hj&ch]h_ib_alloc_device}(hjHchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjbhMIubj)}(h(size_t size, struct net *net)h](j)}(h size_t sizeh](h)}(hhh]j:)}(hsize_th]hsize_t}(hjfchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjccubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhcmodnameN classnameNjWjZ)}j]]j$cc._ib_alloc_deviceasbuh1hhj_cubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_cubj:)}(hsizeh]hsize}(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[cubj)}(hstruct net *neth](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjcubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjcubh)}(hhh]j:)}(hneth]hnet}(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjcmodnameN classnameNjWjZ)}j]]j$cc._ib_alloc_deviceasbuh1hhjcubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjcubju)}(hjxh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjcubj:)}(hneth]hnet}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[cubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjbhMIubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjbhhhjbhMIubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhjbhMIhjbhhubj)}(hhh]h)}(hallocate an IB device structh]hallocate an IB device struct}(hj,dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMIhj)dhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMIubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjDdjjDdjjjuh1jhhhhhNhNubj)}(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)}(hjNdh]h Parameters}(hjPdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLdubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMMhjHdubj)}(hhh](j)}(h.``size_t size`` size of structure to allocate h](j)}(h``size_t size``h]j)}(hjmdh]h size_t size}(hjodhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkdubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMJhjgdubj )}(hhh]h)}(hsize of structure to allocateh]hsize of structure to allocate}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMJhjdubah}(h]h ]h"]h$]h&]uh1j hjgdubeh}(h]h ]h"]h$]h&]uh1jhjdhMJhjddubj)}(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)}(hjdh]hstruct net *net}(hjdhhhNhNubah}(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.chMLhjdubj )}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMKhjdubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMLhjddubeh}(h]h ]h"]h$]h&]uh1jhjHdubh)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMNhjHdubh)}(hX)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;Low-level drivers should use ib_alloc_device() to allocate }(hjdhhhNhNubh)}(h&:c:type:`struct ib_device `h]j)}(hjeh]hstruct ib_device}(hjehhhNhNubah}(h]h ](xrefjQc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocdriver-api/infiniband refdomainjQreftypetype refexplicitrefwarnjWjZ)}j]]sb reftarget ib_deviceuh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMMhjdubh. }(hjdhhhNhNubj)}(h**size**h]hsize}(hj*ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh 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().}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%ehMMhjHdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_dealloc_device (C function)c.ib_dealloc_devicehNtauh1hhhhhhNhNubj)}(hhh](j)}(h1void ib_dealloc_device (struct ib_device *device)h]j)}(h0void ib_dealloc_device(struct ib_device *device)h](j)}(hvoidh]hvoid}(hjbehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ehhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hjqehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj^ehhhjpehMubj)}(hib_dealloc_deviceh]j:)}(hib_dealloc_deviceh]hib_dealloc_device}(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^ehhhjpehMubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjeubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjemodnameN classnameNjWjZ)}j]]j`)}jSjesbc.ib_dealloc_deviceasbuh1hhjeubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjeubju)}(hjxh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjeubj:)}(hdeviceh]hdevice}(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubah}(h]h ]h"]h$]h&]jjuh1jhj^ehhhjpehMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjZehhhjpehMubah}(h]jUeah ](jjeh"]h$]h&]jj)jhuh1jhjpehMhjWehhubj)}(hhh]h)}(hfree an IB device structh]hfree an IB device struct}(hj"fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjWehhhjpehMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj:fjj:fjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` structure to free **Description** Free a structure allocated with ib_alloc_device().h](h)}(h**Parameters**h]j)}(hjDfh]h Parameters}(hjFfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBfubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj>fubj)}(hhh]j)}(h/``struct ib_device *device`` structure to free h](j)}(h``struct ib_device *device``h]j)}(hjcfh]hstruct ib_device *device}(hjefhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjafubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj]fubj )}(hhh]h)}(hstructure to freeh]hstructure to free}(hj|fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxfhMhjyfubah}(h]h ]h"]h$]h&]uh1j hj]fubeh}(h]h ]h"]h$]h&]uh1jhjxfhMhjZfubah}(h]h ]h"]h$]h&]uh1jhj>fubh)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj>fubh)}(h2Free a structure allocated with ib_alloc_device().h]h2Free a structure allocated with ib_alloc_device().}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj>fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#ib_port_immutable_read (C function)c.ib_port_immutable_readhNtauh1hhhhhhNhNubj)}(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}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjfhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjfhhhjfhMubj)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjfhhhjfhMubj&)}(h h]h }(hj ghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjfhhhjfhMubh)}(hhh]j:)}(hib_port_immutableh]hib_port_immutable}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjgmodnameN classnameNjWjZ)}j]]j`)}jSib_port_immutable_readsbc.ib_port_immutable_readasbuh1hhjfhhhjfhMubj&)}(h h]h }(hj>ghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjfhhhjfhMubju)}(hjxh]h*}(hjLghhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjfhhhjfhMubj)}(hib_port_immutable_readh]j:)}(hj;gh]hib_port_immutable_read}(hj]ghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjfhMubj)}(h*(struct ib_device *dev, unsigned int port)h](j)}(hstruct ib_device *devh](j)}(hjh]hstruct}(hjxghhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtgubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtgubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjgmodnameN classnameNjWjZ)}j]]j9gc.ib_port_immutable_readasbuh1hhjtgubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtgubju)}(hjxh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjtgubj:)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpgubj)}(hunsigned int porth](j)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjgubj)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjgubj:)}(hporth]hport}(hj hhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpgubeh}(h]h ]h"]h$]h&]jjuh1jhjfhhhjfhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjfhhhjfhMubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjfhMhjfhhubj)}(hhh]h)}(hRead rdma port's immutable datah]h!Read rdma port’s immutable data}(hjJhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjGhhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjbhjjbhjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *dev`` IB device ``unsigned int port`` port number whose immutable data to read. It starts with index 1 and valid upto including rdma_end_port().h](h)}(h**Parameters**h]j)}(hjlhh]h Parameters}(hjnhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjhubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjfhubj)}(hhh](j)}(h$``struct ib_device *dev`` IB device h](j)}(h``struct ib_device *dev``h]j)}(hjhh]hstruct ib_device *dev}(hjhhhhNhNubah}(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.chMhjhubj )}(hhh]h)}(h IB deviceh]h IB device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h``unsigned int port`` port number whose immutable data to read. It starts with index 1 and valid upto including rdma_end_port().h](j)}(h``unsigned int port``h]j)}(hjhh]hunsigned int port}(hjhhhhNhNubah}(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.chMhjhubj )}(hhh]h)}(hjport number whose immutable data to read. It starts with index 1 and valid upto including rdma_end_port().h]hjport number whose immutable data to read. It starts with index 1 and valid upto including rdma_end_port().}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1j hjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubeh}(h]h ]h"]h$]h&]uh1jhjfhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_register_device (C function)c.ib_register_devicehNtauh1hhhhhhNhNubj)}(hhh](j)}(h^int ib_register_device (struct ib_device *device, const char *name, struct device *dma_device)h]j)}(h]int ib_register_device(struct ib_device *device, const char *name, struct device *dma_device)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hj,ihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjihhhj+ihMubj)}(hib_register_deviceh]j:)}(hib_register_deviceh]hib_register_device}(hj>ihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:iubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhj+ihMubj)}(hG(struct ib_device *device, const char *name, struct device *dma_device)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjZihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjViubj&)}(h h]h }(hjgihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjViubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjxihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuiubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzimodnameN classnameNjWjZ)}j]]j`)}jSj@isbc.ib_register_deviceasbuh1hhjViubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjViubju)}(hjxh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjViubj:)}(hdeviceh]hdevice}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjViubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRiubj)}(hconst char *nameh](j)}(hjh]hconst}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubj)}(hcharh]hchar}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubju)}(hjxh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjiubj:)}(hnameh]hname}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRiubj)}(hstruct device *dma_deviceh](j)}(hjh]hstruct}(hj)jhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%jubj&)}(h h]h }(hj6jhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%jubh)}(hhh]j:)}(hdeviceh]hdevice}(hjGjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjIjmodnameN classnameNjWjZ)}j]]jic.ib_register_deviceasbuh1hhj%jubj&)}(h h]h }(hjejhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%jubju)}(hjxh]h*}(hjsjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj%jubj:)}(h dma_deviceh]h dma_device}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRiubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhj+ihMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjihhhj+ihMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhj+ihMhjihhubj)}(hhh]h)}(h"Register an IB device with IB coreh]h"Register an IB device with IB core}(hjjhhhNhNubah}(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&]uh1jhjihhhj+ihMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjjjuh1jhhhhhNhNubj)}(hX@**Parameters** ``struct ib_device *device`` Device to register ``const char *name`` unique string device name. This may include a '%' which will cause a unique index to be added to the passed device name. ``struct device *dma_device`` pointer to a DMA-capable device. If ``NULL``, then the IB device will be used. In this case the caller should fully setup the ibdev for DMA. This usually means using dma_virt_ops. **Description** Low-level drivers use ib_register_device() to register their devices with the IB core. All registered clients will receive a callback for each device that is added. **device** must be allocated with ib_alloc_device(). If the driver uses ops.dealloc_driver and calls any ib_unregister_device() asynchronously then the device pointer may become freed as soon as this function returns.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjjubj)}(hhh](j)}(h0``struct ib_device *device`` Device to register h](j)}(h``struct ib_device *device``h]j)}(hjjh]hstruct ib_device *device}(hjjhhhNhNubah}(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.chMhjjubj )}(hhh]h)}(hDevice to registerh]hDevice to register}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjjubj)}(h``const char *name`` unique string device name. This may include a '%' which will cause a unique index to be added to the passed device name. h](j)}(h``const char *name``h]j)}(hj$kh]hconst char *name}(hj&khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"kubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjkubj )}(hhh]h)}(hxunique string device name. This may include a '%' which will cause a unique index to be added to the passed device name.h]h|unique string device name. This may include a ‘%’ which will cause a unique index to be added to the passed device name.}(hj=khhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj:kubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhj9khMhjjubj)}(h``struct device *dma_device`` pointer to a DMA-capable device. If ``NULL``, then the IB device will be used. In this case the caller should fully setup the ibdev for DMA. This usually means using dma_virt_ops. h](j)}(h``struct device *dma_device``h]j)}(hj^kh]hstruct device *dma_device}(hj`khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\kubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjXkubj )}(hhh]h)}(hpointer to a DMA-capable device. If ``NULL``, then the IB device will be used. In this case the caller should fully setup the ibdev for DMA. This usually means using dma_virt_ops.h](h$pointer to a DMA-capable device. If }(hjwkhhhNhNubj)}(h``NULL``h]hNULL}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwkubh, then the IB device will be used. In this case the caller should fully setup the ibdev for DMA. This usually means using dma_virt_ops.}(hjwkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjtkubah}(h]h ]h"]h$]h&]uh1j hjXkubeh}(h]h ]h"]h$]h&]uh1jhjskhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubh)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjjubh)}(hLow-level drivers use ib_register_device() to register their devices with the IB core. All registered clients will receive a callback for each device that is added. **device** must be allocated with ib_alloc_device().h](hLow-level drivers use ib_register_device() to register their devices with the IB core. All registered clients will receive a callback for each device that is added. }(hjkhhhNhNubj)}(h **device**h]hdevice}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh* must be allocated with ib_alloc_device().}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjjubh)}(hIf the driver uses ops.dealloc_driver and calls any ib_unregister_device() asynchronously then the device pointer may become freed as soon as this function returns.h]hIf the driver uses ops.dealloc_driver and calls any ib_unregister_device() asynchronously then the device pointer may become freed as soon as this function returns.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_unregister_device (C function)c.ib_unregister_devicehNtauh1hhhhhhNhNubj)}(hhh](j)}(h4void ib_unregister_device (struct ib_device *ib_dev)h]j)}(h3void ib_unregister_device(struct ib_device *ib_dev)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM,ubj&)}(h h]h }(hj!lhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjlhhhj lhM,ubj)}(hib_unregister_deviceh]j:)}(hib_unregister_deviceh]hib_unregister_device}(hj3lhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/lubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj lhM,ubj)}(h(struct ib_device *ib_dev)h]j)}(hstruct ib_device *ib_devh](j)}(hjh]hstruct}(hjOlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKlubj&)}(h h]h }(hj\lhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKlubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjmlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjlubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjolmodnameN classnameNjWjZ)}j]]j`)}jSj5lsbc.ib_unregister_deviceasbuh1hhjKlubj&)}(h h]h }(hjlhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKlubju)}(hjxh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjKlubj:)}(hib_devh]hib_dev}(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGlubah}(h]h ]h"]h$]h&]jjuh1jhjlhhhj lhM,ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj lhhhj lhM,ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhj lhM,hjlhhubj)}(hhh]h)}(hUnregister an IB deviceh]hUnregister an IB device}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM,hjlhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhj lhM,ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjljjljjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_device *ib_dev`` The device to unregister **Description** Unregister an IB device. All clients will receive a remove callback. Callers should call this routine only once, and protect against races with registration. Typically it should only be called as part of a remove callback in an implementation of driver core's struct device_driver and related. If ops.dealloc_driver is used then ib_dev will be freed upon return from this function.h](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0hjlubj)}(hhh]j)}(h6``struct ib_device *ib_dev`` The device to unregister h](j)}(h``struct ib_device *ib_dev``h]j)}(hjmh]hstruct ib_device *ib_dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM-hj mubj )}(hhh]h)}(hThe device to unregisterh]hThe device to unregister}(hj,mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(mhM-hj)mubah}(h]h ]h"]h$]h&]uh1j hj mubeh}(h]h ]h"]h$]h&]uh1jhj(mhM-hj mubah}(h]h ]h"]h$]h&]uh1jhjlubh)}(h**Description**h]j)}(hjNmh]h Description}(hjPmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLmubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM/hjlubh)}(hEUnregister an IB device. All clients will receive a remove callback.h]hEUnregister an IB device. All clients will receive a remove callback.}(hjdmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM.hjlubh)}(hCallers should call this routine only once, and protect against races with registration. Typically it should only be called as part of a remove callback in an implementation of driver core's struct device_driver and related.h]hCallers should call this routine only once, and protect against races with registration. Typically it should only be called as part of a remove callback in an implementation of driver core’s struct device_driver and related.}(hjsmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM0hjlubh)}(hWIf ops.dealloc_driver is used then ib_dev will be freed upon return from this function.h]hWIf ops.dealloc_driver is used then ib_dev will be freed upon return from this function.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM5hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)ib_unregister_device_and_put (C function)c.ib_unregister_device_and_puthNtauh1hhhhhhNhNubj)}(hhh](j)}(hpubj )}(hhh]h)}(hThe driver to unregisterh]hThe driver to unregister}(hj]phhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYphM[hjZpubah}(h]h ]h"]h$]h&]uh1j hj>pubeh}(h]h ]h"]h$]h&]uh1jhjYphM[hj;pubah}(h]h ]h"]h$]h&]uh1jhjpubh)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}pubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM]hjpubh)}(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*().}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM\hjpubh)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM`hjpubh)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMchjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(ib_unregister_device_queued (C function)c.ib_unregister_device_queuedhNtauh1hhhhhhNhNubj)}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjphhhjphMubj)}(hib_unregister_device_queuedh]j:)}(hib_unregister_device_queuedh]hib_unregister_device_queued}(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjphMubj)}(h(struct ib_device *ib_dev)h]j)}(hstruct ib_device *ib_devh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjqubj&)}(h h]h }(hj,qhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjqubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj=qhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:qubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj?qmodnameN classnameNjWjZ)}j]]j`)}jSjqsbc.ib_unregister_device_queuedasbuh1hhjqubj&)}(h h]h }(hj]qhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjqubju)}(hjxh]h*}(hjkqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjqubj:)}(hib_devh]hib_dev}(hjxqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubah}(h]h ]h"]h$]h&]jjuh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjphMhjphhubj)}(hhh]h)}(h&Unregister a device using a work queueh]h&Unregister a device using a work queue}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjqjjqjjjuh1jhhhhhNhNubj)}(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)}(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.chMhjqubj)}(hhh]j)}(h6``struct ib_device *ib_dev`` The device to unregister h](j)}(h``struct ib_device *ib_dev``h]j)}(hjqh]hstruct ib_device *ib_dev}(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.chMhjqubj )}(hhh]h)}(hThe device to unregisterh]hThe device to unregister}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjrh]h Description}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjqubh)}(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.}(hj4rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjqubh)}(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.}(hjCrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_register_client (C function)c.ib_register_clienthNtauh1hhhhhhNhNubj)}(hhh](j)}(h1int ib_register_client (struct ib_client *client)h]j)}(h0int ib_register_client(struct ib_client *client)h](j)}(hinth]hint}(hjrrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnrhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM1ubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnrhhhjrhM1ubj)}(hib_register_clienth]j:)}(hib_register_clienth]hib_register_client}(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnrhhhjrhM1ubj)}(h(struct ib_client *client)h]j)}(hstruct ib_client *clienth](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjrubh)}(hhh]j:)}(h ib_clienth]h ib_client}(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjrmodnameN classnameNjWjZ)}j]]j`)}jSjrsbc.ib_register_clientasbuh1hhjrubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjrubju)}(hjxh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjrubj:)}(hclienth]hclient}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhjnrhhhjrhM1ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjjrhhhjrhM1ubah}(h]jerah ](jjeh"]h$]h&]jj)jhuh1jhjrhM1hjgrhhubj)}(hhh]h)}(hRegister an IB clienth]hRegister an IB client}(hj2shhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM1hj/shhubah}(h]h ]h"]h$]h&]uh1jhjgrhhhjrhM1ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjJsjjJsjjjuh1jhhhhhNhNubj)}(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)}(hjTsh]h Parameters}(hjVshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRsubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM5hjNsubj)}(hhh]j)}(h0``struct ib_client *client`` Client to register h](j)}(h``struct ib_client *client``h]j)}(hjssh]hstruct ib_client *client}(hjushhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqsubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM2hjmsubj )}(hhh]h)}(hClient to registerh]hClient to register}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM2hjsubah}(h]h ]h"]h$]h&]uh1j hjmsubeh}(h]h ]h"]h$]h&]uh1jhjshM2hjjsubah}(h]h ]h"]h$]h&]uh1jhjNsubh)}(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.chM4hjNsubh)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM3hjNsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_unregister_client (C function)c.ib_unregister_clienthNtauh1hhhhhhNhNubj)}(hhh](j)}(h4void ib_unregister_client (struct ib_client *client)h]j)}(h3void ib_unregister_client(struct ib_client *client)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMbubj&)}(h h]h }(hjthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjshhhjthMbubj)}(hib_unregister_clienth]j:)}(hib_unregister_clienth]hib_unregister_client}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjthMbubj)}(h(struct ib_client *client)h]j)}(hstruct ib_client *clienth](j)}(hjh]hstruct}(hj0thhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,tubj&)}(h h]h }(hj=thhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj,tubh)}(hhh]j:)}(h ib_clienth]h ib_client}(hjNthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKtubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjPtmodnameN classnameNjWjZ)}j]]j`)}jSjtsbc.ib_unregister_clientasbuh1hhj,tubj&)}(h h]h }(hjnthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj,tubju)}(hjxh]h*}(hj|thhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj,tubj:)}(hclienth]hclient}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(tubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjthMbubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjshhhjthMbubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjthMbhjshhubj)}(hhh]h)}(hUnregister an IB clienth]hUnregister an IB client}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMbhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjthMbubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjtjjtjjjuh1jhhhhhNhNubj)}(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)}(hjth]h Parameters}(hjthhhNhNubah}(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.chMfhjtubj)}(hhh]j)}(h2``struct ib_client *client`` Client to unregister h](j)}(h``struct ib_client *client``h]j)}(hjth]hstruct ib_client *client}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMchjtubj )}(hhh]h)}(hClient to unregisterh]hClient to unregister}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj uhMchj uubah}(h]h ]h"]h$]h&]uh1j hjtubeh}(h]h ]h"]h$]h&]uh1jhj uhMchjtubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j)}(hj/uh]h Description}(hj1uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-uubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMehjtubh)}(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.}(hjEuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMdhjtubh)}(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.}(hjTuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_set_client_data (C function)c.ib_set_client_datahNtauh1hhhhhhNhNubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjuhhhjuhMubj)}(hib_set_client_datah]j:)}(hib_set_client_datah]hib_set_client_data}(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhMubj)}(h@(struct ib_device *device, struct ib_client *client, void *data)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjuubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjuubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjumodnameN classnameNjWjZ)}j]]j`)}jSjusbc.ib_set_client_dataasbuh1hhjuubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjuubju)}(hjxh]h*}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjuubj:)}(hdeviceh]hdevice}(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(hstruct ib_client *clienth](j)}(hjh]hstruct}(hj2vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.vubj&)}(h h]h }(hj?vhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.vubh)}(hhh]j:)}(h ib_clienth]h ib_client}(hjPvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMvubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRvmodnameN classnameNjWjZ)}j]]juc.ib_set_client_dataasbuh1hhj.vubj&)}(h h]h }(hjnvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.vubju)}(hjxh]h*}(hj|vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.vubj:)}(hclienth]hclient}(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(h void *datah](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj&)}(h h]h }(hjvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvubju)}(hjxh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjvubj:)}(hdatah]hdata}(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj{uhhhjuhMubah}(h]jvuah ](jjeh"]h$]h&]jj)jhuh1jhjuhMhjxuhhubj)}(hhh]h)}(hSet IB client contexth]hSet IB client context}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjxuhhhjuhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj wjj wjjjuh1jhhhhhNhNubj)}(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)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjwubj)}(hhh](j)}(h7``struct ib_device *device`` Device to set context for h](j)}(h``struct ib_device *device``h]j)}(hj6wh]hstruct ib_device *device}(hj8whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4wubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhj0wubj )}(hhh]h)}(hDevice to set context forh]hDevice to set context for}(hjOwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKwhMhjLwubah}(h]h ]h"]h$]h&]uh1j hj0wubeh}(h]h ]h"]h$]h&]uh1jhjKwhMhj-wubj)}(h7``struct ib_client *client`` Client to set context for h](j)}(h``struct ib_client *client``h]j)}(hjowh]hstruct ib_client *client}(hjqwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmwubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjiwubj )}(hhh]h)}(hClient to set context forh]hClient to set context for}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1j hjiwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj-wubj)}(h``void *data`` Context to set h](j)}(h``void *data``h]j)}(hjwh]h void *data}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjwubj )}(hhh]h)}(hContext to seth]hContext to set}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1j hjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj-wubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjwubh)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&ib_register_event_handler (C function)c.ib_register_event_handlerhNtauh1hhhhhhNhNubj)}(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}(hj(xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$xhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj&)}(h h]h }(hj7xhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$xhhhj6xhM ubj)}(hib_register_event_handlerh]j:)}(hib_register_event_handlerh]hib_register_event_handler}(hjIxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjExubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$xhhhj6xhM ubj)}(h((struct ib_event_handler *event_handler)h]j)}(h&struct ib_event_handler *event_handlerh](j)}(hjh]hstruct}(hjexhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjaxubj&)}(h h]h }(hjrxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaxubh)}(hhh]j:)}(hib_event_handlerh]hib_event_handler}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjxmodnameN classnameNjWjZ)}j]]j`)}jSjKxsbc.ib_register_event_handlerasbuh1hhjaxubj&)}(h h]h }(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaxubju)}(hjxh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjaxubj:)}(h event_handlerh]h event_handler}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]xubah}(h]h ]h"]h$]h&]jjuh1jhj$xhhhj6xhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj xhhhj6xhM ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhj6xhM hjxhhubj)}(hhh]h)}(hRegister an IB event handlerh]hRegister an IB event handler}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjxhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhj6xhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjyjjyjjjuh1jhhhhhNhNubj)}(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)}(hj yh]h Parameters}(hj yhhhNhNubah}(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 hjyubj)}(hhh]j)}(h?``struct ib_event_handler *event_handler`` Handler to register h](j)}(h*``struct ib_event_handler *event_handler``h]j)}(hj)yh]h&struct ib_event_handler *event_handler}(hj+yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'yubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hj#yubj )}(hhh]h)}(hHandler to registerh]hHandler to register}(hjByhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>yhM hj?yubah}(h]h ]h"]h$]h&]uh1j hj#yubeh}(h]h ]h"]h$]h&]uh1jhj>yhM hj yubah}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hjdyh]h Description}(hjfyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbyubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjyubh)}(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.}(hjzyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(ib_unregister_event_handler (C function)c.ib_unregister_event_handlerhNtauh1hhhhhhNhNubj)}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyhhhjyhMubj)}(hib_unregister_event_handlerh]j:)}(hib_unregister_event_handlerh]hib_unregister_event_handler}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjyhMubj)}(h((struct ib_event_handler *event_handler)h]j)}(h&struct ib_event_handler *event_handlerh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyubh)}(hhh]j:)}(hib_event_handlerh]hib_event_handler}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzmodnameN classnameNjWjZ)}j]]j`)}jSjysbc.ib_unregister_event_handlerasbuh1hhjyubj&)}(h h]h }(hj$zhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyubju)}(hjxh]h*}(hj2zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjyubj:)}(h event_handlerh]h event_handler}(hj?zhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjyhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjyhhhjyhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1jhjyhMhjyhhubj)}(hhh]h)}(hUnregister an event handlerh]hUnregister an event handler}(hjizhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjfzhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjyhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjzjjzjjjuh1jhhhhhNhNubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjzubj)}(hhh]j)}(hA``struct ib_event_handler *event_handler`` Handler to unregister h](j)}(h*``struct ib_event_handler *event_handler``h]j)}(hjzh]h&struct ib_event_handler *event_handler}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjzubj )}(hhh]h)}(hHandler to unregisterh]hHandler to unregister}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjzubh)}(hHUnregister an event handler registered with ib_register_event_handler().h]hHUnregister an event handler registered with ib_register_event_handler().}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_query_port (C function)c.ib_query_porthNtauh1hhhhhhNhNubj)}(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}(hj*{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&{hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMrubj&)}(h h]h }(hj9{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&{hhhj8{hMrubj)}(h ib_query_porth]j:)}(h ib_query_porth]h ib_query_port}(hjK{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&{hhhj8{hMrubj)}(hH(struct ib_device *device, u32 port_num, struct ib_port_attr *port_attr)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjg{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjc{ubj&)}(h h]h }(hjt{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjc{ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj{modnameN classnameNjWjZ)}j]]j`)}jSjM{sbc.ib_query_portasbuh1hhjc{ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjc{ubju)}(hjxh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjc{ubj:)}(hdeviceh]hdevice}(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjc{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_{ubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj{modnameN classnameNjWjZ)}j]]j{c.ib_query_portasbuh1hhj{ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubj:)}(hport_numh]hport_num}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_{ubj)}(hstruct ib_port_attr *port_attrh](j)}(hjh]hstruct}(hj!|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hj.|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(h ib_port_attrh]h ib_port_attr}(hj?|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjA|modnameN classnameNjWjZ)}j]]j{c.ib_query_portasbuh1hhj|ubj&)}(h h]h }(hj]|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hjk|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(h port_attrh]h port_attr}(hjx|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_{ubeh}(h]h ]h"]h$]h&]jjuh1jhj&{hhhj8{hMrubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj"{hhhj8{hMrubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj8{hMrhj{hhubj)}(hhh]h)}(hQuery IB port attributesh]hQuery IB port attributes}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMrhj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj8{hMrubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj|jj|jjjuh1jhhhhhNhNubj)}(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)}(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.chMvhj|ubj)}(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.chMshj|ubj )}(hhh]h)}(hDevice to queryh]hDevice to query}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMshj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMshj|ubj)}(h&``u32 port_num`` Port number to query 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.chMthj}ubj )}(hhh]h)}(hPort number to queryh]hPort number to query}(hj5}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1}hMthj2}ubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhj1}hMthj|ubj)}(h3``struct ib_port_attr *port_attr`` Port attributes h](j)}(h"``struct ib_port_attr *port_attr``h]j)}(hjU}h]hstruct ib_port_attr *port_attr}(hjW}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS}ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMuhjO}ubj )}(hhh]h)}(hPort attributesh]hPort attributes}(hjn}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj}hMuhjk}ubah}(h]h ]h"]h$]h&]uh1j hjO}ubeh}(h]h ]h"]h$]h&]uh1jhjj}hMuhj|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&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMwhj|ubh)}(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 }(hj}hhhNhNubj)}(h **port_attr**h]h port_attr}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh pointer.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMvhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_device_set_netdev (C function)c.ib_device_set_netdevhNtauh1hhhhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhj}hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMubj&)}(h h]h }(hj}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}hhhj}hMubj)}(hib_device_set_netdevh]j:)}(hib_device_set_netdevh]hib_device_set_netdev}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhj}hMubj)}(h=(struct ib_device *ib_dev, struct net_device *ndev, u32 port)h](j)}(hstruct ib_device *ib_devh](j)}(hjh]hstruct}(hj$~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ~ubj&)}(h h]h }(hj1~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ~ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjB~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?~ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjD~modnameN classnameNjWjZ)}j]]j`)}jSj ~sbc.ib_device_set_netdevasbuh1hhj ~ubj&)}(h h]h }(hjb~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ~ubju)}(hjxh]h*}(hjp~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ~ubj:)}(hib_devh]hib_dev}(hj}~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hstruct net_device *ndevh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~ubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~ubh)}(hhh]j:)}(h net_deviceh]h net_device}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj~modnameN classnameNjWjZ)}j]]j^~c.ib_device_set_netdevasbuh1hhj~ubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~ubju)}(hjxh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj~ubj:)}(hndevh]hndev}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hu32 porth](h)}(hhh]j:)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j^~c.ib_device_set_netdevasbuh1hhjubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hporth]hport}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(h2Associate the ib_dev with an underlying net_deviceh]h2Associate the ib_dev with an underlying net_device}(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&]uh1jhj}hhhj}hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjwjjwjjjuh1jhhhhhNhNubj)}(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)}(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.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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``struct net_device *ndev`` net_device to affiliate, may be NULL 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.chMhjubj )}(hhh]h)}(h$net_device to affiliate, may be NULLh]h$net_device to affiliate, may be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``u32 port`` IB port the net_device is connected to 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.chMhj ubj )}(hhh]h)}(h&IB port the net_device is connected toh]h&IB port the net_device is connected to}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(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.}(hjchhhNhNubah}(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.}(hjrhhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_query_netdev_port (C function)c.ib_query_netdev_porthNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hib_query_netdev_porth]j:)}(hib_query_netdev_porth]hib_query_netdev_port}(hj€hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjހhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjڀubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjڀubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjĀsbc.ib_query_netdev_portasbuh1hhjڀubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjڀubju)}(hjxh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjڀubj:)}(hibdevh]hibdev}(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjڀubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjրubj)}(hstruct net_device *ndevh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubh)}(hhh]j:)}(h net_deviceh]h net_device}(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjpmodnameN classnameNjWjZ)}j]]jc.ib_query_netdev_portasbuh1hhjLubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjLubj:)}(hndevh]hndev}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjրubj)}(h u32 *porth](h)}(hhh]j:)}(hu32h]hu32}(hjÁhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjŁmodnameN classnameNjWjZ)}j]]jc.ib_query_netdev_portasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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 ](jQfunctioneh"]h$]h&]jjQjj>jj>jjjuh1jhhhhhNhNubj)}(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)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM# hjBubj)}(hhh](j)}(h&``struct ib_device *ibdev`` IB device h](j)}(h``struct ib_device *ibdev``h]j)}(hjgh]hstruct ib_device *ibdev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM! hjaubj )}(hhh]h)}(h IB deviceh]h IB device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hM! hj}ubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM! hj^ubj)}(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&]uh1hhjhM" hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM" hj^ubj)}(h4``u32 *port`` IB port the net_device is connected toh](j)}(h ``u32 *port``h]j)}(hjقh]h u32 *port}(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&IB port the net_device is connected toh]h&IB port the net_device is connected to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM# hjubah}(h]h ]h"]h$]h&]uh1j hjӂubeh}(h]h ]h"]h$]h&]uh1jhjhM$ hj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$ib_device_get_by_netdev (C function)c.ib_device_get_by_netdevhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj3hhhNhNubah}(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 }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/hhhj@hM: ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjTmodnameN classnameNjWjZ)}j]]j`)}jSib_device_get_by_netdevsbc.ib_device_get_by_netdevasbuh1hhj/hhhj@hM: ubj&)}(h h]h }(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/hhhj@hM: ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj/hhhj@hM: ubj)}(hib_device_get_by_netdevh]j:)}(hjph]hib_device_get_by_netdev}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj@hM: ubj)}(h8(struct net_device *ndev, enum rdma_driver_id driver_id)h](j)}(hstruct net_device *ndevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h net_deviceh]h net_device}(hj˃hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjȃubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj̓modnameN classnameNjWjZ)}j]]jnc.ib_device_get_by_netdevasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hndevh]hndev}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum rdma_driver_id driver_idh](j)}(hj%h]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrdma_driver_idh]hrdma_driver_id}(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj=modnameN classnameNjWjZ)}j]]jnc.ib_device_get_by_netdevasbuh1hhjubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h driver_idh]h driver_id}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(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*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&]uh1jhj(hhhj@hM: ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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 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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM; hjubah}(h]h ]h"]h$]h&]uh1j hj̄ubeh}(h]h ]h"]h$]h&]uh1jhjhM; 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)}(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.chM< hjubj )}(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&]uh1hhj hM< hj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hM< hjɄubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(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.}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_query_pkey (C function)c.ib_query_pkeyhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(h ib_query_pkeyh]j:)}(h ib_query_pkeyh]h ib_query_pkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h>(struct ib_device *device, u32 port_num, u16 index, u16 *pkey)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjȅhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjąubj&)}(h h]h }(hjՅhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjąubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_query_pkeyasbuh1hhjąubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjąubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjąubj:)}(hdeviceh]hdevice}(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjąubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj?modnameN classnameNjWjZ)}j]]jc.ib_query_pkeyasbuh1hhj6ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubj:)}(hport_numh]hport_num}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 indexh](h)}(hhh]j:)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_query_pkeyasbuh1hhj~ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~ubj:)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 *pkeyh](h)}(hhh]j:)}(hu16h]hu16}(hj͆hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʆubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjφmodnameN classnameNjWjZ)}j]]jc.ib_query_pkeyasbuh1hhjƆubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƆubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjƆubj:)}(hpkeyh]hpkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjƆubeh}(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)}(hGet P_Key table entryh]hGet P_Key table entry}(hj0hhhNhNubah}(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 ](jQfunctioneh"]h$]h&]jjQjjHjjHjjjuh1jhhhhhNhNubj)}(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)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjLubj)}(hhh](j)}(h-``struct ib_device *device`` Device to query h](j)}(h``struct ib_device *device``h]j)}(hjqh]hstruct ib_device *device}(hjshhhNhNubah}(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.chM hjkubj )}(hhh]h)}(hDevice to queryh]hDevice to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjhM hjhubj)}(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}(hjÇhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjhubj)}(h)``u16 index`` P_Key table index to query 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.chM hj݇ubj )}(hhh]h)}(hP_Key table index to queryh]hP_Key table index to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hj݇ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjhubj)}(h``u16 *pkey`` Returned P_Key h](j)}(h ``u16 *pkey``h]j)}(hjh]h u16 *pkey}(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)}(hReturned P_Keyh]hReturned P_Key}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM hj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hM hjhubeh}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjLubh)}(h8ib_query_pkey() fetches the specified P_Key table entry.h]h8ib_query_pkey() fetches the specified P_Key table entry.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_modify_device (C function)c.ib_modify_devicehNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hib_modify_deviceh]j:)}(hib_modify_deviceh]hib_modify_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjوhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjՈubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjՈubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_modify_deviceasbuh1hhjՈubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjՈubju)}(hjxh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjՈubj:)}(hdeviceh]hdevice}(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjՈubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjшubj)}(hint device_modify_maskh](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubj:)}(hdevice_modify_maskh]hdevice_modify_mask}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjшubj)}(h&struct ib_device_modify *device_modifyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(hib_device_modifyh]hib_device_modify}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_modify_deviceasbuh1hhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hjʉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(h device_modifyh]h device_modify}(hj׉hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|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}(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 ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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&]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 ib_device *device`` Device to modify h](j)}(h``struct ib_device *device``h]j)}(hjBh]hstruct ib_device *device}(hjDhhhNhNubah}(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 modifyh]hDevice to modify}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM hjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM hj9ubj)}(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&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM hjuubj )}(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&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjhM hj9ubj)}(h@``struct ib_device_modify *device_modify`` New attribute values h](j)}(h*``struct ib_device_modify *device_modify``h]j)}(hjh]h&struct ib_device_modify *device_modify}(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)}(hNew attribute valuesh]hNew attribute values}(hj͊hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjɊhM hjʊubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjɊhM hj9ubeh}(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)}(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 }(hjhhhNhNubj)}(h**device_modify_mask**h]hdevice_modify_mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**device_modify**h]h device_modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh structure.}(hjhhhNhNubeh}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_modify_port (C function)c.ib_modify_porthNtauh1hhhhhhNhNubj)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM ubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjThhhjfhM ubj)}(hib_modify_porth]j:)}(hib_modify_porth]hib_modify_port}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhM 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSj{sbc.ib_modify_portasbuh1hhjubj&)}(h h]h }(hjӋhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]jϋc.ib_modify_portasbuh1hhjubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hport_numh]hport_num}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint port_modify_maskh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKubj:)}(hport_modify_maskh]hport_modify_mask}(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct ib_port_modify *port_modifyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_port_modifyh]hib_port_modify}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jϋc.ib_modify_portasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjΌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h port_modifyh]h port_modify}(hjیhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjThhhjfhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjPhhhjfhM ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjfhM hjMhhubj)}(hhh]h)}(h/Modifies the attributes for the specified port.h]h/Modifies the attributes for the specified port.}(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&]uh1jhjMhhhjfhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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 hj!ubj)}(hhh](j)}(h3``struct ib_device *device`` The device to modify. h](j)}(h``struct ib_device *device``h]j)}(hjFh]hstruct ib_device *device}(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.chM hj@ubj )}(hhh]h)}(hThe device to modify.h]hThe device to modify.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM hj\ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM hj=ubj)}(h3``u32 port_num`` The number of the port to modify. h](j)}(h``u32 port_num``h]j)}(hjh]h u32 port_num}(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 hjyubj )}(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&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjhM hj=ubj)}(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 hjubj )}(hhh]h)}(h(struct ib_device *device, u32 port_num, u16 pkey, u16 *index)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjّsbc.ib_find_pkeyasbuh1hhjubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjjmodnameN classnameNjWjZ)}j]]j-c.ib_find_pkeyasbuh1hhjaubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaubj:)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 pkeyh](h)}(hhh]j:)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j-c.ib_find_pkeyasbuh1hhjubj&)}(h h]h }(hjΒhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hpkeyh]hpkey}(hjܒhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 *indexh](h)}(hhh]j:)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j-c.ib_find_pkeyasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hindexh]hindex}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(hAReturns the PKey table index where a specified PKey value occurs.h]hAReturns the PKey table index where a specified PKey value occurs.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM" hjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjđhM" ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjsjjsjjjuh1jhhhhhNhNubj)}(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}(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& hjwubj)}(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.chM$ hjubj )}(hhh]h)}(hThe device to query.h]hThe device to query.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$ hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM$ 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.chM% 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM% hjubah}(h]h ]h"]h$]h&]uh1j hjϓubeh}(h]h ]h"]h$]h&]uh1jhjhM% hjubj)}(h+``u16 pkey`` The PKey value to search for. h](j)}(h ``u16 pkey``h]j)}(hjh]hu16 pkey}(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)}(hThe PKey value to search for.h]hThe PKey value to search for.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM& hj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hM& hjubj)}(hF``u16 *index`` The index into the PKey table where the PKey was found.h](j)}(h``u16 *index``h]j)}(hjGh]h u16 *index}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM( hjAubj )}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chM' hj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM( hjubeh}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%ib_get_net_dev_by_params (C function)c.ib_get_net_dev_by_paramshNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMJ ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMJ ubh)}(hhh]j:)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj”modnameN classnameNjWjZ)}j]]j`)}jSib_get_net_dev_by_paramssbc.ib_get_net_dev_by_paramsasbuh1hhjhhhjhMJ ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMJ ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhMJ ubj)}(hib_get_net_dev_by_paramsh]j:)}(hjޔh]hib_get_net_dev_by_params}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMJ 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj;modnameN classnameNjWjZ)}j]]jܔc.ib_get_net_dev_by_paramsasbuh1hhjubj&)}(h h]h }(hjWhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdevh]hdev}(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 porth](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jܔc.ib_get_net_dev_by_paramsasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 pkeyh](h)}(hhh]j:)}(hu16h]hu16}(hj֕hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjӕubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjؕmodnameN classnameNjWjZ)}j]]jܔc.ib_get_net_dev_by_paramsasbuh1hhjϕubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjϕubj:)}(hpkeyh]hpkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjϕubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst union ib_gid *gidh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjGh]hunion}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_gidh]hib_gid}(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjVmodnameN classnameNjWjZ)}j]]jܔc.ib_get_net_dev_by_paramsasbuh1hhjubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hgidh]hgid}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct sockaddr *addrh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjΖhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsockaddrh]hsockaddr}(hjߖhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjܖubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jܔc.ib_get_net_dev_by_paramsasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMJ ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMJ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMJ hjhhubj)}(hhh]h)}(h8Return the appropriate net_dev for a received CM requesth]h8Return the appropriate net_dev for a received CM request}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMJ hj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJ ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjZjjZjjjuh1jhhhhhNhNubj)}(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)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMN hj^ubj)}(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)}(hjh]hstruct ib_device *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.chML 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&]uh1hhjhML hjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhML hjzubj)}(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.chMM hjubj )}(hhh]h)}(hPort number on the RDMA device.h]hPort number on the RDMA device.}(hj՗hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjїhMM hjҗubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjїhMM hjzubj)}(h+``u16 pkey`` The Pkey the request came on. h](j)}(h ``u16 pkey``h]j)}(hjh]hu16 pkey}(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.chMN hjubj )}(hhh]h)}(hThe Pkey the request came on.h]hThe Pkey the request came on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMN hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMN hjzubj)}(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)}(hj.h]hconst union ib_gid *gid}(hj0hhhNhNubah}(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.chMO hj(ubj )}(hhh]h)}(h+A GID that the net_dev uses to communicate.h]h+A GID that the net_dev uses to communicate.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMO hjDubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMO hjzubj)}(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)}(hjgh]hconst struct sockaddr *addr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:25: ./drivers/infiniband/core/device.chMP hjaubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMP hj}ubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMP hjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__ib_alloc_pd (C function)c.__ib_alloc_pdhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chKubj&)}(h h]h }(hjΘhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj͘hKubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjߘhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjܘubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jS __ib_alloc_pdsbc.__ib_alloc_pdasbuh1hhjhhhj͘hKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj͘hKubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhj͘hKubj)}(h __ib_alloc_pdh]j:)}(hjh]h __ib_alloc_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj͘hKubj)}(hB(struct ib_device *device, unsigned int flags, const char *caller)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj&)}(h h]h }(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjZmodnameN classnameNjWjZ)}j]]jc.__ib_alloc_pdasbuh1hhj6ubj&)}(h h]h }(hjvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj6ubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hjƙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjԙhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hconst char *callerh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcallerh]hcaller}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(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)}(h&Allocates an unused protection domain.h]h&Allocates an unused protection domain.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj͘hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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.chKhjubj)}(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.chKhjubj )}(hhh]h)}(h6The device on which to allocate the protection domain.h]h6The device on which to allocate the protection domain.}(hjÚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``unsigned int flags`` protection domain flags h](j)}(h``unsigned int flags``h]j)}(hjh]hunsigned int flags}(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.chKhjݚubj )}(hhh]h)}(hprotection domain flagsh]hprotection domain flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjݚubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h7``const char *caller`` caller's build-time module name h](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.chKhjubj )}(hhh]h)}(hcaller's build-time module nameh]h!caller’s build-time module name}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjubeh}(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&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chKhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_dealloc_pd_user (C function)c.ib_dealloc_pd_userhNtauh1hhhhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMFubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMFubj)}(hib_dealloc_pd_userh]j:)}(hib_dealloc_pd_userh]hib_dealloc_pd_user}(hj̛hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjțubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMFubj)}(h*(struct ib_pd *pd, struct ib_udata *udata)h](j)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjΛsbc.ib_dealloc_pd_userasbuh1hhjubj&)}(h h]h }(hj&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hpdh]hpd}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubh)}(hhh]j:)}(hib_udatah]hib_udata}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzmodnameN classnameNjWjZ)}j]]j"c.ib_dealloc_pd_userasbuh1hhjVubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjVubj:)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMFhjhhubj)}(hhh]h)}(h Deallocates a protection domain.h]h Deallocates a protection domain.}(hjۜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMFhj؜hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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.chMJhjubj)}(hhh](j)}(h:``struct ib_pd *pd`` The protection domain to deallocate. 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.chMGhjubj )}(hhh]h)}(h$The protection domain to deallocate.h]h$The protection domain to deallocate.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMGhj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj1hMGhjubj)}(hE``struct ib_udata *udata`` Valid user data or NULL for kernel object h](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.chMHhjOubj )}(hhh]h)}(h)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMHhjkubah}(h]h ]h"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMHhjubeh}(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.chMJhjubh)}(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.chMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_copy_ah_attr (C function)c.rdma_copy_ah_attrhNtauh1hhhhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjѝhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMeubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjѝhhhjhMeubj)}(hrdma_copy_ah_attrh]j:)}(hrdma_copy_ah_attrh]hrdma_copy_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjѝhhhjhMeubj)}(h;(struct rdma_ah_attr *dest, const struct rdma_ah_attr *src)h](j)}(hstruct rdma_ah_attr *desth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj2modnameN classnameNjWjZ)}j]]j`)}jSjsbc.rdma_copy_ah_attrasbuh1hhjubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdesth]hdest}(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hconst struct rdma_ah_attr *srch](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jLc.rdma_copy_ah_attrasbuh1hhjubj&)}(h h]h }(hj۞hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjѝhhhjhMeubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj͝hhhjhMeubah}(h]jȝah ](jjeh"]h$]h&]jj)jhuh1jhjhMehjʝhhubj)}(hhh]h)}(h2Copy rdma ah attribute from source to destination.h]h2Copy rdma ah attribute from 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.chMehjhhubah}(h]h ]h"]h$]h&]uh1jhjʝhhhjhMeubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj8jj8jjjuh1jhhhhhNhNubj)}(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)}(hjBh]h Parameters}(hjDhhhNhNubah}(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.chMihj<ubj)}(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)}(hjah]hstruct rdma_ah_attr *dest}(hjchhhNhNubah}(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.chMghj[ubj )}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMfhjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMghjXubj)}(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.chMihjubj )}(hhh]h)}(hPointer to source ah_attr.h]hPointer to source ah_attr.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!rdma_replace_ah_attr (C function)c.rdma_replace_ah_attrhNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMtubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMtubj)}(hrdma_replace_ah_attrh]j:)}(hrdma_replace_ah_attrh]hrdma_replace_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMtubj)}(h:(struct rdma_ah_attr *old, const struct rdma_ah_attr *new)h](j)}(hstruct rdma_ah_attr *oldh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.rdma_replace_ah_attrasbuh1hhj.ubj&)}(h h]h }(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubju)}(hjxh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.ubj:)}(holdh]hold}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hconst struct rdma_ah_attr *newh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj̠hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjݠhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjڠubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjߠmodnameN classnameNjWjZ)}j]]jlc.rdma_replace_ah_attrasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMtubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMtubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMthjhhubj)}(hhh]h)}(h#Replace valid ah_attr with new one.h]h#Replace valid ah_attr with new one.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMthj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMtubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjXjjXjjjuh1jhhhhhNhNubj)}(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)}(hjbh]h Parameters}(hjdhhhNhNubah}(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.chMxhj\ubj)}(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)}(hjh]hstruct rdma_ah_attr *old}(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.chMvhj{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.chMuhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjxubj)}(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.chMwhjubj )}(hhh]h)}(hPointer to the new ah_attr.h]hPointer to the new ah_attr.}(hjԡhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjСhMwhjѡubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjСhMwhjxubeh}(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.chMyhj\ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMxhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_move_ah_attr (C function)c.rdma_move_ah_attrhNtauh1hhhhhhNhNubj)}(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}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7hhhjIhMubj)}(hrdma_move_ah_attrh]j:)}(hrdma_move_ah_attrh]hrdma_move_ah_attr}(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjIhMubj)}(h5(struct rdma_ah_attr *dest, struct rdma_ah_attr *src)h](j)}(hstruct rdma_ah_attr *desth](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSj^sbc.rdma_move_ah_attrasbuh1hhjtubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubju)}(hjxh]h*}(hjĢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjtubj:)}(hdesth]hdest}(hjѢhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(hstruct rdma_ah_attr *srch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]jc.rdma_move_ah_attrasbuh1hhjubj&)}(h h]h }(hj&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsrch]hsrc}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhjIhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj3hhhjIhMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjIhMhj0hhubj)}(hhh]h)}(h.Move ah_attr pointed by source to destination.h]h.Move ah_attr pointed by source to destination.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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.chMhjubj)}(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}(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&]uh1j hjubeh}(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)}(hjh]hstruct 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 the new ah_attr.h]hPointer to the new ah_attr.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(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.}(hj7hhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_create_ah (C function)c.rdma_create_ahhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjbhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM%ubj&)}(h h]h }(hjthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbhhhjshM%ubh)}(hhh]j:)}(hib_ahh]hib_ah}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSrdma_create_ahsbc.rdma_create_ahasbuh1hhjbhhhjshM%ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbhhhjshM%ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjbhhhjshM%ubj)}(hrdma_create_ahh]j:)}(hjh]hrdma_create_ah}(hjŤhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjshM%ubj)}(h;(struct ib_pd *pd, struct rdma_ah_attr *ah_attr, u32 flags)h](j)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjܤubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjܤubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.rdma_create_ahasbuh1hhjܤubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjܤubju)}(hjxh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjܤubj:)}(hpdh]hpd}(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjܤubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjؤubj)}(hstruct rdma_ah_attr *ah_attrh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjpmodnameN classnameNjWjZ)}j]]jc.rdma_create_ahasbuh1hhjLubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjLubj:)}(hah_attrh]hah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjؤubj)}(h u32 flagsh](h)}(hhh]j:)}(hu32h]hu32}(hjåhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjťmodnameN classnameNjWjZ)}j]]jc.rdma_create_ahasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjؤubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjshM%ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj^hhhjshM%ubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjshM%hj[hhubj)}(hhh]h)}(h7Creates an address handle for the given address vector.h]h7Creates an address handle for the given address 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[hhhjshM%ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj1jj1jjjuh1jhhhhhNhNubj)}(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)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM)hj5ubj)}(hhh](j)}(hO``struct ib_pd *pd`` The protection domain associated with the address handle. h](j)}(h``struct ib_pd *pd``h]j)}(hjZh]hstruct ib_pd *pd}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM'hjTubj )}(hhh]h)}(h9The protection domain associated with the address handle.h]h9The protection domain associated with the address handle.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM'hjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohM'hjQubj)}(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.chM(hjubj )}(hhh]h)}(h%The attributes of the address vector.h]h%The attributes of the address vector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjQubj)}(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.chM)hjƦubj )}(hhh]h)}(hCreates 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&]uh1jhjBhhhjZhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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.chMhjubj)}(hhh](j)}(hD``struct ib_pd *pd`` The protection domain associated with the SRQ. h](j)}(h``struct ib_pd *pd``h]j)}(hjٲh]hstruct ib_pd *pd}(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.The protection domain associated with the SRQ.h]h.The protection domain associated with the SRQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjӲubeh}(h]h ]h"]h$]h&]uh1jhjhMhjв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)}(hjh]h&struct ib_srq_init_attr *srq_init_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.chMhj ubj )}(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.}(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&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjв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)}(hjLh]hstruct ib_usrq_object *uobject}(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.chMhjFubj )}(hhh]h)}(h+uobject pointer if this is not a kernel SRQh]h+uobject pointer if this is not a kernel SRQ}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjв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.chMhjubj )}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjвubeh}(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&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_create_qp_user (C function)c.ib_create_qp_userhNtauh1hhhhhhNhNubj)}(hhh](j)}(hstruct ib_qp * ib_create_qp_user (struct ib_device *dev, struct ib_pd *pd, struct ib_qp_init_attr *attr, struct ib_udata *udata, 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 ib_udata *udata, struct ib_uqp_object *uobj, const char *caller)h](j)}(hjh]hstruct}(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 ]j2ah"]h$]h&]uh1j%hjhhhjhMubh)}(hhh]j:)}(hib_qph]hib_qp}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj&modnameN classnameNjWjZ)}j]]j`)}jSib_create_qp_usersbc.ib_create_qp_userasbuh1hhjhhhjhMubj&)}(h h]h }(hjEhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubju)}(hjxh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhMubj)}(hib_create_qp_userh]j:)}(hjBh]hib_create_qp_user}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ib_device *dev, struct ib_pd *pd, struct ib_qp_init_attr *attr, struct ib_udata *udata, struct ib_uqp_object *uobj, const char *caller)h](j)}(hstruct ib_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.ib_create_qp_userasbuh1hhj{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubju)}(hjxh]h*}(hjɴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj{ubj:)}(hdevh]hdev}(hjִhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_pdh]hib_pd}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.ib_create_qp_userasbuh1hhjubj&)}(h h]h }(hj+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hpdh]hpd}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct ib_qp_init_attr *attrh](j)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[ubj&)}(h h]h }(hjlhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubh)}(hhh]j:)}(hib_qp_init_attrh]hib_qp_init_attr}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.ib_create_qp_userasbuh1hhj[ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj[ubj:)}(hattrh]hattr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hjϵhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj˵ubj&)}(h h]h }(hjܵhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj˵ubh)}(hhh]j:)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.ib_create_qp_userasbuh1hhj˵ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj˵ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj˵ubj:)}(hudatah]hudata}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj˵ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct ib_uqp_object *uobjh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubh)}(hhh]j:)}(h ib_uqp_objecth]h ib_uqp_object}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj_modnameN classnameNjWjZ)}j]]j@c.ib_create_qp_userasbuh1hhj;ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj;ubj:)}(huobjh]huobj}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hconst char *callerh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hcharh]hchar}(hjʶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjضhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcallerh]hcaller}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(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 QP associated with the specified protection domain.h]h=Creates a QP 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 ](jQfunctioneh"]h$]h&]jjQjj5jj5jjjuh1jhhhhhNhNubj)}(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 ib_udata *udata`` User data ``struct ib_uqp_object *uobj`` uverbs obect ``const char *caller`` caller's build-time module nameh](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(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.chMhj9ubj)}(hhh](j)}(h$``struct ib_device *dev`` IB 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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjXubj )}(hhh]h)}(h IB deviceh]h IB device}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(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.chMhjubj )}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(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.chMhjʷ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.}(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&]uh1j hjʷubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(h%``struct ib_udata *udata`` User data h](j)}(h``struct ib_udata *udata``h]j)}(hj h]hstruct ib_udata *udata}(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)}(h User datah]h User data}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(h,``struct ib_uqp_object *uobj`` uverbs obect h](j)}(h``struct ib_uqp_object *uobj``h]j)}(hjCh]hstruct ib_uqp_object *uobj}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(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 uverbs obecth]h uverbs obect}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjUubj)}(h6``const char *caller`` caller's build-time module nameh](j)}(h``const char *caller``h]j)}(hj|h]hconst char *caller}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMhjvubj )}(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.chMhjubah}(h]h ]h"]h$]h&]uh1j hjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$ib_modify_qp_with_udata (C function)c.ib_modify_qp_with_udatahNtauh1hhhhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjҸhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMYubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjҸhhhjhMYubj)}(hib_modify_qp_with_udatah]j:)}(hib_modify_qp_with_udatah]hib_modify_qp_with_udata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjҸhhhjhMYubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_qph]hib_qp}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj3modnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_modify_qp_with_udataasbuh1hhjubj&)}(h h]h }(hjQhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hib_qph]hib_qp}(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct ib_qp_attr *attrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_qp_attrh]h ib_qp_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jMc.ib_modify_qp_with_udataasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjϹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hattrh]hattr}(hjܹhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int attr_maskh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h attr_maskh]h attr_mask}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubh)}(hhh]j:)}(hib_udatah]hib_udata}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjJmodnameN classnameNjWjZ)}j]]jMc.ib_modify_qp_with_udataasbuh1hhj&ubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubju)}(hjxh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj&ubj:)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjҸhhhjhMYubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjθhhhjhMYubah}(h]jɸah ](jjeh"]h$]h&]jj)jhuh1jhjhMYhj˸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.chMYhjhhubah}(h]h ]h"]h$]h&]uh1jhj˸hhhjhMYubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjújjújjjuh1jhhhhhNhNubj)}(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.chM]hjǺubj)}(hhh](j)}(h*``struct ib_qp *ib_qp`` The QP to modify. h](j)}(h``struct ib_qp *ib_qp``h]j)}(hjh]hstruct ib_qp *ib_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.chMZhjubj )}(hhh]h)}(hThe QP to modify.h]hThe QP to modify.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(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}(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\hjubj )}(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.}(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 hjubeh}(h]h ]h"]h$]h&]uh1jhj:hM\hjubj)}(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)}(hj_h]h int attr_mask}(hjahhhNhNubah}(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^hjYubj )}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM]hjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhjthM^hjubj)}(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.chM`hjubj )}(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.}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubeh}(h]h ]h"]h$]h&]uh1jhjǺubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_alloc_mr (C function) c.ib_alloc_mrhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(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 ]j2ah"]h$]h&]uh1j%hjhhhjhMubh)}(hhh]j:)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jS ib_alloc_mrsb c.ib_alloc_mrasbuh1hhjhhhjhMubj&)}(h h]h }(hj3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubju)}(hjxh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhMubj)}(h ib_alloc_mrh]j:)}(hj0h]h ib_alloc_mr}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h;(struct ib_pd *pd, enum ib_mr_type mr_type, u32 max_num_sg)h](j)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j. c.ib_alloc_mrasbuh1hhjiubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjiubj:)}(hpdh]hpd}(hjļhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(henum ib_mr_type mr_typeh](j)}(hj%h]henum}(hjݼhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjټubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjټubh)}(hhh]j:)}(h ib_mr_typeh]h ib_mr_type}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j. c.ib_alloc_mrasbuh1hhjټubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjټubj:)}(hmr_typeh]hmr_type}(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjټubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hu32 max_num_sgh](h)}(hhh]j:)}(hu32h]hu32}(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjEmodnameN classnameNjWjZ)}j]]j. c.ib_alloc_mrasbuh1hhj<ubj&)}(h h]h }(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj<ubj:)}(h max_num_sgh]h max_num_sg}(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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.chMhjubj)}(hhh](j)}(hB``struct ib_pd *pd`` protection domain associated with the region h](j)}(h``struct ib_pd *pd``h]j)}(hjڽh]hstruct ib_pd *pd}(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,protection domain associated with the regionh]h,protection domain associated with the region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjԽubeh}(h]h ]h"]h$]h&]uh1jhjhMhjѽubj)}(h/``enum ib_mr_type mr_type`` memory region type h](j)}(h``enum ib_mr_type mr_type``h]j)}(hjh]henum ib_mr_type mr_type}(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)}(hmemory region typeh]hmemory region type}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjѽubj)}(hB``u32 max_num_sg`` maximum sg entries available for registration. h](j)}(h``u32 max_num_sg``h]j)}(hjLh]hu32 max_num_sg}(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.chMhjFubj )}(hhh]h)}(h.maximum sg entries available for registration.h]h.maximum sg entries available for registration.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjѽubeh}(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.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"ib_alloc_mr_integrity (C function)c.ib_alloc_mr_integrityhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hj̾hhhNhNubah}(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 ]j2ah"]h$]h&]uh1j%hjȾhhhjپhM ubh)}(hhh]j:)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSib_alloc_mr_integritysbc.ib_alloc_mr_integrityasbuh1hhjȾhhhjپhM ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjȾhhhjپhM ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjȾhhhjپhM ubj)}(hib_alloc_mr_integrityh]j:)}(hj h]hib_alloc_mr_integrity}(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjȾhhhjپhM ubj)}(h<(struct ib_pd *pd, u32 max_num_data_sg, u32 max_num_meta_sg)h](j)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubj&)}(h h]h }(hjShhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjBubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjfmodnameN classnameNjWjZ)}j]]jc.ib_alloc_mr_integrityasbuh1hhjBubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjBubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjBubj:)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hu32 max_num_data_sgh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_alloc_mr_integrityasbuh1hhjubj&)}(h h]h }(hj׿hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hmax_num_data_sgh]hmax_num_data_sg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hu32 max_num_meta_sgh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_alloc_mr_integrityasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hmax_num_meta_sgh]hmax_num_meta_sg}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]jah ](jjeh"]h$]h&]jj)jhuh1jhjپhM hjhhubj)}(hhh]h)}(h$Allocates an integrity memory regionh]h$Allocates an integrity memory region}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjThhubah}(h]h ]h"]h$]h&]uh1jhjhhhjپhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjojjojjjuh1jhhhhhNhNubj)}(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)}(hjyh]h Parameters}(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.chM$ hjsubj)}(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.chM! hjubj )}(hhh]h)}(h,protection domain associated with the regionh]h,protection domain associated with the region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM! hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM! hjubj)}(hK``u32 max_num_data_sg`` maximum data sg entries available for registration h](j)}(h``u32 max_num_data_sg``h]j)}(hjh]hu32 max_num_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)}(h2maximum data sg entries available for registrationh]h2maximum data sg entries available for registration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM" hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM" hjubj)}(hO``u32 max_num_meta_sg`` maximum metadata sg entries available for registration h](j)}(h``u32 max_num_meta_sg``h]j)}(hj h]hu32 max_num_meta_sg}(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)}(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.chM# hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM$ hjubeh}(h]h ]h"]h$]h&]uh1jhjsubh)}(h **Notes**h]j)}(hjFh]hNotes}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM& hjsubh)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM& hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_alloc_xrcd_user (C function)c.ib_alloc_xrcd_userhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubh)}(hhh]j:)}(hib_xrcdh]hib_xrcd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSib_alloc_xrcd_usersbc.ib_alloc_xrcd_userasbuh1hhjhhhjhM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhM ubj)}(hib_alloc_xrcd_userh]j:)}(hjh]hib_alloc_xrcd_user}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]jc.ib_alloc_xrcd_userasbuh1hhjubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct inode *inodeh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjqubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjqubh)}(hhh]j:)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_alloc_xrcd_userasbuh1hhjqubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjqubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjqubj:)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_alloc_xrcd_userasbuh1hhjubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hudatah]hudata}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(hAllocates an XRC domain.h]hAllocates an XRC domain.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj~jj~jjjuh1jhhhhhNhNubj)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``struct inode *inode`` inode to connect XRCD h](j)}(h``struct inode *inode``h]j)}(hjh]hstruct inode *inode}(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)}(hinode to connect XRCDh]hinode to connect XRCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hD``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](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)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hj2hhhNhNubah}(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 hjubeh}(h]h ]h"]h$]h&]uh1jhj.hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!ib_dealloc_xrcd_user (C function)c.ib_dealloc_xrcd_userhNtauh1hhhhhhNhNubj)}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjohhhjhM ubj)}(hib_dealloc_xrcd_userh]j:)}(hib_dealloc_xrcd_userh]hib_dealloc_xrcd_user}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhM ubj)}(h.(struct ib_xrcd *xrcd, struct ib_udata *udata)h](j)}(hstruct ib_xrcd *xrcdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_xrcdh]hib_xrcd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_dealloc_xrcd_userasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hxrcdh]hxrcd}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_udatah]hib_udata}(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjBmodnameN classnameNjWjZ)}j]]jc.ib_dealloc_xrcd_userasbuh1hhjubj&)}(h h]h }(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hudatah]hudata}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjkhhhjhM ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhhubj)}(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&]uh1jhjhhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(hjh]hstruct ib_xrcd *xrcd}(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)}(hThe XRC domain to deallocate.h]hThe XRC domain to deallocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hD``struct ib_udata *udata`` Valid user data or NULL for kernel objecth](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.c#hM hjubj )}(hhh]h)}(h)Valid user data or NULL for kernel objecth]h)Valid user data or NULL for kernel object}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_create_wq (C function)c.ib_create_wqhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjshhhjhM ubh)}(hhh]j:)}(hib_wqh]hib_wq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jS ib_create_wqsbc.ib_create_wqasbuh1hhjshhhjhM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjshhhjhM ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjshhhjhM ubj)}(h ib_create_wqh]j:)}(hjh]h ib_create_wq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhM ubj)}(h3(struct ib_pd *pd, struct ib_wq_init_attr *wq_attr)h](j)}(hstruct ib_pd *pdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_pdh]hib_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_create_wqasbuh1hhjubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hpdh]hpd}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_wq_init_attr *wq_attrh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]ubj&)}(h h]h }(hjnhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubh)}(hhh]j:)}(hib_wq_init_attrh]hib_wq_init_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_create_wqasbuh1hhj]ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj]ubj:)}(hwq_attrh]hwq_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjohhhjhM ubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjlhhubj)}(hhh]h)}(h=Creates a WQ associated with the specified protection domain.h]h=Creates a WQ 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.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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)}(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&]uh1jhj!ubah}(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 WQ.h]h-The protection domain associated with the WQ.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj9ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj8hM hjubj)}(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)}(hj\h]hstruct ib_wq_init_attr *wq_attr}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjVubj )}(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.}(hjuhhhNhNubah}(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&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM 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&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(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 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_destroy_wq_user (C function)c.ib_destroy_wq_userhNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hib_destroy_wq_userh]j:)}(hib_destroy_wq_userh]hib_destroy_wq_user}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h*(struct ib_wq *wq, struct ib_udata *udata)h](j)}(hstruct ib_wq *wqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_wqh]hib_wq}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj:modnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_destroy_wq_userasbuh1hhjubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hwqh]hwq}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_udata *udatah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_udatah]hib_udata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jTc.ib_destroy_wq_userasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hudatah]hudata}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(hDestroys the specified user WQ.h]hDestroys the specified user WQ.}(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 ](jQfunctioneh"]h$]h&]jjQjj%jj%jjjuh1jhhhhhNhNubj)}(hg**Parameters** ``struct ib_wq *wq`` The WQ to destroy. ``struct ib_udata *udata`` Valid user datah](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(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_wq *wq`` The WQ to destroy. h](j)}(h``struct ib_wq *wq``h]j)}(hjNh]hstruct ib_wq *wq}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjHubj )}(hhh]h)}(hThe WQ to destroy.h]hThe WQ to destroy.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjdubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjchM hjEubj)}(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.chM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_map_mr_sg_pi (C function)c.ib_map_mr_sg_pihNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM\ ubj)}(hib_map_mr_sg_pih]j:)}(hib_map_mr_sg_pih]hib_map_mr_sg_pi}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM\ 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mrh]hib_mr}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj>modnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_map_mr_sg_piasbuh1hhjubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmrh]hmr}(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scatterlist *data_sgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jXc.ib_map_mr_sg_piasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdata_sgh]hdata_sg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint data_sg_nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h data_sg_nentsh]h data_sg_nents}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int *data_sg_offseth](j)}(hunsignedh]hunsigned}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hjChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubj)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hj_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubju)}(hjxh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj1ubj:)}(hdata_sg_offseth]hdata_sg_offset}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scatterlist *meta_sgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jXc.ib_map_mr_sg_piasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmeta_sgh]hmeta_sg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint meta_sg_nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h meta_sg_nentsh]h meta_sg_nents}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int *meta_sg_offseth](j)}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj&)}(h h]h }(hjFhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4ubj)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4ubju)}(hjxh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj4ubj:)}(hmeta_sg_offseth]hmeta_sg_offset}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int page_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h page_sizeh]h page_size}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(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.}(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 ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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)}(hj9h]hstruct ib_mr *mr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM^ hj3ubj )}(hhh]h)}(h memory regionh]h memory region}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM^ hjOubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM^ hj0ubj)}(h@``struct scatterlist *data_sg`` dma mapped scatterlist for data h](j)}(h``struct scatterlist *data_sg``h]j)}(hjrh]hstruct scatterlist *data_sg}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM_ hjlubj )}(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&]uh1j hjlubeh}(h]h ]h"]h$]h&]uh1jhjhM_ hj0ubj)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM` hj0ubj)}(h>``unsigned int *data_sg_offset`` offset in bytes into data_sg h](j)}(h ``unsigned int *data_sg_offset``h]j)}(hjh]hunsigned int *data_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.chMa hjubj )}(hhh]h)}(hoffset in bytes into data_sgh]hoffset in bytes into data_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMa hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMa hj0ubj)}(hD``struct scatterlist *meta_sg`` dma mapped scatterlist for metadata h](j)}(h``struct scatterlist *meta_sg``h]j)}(hjh]hstruct scatterlist *meta_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.chMb hjubj )}(hhh]h)}(h#dma mapped scatterlist for metadatah]h#dma mapped scatterlist for metadata}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMb hj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hMb hj0ubj)}(h3``int meta_sg_nents`` number of entries in meta_sg h](j)}(h``int meta_sg_nents``h]j)}(hjVh]hint meta_sg_nents}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMc hjPubj )}(hhh]h)}(hnumber of entries in meta_sgh]hnumber of entries in meta_sg}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMc hjlubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMc hj0ubj)}(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.chMd hjubj )}(hhh]h)}(hoffset in bytes into meta_sgh]hoffset in bytes into meta_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMd hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMd hj0ubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMe hjubj )}(hhh]h)}(hpage vector desired page sizeh]hpage vector desired page size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMe hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMe hj0ubeh}(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.chMg hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMf hjubh)}(hPAfter this completes successfully, the memory region is ready for registration.h]hPAfter this completes successfully, the memory region is ready for registration.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMj hjubh)}(h **Return**h]j)}(hj9h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMm hjubh)}(h 0 on success.h]h 0 on success.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMj hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_map_mr_sg (C function)c.ib_map_mr_sghNtauh1hhhhhhNhNubj)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzhhhjhM ubj)}(h ib_map_mr_sgh]j:)}(h ib_map_mr_sgh]h ib_map_mr_sg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjhM 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_map_mr_sgasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmrh]hmr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scatterlist *sgh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj&)}(h h]h }(hj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjMmodnameN classnameNjWjZ)}j]]jc.ib_map_mr_sgasbuh1hhj)ubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubju)}(hjxh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj)ubj:)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int sg_nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hsg_nentsh]hsg_nents}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int *sg_offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h sg_offseth]h sg_offset}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int page_sizeh](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj,ubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj,ubj:)}(h page_sizeh]h page_size}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjvhhhjhM ubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjshhubj)}(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&]uh1jhjshhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h2``struct scatterlist *sg`` dma mapped scatterlist h](j)}(h``struct scatterlist *sg``h]j)}(hj h]hstruct scatterlist *sg}(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 hjubj )}(hhh]h)}(hdma mapped scatterlisth]hdma mapped scatterlist}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM hj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj!hM hjubj)}(h)``int sg_nents`` number of entries in sg h](j)}(h``int sg_nents``h]j)}(hjEh]h int sg_nents}(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)}(hnumber of entries in sgh]hnumber of entries in sg}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM hj[ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM hjubj)}(h4``unsigned int *sg_offset`` offset in bytes into sg h](j)}(h``unsigned int *sg_offset``h]j)}(hj~h]hunsigned int *sg_offset}(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 hjxubj )}(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&]uh1j hjxubeh}(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)}(hjh]hunsigned int page_size}(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)}(hpage vector desired page sizeh]hpage vector desired page size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh)}(h Constraints:h]h Constraints:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjubh bullet_list)}(hhh](h list_item)}(h2The first sg element is allowed to have an offset.h]h)}(hj h]h2The first sg element is allowed to have an offset.}(hj"hhhNhNubah}(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&]uh1jhjubj)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hBThe last sg element is allowed to have length less than page_size.h]h)}(hjQh]hBThe last sg element is allowed to have length less than page_size.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjOubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjgubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhj/hM 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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_sg_to_pages (C function)c.ib_sg_to_pageshNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hib_sg_to_pagesh]j:)}(hib_sg_to_pagesh]hib_sg_to_pages}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM 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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mrh]hib_mr}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj<modnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_sg_to_pagesasbuh1hhjubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmrh]hmr}(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scatterlist *sglh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jVc.ib_sg_to_pagesasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsglh]hsgl}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int sg_nentsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hsg_nentsh]hsg_nents}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int *sg_offset_ph](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/ubj)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/ubju)}(hjxh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj/ubj:)}(h sg_offset_ph]h sg_offset_p}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#int (*set_page)(struct ib_mr*, u64)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(h(h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hset_pageh]hset_page}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(h)h]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jVc.ib_sg_to_pagesasbuh1hhjubju)}(hjxh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(h,h]h,}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj&)}(h h]h }(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hu64h]hu64}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[modnameN classnameNjWjZ)}j]]jVc.ib_sg_to_pagesasbuh1hhjubju)}(hjh]h)}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubeh}(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)}(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&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h3``struct scatterlist *sgl`` dma mapped scatterlist h](j)}(h``struct scatterlist *sgl``h]j)}(hjh]hstruct scatterlist *sgl}(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 scatterlisth]hdma mapped scatterlist}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM hj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hM hjubj)}(h)``int sg_nents`` number of entries in sg h](j)}(h``int sg_nents``h]j)}(hjSh]h int sg_nents}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjMubj )}(hhh]h)}(hnumber of entries in sgh]hnumber of entries in sg}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM hjiubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjubj)}(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}(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&]uh1jhjubj)}(hhh]h)}(hstart offset in bytes into sgh]hstart offset in bytes into sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1jhjubj)}(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.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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)}(hjch]h$int (*set_page)(struct ib_mr *, u64)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(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'driver page assignment function pointerh]h'driver page assignment function pointer}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM hjyubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM 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&]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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_drain_sq (C function) c.ib_drain_sqhNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(h ib_drain_sqh]j:)}(h ib_drain_sqh]h ib_drain_sq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubj&)}(h h]h }(hj<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+ubh)}(hhh]j:)}(hib_qph]hib_qp}(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjOmodnameN classnameNjWjZ)}j]]j`)}jSjsb c.ib_drain_sqasbuh1hhj+ubj&)}(h h]h }(hjmhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+ubju)}(hjxh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj+ubj:)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(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 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&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(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_sq().h]hIf the device has a provider-specific drain function, then call that. Otherwise call the generic drain function __ib_drain_sq().}(hjDhhhNhNubah}(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:}(hjShhhNhNubah}(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 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.}(hjbhhhNhNubah}(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().}(hjqhhhNhNubah}(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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_drain_rq (C function) c.ib_drain_rqhNtauh1hhhhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(h ib_drain_rqh]j:)}(h ib_drain_rqh]h ib_drain_rq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_qph]hib_qp}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSjsb c.ib_drain_rqasbuh1hhjubj&)}(h h]h }(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hqph]hqp}(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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>Block until all RQ CQEs have been consumed by the application.h]h>Block until all RQ CQEs have been consumed by the application.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjlhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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&]uh1j hjubeh}(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)}(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().}(hjhhhNhNubah}(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)}(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.}(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 CQ using ib_alloc_cq().h]h$allocate the CQ 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&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_drain_qp (C function) c.ib_drain_qphNtauh1hhhhhhNhNubj)}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhhjzhM ubj)}(h ib_drain_qph]j:)}(h ib_drain_qph]h ib_drain_qp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjzhM ubj)}(h(struct ib_qp *qp)h]j)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsb c.ib_drain_qpasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhjzhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjdhhhjzhM ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhjzhM hjahhubj)}(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&]uh1jhjahhhjzhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjDjjDjjjuh1jhhhhhNhNubj)}(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)}(hjNh]h Parameters}(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.chM hjHubj)}(hhh]j)}(h)``struct ib_qp *qp`` queue pair to drain h](j)}(h``struct ib_qp *qp``h]j)}(hjmh]hstruct ib_qp *qp}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chM hjgubj )}(hhh]h)}(hqueue pair to drainh]hqueue pair to drain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjhM hjdubah}(h]h ]h"]h$]h&]uh1jhjHubh)}(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 hjHubh)}(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 hjHubh)}(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 hjHubh)}(h%allocate the CQs using ib_alloc_cq().h]h%allocate the CQs 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 hjHubh)}(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 hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'rdma_alloc_hw_stats_struct (C function)c.rdma_alloc_hw_stats_structhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMB ubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj'hMB ubh)}(hhh]j:)}(h rdma_hw_statsh]h rdma_hw_stats}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj;modnameN classnameNjWjZ)}j]]j`)}jSrdma_alloc_hw_stats_structsbc.rdma_alloc_hw_stats_structasbuh1hhjhhhj'hMB ubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj'hMB ubju)}(hjxh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhj'hMB ubj)}(hrdma_alloc_hw_stats_structh]j:)}(hjWh]hrdma_alloc_hw_stats_struct}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hMB 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 ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrdma_stat_desch]hrdma_stat_desc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jUc.rdma_alloc_hw_stats_structasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdescsh]hdescs}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint num_countersh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h num_countersh]h num_counters}(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long lifespanh](j)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubj)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubj:)}(hlifespanh]hlifespan}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj'hMB ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj'hMB ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMB hjhhubj)}(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.chMB hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMB ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(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.chMF hjubj)}(hhh](j)}(hC``const struct rdma_stat_desc *descs`` array of static descriptors h](j)}(h&``const struct rdma_stat_desc *descs``h]j)}(hjh]h"const struct rdma_stat_desc *descs}(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.chMD hjubj )}(hhh]h)}(harray of static descriptorsh]harray of static descriptors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMD hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMD hjubj)}(h1``int num_counters`` number of elements in array h](j)}(h``int num_counters``h]j)}(hj0h]hint num_counters}(hj2hhhNhNubah}(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.chME hj*ubj )}(hhh]h)}(hnumber of elements in arrayh]hnumber of elements in array}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhME hjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhME hjubj)}(h7``unsigned long lifespan`` milliseconds between updatesh](j)}(h``unsigned long lifespan``h]j)}(hjih]hunsigned long lifespan}(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.chMG hjcubj )}(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.chMF hjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMG hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&rdma_free_hw_stats_struct (C function)c.rdma_free_hw_stats_structhNtauh1hhhhhhNhNubj)}(hhh](j)}(hhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hstatsh]hstats}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMe ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMe ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMe hjhhubj)}(hhh]h)}(h(Helper function to release rdma_hw_statsh]h(Helper function to release rdma_hw_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMe hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMe ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hG**Parameters** ``struct rdma_hw_stats *stats`` statistics to releaseh](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.chMi hjubj)}(hhh]j)}(h5``struct rdma_hw_stats *stats`` statistics to releaseh](j)}(h``struct rdma_hw_stats *stats``h]j)}(hjh]hstruct rdma_hw_stats *stats}(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.chMk hjubj )}(hhh]h)}(hstatistics to releaseh]hstatistics to release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:28: ./drivers/infiniband/core/verbs.chMf hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMk hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_pack (C function) c.ib_packhNtauh1hhhhhhNhNubj)}(hhh](j)}(hTvoid ib_pack (const struct ib_field *desc, int desc_len, void *structure, void *buf)h]j)}(hSvoid ib_pack(const struct ib_field *desc, int desc_len, void *structure, void *buf)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK5ubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj,hK5ubj)}(hib_packh]j:)}(hib_packh]hib_pack}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hK5ubj)}(hG(const struct ib_field *desc, int desc_len, void *structure, void *buf)h](j)}(hconst struct ib_field *desch](j)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubj)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubh)}(hhh]j:)}(hib_fieldh]hib_field}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjAsb c.ib_packasbuh1hhjWubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjWubj:)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h int desc_lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hdesc_lenh]hdesc_len}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hvoid *structureh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h structureh]h structure}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h void *bufh](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj&)}(h h]h }(hjmhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[ubju)}(hjxh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj[ubj:)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj,hK5ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj,hK5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj,hK5hjhhubj)}(hhh]h)}(hPack a structure into a bufferh]hPack a structure into a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK5hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hK5ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hXW**Parameters** ``const struct ib_field *desc`` Array of structure field descriptions ``int desc_len`` Number of entries in **desc** ``void *structure`` Structure to pack from ``void *buf`` Buffer to pack into **Description** ib_pack() packs a list of structure fields into a buffer, controlled by the array of fields in **desc**.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:31: ./drivers/infiniband/core/packer.chK9hjubj)}(hhh](j)}(hF``const struct ib_field *desc`` Array of structure field descriptions h](j)}(h``const struct ib_field *desc``h]j)}(hjh]hconst struct ib_field *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK6hjubj )}(hhh]h)}(h%Array of structure field descriptionsh]h%Array of structure field descriptions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjubj)}(h/``int desc_len`` Number of entries in **desc** h](j)}(h``int desc_len``h]j)}(hj,h]h int desc_len}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK7hj&ubj )}(hhh]h)}(hNumber of entries in **desc**h](hNumber of entries in }(hjEhhhNhNubj)}(h**desc**h]hdesc}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1hhjAhK7hjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhK7hjubj)}(h+``void *structure`` Structure to pack from h](j)}(h``void *structure``h]j)}(hjsh]hvoid *structure}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK8hjmubj )}(hhh]h)}(hStructure to pack fromh]hStructure to pack from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK8hjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h"``void *buf`` Buffer to pack into h](j)}(h ``void *buf``h]j)}(hjh]h void *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK9hjubj )}(hhh]h)}(hBuffer to pack intoh]hBuffer to pack into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubeh}(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:31: ./drivers/infiniband/core/packer.chK;hjubh)}(hhib_pack() packs a list of structure fields into a buffer, controlled by the array of fields in **desc**.h](h_ib_pack() packs a list of structure fields into a buffer, controlled by the array of fields in }(hjhhhNhNubj)}(h**desc**h]hdesc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chK:hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_unpack (C function) c.ib_unpackhNtauh1hhhhhhNhNubj)}(hhh](j)}(hVvoid ib_unpack (const struct ib_field *desc, int desc_len, void *buf, void *structure)h]j)}(hUvoid ib_unpack(const struct ib_field *desc, int desc_len, void *buf, void *structure)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKubj&)}(h h]h }(hjMhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:hhhjLhKubj)}(h ib_unpackh]j:)}(h ib_unpackh]h ib_unpack}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhjLhKubj)}(hG(const struct ib_field *desc, int desc_len, void *buf, void *structure)h](j)}(hconst struct ib_field *desch](j)}(hjh]hconst}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubh)}(hhh]j:)}(hib_fieldh]hib_field}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjasb c.ib_unpackasbuh1hhjwubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjwubj:)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h int desc_lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hdesc_lenh]hdesc_len}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h void *bufh](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubju)}(hjxh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj9ubj:)}(hbufh]hbuf}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hvoid *structureh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj{ubj:)}(h structureh]h structure}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhj:hhhjLhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj6hhhjLhKubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1jhjLhKhj3hhubj)}(hhh]h)}(h Unpack a buffer into a structureh]h Unpack a buffer into a structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hX]**Parameters** ``const struct ib_field *desc`` Array of structure field descriptions ``int desc_len`` Number of entries in **desc** ``void *buf`` Buffer to unpack from ``void *structure`` Structure to unpack into **Description** ib_pack() unpacks a list of structure fields from a buffer, controlled by the array of fields in **desc**.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:31: ./drivers/infiniband/core/packer.chKhjubj)}(hhh](j)}(hF``const struct ib_field *desc`` Array of structure field descriptions h](j)}(h``const struct ib_field *desc``h]j)}(hjh]hconst struct ib_field *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhj ubj )}(hhh]h)}(h%Array of structure field descriptionsh]h%Array of structure field descriptions}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h/``int desc_len`` Number of entries in **desc** h](j)}(h``int desc_len``h]j)}(hjLh]h int desc_len}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjFubj )}(hhh]h)}(hNumber of entries in **desc**h](hNumber of entries in }(hjehhhNhNubj)}(h**desc**h]hdesc}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhj ubj)}(h$``void *buf`` Buffer to unpack from h](j)}(h ``void *buf``h]j)}(hjh]h void *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjubj )}(hhh]h)}(hBuffer to unpack fromh]hBuffer to unpack from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h-``void *structure`` Structure to unpack into h](j)}(h``void *structure``h]j)}(hjh]hvoid *structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjubj )}(hhh]h)}(hStructure to unpack intoh]hStructure to unpack into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubeh}(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&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjubh)}(hjib_pack() unpacks a list of structure fields from a buffer, controlled by the array of fields in **desc**.h](haib_pack() unpacks a list of structure fields from a buffer, controlled by the array of fields in }(hjhhhNhNubj)}(h**desc**h]hdesc}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:31: ./drivers/infiniband/core/packer.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_sa_cancel_query (C function)c.ib_sa_cancel_queryhNtauh1hhhhhhNhNubj)}(hhh](j)}(h;void ib_sa_cancel_query (int id, struct ib_sa_query *query)h]j)}(h:void ib_sa_cancel_query(int id, struct ib_sa_query *query)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMvubj&)}(h h]h }(hjmhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjZhhhjlhMvubj)}(hib_sa_cancel_queryh]j:)}(hib_sa_cancel_queryh]hib_sa_cancel_query}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMvubj)}(h#(int id, struct ib_sa_query *query)h](j)}(hint idh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hidh]hid}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_sa_query *queryh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_sa_queryh]h ib_sa_query}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_sa_cancel_queryasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hqueryh]hquery}(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMvubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjVhhhjlhMvubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhMvhjShhubj)}(hhh]h)}(htry to cancel an SA queryh]htry to cancel an SA query}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMvhjPhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMvubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjkjjkjjjuh1jhhhhhNhNubj)}(hX=**Parameters** ``int id`` ID of query to cancel ``struct ib_sa_query *query`` query pointer to cancel **Description** Try to cancel an SA query. If the id and query don't match up or the query has already completed, nothing is done. Otherwise the query is canceled and will complete with a status of -EINTR.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMzhjoubj)}(hhh](j)}(h!``int id`` ID of query to cancel h](j)}(h ``int id``h]j)}(hjh]hint id}(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.chMwhjubj )}(hhh]h)}(hID of query to cancelh]hID of query to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h6``struct ib_sa_query *query`` query pointer to cancel h](j)}(h``struct ib_sa_query *query``h]j)}(hjh]hstruct ib_sa_query *query}(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.chMxhjubj )}(hhh]h)}(hquery pointer to cancelh]hquery pointer to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubeh}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(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.chMzhjoubh)}(hTry to cancel an SA query. If the id and query don't match up or the query has already completed, nothing is done. Otherwise the query is canceled and will complete with a status of -EINTR.h]hTry to cancel an SA query. If the id and query don’t match up or the query has already completed, nothing is done. Otherwise the query is canceled and will complete with a status of -EINTR.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMyhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&ib_init_ah_attr_from_path (C function)c.ib_init_ah_attr_from_pathhNtauh1hhhhhhNhNubj)}(hhh](j)}(hint ib_init_ah_attr_from_path (struct ib_device *device, u32 port_num, struct sa_path_rec *rec, struct rdma_ah_attr *ah_attr, const struct ib_gid_attr *gid_attr)h]j)}(hint ib_init_ah_attr_from_path(struct ib_device *device, u32 port_num, struct sa_path_rec *rec, struct rdma_ah_attr *ah_attr, const struct ib_gid_attr *gid_attr)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjIhhhj[hMubj)}(hib_init_ah_attr_from_pathh]j:)}(hib_init_ah_attr_from_pathh]hib_init_ah_attr_from_path}(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhj[hMubj)}(h(struct ib_device *device, u32 port_num, struct sa_path_rec *rec, struct rdma_ah_attr *ah_attr, const struct ib_gid_attr *gid_attr)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjpsbc.ib_init_ah_attr_from_pathasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_init_ah_attr_from_pathasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hport_numh]hport_num}(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sa_path_rec *rech](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubj&)}(h h]h }(hjQhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubh)}(hhh]j:)}(h sa_path_rech]h sa_path_rec}(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjdmodnameN classnameNjWjZ)}j]]jc.ib_init_ah_attr_from_pathasbuh1hhj@ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj@ubj:)}(hrech]hrec}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct rdma_ah_attr *ah_attrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_init_ah_attr_from_pathasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hah_attrh]hah_attr}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"const struct ib_gid_attr *gid_attrh](j)}(hjh]hconst}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubj)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(h ib_gid_attrh]h ib_gid_attr}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj_modnameN classnameNjWjZ)}j]]jc.ib_init_ah_attr_from_pathasbuh1hhj ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hgid_attrh]hgid_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(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@Initialize address handle attributes based on an SA path record.h]h@Initialize address handle attributes based on an SA path record.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hX***Parameters** ``struct ib_device *device`` Device associated ah attributes initialization. ``u32 port_num`` Port on the specified device. ``struct sa_path_rec *rec`` path record entry to use for ah attributes initialization. ``struct rdma_ah_attr *ah_attr`` address handle attributes to initialization from path record. ``const struct ib_gid_attr *gid_attr`` SGID attribute to consider during initialization. **Description** When ib_init_ah_attr_from_path() returns success, (a) for IB link layer it optionally contains a reference to SGID attribute when GRH is present for IB link layer. (b) for RoCE link layer it contains a reference to SGID attribute. User must invoke rdma_destroy_ah_attr() to release reference to SGID attributes which are initialized using ib_init_ah_attr_from_path().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(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.chMhjubj)}(hhh](j)}(hM``struct ib_device *device`` Device associated ah attributes initialization. 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.chMhjubj )}(hhh]h)}(h/Device associated ah attributes initialization.h]h/Device associated ah attributes initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``u32 port_num`` Port on the specified device. h](j)}(h``u32 port_num``h]j)}(hj:h]h u32 port_num}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj4ubj )}(hhh]h)}(hPort on the specified device.h]hPort on the specified device.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(hW``struct sa_path_rec *rec`` path record entry to use for ah attributes initialization. h](j)}(h``struct sa_path_rec *rec``h]j)}(hjsh]hstruct sa_path_rec *rec}(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.chMhjmubj )}(hhh]h)}(h:path record entry to use for ah attributes initialization.h]h:path record entry to use for ah attributes initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h_``struct rdma_ah_attr *ah_attr`` address handle attributes to initialization from path record. 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&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubj )}(hhh]h)}(h=address handle attributes to initialization from path record.h]h=address handle attributes to initialization from path record.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hY``const struct ib_gid_attr *gid_attr`` SGID attribute to consider during initialization. h](j)}(h&``const struct ib_gid_attr *gid_attr``h]j)}(hjh]h"const struct ib_gid_attr *gid_attr}(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.chMhjubj )}(hhh]h)}(h1SGID attribute to consider during initialization.h]h1SGID attribute to consider during initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubh)}(hXoWhen ib_init_ah_attr_from_path() returns success, (a) for IB link layer it optionally contains a reference to SGID attribute when GRH is present for IB link layer. (b) for RoCE link layer it contains a reference to SGID attribute. User must invoke rdma_destroy_ah_attr() to release reference to SGID attributes which are initialized using ib_init_ah_attr_from_path().h]hXoWhen ib_init_ah_attr_from_path() returns success, (a) for IB link layer it optionally contains a reference to SGID attribute when GRH is present for IB link layer. (b) for RoCE link layer it contains a reference to SGID attribute. User must invoke rdma_destroy_ah_attr() to release reference to SGID attributes which are initialized using ib_init_ah_attr_from_path().}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_sa_path_rec_get (C function)c.ib_sa_path_rec_gethNtauh1hhhhhhNhNubj)}(hhh](j)}(hXGint ib_sa_path_rec_get (struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_path_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context), void *context, struct ib_sa_query **sa_query)h]j)}(hXFint ib_sa_path_rec_get(struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_path_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context), void *context, struct ib_sa_query **sa_query)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMubj&)}(h h]h }(hjthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjahhhjshMubj)}(hib_sa_path_rec_geth]j:)}(hib_sa_path_rec_geth]hib_sa_path_rec_get}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjshMubj)}(hX0(struct ib_sa_client *client, struct ib_device *device, u32 port_num, struct sa_path_rec *rec, ib_sa_comp_mask comp_mask, unsigned long timeout_ms, gfp_t gfp_mask, void (*callback)(int status, struct sa_path_rec *resp, unsigned int num_paths, void *context), void *context, struct ib_sa_query **sa_query)h](j)}(hstruct ib_sa_client *clienth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_sa_clienth]h ib_sa_client}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hclienth]hclient}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj4modnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 port_numh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sa_path_rec *rech](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h sa_path_rech]h sa_path_rec}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrech]hrec}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hib_sa_comp_mask comp_maskh](h)}(hhh]j:)}(hib_sa_comp_maskh]hib_sa_comp_mask}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhj8ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubj:)}(h comp_maskh]h comp_mask}(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long timeout_msh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h timeout_msh]h timeout_ms}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&P]noemphjjuh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j:)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjh]h(}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjxh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcallbackh]hcallback}(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(hjh]h)}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjh]h(}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(hj<h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h sa_path_rech]h sa_path_rec}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hresph]hresp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(hj<h]h,}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj&)}(h h]h }(hj2hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h num_pathsh]h num_paths}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(hj<h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcontexth]hcontext}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubju)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *contexth](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcontexth]hcontext}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_sa_query **sa_queryh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubh)}(hhh]j:)}(h ib_sa_queryh]h ib_sa_query}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRmodnameN classnameNjWjZ)}j]]jc.ib_sa_path_rec_getasbuh1hhj.ubj&)}(h h]h }(hjnhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubju)}(hjxh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.ubj:)}(hsa_queryh]hsa_query}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjshMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj]hhhjshMubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhjshMhjZhhubj)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(hjh]h Parameters}(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.chMhjubj)}(hhh](j)}(h*``struct ib_sa_client *client`` SA client h](j)}(h``struct ib_sa_client *client``h]j)}(hjh]hstruct ib_sa_client *client}(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.chMhjubj )}(hhh]h)}(h SA clienth]h SA client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhj4ubj )}(hhh]h)}(hdevice to send query onh]hdevice to send query on}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h.``u32 port_num`` port number to send query on h](j)}(h``u32 port_num``h]j)}(hjsh]h u32 port_num}(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.chMhjmubj )}(hhh]h)}(hport number to send query onh]hport number to send query on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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.chMhjubj )}(hhh]h)}(hPath Record to send in queryh]hPath Record to send in query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``ib_sa_comp_mask comp_mask`` component mask to send in query h](j)}(h``ib_sa_comp_mask comp_mask``h]j)}(hjh]hib_sa_comp_mask comp_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.chMhjubj )}(hhh]h)}(hcomponent mask to send in queryh]hcomponent mask to send in query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``unsigned long timeout_ms`` time to wait for response h](j)}(h``unsigned long timeout_ms``h]j)}(hjh]hunsigned long timeout_ms}(hj hhhNhNubah}(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.chMhjubj )}(hhh]h)}(htime to wait for responseh]htime to wait for response}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h<``gfp_t gfp_mask`` GFP mask to use for internal allocations h](j)}(h``gfp_t gfp_mask``h]j)}(hjWh]hgfp_t gfp_mask}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjQubj )}(hhh]h)}(h(GFP mask to use for internal allocationsh]h(GFP mask to use for internal allocations}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(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.chMhjubj )}(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.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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.chMhjubj )}(hhh]h)}(h&opaque user context passed to callbackh]h&opaque user context passed to callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``struct ib_sa_query **sa_query`` query context, used to cancel query h](j)}(h!``struct ib_sa_query **sa_query``h]j)}(hjh]hstruct ib_sa_query **sa_query}(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.chMhjubj )}(hhh]h)}(h#query context, used to cancel queryh]h#query context, used to cancel query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:34: ./drivers/infiniband/core/sa_query.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_ud_header_init (C function)c.ib_ud_header_inithNtauh1hhhhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM0ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM0ubj)}(hib_ud_header_inith]j:)}(hib_ud_header_inith]hib_ud_header_init}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM0ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h payload_bytesh]h payload_bytes}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint lrh_presenth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h lrh_presenth]h lrh_present}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint eth_presenth](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj&)}(h h]h }(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj5ubj:)}(h eth_presenth]h eth_present}(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint vlan_presenth](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjjubj:)}(h vlan_presenth]h vlan_present}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint grh_presenth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h grh_presenth]h grh_present}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint ip_versionh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h ip_versionh]h ip_version}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint udp_presenth](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubj:)}(h udp_presenth]h udp_present}(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint immediate_presenth](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj>ubj:)}(himmediate_presenth]himmediate_present}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_ud_header *headerh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjsubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjsubh)}(hhh]j:)}(h ib_ud_headerh]h ib_ud_header}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_ud_header_initasbuh1hhjsubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjsubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjsubj:)}(hheaderh]hheader}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhM0ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM0hjhhubj)}(hhh]h)}(hInitialize UD header structureh]hInitialize UD header structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM0hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(hj;h]hint payload_bytes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM1hj5ubj )}(hhh]h)}(hLength of packet payloadh]hLength of packet payload}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM1hjQubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM1hj2ubj)}(h.``int lrh_present`` specify if LRH is present h](j)}(h``int lrh_present``h]j)}(hjth]hint lrh_present}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chM2hjnubj )}(hhh]h)}(hspecify if LRH is presenth]hspecify if LRH is present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjhM2hj2ubj)}(h5``int eth_present`` specify if Eth header is present h](j)}(h``int eth_present``h]j)}(hjh]hint eth_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.chM3hjubj )}(hhh]h)}(h specify if Eth header is presenth]h specify if Eth header is present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj2ubj)}(h+``int vlan_present`` packet is tagged vlan h](j)}(h``int vlan_present``h]j)}(hjh]hint vlan_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.chM4hjubj )}(hhh]h)}(hpacket is tagged vlanh]hpacket is tagged vlan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj2ubj)}(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}(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.chM5hjubj )}(hhh]h)}(h,GRH flag (if non-zero, GRH will be included)h]h,GRH flag (if non-zero, GRH will be included)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM5hj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hM5hj2ubj)}(hF``int ip_version`` if non-zero, IP header, V4 or V6, will be included h](j)}(h``int ip_version``h]j)}(hjXh]hint ip_version}(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.chM6hjRubj )}(hhh]h)}(h2if non-zero, IP header, V4 or V6, will be includedh]h2if non-zero, IP header, V4 or V6, will be included}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM6hjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM6hj2ubj)}(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.chM7hjubj )}(hhh]h)}(h(if non-zero, UDP header will be includedh]h(if non-zero, UDP header will be included}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hj2ubj)}(h?``int immediate_present`` specify if immediate data is present h](j)}(h``int immediate_present``h]j)}(hjh]hint immediate_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.chM8hjubj )}(hhh]h)}(h$specify if immediate data is presenth]h$specify if immediate data is present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hj2ubj)}(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:hjubj )}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_ud_header_pack (C function)c.ib_ud_header_packhNtauh1hhhhhhNhNubj)}(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}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMubj&)}(h h]h }(hjlhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjYhhhjkhMubj)}(hib_ud_header_packh]j:)}(hib_ud_header_packh]hib_ud_header_pack}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjkhMubj)}(h((struct ib_ud_header *header, void *buf)h](j)}(hstruct ib_ud_header *headerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_ud_headerh]h ib_ud_header}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_ud_header_packasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hheaderh]hheader}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *bufh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hbufh]hbuf}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjUhhhjkhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjkhMhjRhhubj)}(hhh]h)}(h&Pack UD header struct into wire formath]h&Pack UD header struct into wire format}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjwjjwjjjuh1jhhhhhNhNubj)}(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.chMhj{ubj)}(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}(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.chMhjubj )}(hhh]h)}(hUD header structh]hUD header struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``void *buf`` Buffer to pack into h](j)}(h ``void *buf``h]j)}(hjh]h void *buf}(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.chMhjubj )}(hhh]h)}(hBuffer to pack intoh]hBuffer to pack into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhj{ubh)}(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 }(hj*hhhNhNubj)}(h **header**h]hheader}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh into wire format in the buffer }(hj*hhhNhNubj)}(h**buf**h]hbuf}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:37: ./drivers/infiniband/core/ud_header.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#ib_umem_find_best_pgsz (C function)c.ib_umem_find_best_pgszhNtauh1hhhhhhNhNubj)}(hhh](j)}(hjunsigned long ib_umem_find_best_pgsz (struct ib_umem *umem, unsigned long pgsz_bitmap, unsigned long virt)h]j)}(hiunsigned long ib_umem_find_best_pgsz(struct ib_umem *umem, unsigned long pgsz_bitmap, unsigned long virt)h](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKBubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyhhhjhKBubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhKBubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyhhhjhKBubj)}(hib_umem_find_best_pgszh]j:)}(hib_umem_find_best_pgszh]hib_umem_find_best_pgsz}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhKBubj)}(hE(struct ib_umem *umem, unsigned long pgsz_bitmap, unsigned long virt)h](j)}(hstruct ib_umem *umemh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_umemh]hib_umem}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.ib_umem_find_best_pgszasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(humemh]humem}(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long pgsz_bitmaph](j)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj&)}(h h]h }(hjVhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDubj)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDubj:)}(h pgsz_bitmaph]h pgsz_bitmap}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long virth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hvirth]hvirt}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKBubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjuhhhjhKBubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhKBhjrhhubj)}(hhh]h)}(h)Find best HW page size to use for this MRh]h)Find best HW page size to use for this MR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKBhjhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKBubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct ib_umem *umem`` umem struct ``unsigned long pgsz_bitmap`` bitmap of HW supported page sizes ``unsigned long 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.chKFhjubj)}(hhh](j)}(h%``struct ib_umem *umem`` umem struct h](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.chKDhj6ubj )}(hhh]h)}(h umem structh]h umem struct}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKDhjRubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKDhj3ubj)}(h@``unsigned long pgsz_bitmap`` bitmap of HW supported page sizes h](j)}(h``unsigned long pgsz_bitmap``h]j)}(hjuh]hunsigned long pgsz_bitmap}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKEhjoubj )}(hhh]h)}(h!bitmap of HW supported page sizesh]h!bitmap of HW supported page sizes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jhjhKEhj3ubj)}(h``unsigned long virt`` IOVA h](j)}(h``unsigned long virt``h]j)}(hjh]hunsigned long virt}(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.chKFhjubj )}(hhh]h)}(hIOVAh]hIOVA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKFhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKFhj3ubeh}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKHhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKGhjubh)}(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.chKJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_umem_get (C function) c.ib_umem_gethNtauh1hhhhhhNhNubj)}(hhh](j)}(hdstruct ib_umem * ib_umem_get (struct ib_device *device, unsigned long addr, size_t size, int access)h]j)}(hbstruct ib_umem *ib_umem_get(struct ib_device *device, unsigned long addr, size_t size, int access)h](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9hhhjJhKubh)}(hhh]j:)}(hib_umemh]hib_umem}(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj^modnameN classnameNjWjZ)}j]]j`)}jS ib_umem_getsb c.ib_umem_getasbuh1hhj9hhhjJhKubj&)}(h h]h }(hj}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9hhhjJhKubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj9hhhjJhKubj)}(h ib_umem_geth]j:)}(hjzh]h ib_umem_get}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjJhKubj)}(hG(struct ib_device *device, unsigned long addr, size_t size, int access)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jx c.ib_umem_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubj)}(hlongh]hlong}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj&)}(h h]h }(hjQhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubj:)}(haddrh]haddr}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]j:)}(hsize_th]hsize_t}(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj}modnameN classnameNjWjZ)}j]]jx c.ib_umem_getasbuh1hhjtubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubj:)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int accessh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(haccessh]haccess}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhjJhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj5hhhjJhKubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjJhKhj2hhubj)}(hhh]h)}(h!Pin and DMA map userspace memory.h]h!Pin and DMA map userspace memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjJhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct ib_device *device`` IB device to connect 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 pinnedh](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.chKhj"ubj)}(hhh](j)}(h7``struct ib_device *device`` IB device to connect UMEM h](j)}(h``struct ib_device *device``h]j)}(hjGh]hstruct ib_device *device}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKhjAubj )}(hhh]h)}(hIB device to connect UMEMh]hIB device to connect UMEM}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhj>ubj)}(h=``unsigned long addr`` userspace virtual address to start at h](j)}(h``unsigned long addr``h]j)}(hjh]hunsigned long addr}(hjhhhNhNubah}(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.chKhjzubj )}(hhh]h)}(h%userspace virtual address to start ath]h%userspace virtual address to start at}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>ubj)}(h(``size_t size`` length of region to pin 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.chKhjubj )}(hhh]h)}(hlength of region to pinh]hlength of region to pin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>ubj)}(h:``int access`` IB_ACCESS_xxx flags for memory being pinnedh](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.chKhjubj )}(hhh]h)}(h+IB_ACCESS_xxx flags for memory being pinnedh]h+IB_ACCESS_xxx flags for memory being pinned}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_umem_release (C function)c.ib_umem_releasehNtauh1hhhhhhNhNubj)}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjHhhhjZhMubj)}(hib_umem_releaseh]j:)}(hib_umem_releaseh]hib_umem_release}(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjZhMubj)}(h(struct ib_umem *umem)h]j)}(hstruct ib_umem *umemh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_umemh]hib_umem}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjosbc.ib_umem_releaseasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(humemh]humem}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjHhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjDhhhjZhMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjZhMhjAhhubj)}(hhh]h)}(h&release memory pinned with ib_umem_geth]h&release memory pinned with ib_umem_get}(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&]uh1jhjAhhhjZhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj$jj$jjjuh1jhhhhhNhNubj)}(hA**Parameters** ``struct ib_umem *umem`` umem struct to releaseh](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(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(ubj)}(hhh]j)}(h/``struct ib_umem *umem`` umem struct to releaseh](j)}(h``struct ib_umem *umem``h]j)}(hjMh]hstruct ib_umem *umem}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjGubj )}(hhh]h)}(humem struct to releaseh]humem struct to release}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:40: ./drivers/infiniband/core/umem.chMhjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'ib_umem_odp_alloc_implicit (C function)c.ib_umem_odp_alloc_implicithNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhK}ubh)}(hhh]j:)}(h ib_umem_odph]h ib_umem_odp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSib_umem_odp_alloc_implicitsbc.ib_umem_odp_alloc_implicitasbuh1hhjhhhjhK}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhK}ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhK}ubj)}(hib_umem_odp_alloc_implicith]j:)}(hjh]hib_umem_odp_alloc_implicit}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK}ubj)}(h&(struct ib_device *device, int access)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jc.ib_umem_odp_alloc_implicitasbuh1hhjubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int accessh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(haccessh]haccess}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK}ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhK}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK}hjhhubj)}(hhh]h)}(h#Allocate a parent implicit ODP umemh]h#Allocate a parent implicit ODP umem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK}hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK}ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhhhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjubj)}(hhh](j)}(h6``struct ib_device *device`` IB device to create UMEM 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:43: ./drivers/infiniband/core/umem_odp.chKhjubj )}(hhh]h)}(hIB device to create UMEMh]hIB device to create UMEM}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj.ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjubj)}(h&``int access`` ib_reg_mr access flags h](j)}(h``int access``h]j)}(hjQh]h int access}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjKubj )}(hhh]h)}(hib_reg_mr access flagsh]hib_reg_mr access flags}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chK~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$ib_umem_odp_alloc_child (C function)c.ib_umem_odp_alloc_childhNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubh)}(hhh]j:)}(h ib_umem_odph]h ib_umem_odp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSib_umem_odp_alloc_childsbc.ib_umem_odp_alloc_childasbuh1hhjhhhjhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhKubj)}(hib_umem_odp_alloc_childh]j:)}(hjh]hib_umem_odp_alloc_child}(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(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)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubh)}(hhh]j:)}(h ib_umem_odph]h ib_umem_odp}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjkmodnameN classnameNjWjZ)}j]]j c.ib_umem_odp_alloc_childasbuh1hhjGubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubj:)}(hrooth]hroot}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(h size_t sizeh](h)}(hhh]j:)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j c.ib_umem_odp_alloc_childasbuh1hhj ubj&)}(h h]h }(hj- hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubj:)}(hsizeh]hsize}(hj; hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubj)}(h+const struct mmu_interval_notifier_ops *opsh](j)}(hjh]hconst}(hjT hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP ubj&)}(h h]h }(hja hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjP ubj)}(hjh]hstruct}(hjo hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP ubj&)}(h h]h }(hj| hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjP ubh)}(hhh]j:)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j c.ib_umem_odp_alloc_childasbuh1hhjP ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjP ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjP ubj:)}(hopsh]hops}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj jj jjjuh1jhhhhhNhNubj)}(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)}(hj h]h Parameters}(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 ubj)}(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)}(hj1 h]hstruct ib_umem_odp *root}(hj3 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)}(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()}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjG ubah}(h]h ]h"]h$]h&]uh1j hj+ ubeh}(h]h ]h"]h$]h&]uh1jhjF hKhj( ubj)}(h1``unsigned long addr`` The starting userspace VA h](j)}(h``unsigned long addr``h]j)}(hjk h]hunsigned long addr}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhje ubj )}(hhh]h)}(hThe starting userspace VAh]hThe starting userspace VA}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hje ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj( ubj)}(h/``size_t size`` The length of the userspace VA 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&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj ubj )}(hhh]h)}(hThe length of the userspace VAh]hThe length of the userspace VA}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj( ubj)}(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)}(hj h]h+const struct mmu_interval_notifier_ops *ops}(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)}(h/MMU interval ops, currently only **invalidate**h](h!MMU interval ops, currently only }(hj hhhNhNubj)}(h**invalidate**h]h invalidate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj( ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hib_umem_odp_get (C function)c.ib_umem_odp_gethNtauh1hhhhhhNhNubj)}(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)}(hjh]hstruct}(hjE hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjA hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKubj&)}(h h]h }(hjS hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjA hhhjR hKubh)}(hhh]j:)}(h ib_umem_odph]h ib_umem_odp}(hjd hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hja ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjf modnameN classnameNjWjZ)}j]]j`)}jSib_umem_odp_getsbc.ib_umem_odp_getasbuh1hhjA hhhjR hKubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjA hhhjR hKubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjA hhhjR hKubj)}(hib_umem_odp_geth]j:)}(hj h]hib_umem_odp_get}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjA hhhjR hKubj)}(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)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j c.ib_umem_odp_getasbuh1hhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ ubj&)}(h h]h }(hj= hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+ ubj)}(hlongh]hlong}(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ ubj&)}(h h]h }(hjY hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+ ubj:)}(haddrh]haddr}(hjg hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h size_t sizeh](h)}(hhh]j:)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j c.ib_umem_odp_getasbuh1hhj| ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj| ubj:)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj| ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int accessh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubj:)}(haccessh]haccess}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h+const struct mmu_interval_notifier_ops *opsh](j)}(hjh]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj% hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hmmu_interval_notifier_opsh]hmmu_interval_notifier_ops}(hj6 hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3 ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj8 modnameN classnameNjWjZ)}j]]j c.ib_umem_odp_getasbuh1hhj ubj&)}(h h]h }(hjT hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hopsh]hops}(hjo hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjA hhhjR hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj= hhhjR hKubah}(h]j8 ah ](jjeh"]h$]h&]jj)jhuh1jhjR hKhj: hhubj)}(hhh]h)}(h$Create a umem_odp for a userspace vah]h$Create a umem_odp for a userspace va}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhj: hhhjR hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj jj jjjuh1jhhhhhNhNubj)}(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)}(hj h]h Parameters}(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 ubj)}(hhh](j)}(h:``struct ib_device *device`` IB device struct to get UMEM 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:43: ./drivers/infiniband/core/umem_odp.chKhj ubj )}(hhh]h)}(hIB device struct to get UMEMh]hIB device struct to get UMEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h=``unsigned long addr`` userspace virtual address to start at h](j)}(h``unsigned long addr``h]j)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(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)}(h%userspace virtual address to start ath]h%userspace virtual address to start at}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h(``size_t size`` length of region to pin h](j)}(h``size_t size``h]j)}(hjLh]h size_t size}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjFubj )}(hhh]h)}(hlength of region to pinh]hlength of region to pin}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhj ubj)}(h;``int access`` IB_ACCESS_xxx flags for memory being pinned h](j)}(h``int access``h]j)}(hjh]h int access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjubj )}(hhh]h)}(h+IB_ACCESS_xxx flags for memory being pinnedh]h+IB_ACCESS_xxx flags for memory being pinned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(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)}(hjh]h+const struct mmu_interval_notifier_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhjubj )}(hhh]h)}(h/MMU interval ops, currently only **invalidate**h](h!MMU interval ops, currently only }(hjhhhNhNubj)}(h**invalidate**h]h invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)ib_umem_odp_map_dma_and_lock (C function)c.ib_umem_odp_map_dma_and_lockhNtauh1hhhhhhNhNubj)}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM2ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjHhhhjZhM2ubj)}(hib_umem_odp_map_dma_and_lockh]j:)}(hib_umem_odp_map_dma_and_lockh]hib_umem_odp_map_dma_and_lock}(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjZhM2ubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_umem_odph]h ib_umem_odp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjosbc.ib_umem_odp_map_dma_and_lockasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(humem_odph]humem_odp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 user_virth](h)}(hhh]j:)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_umem_odp_map_dma_and_lockasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h user_virth]h user_virt}(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 bcnth](h)}(hhh]j:)}(hu64h]hu64}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjHmodnameN classnameNjWjZ)}j]]jc.ib_umem_odp_map_dma_and_lockasbuh1hhj?ubj&)}(h h]h }(hjdhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?ubj:)}(hbcnth]hbcnt}(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 access_maskh](h)}(hhh]j:)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.ib_umem_odp_map_dma_and_lockasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h access_maskh]h access_mask}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool faulth](j)}(hj*[h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hfaulth]hfault}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjZhM2ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjDhhhjZhM2ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjZhM2hjAhhubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM2hjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjZhM2ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj0jj0jjjuh1jhhhhhNhNubj)}(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)}(hj:h]h Parameters}(hj<hhhNhNubah}(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.chM6hj4ubj)}(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)}(hjYh]hstruct ib_umem_odp *umem_odp}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM:hjSubj )}(hhh]h)}(hthe umem to map and pinh]hthe umem to map and pin}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM:hjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM:hjPubj)}(h9``u64 user_virt`` the address from which we need to map. h](j)}(h``u64 user_virt``h]j)}(hjh]h u64 user_virt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM;hjubj )}(hhh]h)}(h&the address from which we need to map.h]h&the address from which we need to map.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjPubj)}(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)}(hjh]hu64 bcnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM?hjubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM<hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjPubj)}(hV``u64 access_mask`` bit mask of the requested access permissions for the given range. h](j)}(h``u64 access_mask``h]j)}(hjh]hu64 access_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chMAhjubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM@hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjPubj)}(h8``bool fault`` is faulting required for the given range h](j)}(h``bool fault``h]j)}(hj?h]h bool fault}(hjAhhhNhNubah}(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.chMBhj9ubj )}(hhh]h)}(h(is faulting required for the given rangeh]h(is faulting required for the given range}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMBhjUubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMBhjPubeh}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chMDhj4ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM3hj4ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:43: ./drivers/infiniband/core/umem_odp.chM7hj4ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK/ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_fast_reg_mr (C function)c.rvt_fast_reg_mrhNtauh1hhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMcubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMcubj)}(hrvt_fast_reg_mrh]j:)}(hrvt_fast_reg_mrh]hrvt_fast_reg_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMcubj)}(h<(struct rvt_qp *qp, struct ib_mr *ibmr, u32 key, int access)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjDmodnameN classnameNjWjZ)}j]]j`)}jSj sbc.rvt_fast_reg_mrasbuh1hhj ubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hqph]hqp}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_mr *ibmrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mrh]hib_mr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j^c.rvt_fast_reg_mrasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hibmrh]hibmr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 keyh](h)}(hhh]j:)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j^c.rvt_fast_reg_mrasbuh1hhjubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hkeyh]hkey}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int accessh](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubj:)}(haccessh]haccess}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMcubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMchjhhubj)}(hhh]h)}(hfast register physical MRh]hfast register physical MR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMcubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMghjubj)}(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)}(hjh]hstruct rvt_qp *qp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMdhjubj )}(hhh]h)}(h0the queue pair where the work request comes fromh]h0the queue pair where the work request comes from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h:``struct ib_mr *ibmr`` the memory region to be registered h](j)}(h``struct ib_mr *ibmr``h]j)}(hjh]hstruct ib_mr *ibmr}(hjhhhNhNubah}(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.chMehjubj )}(hhh]h)}(h"the memory region to be registeredh]h"the memory region to be registered}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMehj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hMehjubj)}(h/``u32 key`` updated key for this memory region h](j)}(h ``u32 key``h]j)}(hjGh]hu32 key}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMfhjAubj )}(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&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMfhjubj)}(h3``int access`` access flags for this memory region h](j)}(h``int access``h]j)}(hjh]h int access}(hjhhhNhNubah}(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.chMghjzubj )}(hhh]h)}(h#access flags for this memory regionh]h#access flags for this memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubeh}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMihjubh)}(hReturns 0 on success.h]hReturns 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h rvt_invalidate_rkey (C function)c.rvt_invalidate_rkeyhNtauh1hhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hrvt_invalidate_rkeyh]j:)}(hrvt_invalidate_rkeyh]hrvt_invalidate_rkey}(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct rvt_qp *qp, u32 rkey)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj]modnameN classnameNjWjZ)}j]]j`)}jSj#sbc.rvt_invalidate_rkeyasbuh1hhj9ubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj9ubj:)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hu32 rkeyh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jwc.rvt_invalidate_rkeyasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hrkeyh]hrkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hinvalidate an MR rkeyh]hinvalidate an MR rkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj jj jjjuh1jhhhjhNhNubj)}(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)}(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.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)}(hjIh]hstruct rvt_qp *qp}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjCubj )}(hhh]h)}(h,queue pair associated with the invalidate oph]h,queue pair associated with the invalidate op}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubj)}(h ``u32 rkey`` rkey to invalidate h](j)}(h ``u32 rkey``h]j)}(hjh]hu32 rkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj@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&]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.}(hjhhhNhNubah}(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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_lkey_ok (C function) c.rvt_lkey_okhNtauh1hhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(h rvt_lkey_okh]j:)}(h rvt_lkey_okh]h rvt_lkey_ok}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubh)}(hhh]j:)}(hrvt_lkey_tableh]hrvt_lkey_table}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj_modnameN classnameNjWjZ)}j]]j`)}jSj%sb c.rvt_lkey_okasbuh1hhj;ubj&)}(h h]h }(hj}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj;ubj:)}(hrkth]hrkt}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct rvt_pd *pdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrvt_pdh]hrvt_pd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jy c.rvt_lkey_okasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hpdh]hpd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct rvt_sge *isgeh](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrvt_sgeh]hrvt_sge}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jy c.rvt_lkey_okasbuh1hhjubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hisgeh]hisge}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct rvt_sge *last_sgeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrvt_sgeh]hrvt_sge}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jy c.rvt_lkey_okasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hlast_sgeh]hlast_sge}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct ib_sge *sgeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_sgeh]hib_sge}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj!modnameN classnameNjWjZ)}j]]jy c.rvt_lkey_okasbuh1hhjubj&)}(h h]h }(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsgeh]hsge}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hint acch](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjmubj:)}(hacch]hacc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h(check IB SGE for validity and initializeh]h(check IB SGE for validity and initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubj)}(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)}(hjh]hstruct rvt_lkey_table *rkt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubj )}(hhh]h)}(h*table containing lkey to check SGE againsth]h*table containing lkey to check SGE against}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h(``struct rvt_pd *pd`` protection domain h](j)}(h``struct rvt_pd *pd``h]j)}(hj1h]hstruct rvt_pd *pd}(hj3hhhNhNubah}(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)}(hprotection domainh]hprotection domain}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubj)}(h/``struct rvt_sge *isge`` outgoing internal SGE h](j)}(h``struct rvt_sge *isge``h]j)}(hjjh]hstruct rvt_sge *isge}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjdubj )}(hhh]h)}(houtgoing internal SGEh]houtgoing internal SGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``struct rvt_sge *last_sge`` last outgoing SGE written h](j)}(h``struct rvt_sge *last_sge``h]j)}(hjh]hstruct rvt_sge *last_sge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubj )}(hhh]h)}(hlast outgoing SGE writtenh]hlast outgoing SGE written}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``struct ib_sge *sge`` SGE to check h](j)}(h``struct ib_sge *sge``h]j)}(hjh]hstruct ib_sge *sge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubj )}(hhh]h)}(h SGE to checkh]h SGE to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int acc`` access flags h](j)}(h ``int acc``h]j)}(hjh]hint acc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubj )}(hhh]h)}(h access flagsh]h access flags}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubh)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubh)}(h8Increments the reference count when a new sge is stored.h]h8Increments the reference count when a new sge is stored.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubh)}(h70 if compressed, 1 if added , otherwise returns -errno.h]h70 if compressed, 1 if added , otherwise returns -errno.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_rkey_ok (C function) c.rvt_rkey_okhNtauh1hhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM3ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM3ubj)}(h rvt_rkey_okh]j:)}(h rvt_rkey_okh]h rvt_rkey_ok}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM3ubj)}(hO(struct rvt_qp *qp, struct rvt_sge *sge, u32 len, u64 vaddr, u32 rkey, int acc)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj(modnameN classnameNjWjZ)}j]]j`)}jSjsb c.rvt_rkey_okasbuh1hhjubj&)}(h h]h }(hjFhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hqph]hqp}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct rvt_sge *sgeh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjvubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvubh)}(hhh]j:)}(hrvt_sgeh]hrvt_sge}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jB c.rvt_rkey_okasbuh1hhjvubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjvubj:)}(hsgeh]hsge}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 lenh](h)}(hhh]j:)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jB c.rvt_rkey_okasbuh1hhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 vaddrh](h)}(hhh]j:)}(hu64h]hu64}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj7modnameN classnameNjWjZ)}j]]jB c.rvt_rkey_okasbuh1hhj.ubj&)}(h h]h }(hjShhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubj:)}(hvaddrh]hvaddr}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 rkeyh](h)}(hhh]j:)}(hu32h]hu32}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jB c.rvt_rkey_okasbuh1hhjvubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvubj:)}(hrkeyh]hrkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint acch](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hacch]hacc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM3ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhM3ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM3hjhhubj)}(hhh]h)}(h.check the IB virtual address, length, and RKEYh]h.check the IB virtual address, length, and RKEY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM3hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM3ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj jj jjjuh1jhhhjhNhNubj)}(hXN**Parameters** ``struct rvt_qp *qp`` qp for validation ``struct rvt_sge *sge`` SGE state ``u32 len`` length of data ``u64 vaddr`` virtual address to place data ``u32 rkey`` rkey to check ``int acc`` access flags **Return** 1 if successful, otherwise 0. **Description** increments the reference count upon successh](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.chM7hj$ubj)}(hhh](j)}(h(``struct rvt_qp *qp`` qp for validation h](j)}(h``struct rvt_qp *qp``h]j)}(hjIh]hstruct rvt_qp *qp}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM4hjCubj )}(hhh]h)}(hqp for validationh]hqp for validation}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM4hj_ubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM4hj@ubj)}(h"``struct rvt_sge *sge`` SGE state h](j)}(h``struct rvt_sge *sge``h]j)}(hjh]hstruct rvt_sge *sge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM5hj|ubj )}(hhh]h)}(h SGE stateh]h SGE state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM5hj@ubj)}(h``u32 len`` length of data h](j)}(h ``u32 len``h]j)}(hjh]hu32 len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM6hjubj )}(hhh]h)}(hlength of datah]hlength of data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hj@ubj)}(h,``u64 vaddr`` virtual address to place data h](j)}(h ``u64 vaddr``h]j)}(hjh]h u64 vaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM7hjubj )}(hhh]h)}(hvirtual address to place datah]hvirtual address to place data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM7hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hj@ubj)}(h``u32 rkey`` rkey to check 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.chM8hj' ubj )}(hhh]h)}(h rkey to checkh]h rkey to check}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB hM8hjC ubah}(h]h ]h"]h$]h&]uh1j hj' ubeh}(h]h ]h"]h$]h&]uh1jhjB hM8hj@ubj)}(h``int acc`` access flags h](j)}(h ``int acc``h]j)}(hjf h]hint acc}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM9hj` ubj )}(hhh]h)}(h access flagsh]h access flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ hM9hj| ubah}(h]h ]h"]h$]h&]uh1j hj` ubeh}(h]h ]h"]h$]h&]uh1jhj{ hM9hj@ubeh}(h]h ]h"]h$]h&]uh1jhj$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:49: ./drivers/infiniband/sw/rdmavt/mr.chM;hj$ubh)}(h1 if successful, otherwise 0.h]h1 if successful, otherwise 0.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM;hj$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.chM=hj$ubh)}(h+increments the reference count upon successh]h+increments the reference count upon success}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:49: ./drivers/infiniband/sw/rdmavt/mr.chM<hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_compute_aeth (C function)c.rvt_compute_aethhNtauh1hhjhhhNhNubj)}(hhh](j)}(h+__be32 rvt_compute_aeth (struct rvt_qp *qp)h]j)}(h*__be32 rvt_compute_aeth(struct rvt_qp *qp)h](h)}(hhh]j:)}(h__be32h]h__be32}(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj !ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj!modnameN classnameNjWjZ)}j]]j`)}jSrvt_compute_aethsbc.rvt_compute_aethasbuh1hhj !hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chK/ubj&)}(h h]h }(hj2!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj !hhhj1!hK/ubj)}(hrvt_compute_aethh]j:)}(hj.!h]hrvt_compute_aeth}(hjD!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj !hhhj1!hK/ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj_!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[!ubj&)}(h h]h }(hjl!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[!ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj}!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz!ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj!modnameN classnameNjWjZ)}j]]j,!c.rvt_compute_aethasbuh1hhj[!ubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[!ubju)}(hjxh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj[!ubj:)}(hqph]hqp}(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW!ubah}(h]h ]h"]h$]h&]jjuh1jhj !hhhj1!hK/ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj!hhhj1!hK/ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj1!hK/hj!hhubj)}(hhh]h)}(h!compute the AETH (syndrome + MSN)h]h!compute the AETH (syndrome + MSN)}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chK/hj!hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj1!hK/ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj!jj!jjjuh1jhhhjhNhNubj)}(hr**Parameters** ``struct rvt_qp *qp`` the queue pair to compute the AETH for **Description** Returns the AETH.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:52: ./drivers/infiniband/sw/rdmavt/rc.chK3hj!ubj)}(hhh]j)}(h=``struct rvt_qp *qp`` the queue pair to compute the AETH for 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:52: ./drivers/infiniband/sw/rdmavt/rc.chK0hj"ubj )}(hhh]h)}(h&the queue pair to compute the AETH forh]h&the queue pair to compute the AETH for}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6"hK0hj7"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj6"hK0hj"ubah}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hj\"h]h Description}(hj^"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ"ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chK2hj!ubh)}(hReturns the AETH.h]hReturns the AETH.}(hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chK1hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_get_credit (C function)c.rvt_get_credithNtauh1hhjhhhNhNubj)}(hhh](j)}(h1void rvt_get_credit (struct rvt_qp *qp, u32 aeth)h]j)}(h0void rvt_get_credit(struct rvt_qp *qp, u32 aeth)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKsubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"hhhj"hKsubj)}(hrvt_get_credith]j:)}(hrvt_get_credith]hrvt_get_credit}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hKsubj)}(h(struct rvt_qp *qp, u32 aeth)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"modnameN classnameNjWjZ)}j]]j`)}jSj"sbc.rvt_get_creditasbuh1hhj"ubj&)}(h h]h }(hj#hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubju)}(hjxh]h*}(hj*#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj"ubj:)}(hqph]hqp}(hj7#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hu32 aethh](h)}(hhh]j:)}(hu32h]hu32}(hjS#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP#ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjU#modnameN classnameNjWjZ)}j]]j#c.rvt_get_creditasbuh1hhjL#ubj&)}(h h]h }(hjq#hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjL#ubj:)}(haethh]haeth}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjL#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hKsubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj"hhhj"hKsubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hKshj"hhubj)}(hhh]h)}(h!flush the send work queue of a QPh]h!flush the send work queue of a QP}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKshj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hKsubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj#jj#jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct rvt_qp *qp`` the qp who's send work queue to flush ``u32 aeth`` the Acknowledge Extended Transport Header **Description** The QP s_lock should be held.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:52: ./drivers/infiniband/sw/rdmavt/rc.chKwhj#ubj)}(hhh](j)}(h<``struct rvt_qp *qp`` the qp who's send work queue to flush 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:52: ./drivers/infiniband/sw/rdmavt/rc.chKthj#ubj )}(hhh]h)}(h%the qp who's send work queue to flushh]h'the qp who’s send work queue to flush}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKthj$ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKthj#ubj)}(h7``u32 aeth`` the Acknowledge Extended Transport Header h](j)}(h ``u32 aeth``h]j)}(hj#$h]hu32 aeth}(hj%$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKuhj$ubj )}(hhh]h)}(h)the Acknowledge Extended Transport Headerh]h)the Acknowledge Extended Transport Header}(hj<$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8$hKuhj9$ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj8$hKuhj#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:52: ./drivers/infiniband/sw/rdmavt/rc.chKwhj#ubh)}(hThe QP s_lock should be held.h]hThe QP s_lock should be held.}(hjt$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKvhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_restart_sge (C function)c.rvt_restart_sgehNtauh1hhjhhhNhNubj)}(hhh](j)}(hMu32 rvt_restart_sge (struct rvt_sge_state *ss, struct rvt_swqe *wqe, u32 len)h]j)}(hLu32 rvt_restart_sge(struct rvt_sge_state *ss, struct rvt_swqe *wqe, u32 len)h](h)}(hhh]j:)}(hu32h]hu32}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj$modnameN classnameNjWjZ)}j]]j`)}jSrvt_restart_sgesbc.rvt_restart_sgeasbuh1hhj$hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$hhhj$hKubj)}(hrvt_restart_sgeh]j:)}(hj$h]hrvt_restart_sge}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hKubj)}(h9(struct rvt_sge_state *ss, struct rvt_swqe *wqe, u32 len)h](j)}(hstruct rvt_sge_state *ssh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubh)}(hhh]j:)}(h rvt_sge_stateh]h rvt_sge_state}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]j$c.rvt_restart_sgeasbuh1hhj$ubj&)}(h h]h }(hj1%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubju)}(hjxh]h*}(hj?%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj$ubj:)}(hssh]hss}(hjL%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hstruct rvt_swqe *wqeh](j)}(hjh]hstruct}(hje%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhja%ubj&)}(h h]h }(hjr%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja%ubh)}(hhh]j:)}(hrvt_swqeh]hrvt_swqe}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]j$c.rvt_restart_sgeasbuh1hhja%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja%ubju)}(hjxh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthja%ubj:)}(hwqeh]hwqe}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hja%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hu32 lenh](h)}(hhh]j:)}(hu32h]hu32}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]j$c.rvt_restart_sgeasbuh1hhj%ubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubj:)}(hlenh]hlen}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%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)}(hrewind the sge state for a wqeh]hrewind the sge state for a wqe}(hj.&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhj+&hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjF&jjF&jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct rvt_sge_state *ss`` the sge state pointer ``struct rvt_swqe *wqe`` the wqe to rewind ``u32 len`` the data length from the start of the wqe in bytes **Description** Returns the remaining data length.h](h)}(h**Parameters**h]j)}(hjP&h]h Parameters}(hjR&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN&ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhjJ&ubj)}(hhh](j)}(h3``struct rvt_sge_state *ss`` the sge state pointer h](j)}(h``struct rvt_sge_state *ss``h]j)}(hjo&h]hstruct rvt_sge_state *ss}(hjq&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm&ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhji&ubj )}(hhh]h)}(hthe sge state pointerh]hthe sge state pointer}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1j hji&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjf&ubj)}(h+``struct rvt_swqe *wqe`` the wqe to rewind h](j)}(h``struct rvt_swqe *wqe``h]j)}(hj&h]hstruct rvt_swqe *wqe}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhj&ubj )}(hhh]h)}(hthe wqe to rewindh]hthe wqe to rewind}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjf&ubj)}(h?``u32 len`` the data length from the start of the wqe in bytes h](j)}(h ``u32 len``h]j)}(hj&h]hu32 len}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhj&ubj )}(hhh]h)}(h2the data length from the start of the wqe in bytesh]h2the data length from the start of the wqe in bytes}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjf&ubeh}(h]h ]h"]h$]h&]uh1jhjJ&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:52: ./drivers/infiniband/sw/rdmavt/rc.chKhjJ&ubh)}(h"Returns the remaining data length.h]h"Returns the remaining data length.}(hj2'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:52: ./drivers/infiniband/sw/rdmavt/rc.chKhjJ&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_check_ah (C function)c.rvt_check_ahhNtauh1hhjhhhNhNubj)}(hhh](j)}(hHint rvt_check_ah (struct ib_device *ibdev, struct rdma_ah_attr *ah_attr)h]j)}(hGint rvt_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr)h](j)}(hinth]hint}(hja'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]'hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chK ubj&)}(h h]h }(hjp'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]'hhhjo'hK ubj)}(h rvt_check_ahh]j:)}(h rvt_check_ahh]h rvt_check_ah}(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]'hhhjo'hK ubj)}(h7(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr)h](j)}(hstruct ib_device *ibdevh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj'modnameN classnameNjWjZ)}j]]j`)}jSj'sbc.rvt_check_ahasbuh1hhj'ubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'ubju)}(hjxh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj'ubj:)}(hibdevh]hibdev}(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubj)}(hstruct rdma_ah_attr *ah_attrh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj (ubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj (ubh)}(hhh]j:)}(h rdma_ah_attrh]h rdma_ah_attr}(hj.(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj0(modnameN classnameNjWjZ)}j]]j'c.rvt_check_ahasbuh1hhj (ubj&)}(h h]h }(hjL(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj (ubju)}(hjxh]h*}(hjZ(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj (ubj:)}(hah_attrh]hah_attr}(hjg(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj (ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubeh}(h]h ]h"]h$]h&]jjuh1jhj]'hhhjo'hK ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjY'hhhjo'hK ubah}(h]jT'ah ](jjeh"]h$]h&]jj)jhuh1jhjo'hK hjV'hhubj)}(hhh]h)}(hvalidate the attributes of AHh]hvalidate the attributes of AH}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chK hj(hhubah}(h]h ]h"]h$]h&]uh1jhjV'hhhjo'hK ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj(jj(jjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct ib_device *ibdev`` the ib device ``struct rdma_ah_attr *ah_attr`` the attributes of the AH **Description** If driver supports a more detailed check_ah function call back to it otherwise just check the basics. **Return** 0 on successh](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:55: ./drivers/infiniband/sw/rdmavt/ah.chKhj(ubj)}(hhh](j)}(h*``struct ib_device *ibdev`` the ib device h](j)}(h``struct ib_device *ibdev``h]j)}(hj(h]hstruct ib_device *ibdev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chK hj(ubj )}(hhh]h)}(h the ib deviceh]h the ib device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hK hj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hK hj(ubj)}(h:``struct rdma_ah_attr *ah_attr`` the attributes of the AH 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&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chK hj)ubj )}(hhh]h)}(hthe attributes of the AHh]hthe attributes of the AH}(hj$)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj )hK hj!)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhj )hK hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hjF)h]h Description}(hjH)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD)ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chKhj(ubh)}(heIf driver supports a more detailed check_ah function call back to it otherwise just check the basics.h]heIf driver supports a more detailed check_ah function call back to it otherwise just check the basics.}(hj\)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chKhj(ubh)}(h **Return**h]j)}(hjm)h]hReturn}(hjo)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk)ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chKhj(ubh)}(h 0 on successh]h 0 on success}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:55: ./drivers/infiniband/sw/rdmavt/ah.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_alloc_device (C function)c.rvt_alloc_devicehNtauh1hhjhhhNhNubj)}(hhh](j)}(h@struct rvt_dev_info * rvt_alloc_device (size_t size, int nports)h]j)}(h>struct rvt_dev_info *rvt_alloc_device(size_t size, int nports)h](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK$ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)hhhj)hK$ubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj)modnameN classnameNjWjZ)}j]]j`)}jSrvt_alloc_devicesbc.rvt_alloc_deviceasbuh1hhj)hhhj)hK$ubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)hhhj)hK$ubju)}(hjxh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj)hhhj)hK$ubj)}(hrvt_alloc_deviceh]j:)}(hj)h]hrvt_alloc_device}(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj *ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj)hK$ubj)}(h(size_t size, int nports)h](j)}(h size_t sizeh](h)}(hhh]j:)}(hsize_th]hsize_t}(hj/*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,*ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj1*modnameN classnameNjWjZ)}j]]j)c.rvt_alloc_deviceasbuh1hhj(*ubj&)}(h h]h }(hjM*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(*ubj:)}(hsizeh]hsize}(hj[*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$*ubj)}(h int nportsh](j)}(hinth]hint}(hjt*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp*ubj&)}(h h]h }(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjp*ubj:)}(hnportsh]hnports}(hj*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp*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)}(h allocate rdih]h allocate rdi}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK$hj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hK$ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj*jj*jjjuh1jhhhjhNhNubj)}(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)}(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:58: ./drivers/infiniband/sw/rdmavt/vt.chK(hj*ubj)}(hhh](j)}(h3``size_t size`` how big of a structure to allocate 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&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK%hj*ubj )}(hhh]h)}(h"how big of a structure to allocateh]h"how big of a structure to allocate}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK%hj+ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hK%hj*ubj)}(h;``int nports`` number of ports to allocate array slots for h](j)}(h``int nports``h]j)}(hj4+h]h int nports}(hj6+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2+ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK&hj.+ubj )}(hhh]h)}(h+number of ports to allocate array slots forh]h+number of ports to allocate array slots for}(hjM+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI+hK&hjJ+ubah}(h]h ]h"]h$]h&]uh1j hj.+ubeh}(h]h ]h"]h$]h&]uh1jhjI+hK&hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j)}(hjo+h]h Description}(hjq+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm+ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK(hj*ubh)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK'hj*ubh)}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK+hj*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:58: ./drivers/infiniband/sw/rdmavt/vt.chK-hj*ubh)}(hpointer to allocated rdih]hpointer to allocated rdi}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chK.hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_dealloc_device (C function)c.rvt_dealloc_devicehNtauh1hhjhhhNhNubj)}(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+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKAubj&)}(h h]h }(hj+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+hhhj+hKAubj)}(hrvt_dealloc_deviceh]j:)}(hrvt_dealloc_deviceh]hrvt_dealloc_device}(hj ,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hKAubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j)}(hjh]hstruct}(hj',hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#,ubj&)}(h h]h }(hj4,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#,ubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hjE,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjB,ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjG,modnameN classnameNjWjZ)}j]]j`)}jSj ,sbc.rvt_dealloc_deviceasbuh1hhj#,ubj&)}(h h]h }(hje,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#,ubju)}(hjxh]h*}(hjs,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj#,ubj:)}(hrdih]hrdi}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hKAubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj+hhhj+hKAubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hKAhj+hhubj)}(hhh]h)}(hdeallocate rdih]hdeallocate rdi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKAhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hKAubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj,jj,jjjuh1jhhhjhNhNubj)}(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)}(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:58: ./drivers/infiniband/sw/rdmavt/vt.chKEhj,ubj)}(hhh]j)}(h/``struct rvt_dev_info *rdi`` structure to free h](j)}(h``struct rvt_dev_info *rdi``h]j)}(hj,h]hstruct rvt_dev_info *rdi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKBhj,ubj )}(hhh]h)}(hstructure to freeh]hstructure to free}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKBhj-ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hKBhj,ubah}(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:58: ./drivers/infiniband/sw/rdmavt/vt.chKDhj,ubh)}(h2Free a structure allocated with rvt_alloc_device()h]h2Free a structure allocated with rvt_alloc_device()}(hj<-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chKChj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h rvt_register_device (C function)c.rvt_register_devicehNtauh1hhjhhhNhNubj)}(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}(hjk-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg-hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMubj&)}(h h]h }(hjz-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjg-hhhjy-hMubj)}(hrvt_register_deviceh]j:)}(hrvt_register_deviceh]hrvt_register_device}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjg-hhhjy-hMubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-ubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-modnameN classnameNjWjZ)}j]]j`)}jSj-sbc.rvt_register_deviceasbuh1hhj-ubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-ubju)}(hjxh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj-ubj:)}(hrdih]hrdi}(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-ubah}(h]h ]h"]h$]h&]jjuh1jhjg-hhhjy-hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjc-hhhjy-hMubah}(h]j^-ah ](jjeh"]h$]h&]jj)jhuh1jhjy-hMhj`-hhubj)}(hhh]h)}(hregister a driverh]hregister a driver}(hj+.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhj(.hhubah}(h]h ]h"]h$]h&]uh1jhj`-hhhjy-hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjC.jjC.jjjuh1jhhhjhNhNubj)}(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)}(hjM.h]h Parameters}(hjO.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK.ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjG.ubj)}(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)}(hjl.h]hstruct rvt_dev_info *rdi}(hjn.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj.ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjf.ubj )}(hhh]h)}(h/main dev structure for all of rdmavt operationsh]h/main dev structure for all of rdmavt operations}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1j hjf.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjc.ubah}(h]h ]h"]h$]h&]uh1jhjG.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:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjG.ubh)}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjG.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:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjG.ubh)}(h 0 on success otherwise an errno.h]h 0 on success otherwise an errno.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMhjG.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"rvt_unregister_device (C function)c.rvt_unregister_devicehNtauh1hhjhhhNhNubj)}(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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMDubj&)}(h h]h }(hj"/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/hhhj!/hMDubj)}(hrvt_unregister_deviceh]j:)}(hrvt_unregister_deviceh]hrvt_unregister_device}(hj4/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj!/hMDubj)}(h(struct rvt_dev_info *rdi)h]j)}(hstruct rvt_dev_info *rdih](j)}(hjh]hstruct}(hjP/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjL/ubj&)}(h h]h }(hj]/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjL/ubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hjn/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjk/ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjp/modnameN classnameNjWjZ)}j]]j`)}jSj6/sbc.rvt_unregister_deviceasbuh1hhjL/ubj&)}(h h]h }(hj/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjL/ubju)}(hjxh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjL/ubj:)}(hrdih]hrdi}(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjL/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH/ubah}(h]h ]h"]h$]h&]jjuh1jhj/hhhj!/hMDubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj /hhhj!/hMDubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jhj!/hMDhj/hhubj)}(hhh]h)}(hremove a driverh]hremove a driver}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMDhj/hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj!/hMDubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj/jj/jjjuh1jhhhjhNhNubj)}(h=**Parameters** ``struct rvt_dev_info *rdi`` rvt dev structh](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:58: ./drivers/infiniband/sw/rdmavt/vt.chMHhj/ubj)}(hhh]j)}(h+``struct rvt_dev_info *rdi`` rvt dev structh](j)}(h``struct rvt_dev_info *rdi``h]j)}(hj0h]hstruct rvt_dev_info *rdi}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMJhj0ubj )}(hhh]h)}(hrvt dev structh]hrvt dev struct}(hj-0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMEhj*0ubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhj)0hMJhj 0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_init_port (C function)c.rvt_init_porthNtauh1hhjhhhNhNubj)}(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}(hjn0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj0hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMWubj&)}(h h]h }(hj}0hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjj0hhhj|0hMWubj)}(h rvt_init_porth]j:)}(h rvt_init_porth]h rvt_init_port}(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjj0hhhj|0hMWubj)}(hT(struct rvt_dev_info *rdi, struct rvt_ibport *port, int port_index, u16 *pkey_table)h](j)}(hstruct rvt_dev_info *rdih](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubj&)}(h h]h }(hj0hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj0ubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj0modnameN classnameNjWjZ)}j]]j`)}jSj0sbc.rvt_init_portasbuh1hhj0ubj&)}(h h]h }(hj0hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj0ubju)}(hjxh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj0ubj:)}(hrdih]hrdi}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hstruct rvt_ibport *porth](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hj*1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubh)}(hhh]j:)}(h rvt_ibporth]h rvt_ibport}(hj;1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj81ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj=1modnameN classnameNjWjZ)}j]]j0c.rvt_init_portasbuh1hhj1ubj&)}(h h]h }(hjY1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubju)}(hjxh]h*}(hjg1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj1ubj:)}(hporth]hport}(hjt1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hint port_indexh](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubj:)}(h port_indexh]h port_index}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hu16 *pkey_tableh](h)}(hhh]j:)}(hu16h]hu16}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj1modnameN classnameNjWjZ)}j]]j0c.rvt_init_portasbuh1hhj1ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1ubju)}(hjxh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj1ubj:)}(h pkey_tableh]h pkey_table}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjj0hhhj|0hMWubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjf0hhhj|0hMWubah}(h]ja0ah ](jjeh"]h$]h&]jj)jhuh1jhj|0hMWhjc0hhubj)}(hhh]h)}(h"init internal data for driver porth]h"init internal data for driver port}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMWhj%2hhubah}(h]h ]h"]h$]h&]uh1jhjc0hhhj|0hMWubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj@2jj@2jjjuh1jhhhjhNhNubj)}(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)}(hjJ2h]h Parameters}(hjL2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH2ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM[hjD2ubj)}(hhh](j)}(h1``struct rvt_dev_info *rdi`` rvt_dev_info struct h](j)}(h``struct rvt_dev_info *rdi``h]j)}(hji2h]hstruct rvt_dev_info *rdi}(hjk2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg2ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMXhjc2ubj )}(hhh]h)}(hrvt_dev_info structh]hrvt_dev_info struct}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~2hMXhj2ubah}(h]h ]h"]h$]h&]uh1j hjc2ubeh}(h]h ]h"]h$]h&]uh1jhj~2hMXhj`2ubj)}(h%``struct rvt_ibport *port`` rvt port h](j)}(h``struct rvt_ibport *port``h]j)}(hj2h]hstruct rvt_ibport *port}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMYhj2ubj )}(hhh]h)}(hrvt porth]hrvt port}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMYhj2ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMYhj`2ubj)}(hK``int port_index`` 0 based index of ports, different from IB core port num h](j)}(h``int port_index``h]j)}(hj2h]hint port_index}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chMZhj2ubj )}(hhh]h)}(h70 based index of ports, different from IB core port numh]h70 based index of ports, different from IB core port num}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMZhj2ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMZhj`2ubj)}(h,``u16 *pkey_table`` pkey_table for **port** h](j)}(h``u16 *pkey_table``h]j)}(hj3h]hu16 *pkey_table}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM[hj3ubj )}(hhh]h)}(hpkey_table for **port**h](hpkey_table for }(hj-3hhhNhNubj)}(h**port**h]hport}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-3ubeh}(h]h ]h"]h$]h&]uh1hhj)3hM[hj*3ubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhj)3hM[hj`2ubeh}(h]h ]h"]h$]h&]uh1jhjD2ubh)}(h**Description**h]j)}(hj]3h]h Description}(hj_3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[3ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM]hjD2ubh)}(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.}(hjs3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM\hjD2ubh)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM_hjD2ubh)}(halways 0h]halways 0}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:58: ./drivers/infiniband/sw/rdmavt/vt.chM`hjD2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_cq_enter (C function)c.rvt_cq_enterhNtauh1hhjhhhNhNubj)}(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)}(hj*[h]hbool}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKubj&)}(h h]h }(hj3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3hhhj3hKubj)}(h rvt_cq_enterh]j:)}(h rvt_cq_enterh]h rvt_cq_enter}(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhj3hKubj)}(h8(struct rvt_cq *cq, struct ib_wc *entry, bool solicited)h](j)}(hstruct rvt_cq *cqh](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4ubh)}(hhh]j:)}(hrvt_cqh]hrvt_cq}(hj#4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 4ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%4modnameN classnameNjWjZ)}j]]j`)}jSj3sbc.rvt_cq_enterasbuh1hhj4ubj&)}(h h]h }(hjC4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4ubju)}(hjxh]h*}(hjQ4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj4ubj:)}(hcqh]hcq}(hj^4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(hstruct ib_wc *entryh](j)}(hjh]hstruct}(hjw4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjs4ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjs4ubh)}(hhh]j:)}(hib_wch]hib_wc}(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj4modnameN classnameNjWjZ)}j]]j?4c.rvt_cq_enterasbuh1hhjs4ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjs4ubju)}(hjxh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjs4ubj:)}(hentryh]hentry}(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjs4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(hbool solicitedh](j)}(hj*[h]hbool}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj4ubj:)}(h solicitedh]h solicited}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhj3hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj3hhhj3hKubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhj3hKhj3hhubj)}(hhh]h)}(h'add a new entry to the completion queueh]h'add a new entry to the completion queue}(hj,5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj)5hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjD5jjD5jjjuh1jhhhjhNhNubj)}(hX&**Parameters** ``struct rvt_cq *cq`` completion queue ``struct ib_wc *entry`` work completion entry to add ``bool solicited`` true if **entry** is solicited **Description** This may be called with qp->s_lock held. **Return** return true on success, else return false if cq is full.h](h)}(h**Parameters**h]j)}(hjN5h]h Parameters}(hjP5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL5ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjH5ubj)}(hhh](j)}(h'``struct rvt_cq *cq`` completion queue h](j)}(h``struct rvt_cq *cq``h]j)}(hjm5h]hstruct rvt_cq *cq}(hjo5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk5ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjg5ubj )}(hhh]h)}(hcompletion queueh]hcompletion queue}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1j hjg5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjd5ubj)}(h5``struct ib_wc *entry`` work completion entry to add h](j)}(h``struct ib_wc *entry``h]j)}(hj5h]hstruct ib_wc *entry}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj5ubj )}(hhh]h)}(hwork completion entry to addh]hwork completion entry to add}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjd5ubj)}(h2``bool solicited`` true if **entry** is solicited h](j)}(h``bool solicited``h]j)}(hj5h]hbool solicited}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhj5ubj )}(hhh]h)}(htrue if **entry** is solicitedh](htrue if }(hj5hhhNhNubj)}(h **entry**h]hentry}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh is solicited}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjd5ubeh}(h]h ]h"]h$]h&]uh1jhjH5ubh)}(h**Description**h]j)}(hj,6h]h Description}(hj.6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*6ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjH5ubh)}(h(This may be called with qp->s_lock held.h]h(This may be called with qp->s_lock held.}(hjB6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjH5ubh)}(h **Return**h]j)}(hjS6h]hReturn}(hjU6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ6ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjH5ubh)}(h8return true on success, else return false if cq is full.h]h8return true on success, else return false if cq is full.}(hji6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:61: ./drivers/infiniband/sw/rdmavt/cq.chKhjH5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_error_qp (C function)c.rvt_error_qphNtauh1hhjhhhNhNubj)}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMubj&)}(h h]h }(hj6hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6hhhj6hMubj)}(h rvt_error_qph]j:)}(h rvt_error_qph]h rvt_error_qp}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhj6hMubj)}(h*(struct rvt_qp *qp, enum ib_wc_status err)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj&)}(h h]h }(hj6hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj6modnameN classnameNjWjZ)}j]]j`)}jSj6sbc.rvt_error_qpasbuh1hhj6ubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj6ubju)}(hjxh]h*}(hj!7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj6ubj:)}(hqph]hqp}(hj.7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(henum ib_wc_status errh](j)}(hj%h]henum}(hjG7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjC7ubj&)}(h h]h }(hjT7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjC7ubh)}(hhh]j:)}(h ib_wc_statush]h ib_wc_status}(hje7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjb7ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjg7modnameN classnameNjWjZ)}j]]j7c.rvt_error_qpasbuh1hhjC7ubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjC7ubj:)}(herrh]herr}(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjC7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhj6hhubj)}(hhh]h)}(hput a QP into the error stateh]hput a QP into the error state}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj7jj7jjjuh1jhhhjhNhNubj)}(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)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubj)}(hhh](j)}(h9``struct rvt_qp *qp`` the QP to put into the error state h](j)}(h``struct rvt_qp *qp``h]j)}(hj7h]hstruct rvt_qp *qp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubj )}(hhh]h)}(h"the QP to put into the error stateh]h"the QP to put into the error state}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(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)}(hj58h]henum ib_wc_status err}(hj78hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj38ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj/8ubj )}(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}(hjN8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ8hMhjK8ubah}(h]h ]h"]h$]h&]uh1j hj/8ubeh}(h]h ]h"]h$]h&]uh1jhjJ8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjp8h]h Description}(hjr8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn8ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubh)}(h*Flushes both send and receive work queues.h]h*Flushes both send and receive work queues.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubh)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_get_rwqe (C function)c.rvt_get_rwqehNtauh1hhjhhhNhNubj)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8hhhj8hM ubj)}(h rvt_get_rwqeh]j:)}(h rvt_get_rwqeh]h rvt_get_rwqe}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hM ubj)}(h$(struct rvt_qp *qp, bool wr_id_only)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj&)}(h h]h }(hj&9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj79hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj49ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj99modnameN classnameNjWjZ)}j]]j`)}jSj8sbc.rvt_get_rwqeasbuh1hhj9ubj&)}(h h]h }(hjW9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubju)}(hjxh]h*}(hje9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj9ubj:)}(hqph]hqp}(hjr9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(hbool wr_id_onlyh](j)}(hj*[h]hbool}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj&)}(h h]h }(hj9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubj:)}(h wr_id_onlyh]h wr_id_only}(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj8hhhj8hM ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj8hM hj8hhubj)}(hhh]h)}(h%copy the next RWQE into the QP's RWQEh]h'copy the next RWQE into the QP’s RWQE}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj9jj9jjjuh1jhhhjhNhNubj)}(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)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM! hj9ubj)}(hhh](j)}(h``struct rvt_qp *qp`` the QP 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:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj :ubj )}(hhh]h)}(hthe QPh]hthe QP}(hj*:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&:hM hj':ubah}(h]h ]h"]h$]h&]uh1j hj :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)}(hjJ:h]hbool wr_id_only}(hjL:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH:ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjD: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}(hjc:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_:hM hj`:ubah}(h]h ]h"]h$]h&]uh1j hjD:ubeh}(h]h ]h"]h$]h&]uh1jhj_:hM hj:ubeh}(h]h ]h"]h$]h&]uh1jhj9ubh)}(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! hj9ubh)}(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 hj9ubh)}(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# hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_comm_est (C function)c.rvt_comm_esthNtauh1hhjhhhNhNubj)}(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}(hj:hhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hj:hhhj:hM ubj)}(h rvt_comm_esth]j:)}(h rvt_comm_esth]h rvt_comm_est}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhj:hM ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj&)}(h h]h }(hj#;hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj4;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1;ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj6;modnameN classnameNjWjZ)}j]]j`)}jSj:sbc.rvt_comm_estasbuh1hhj;ubj&)}(h h]h }(hjT;hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;ubju)}(hjxh]h*}(hjb;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj;ubj:)}(hqph]hqp}(hjo;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(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)}(hhandle trap with QP establishedh]hhandle trap with QP established}(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 ](jQfunctioneh"]h$]h&]jjQjj;jj;jjjuh1jhhhjhNhNubj)}(h.**Parameters** ``struct rvt_qp *qp`` the QPh](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 QPh](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:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj;ubj )}(hhh]h)}(hthe QPh]hthe QP}(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;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_add_rnr_timer (C function)c.rvt_add_rnr_timerhNtauh1hhjhhhNhNubj)}(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}(hj4<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0<hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj&)}(h h]h }(hjC<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj0<hhhjB<hM ubj)}(hrvt_add_rnr_timerh]j:)}(hrvt_add_rnr_timerh]hrvt_add_rnr_timer}(hjU<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQ<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0<hhhjB<hM ubj)}(h(struct rvt_qp *qp, u32 aeth)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hjq<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjm<ubj&)}(h h]h }(hj~<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjm<ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj<modnameN classnameNjWjZ)}j]]j`)}jSjW<sbc.rvt_add_rnr_timerasbuh1hhjm<ubj&)}(h h]h }(hj<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjm<ubju)}(hjxh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjm<ubj:)}(hqph]hqp}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji<ubj)}(hu32 aethh](h)}(hhh]j:)}(hu32h]hu32}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj<modnameN classnameNjWjZ)}j]]j<c.rvt_add_rnr_timerasbuh1hhj<ubj&)}(h h]h }(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj<ubj:)}(haethh]haeth}(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji<ubeh}(h]h ]h"]h$]h&]jjuh1jhj0<hhhjB<hM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj,<hhhjB<hM ubah}(h]j'<ah ](jjeh"]h$]h&]jj)jhuh1jhjB<hM hj)<hhubj)}(hhh]h)}(h add/start an rnr timer on the QPh]h add/start an rnr timer on the QP}(hj<=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj9=hhubah}(h]h ]h"]h$]h&]uh1jhj)<hhhjB<hM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjT=jjT=jjjuh1jhhhjhNhNubj)}(ho**Parameters** ``struct rvt_qp *qp`` the QP ``u32 aeth`` aeth of RNR timeout, simulated aeth for loopbackh](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 hjX=ubj)}(hhh](j)}(h``struct rvt_qp *qp`` the QP 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:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjw=ubj )}(hhh]h)}(hthe QPh]hthe QP}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1j hjw=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjt=ubj)}(h=``u32 aeth`` aeth of RNR timeout, simulated aeth for loopbackh](j)}(h ``u32 aeth``h]j)}(hj=h]hu32 aeth}(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)}(h0aeth of RNR timeout, simulated aeth for loopbackh]h0aeth of RNR timeout, simulated aeth for loopback}(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=ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjt=ubeh}(h]h ]h"]h$]h&]uh1jhjX=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_stop_rc_timers (C function)c.rvt_stop_rc_timershNtauh1hhjhhhNhNubj)}(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}(hj>hhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hj >hhhj>hM ubj)}(hrvt_stop_rc_timersh]j:)}(hrvt_stop_rc_timersh]hrvt_stop_rc_timers}(hj1>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj->ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj >hhhj>hM ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hjM>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjI>ubj&)}(h h]h }(hjZ>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjI>ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjk>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjh>ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjm>modnameN classnameNjWjZ)}j]]j`)}jSj3>sbc.rvt_stop_rc_timersasbuh1hhjI>ubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjI>ubju)}(hjxh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjI>ubj:)}(hqph]hqp}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjI>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE>ubah}(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)}(hstop all timersh]hstop all timers}(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 ](jQfunctioneh"]h$]h&]jjQjj>jj>jjjuh1jhhhjhNhNubj)}(hH**Parameters** ``struct rvt_qp *qp`` the QP stop any pending timersh](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)}(h4``struct rvt_qp *qp`` the QP stop any pending timersh](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:64: ./drivers/infiniband/sw/rdmavt/qp.chM hj ?ubj )}(hhh]h)}(hthe QP stop any pending timersh]hthe QP stop any pending timers}(hj*?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&?hM hj'?ubah}(h]h ]h"]h$]h&]uh1j hj ?ubeh}(h]h ]h"]h$]h&]uh1jhj&?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h rvt_del_timers_sync (C function)c.rvt_del_timers_synchNtauh1hhjhhhNhNubj)}(hhh](j)}(h,void rvt_del_timers_sync (struct rvt_qp *qp)h]j)}(h+void rvt_del_timers_sync(struct rvt_qp *qp)h](j)}(hvoidh]hvoid}(hjj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf?hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj&)}(h h]h }(hjy?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjf?hhhjx?hM ubj)}(hrvt_del_timers_synch]j:)}(hrvt_del_timers_synch]hrvt_del_timers_sync}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjf?hhhjx?hM ubj)}(h(struct rvt_qp *qp)h]j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?ubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj?modnameN classnameNjWjZ)}j]]j`)}jSj?sbc.rvt_del_timers_syncasbuh1hhj?ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?ubju)}(hjxh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj?ubj:)}(hqph]hqp}(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubah}(h]h ]h"]h$]h&]jjuh1jhjf?hhhjx?hM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjb?hhhjx?hM ubah}(h]j]?ah ](jjeh"]h$]h&]jj)jhuh1jhjx?hM hj_?hhubj)}(hhh]h)}(h%wait for any timeout routines to exith]h%wait for any timeout routines to exit}(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_?hhhjx?hM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjB@jjB@jjjuh1jhhhjhNhNubj)}(h.**Parameters** ``struct rvt_qp *qp`` the QPh](h)}(h**Parameters**h]j)}(hjL@h]h Parameters}(hjN@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ@ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjF@ubj)}(hhh]j)}(h``struct rvt_qp *qp`` the QPh](j)}(h``struct rvt_qp *qp``h]j)}(hjk@h]hstruct rvt_qp *qp}(hjm@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji@ubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hje@ubj )}(hhh]h)}(hthe QPh]hthe QP}(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@ubah}(h]h ]h"]h$]h&]uh1j hje@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hjb@ubah}(h]h ]h"]h$]h&]uh1jhjF@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_qp_iter_init (C function)c.rvt_qp_iter_inithNtauh1hhjhhhNhNubj)}(hhh](j)}(hmstruct rvt_qp_iter * rvt_qp_iter_init (struct rvt_dev_info *rdi, u64 v, void (*cb)(struct rvt_qp *qp, u64 v))h]j)}(hkstruct rvt_qp_iter *rvt_qp_iter_init(struct rvt_dev_info *rdi, u64 v, void (*cb)(struct rvt_qp *qp, u64 v))h](j)}(hjh]hstruct}(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.chMF ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@hhhj@hMF ubh)}(hhh]j:)}(h rvt_qp_iterh]h rvt_qp_iter}(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj@modnameN classnameNjWjZ)}j]]j`)}jSrvt_qp_iter_initsbc.rvt_qp_iter_initasbuh1hhj@hhhj@hMF ubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@hhhj@hMF ubju)}(hjxh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj@hhhj@hMF ubj)}(hrvt_qp_iter_inith]j:)}(hjAh]hrvt_qp_iter_init}(hj$AhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Aubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhj@hMF 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)}(hjh]hstruct}(hj?AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;Aubj&)}(h h]h }(hjLAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;Aubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hj]AhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZAubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj_AmodnameN classnameNjWjZ)}j]]jAc.rvt_qp_iter_initasbuh1hhj;Aubj&)}(h h]h }(hj{AhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj;Aubju)}(hjxh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj;Aubj:)}(hrdih]hrdi}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;Aubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Aubj)}(hu64 vh](h)}(hhh]j:)}(hu64h]hu64}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjAmodnameN classnameNjWjZ)}j]]jAc.rvt_qp_iter_initasbuh1hhjAubj&)}(h h]h }(hjAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubj:)}(hvh]hv}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Aubj)}(h$void (*cb)(struct rvt_qp *qp, u64 v)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubju)}(hjh]h(}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubju)}(hjxh]h*}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubj:)}(hcbh]hcb}(hj-BhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubju)}(hjh]h)}(hj;BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubju)}(hjh]h(}(hjHBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubj)}(hjh]hstruct}(hjUBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubj&)}(h h]h }(hjbBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjsBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpBubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjuBmodnameN classnameNjWjZ)}j]]jAc.rvt_qp_iter_initasbuh1hhjAubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubju)}(hjxh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubj:)}(hqph]hqp}(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubju)}(hj<h]h,}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubh)}(hhh]j:)}(hu64h]hu64}(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjBmodnameN classnameNjWjZ)}j]]jAc.rvt_qp_iter_initasbuh1hhjAubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubj:)}(hjAh]hv}(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubju)}(hjh]h)}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Aubeh}(h]h ]h"]h$]h&]jjuh1jhj@hhhj@hMF ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj@hhhj@hMF ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhj@hMF hj@hhubj)}(hhh]h)}(hinitial for QP iterationh]hinitial for QP iteration}(hj:ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMF hj7Chhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hMF ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjRCjjRCjjjuh1jhhhjhNhNubj)}(hXE**Parameters** ``struct rvt_dev_info *rdi`` rvt devinfo ``u64 v`` u64 value ``void (*cb)(struct rvt_qp *qp, u64 v)`` user-defined callback **Description** This returns an iterator suitable for iterating QPs in the system. 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. Use cases that require memory allocation to succeed must preallocate appropriately. **Return** a pointer to an rvt_qp_iter or NULLh](h)}(h**Parameters**h]j)}(hj\Ch]h Parameters}(hj^ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZCubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMJ hjVCubj)}(hhh](j)}(h)``struct rvt_dev_info *rdi`` rvt devinfo h](j)}(h``struct rvt_dev_info *rdi``h]j)}(hj{Ch]hstruct rvt_dev_info *rdi}(hj}ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyCubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMG hjuCubj )}(hhh]h)}(h rvt devinfoh]h rvt devinfo}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMG hjCubah}(h]h ]h"]h$]h&]uh1j hjuCubeh}(h]h ]h"]h$]h&]uh1jhjChMG hjrCubj)}(h``u64 v`` u64 value h](j)}(h ``u64 v``h]j)}(hjCh]hu64 v}(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.chMH hjCubj )}(hhh]h)}(h u64 valueh]h u64 value}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMH hjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjChMH hjrCubj)}(h?``void (*cb)(struct rvt_qp *qp, u64 v)`` user-defined callback h](j)}(h(``void (*cb)(struct rvt_qp *qp, u64 v)``h]j)}(hjCh]h$void (*cb)(struct rvt_qp *qp, u64 v)}(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.chMI hjCubj )}(hhh]h)}(huser-defined callbackh]huser-defined callback}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMI hjDubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjDhMI hjrCubeh}(h]h ]h"]h$]h&]uh1jhjVCubh)}(h**Description**h]j)}(hj(Dh]h Description}(hj*DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Dubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMK hjVCubh)}(hBThis returns an iterator suitable for iterating QPs in the system.h]hBThis returns an iterator suitable for iterating QPs in the system.}(hj>DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMJ hjVCubh)}(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 }(hjMDhhhNhNubj)}(h**cb**h]hcb}(hjUDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMDubh is a user-defined callback and }(hjMDhhhNhNubj)}(h**v**h]hv}(hjgDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMDubh@ is a 64-bit value passed to and relevant for processing in the }(hjMDhhhNhNubj)}(h**cb**h]hcb}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMDubh`. An example use case would be to alter QP processing based on criteria not part of the rvt_qp.}(hjMDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMM hjVCubh)}(hSUse cases that require memory allocation to succeed must preallocate appropriately.h]hSUse cases that require memory allocation to succeed must preallocate appropriately.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMR hjVCubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMU hjVCubh)}(h#a pointer to an rvt_qp_iter or NULLh]h#a pointer to an rvt_qp_iter or NULL}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMV hjVCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_qp_iter_next (C function)c.rvt_qp_iter_nexthNtauh1hhjhhhNhNubj)}(hhh](j)}(h/int rvt_qp_iter_next (struct rvt_qp_iter *iter)h]j)}(h.int rvt_qp_iter_next(struct rvt_qp_iter *iter)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMm ubj&)}(h h]h }(hjDhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDhhhjDhMm ubj)}(hrvt_qp_iter_nexth]j:)}(hrvt_qp_iter_nexth]hrvt_qp_iter_next}(hj EhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhMm ubj)}(h(struct rvt_qp_iter *iter)h]j)}(hstruct rvt_qp_iter *iterh](j)}(hjh]hstruct}(hj%EhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!Eubj&)}(h h]h }(hj2EhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj!Eubh)}(hhh]j:)}(h rvt_qp_iterh]h rvt_qp_iter}(hjCEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@Eubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjEEmodnameN classnameNjWjZ)}j]]j`)}jSj Esbc.rvt_qp_iter_nextasbuh1hhj!Eubj&)}(h h]h }(hjcEhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj!Eubju)}(hjxh]h*}(hjqEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj!Eubj:)}(hiterh]hiter}(hj~EhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhMm ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjDhhhjDhMm ubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhjDhMm hjDhhubj)}(hhh]h)}(hreturn the next QP in iterh]hreturn the next QP in iter}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMm hjEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMm ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjEjjEjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct rvt_qp_iter *iter`` the iterator **Description** Fine grained QP iterator suitable for use with debugfs seq_file mechanisms. Updates iter->qp 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)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMq hjEubj)}(hhh]j)}(h*``struct rvt_qp_iter *iter`` the iterator h](j)}(h``struct rvt_qp_iter *iter``h]j)}(hjEh]hstruct rvt_qp_iter *iter}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMn hjEubj )}(hhh]h)}(h the iteratorh]h the iterator}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMn hjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMn hjEubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hj$Fh]h Description}(hj&FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Fubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMp hjEubh)}(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.}(hj:FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMo hjEubh)}(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.}(hjIFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMr hjEubh)}(h **Return**h]j)}(hjZFh]hReturn}(hj\FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXFubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMu hjEubh)}(h%0 - iter->qp is valid 1 - no more QPsh]h%0 - iter->qp is valid 1 - no more QPs}(hjpFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMv hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_qp_iter (C function) c.rvt_qp_iterhNtauh1hhjhhhNhNubj)}(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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj&)}(h h]h }(hjFhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjFhhhjFhM ubj)}(h rvt_qp_iterh]j:)}(h rvt_qp_iterh]h rvt_qp_iter}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjFhM 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)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubj&)}(h h]h }(hjFhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjFubh)}(hhh]j:)}(h rvt_dev_infoh]h rvt_dev_info}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjFmodnameN classnameNjWjZ)}j]]j`)}jSjFsb c.rvt_qp_iterasbuh1hhjFubj&)}(h h]h }(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjFubju)}(hjxh]h*}(hj(GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjFubj:)}(hrdih]hrdi}(hj5GhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hu64 vh](h)}(hhh]j:)}(hu64h]hu64}(hjQGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNGubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjSGmodnameN classnameNjWjZ)}j]]jG c.rvt_qp_iterasbuh1hhjJGubj&)}(h h]h }(hjoGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJGubj:)}(hjAh]hv}(hj}GhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(h$void (*cb)(struct rvt_qp *qp, u64 v)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj&)}(h h]h }(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubju)}(hjh]h(}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubju)}(hjxh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubj:)}(hcbh]hcb}(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubju)}(hjh]h)}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubju)}(hjh]h(}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubj)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubj&)}(h h]h }(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjHmodnameN classnameNjWjZ)}j]]jG c.rvt_qp_iterasbuh1hhjGubj&)}(h h]h }(hj/HhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubju)}(hjxh]h*}(hj=HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubj:)}(hqph]hqp}(hjJHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubju)}(hj<h]h,}(hjXHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubj&)}(h h]h }(hjeHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubh)}(hhh]j:)}(hu64h]hu64}(hjvHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsHubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjxHmodnameN classnameNjWjZ)}j]]jG c.rvt_qp_iterasbuh1hhjGubj&)}(h h]h }(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjGubj:)}(hjAh]hv}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubju)}(hjh]h)}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjFhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjFhhhjFhM ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jhjFhM hjFhhubj)}(hhh]h)}(hiterate all QPsh]hiterate all QPs}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjFhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjHjjHjjjuh1jhhhjhNhNubj)}(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)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHubj)}(hhh](j)}(h)``struct rvt_dev_info *rdi`` rvt devinfo h](j)}(h``struct rvt_dev_info *rdi``h]j)}(hjIh]hstruct rvt_dev_info *rdi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjIubj )}(hhh]h)}(h rvt devinfoh]h rvt devinfo}(hj2IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.IhM hj/Iubah}(h]h ]h"]h$]h&]uh1j hjIubeh}(h]h ]h"]h$]h&]uh1jhj.IhM hjIubj)}(h``u64 v`` a 64-bit value h](j)}(h ``u64 v``h]j)}(hjRIh]hu64 v}(hjTIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPIubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjLIubj )}(hhh]h)}(ha 64-bit valueh]ha 64-bit value}(hjkIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgIhM hjhIubah}(h]h ]h"]h$]h&]uh1j hjLIubeh}(h]h ]h"]h$]h&]uh1jhjgIhM hjIubj)}(h4``void (*cb)(struct rvt_qp *qp, u64 v)`` a callback h](j)}(h(``void (*cb)(struct rvt_qp *qp, u64 v)``h]j)}(hjIh]h$void (*cb)(struct rvt_qp *qp, u64 v)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjIubj )}(hhh]h)}(h a callbackh]h a callback}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjIubah}(h]h ]h"]h$]h&]uh1j hjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjIubeh}(h]h ]h"]h$]h&]uh1jhjHubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHubh)}(h*This provides a way for iterating all QPs.h]h*This provides a way for iterating all QPs.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHubh)}(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 }(hjIhhhNhNubj)}(h**cb**h]hcb}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh is a user-defined callback and }(hjIhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh 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.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHubh)}(hEThe code has an internal iterator to simplify non seq_file use cases.h]hEThe code has an internal iterator to simplify non seq_file use cases.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_copy_sge (C function)c.rvt_copy_sgehNtauh1hhjhhhNhNubj)}(hhh](j)}(huvoid rvt_copy_sge (struct rvt_qp *qp, struct rvt_sge_state *ss, void *data, u32 length, bool release, bool copy_last)h]j)}(htvoid rvt_copy_sge(struct rvt_qp *qp, struct rvt_sge_state *ss, void *data, u32 length, bool release, bool copy_last)h](j)}(hvoidh]hvoid}(hjMJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIJhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM ubj&)}(h h]h }(hj\JhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjIJhhhj[JhM ubj)}(h rvt_copy_sgeh]j:)}(h rvt_copy_sgeh]h rvt_copy_sge}(hjnJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIJhhhj[JhM ubj)}(hc(struct rvt_qp *qp, struct rvt_sge_state *ss, void *data, u32 length, bool release, bool copy_last)h](j)}(hstruct rvt_qp *qph](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjJmodnameN classnameNjWjZ)}j]]j`)}jSjpJsbc.rvt_copy_sgeasbuh1hhjJubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubju)}(hjxh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjJubj:)}(hqph]hqp}(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(hstruct rvt_sge_state *ssh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJubj&)}(h h]h }(hj KhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubh)}(hhh]j:)}(h rvt_sge_stateh]h rvt_sge_state}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjKmodnameN classnameNjWjZ)}j]]jJc.rvt_copy_sgeasbuh1hhjJubj&)}(h h]h }(hj8KhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubju)}(hjxh]h*}(hjFKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjJubj:)}(hssh]hss}(hjSKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h void *datah](j)}(hvoidh]hvoid}(hjlKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhKubj&)}(h h]h }(hjzKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhKubju)}(hjxh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhKubj:)}(hdatah]hdata}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h u32 lengthh](h)}(hhh]j:)}(hu32h]hu32}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjKmodnameN classnameNjWjZ)}j]]jJc.rvt_copy_sgeasbuh1hhjKubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKubj:)}(hlengthh]hlength}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h bool releaseh](j)}(hj*[h]hbool}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKubj:)}(hreleaseh]hrelease}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(hbool copy_lasth](j)}(hj*[h]hbool}(hj*LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Lubj&)}(h h]h }(hj7LhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&Lubj:)}(h copy_lasth]h copy_last}(hjELhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(h]h ]h"]h$]h&]jjuh1jhjIJhhhj[JhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjEJhhhj[JhM ubah}(h]j@Jah ](jjeh"]h$]h&]jj)jhuh1jhj[JhM hjBJhhubj)}(hhh]h)}(hcopy data to SGE memoryh]hcopy data to SGE memory}(hjoLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjlLhhubah}(h]h ]h"]h$]h&]uh1jhjBJhhhj[JhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjLjjLjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct rvt_qp *qp`` associated QP ``struct rvt_sge_state *ss`` the SGE state ``void *data`` the data to copy ``u32 length`` the length of the data ``bool release`` boolean to release MR ``bool copy_last`` do a separate copy of the last 8 bytesh](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(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.chM hjLubj)}(hhh](j)}(h$``struct rvt_qp *qp`` associated QP h](j)}(h``struct rvt_qp *qp``h]j)}(hjLh]hstruct rvt_qp *qp}(hjLhhhNhNubah}(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.chM hjLubj )}(hhh]h)}(h associated QPh]h associated QP}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1j hjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjLubj)}(h+``struct rvt_sge_state *ss`` the SGE state h](j)}(h``struct rvt_sge_state *ss``h]j)}(hjLh]hstruct rvt_sge_state *ss}(hjLhhhNhNubah}(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.chM hjLubj )}(hhh]h)}(h the SGE stateh]h the SGE state}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1j hjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjLubj)}(h ``void *data`` the data to copy h](j)}(h``void *data``h]j)}(hj"Mh]h void *data}(hj$MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Mubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjMubj )}(hhh]h)}(hthe data to copyh]hthe data to copy}(hj;MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7MhM hj8Mubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhj7MhM hjLubj)}(h&``u32 length`` the length of the data h](j)}(h``u32 length``h]j)}(hj[Mh]h u32 length}(hj]MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYMubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjUMubj )}(hhh]h)}(hthe length of the datah]hthe length of the data}(hjtMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpMhM hjqMubah}(h]h ]h"]h$]h&]uh1j hjUMubeh}(h]h ]h"]h$]h&]uh1jhjpMhM hjLubj)}(h'``bool release`` boolean to release MR h](j)}(h``bool release``h]j)}(hjMh]h bool release}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjMubj )}(hhh]h)}(hboolean to release MRh]hboolean to release MR}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM hjMubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM hjLubj)}(h9``bool copy_last`` do a separate copy of the last 8 bytesh](j)}(h``bool copy_last``h]j)}(hjMh]hbool copy_last}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjMubj )}(hhh]h)}(h&do a separate copy of the last 8 bytesh]h&do a separate copy of the last 8 bytes}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chM hjMubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM hjLubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_ruc_loopback (C function)c.rvt_ruc_loopbackhNtauh1hhjhhhNhNubj)}(hhh](j)}(h*void rvt_ruc_loopback (struct rvt_qp *sqp)h]j)}(h)void rvt_ruc_loopback(struct rvt_qp *sqp)h](j)}(hvoidh]hvoid}(hj'NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Nhhhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chML ubj&)}(h h]h }(hj6NhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#Nhhhj5NhML ubj)}(hrvt_ruc_loopbackh]j:)}(hrvt_ruc_loopbackh]hrvt_ruc_loopback}(hjHNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#Nhhhj5NhML ubj)}(h(struct rvt_qp *sqp)h]j)}(hstruct rvt_qp *sqph](j)}(hjh]hstruct}(hjdNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`Nubj&)}(h h]h }(hjqNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`Nubh)}(hhh]j:)}(hrvt_qph]hrvt_qp}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjNmodnameN classnameNjWjZ)}j]]j`)}jSjJNsbc.rvt_ruc_loopbackasbuh1hhj`Nubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`Nubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj`Nubj:)}(hsqph]hsqp}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\Nubah}(h]h ]h"]h$]h&]jjuh1jhj#Nhhhj5NhML ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjNhhhj5NhML ubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhj5NhML hjNhhubj)}(hhh]h)}(h"handle UC and RC loopback requestsh]h"handle UC and RC loopback requests}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chML hjNhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhj5NhML ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjNjjNjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct rvt_qp *sqp`` the sending QP **Description** 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.h](h)}(h**Parameters**h]j)}(hj Oh]h Parameters}(hj OhhhNhNubah}(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.chMP hjOubj)}(hhh]j)}(h&``struct rvt_qp *sqp`` the sending QP h](j)}(h``struct rvt_qp *sqp``h]j)}(hj(Oh]hstruct rvt_qp *sqp}(hj*OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Oubah}(h]h ]h"]h$]h&]uh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMM hj"Oubj )}(hhh]h)}(hthe sending QPh]hthe sending QP}(hjAOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=OhMM hj>Oubah}(h]h ]h"]h$]h&]uh1j hj"Oubeh}(h]h ]h"]h$]h&]uh1jhj=OhMM hjOubah}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j)}(hjcOh]h Description}(hjeOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaOubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMO hjOubh)}(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.}(hjyOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:64: ./drivers/infiniband/sw/rdmavt/qp.chMN hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrvt_mcast_find (C function)c.rvt_mcast_findhNtauh1hhjhhhNhNubj)}(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)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK_ubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOhhhjOhK_ubh)}(hhh]j:)}(h rvt_mcasth]h rvt_mcast}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjOmodnameN classnameNjWjZ)}j]]j`)}jSrvt_mcast_findsbc.rvt_mcast_findasbuh1hhjOhhhjOhK_ubj&)}(h h]h }(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOhhhjOhK_ubju)}(hjxh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjOhhhjOhK_ubj)}(hrvt_mcast_findh]j:)}(hjOh]hrvt_mcast_find}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhK_ubj)}(h5(struct rvt_ibport *ibp, union ib_gid *mgid, u16 lid)h](j)}(hstruct rvt_ibport *ibph](j)}(hjh]hstruct}(hj"PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj&)}(h h]h }(hj/PhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubh)}(hhh]j:)}(h rvt_ibporth]h rvt_ibport}(hj@PhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=Pubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjBPmodnameN classnameNjWjZ)}j]]jOc.rvt_mcast_findasbuh1hhjPubj&)}(h h]h }(hj^PhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubju)}(hjxh]h*}(hjlPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjPubj:)}(hibph]hibp}(hjyPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hunion ib_gid *mgidh](j)}(hjGh]hunion}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubh)}(hhh]j:)}(hib_gidh]hib_gid}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjPmodnameN classnameNjWjZ)}j]]jOc.rvt_mcast_findasbuh1hhjPubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubju)}(hjxh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjPubj:)}(hmgidh]hmgid}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hu16 lidh](h)}(hhh]j:)}(hu16h]hu16}(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjQmodnameN classnameNjWjZ)}j]]jOc.rvt_mcast_findasbuh1hhjPubj&)}(h h]h }(hj#QhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubj:)}(hlidh]hlid}(hj1QhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubeh}(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)}(h7search the global table for the given multicast GID/LIDh]h7search the global table for the given multicast GID/LID}(hj[QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK_hjXQhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjOhK_ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjsQjjsQjjjuh1jhhhjhNhNubj)}(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)}(hj}Qh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Qubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKchjwQubj)}(hhh](j)}(h1``struct rvt_ibport *ibp`` the IB port structure h](j)}(h``struct rvt_ibport *ibp``h]j)}(hjQh]hstruct rvt_ibport *ibp}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKbhjQubj )}(hhh]h)}(hthe IB port structureh]hthe IB port structure}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKbhjQubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjQhKbhjQubj)}(h7``union ib_gid *mgid`` the multicast GID to search for h](j)}(h``union ib_gid *mgid``h]j)}(hjQh]hunion ib_gid *mgid}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKchjQubj )}(hhh]h)}(hthe multicast GID to search forh]hthe multicast GID to search for}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKchjQubah}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]uh1jhjQhKchjQubj)}(hL``u16 lid`` the multicast LID portion of the multicast address (host order) h](j)}(h ``u16 lid``h]j)}(hjRh]hu16 lid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Rubah}(h]h ]h"]h$]h&]uh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKdhjRubj )}(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'RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#RhKdhj$Rubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhj#RhKdhjQubeh}(h]h ]h"]h$]h&]uh1jhjwQubh)}(h**NOTE**h]j)}(hjIRh]hNOTE}(hjKRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGRubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKfhjwQubh)}(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.}(hj_RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chK`hjwQubh)}(h**Description**h]j)}(hjpRh]h Description}(hjrRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnRubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKchjwQubh)}(hHThe caller is responsible for decrementing the reference count if found.h]hHThe caller is responsible for decrementing the reference count if found.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKehjwQubh)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKghjwQubh)}(hNULL if not found.h]hNULL if not found.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:67: ./drivers/infiniband/sw/rdmavt/mcast.chKhhjwQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]rdma-verbs-transport-libraryah ]h"]rdma verbs transport libraryah$]h&]uh1hhhhhhhhK/ubh)}(hhh](h)}(hUpper Layer Protocolsh]hUpper Layer Protocols}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhKGubh)}(hhh](h)}(h iSCSI Extensions for RDMA (iSER)h]h iSCSI Extensions for RDMA (iSER)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhKJubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_data_buf (C struct)c.iser_data_bufhNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_data_bufh]j)}(hstruct iser_data_bufh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjShhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKubj&)}(h h]h }(hjShhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjShhhjShKubj)}(h iser_data_bufh]j:)}(hjSh]h iser_data_buf}(hj&ShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"Subah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjRhhhjShKubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhjShKhjRhhubj)}(hhh]h)}(hiSER data bufferh]hiSER data buffer}(hjHShhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjEShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjShKubeh}(h]h ](jQstructeh"]h$]h&]jjQjj`Sjj`Sjjjuh1jhhhjRhNhNubj)}(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}(hjlShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhSubh:}(hjhShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjdSubh 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; };}hjSsbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjdSubh)}(h **Members**h]j)}(hjSh]hMembers}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjdSubj)}(hhh](j)}(h``sg`` pointer to the sg list h](j)}(h``sg``h]j)}(hjSh]hsg}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjSubj )}(hhh]h)}(hpointer to the sg listh]hpointer to the sg list}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjSubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjShKhjSubj)}(h ``size`` num entries of this sg h](j)}(h``size``h]j)}(hjSh]hsize}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjSubj )}(hhh]h)}(hnum entries of this sgh]hnum entries of this sg}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjTubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjThKhjSubj)}(h#``data_len`` total buffer byte len h](j)}(h ``data_len``h]j)}(hj)Th]hdata_len}(hj+ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Tubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj#Tubj )}(hhh]h)}(htotal buffer byte lenh]htotal buffer byte len}(hjBThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ThKhj?Tubah}(h]h ]h"]h$]h&]uh1j hj#Tubeh}(h]h ]h"]h$]h&]uh1jhj>ThKhjSubj)}(h$``dma_nents`` returned by dma_map_sgh](j)}(h ``dma_nents``h]j)}(hjbTh]h dma_nents}(hjdThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Tubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj\Tubj )}(hhh]h)}(hreturned by dma_map_sgh]hreturned by dma_map_sg}(hj{ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjxTubah}(h]h ]h"]h$]h&]uh1j hj\Tubeh}(h]h ]h"]h$]h&]uh1jhjwThKhjSubeh}(h]h ]h"]h$]h&]uh1jhjdSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_mem_reg (C struct)c.iser_mem_reghNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_mem_regh]j)}(hstruct iser_mem_regh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjThhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKubj&)}(h h]h }(hjThhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjThhhjThKubj)}(h iser_mem_regh]j:)}(hjTh]h iser_mem_reg}(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjThKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjThhhjThKubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjThKhjThhubj)}(hhh]h)}(hiSER memory registration infoh]hiSER memory registration info}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjThhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjUjjUjjjuh1jhhhjRhNhNubj)}(h**Definition**:: struct iser_mem_reg { struct ib_sge sge; u32 rkey; struct iser_fr_desc *desc; }; **Members** ``sge`` memory region sg element ``rkey`` memory region remote key ``desc`` pointer to fast registration contexth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj"UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubjS)}(h\struct iser_mem_reg { struct ib_sge sge; u32 rkey; struct iser_fr_desc *desc; };h]h\struct iser_mem_reg { struct ib_sge sge; u32 rkey; struct iser_fr_desc *desc; };}hj;Usbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubh)}(h **Members**h]j)}(hjLUh]hMembers}(hjNUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJUubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubj)}(hhh](j)}(h!``sge`` memory region sg element h](j)}(h``sge``h]j)}(hjkUh]hsge}(hjmUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiUubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjeUubj )}(hhh]h)}(hmemory region sg elementh]hmemory region sg element}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1j hjeUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjbUubj)}(h"``rkey`` memory region remote key h](j)}(h``rkey``h]j)}(hjUh]hrkey}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubj )}(hhh]h)}(hmemory region remote keyh]hmemory region remote key}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjbUubj)}(h-``desc`` pointer to fast registration contexth](j)}(h``desc``h]j)}(hjUh]hdesc}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubj )}(hhh]h)}(h$pointer to fast registration contexth]h$pointer to fast registration context}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjUubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjbUubeh}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_tx_desc (C struct)c.iser_tx_deschNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_tx_desch]j)}(hstruct iser_tx_desch](j)}(hjh]hstruct}(hj7VhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3Vhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKubj&)}(h h]h }(hjEVhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3VhhhjDVhKubj)}(h iser_tx_desch]j:)}(hj1Vh]h iser_tx_desc}(hjWVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3VhhhjDVhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj/VhhhjDVhKubah}(h]j*Vah ](jjeh"]h$]h&]jj)jhuh1jhjDVhKhj,Vhhubj)}(hhh]h)}(hiSER TX descriptorh]hiSER TX descriptor}(hjyVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjvVhhubah}(h]h ]h"]h$]h&]uh1jhj,VhhhjDVhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjVjjVjjjuh1jhhhjRhNhNubj)}(hX**Definition**:: struct iser_tx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; enum iser_desc_type type; u64 dma_addr; struct ib_sge tx_sg[2]; int num_sge; struct ib_cqe cqe; bool mapped; struct ib_reg_wr reg_wr; struct ib_send_wr send_wr; struct ib_send_wr inv_wr; }; **Members** ``iser_header`` iser header ``iscsi_header`` iscsi header ``type`` command/control/dataout ``dma_addr`` header buffer dma_address ``tx_sg`` sg[0] points to iser/iscsi headers sg[1] optionally points to either of immediate data unsolicited data-out or control ``num_sge`` number sges used on this TX task ``cqe`` completion handler ``mapped`` Is the task header mapped ``reg_wr`` registration WR ``send_wr`` send WR ``inv_wr`` invalidate WRh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh:}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjVubjS)}(hXstruct iser_tx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; enum iser_desc_type type; u64 dma_addr; struct ib_sge tx_sg[2]; int num_sge; struct ib_cqe cqe; bool mapped; struct ib_reg_wr reg_wr; struct ib_send_wr send_wr; struct ib_send_wr inv_wr; };h]hXstruct iser_tx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; enum iser_desc_type type; u64 dma_addr; struct ib_sge tx_sg[2]; int num_sge; struct ib_cqe cqe; bool mapped; struct ib_reg_wr reg_wr; struct ib_send_wr send_wr; struct ib_send_wr inv_wr; };}hjVsbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjVubh)}(h **Members**h]j)}(hjVh]hMembers}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjVubj)}(hhh](j)}(h``iser_header`` iser header h](j)}(h``iser_header``h]j)}(hjVh]h iser_header}(hjVhhhNhNubah}(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.hhKhjVubj )}(hhh]h)}(h iser headerh]h iser header}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjVubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjVubj)}(h``iscsi_header`` iscsi header h](j)}(h``iscsi_header``h]j)}(hjWh]h iscsi_header}(hj!WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjWubj )}(hhh]h)}(h iscsi headerh]h iscsi header}(hj8WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4WhKhj5Wubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhj4WhKhjVubj)}(h!``type`` command/control/dataout h](j)}(h``type``h]j)}(hjXWh]htype}(hjZWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVWubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjRWubj )}(hhh]h)}(hcommand/control/dataouth]hcommand/control/dataout}(hjqWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmWhKhjnWubah}(h]h ]h"]h$]h&]uh1j hjRWubeh}(h]h ]h"]h$]h&]uh1jhjmWhKhjVubj)}(h'``dma_addr`` header buffer dma_address h](j)}(h ``dma_addr``h]j)}(hjWh]hdma_addr}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjWubj )}(hhh]h)}(hheader buffer dma_addressh]hheader buffer dma_address}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjWubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjVubj)}(h``tx_sg`` sg[0] points to iser/iscsi headers sg[1] optionally points to either of immediate data unsolicited data-out or control h](j)}(h ``tx_sg``h]j)}(hjWh]htx_sg}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjWubj )}(hhh]h)}(hvsg[0] points to iser/iscsi headers sg[1] optionally points to either of immediate data unsolicited data-out or controlh]hvsg[0] points to iser/iscsi headers sg[1] optionally points to either of immediate data unsolicited data-out or control}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjWubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjVubj)}(h-``num_sge`` number sges used on this TX task h](j)}(h ``num_sge``h]j)}(hjXh]hnum_sge}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjWubj )}(hhh]h)}(h number sges used on this TX taskh]h number sges used on this TX task}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKhjXubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjVubj)}(h``cqe`` completion handler h](j)}(h``cqe``h]j)}(hj=Xh]hcqe}(hj?XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Xubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj7Xubj )}(hhh]h)}(hcompletion handlerh]hcompletion handler}(hjVXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRXhKhjSXubah}(h]h ]h"]h$]h&]uh1j hj7Xubeh}(h]h ]h"]h$]h&]uh1jhjRXhKhjVubj)}(h%``mapped`` Is the task header mapped h](j)}(h ``mapped``h]j)}(hjvXh]hmapped}(hjxXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtXubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjpXubj )}(hhh]h)}(hIs the task header mappedh]hIs the task header mapped}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKhjXubah}(h]h ]h"]h$]h&]uh1j hjpXubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjVubj)}(h``reg_wr`` registration WR h](j)}(h ``reg_wr``h]j)}(hjXh]hreg_wr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjXubj )}(hhh]h)}(hregistration WRh]hregistration WR}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKhjXubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjVubj)}(h``send_wr`` send WR h](j)}(h ``send_wr``h]j)}(hjXh]hsend_wr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjXubj )}(hhh]h)}(hsend WRh]hsend WR}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKhjXubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjVubj)}(h``inv_wr`` invalidate WRh](j)}(h ``inv_wr``h]j)}(hj!Yh]hinv_wr}(hj#YhhhNhNubah}(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)}(h invalidate WRh]h invalidate WR}(hj:YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhj7Yubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhj6YhKhjVubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_rx_desc (C struct)c.iser_rx_deschNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_rx_desch]j)}(hstruct iser_rx_desch](j)}(hjh]hstruct}(hj{YhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwYhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwYhhhjYhKubj)}(h iser_rx_desch]j:)}(hjuYh]h iser_rx_desc}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwYhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjsYhhhjYhKubah}(h]jnYah ](jjeh"]h$]h&]jj)jhuh1jhjYhKhjpYhhubj)}(hhh]h)}(hiSER RX descriptorh]hiSER RX descriptor}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhKhjYhhubah}(h]h ]h"]h$]h&]uh1jhjpYhhhjYhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjYjjYjjjuh1jhhhjRhNhNubj)}(hXg**Definition**:: struct iser_rx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; char data[ISER_RECV_DATA_SEG_LEN]; u64 dma_addr; struct ib_sge rx_sg; struct ib_cqe cqe; char pad[ISER_RX_PAD_SIZE]; }; **Members** ``iser_header`` iser header ``iscsi_header`` iscsi header ``data`` received data segment ``dma_addr`` receive buffer dma address ``rx_sg`` ib_sge of receive buffer ``cqe`` completion handler ``pad`` for sense data TODO: Modify to maximum sense length supportedh](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.hhMhjYubjS)}(hXstruct iser_rx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; char data[ISER_RECV_DATA_SEG_LEN]; u64 dma_addr; struct ib_sge rx_sg; struct ib_cqe cqe; char pad[ISER_RX_PAD_SIZE]; };h]hXstruct iser_rx_desc { struct iser_ctrl iser_header; struct iscsi_hdr iscsi_header; char data[ISER_RECV_DATA_SEG_LEN]; u64 dma_addr; struct ib_sge rx_sg; struct ib_cqe cqe; char pad[ISER_RX_PAD_SIZE]; };}hjYsbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjYubh)}(h **Members**h]j)}(hj Zh]hMembers}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Zubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjYubj)}(hhh](j)}(h``iser_header`` iser header h](j)}(h``iser_header``h]j)}(hj*Zh]h iser_header}(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.hhMhj$Zubj )}(hhh]h)}(h iser headerh]h iser header}(hjCZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?ZhMhj@Zubah}(h]h ]h"]h$]h&]uh1j hj$Zubeh}(h]h ]h"]h$]h&]uh1jhj?ZhMhj!Zubj)}(h``iscsi_header`` iscsi header h](j)}(h``iscsi_header``h]j)}(hjcZh]h iscsi_header}(hjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaZubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj]Zubj )}(hhh]h)}(h iscsi headerh]h iscsi header}(hj|ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxZhMhjyZubah}(h]h ]h"]h$]h&]uh1j hj]Zubeh}(h]h ]h"]h$]h&]uh1jhjxZhMhj!Zubj)}(h``data`` received data segment h](j)}(h``data``h]j)}(hjZh]hdata}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjZubj )}(hhh]h)}(hreceived data segmenth]hreceived data segment}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj!Zubj)}(h(``dma_addr`` receive buffer dma address h](j)}(h ``dma_addr``h]j)}(hjZh]hdma_addr}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjZubj )}(hhh]h)}(hreceive buffer dma addressh]hreceive buffer dma address}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj!Zubj)}(h#``rx_sg`` ib_sge of receive buffer h](j)}(h ``rx_sg``h]j)}(hj[h]hrx_sg}(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)}(hib_sge of receive bufferh]hib_sge of receive buffer}(hj'[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#[hMhj$[ubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhj#[hMhj!Zubj)}(h``cqe`` completion handler h](j)}(h``cqe``h]j)}(hjG[h]hcqe}(hjI[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE[ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjA[ubj )}(hhh]h)}(hcompletion handlerh]hcompletion handler}(hj`[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\[hMhj][ubah}(h]h ]h"]h$]h&]uh1j hjA[ubeh}(h]h ]h"]h$]h&]uh1jhj\[hMhj!Zubj)}(hE``pad`` for sense data TODO: Modify to maximum sense length supportedh](j)}(h``pad``h]j)}(hj[h]hpad}(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.hhMhjz[ubj )}(hhh]h)}(h=for sense data TODO: Modify to maximum sense length supportedh]h=for sense data TODO: Modify to maximum sense length supported}(hj[hhhNhNubah}(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&]uh1j hjz[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj!Zubeh}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_login_desc (C struct)c.iser_login_deschNtauh1hhjRhhhNhNubj)}(hhh](j)}(hiser_login_desch]j)}(hstruct iser_login_desch](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj[hhhj[hMubj)}(hiser_login_desch]j:)}(hj[h]hiser_login_desc}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubah}(h]h ](jjeh"]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)}(hiSER login descriptorh]hiSER login descriptor}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hMubeh}(h]h ](jQstructeh"]h$]h&]jjQjj4\jj4\jjjuh1jhhhjRhNhNubj)}(hX**Definition**:: struct iser_login_desc { void *req; void *rsp; u64 req_dma; u64 rsp_dma; struct ib_sge sge; struct ib_cqe cqe; }; **Members** ``req`` pointer to login request buffer ``rsp`` pointer to login response buffer ``req_dma`` DMA address of login request buffer ``rsp_dma`` DMA address of login response buffer ``sge`` IB sge for login post recv ``cqe`` completion handlerh](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.hhMhj8\ubjS)}(hstruct iser_login_desc { void *req; void *rsp; u64 req_dma; u64 rsp_dma; struct ib_sge sge; struct ib_cqe cqe; };h]hstruct iser_login_desc { void *req; void *rsp; u64 req_dma; u64 rsp_dma; struct ib_sge sge; struct ib_cqe cqe; };}hjY\sbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhj8\ubh)}(h **Members**h]j)}(hjj\h]hMembers}(hjl\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh\ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM#hj8\ubj)}(hhh](j)}(h(``req`` pointer to login request buffer h](j)}(h``req``h]j)}(hj\h]hreq}(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)}(hpointer to login request bufferh]hpointer to login request buffer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(h)``rsp`` pointer to login response buffer h](j)}(h``rsp``h]j)}(hj\h]hrsp}(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)}(h pointer to login response bufferh]h pointer to login response buffer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(h0``req_dma`` DMA address of login request buffer h](j)}(h ``req_dma``h]j)}(hj\h]hreq_dma}(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)}(h#DMA address of login request bufferh]h#DMA address of login request buffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj\ubj)}(h1``rsp_dma`` DMA address of login response buffer h](j)}(h ``rsp_dma``h]j)}(hj4]h]hrsp_dma}(hj6]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2]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$DMA address of login response bufferh]h$DMA address of login response buffer}(hjM]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI]hMhjJ]ubah}(h]h ]h"]h$]h&]uh1j hj.]ubeh}(h]h ]h"]h$]h&]uh1jhjI]hMhj\ubj)}(h#``sge`` IB sge for login post recv h](j)}(h``sge``h]j)}(hjm]h]hsge}(hjo]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk]ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMhjg]ubj )}(hhh]h)}(hIB sge for login post recvh]hIB sge for login post recv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1j hjg]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj\ubj)}(h``cqe`` completion handlerh](j)}(h``cqe``h]j)}(hj]h]hcqe}(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)}(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.hhMhj]ubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj8\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_device (C struct) c.iser_devicehNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_deviceh]j)}(hstruct iser_deviceh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM"ubj&)}(h h]h }(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]hhhj ^hM"ubj)}(h iser_deviceh]j:)}(hj]h]h iser_device}(hj ^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubah}(h]h ](jjeh"]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)}(hiSER device handleh]hiSER device handle}(hjB^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?^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj ^hM"ubeh}(h]h ](jQstructeh"]h$]h&]jjQjjZ^jjZ^jjjuh1jhhhjRhNhNubj)}(hX**Definition**:: struct iser_device { struct ib_device *ib_device; struct ib_pd *pd; struct ib_event_handler event_handler; struct list_head ig_list; int refcount; }; **Members** ``ib_device`` RDMA device ``pd`` Protection Domain for this device ``event_handler`` IB events handle routine ``ig_list`` entry in devices list ``refcount`` Reference counter, dominated by open iser connectionsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjf^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb^ubh:}(hjb^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM.hj^^ubjS)}(hstruct iser_device { struct ib_device *ib_device; struct ib_pd *pd; struct ib_event_handler event_handler; struct list_head ig_list; int refcount; };h]hstruct iser_device { struct ib_device *ib_device; struct ib_pd *pd; struct ib_event_handler event_handler; struct list_head ig_list; int refcount; };}hj^sbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM0hj^^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.hhM8hj^^ubj)}(hhh](j)}(h``ib_device`` RDMA device h](j)}(h ``ib_device``h]j)}(hj^h]h ib_device}(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.hhM-hj^ubj )}(hhh]h)}(h RDMA deviceh]h RDMA device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM-hj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM-hj^ubj)}(h)``pd`` Protection Domain for this device h](j)}(h``pd``h]j)}(hj^h]hpd}(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.hhM.hj^ubj )}(hhh]h)}(h!Protection Domain for this deviceh]h!Protection Domain for this device}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM.hj^ubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hM.hj^ubj)}(h+``event_handler`` IB events handle routine h](j)}(h``event_handler``h]j)}(hj!_h]h event_handler}(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.hhM/hj_ubj )}(hhh]h)}(hIB events handle routineh]hIB events handle routine}(hj:_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6_hM/hj7_ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj6_hM/hj^ubj)}(h"``ig_list`` entry in devices list h](j)}(h ``ig_list``h]j)}(hjZ_h]hig_list}(hj\_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX_ubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM0hjT_ubj )}(hhh]h)}(hentry in devices listh]hentry in devices list}(hjs_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo_hM0hjp_ubah}(h]h ]h"]h$]h&]uh1j hjT_ubeh}(h]h ]h"]h$]h&]uh1jhjo_hM0hj^ubj)}(hB``refcount`` Reference counter, dominated by open iser connectionsh](j)}(h ``refcount``h]j)}(hj_h]hrefcount}(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.hhM0hj_ubj )}(hhh]h)}(h5Reference counter, dominated by open iser connectionsh]h5Reference counter, dominated by open iser connections}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM1hj_ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM0hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_reg_resources (C struct)c.iser_reg_resourceshNtauh1hhjRhhhNhNubj)}(hhh](j)}(hiser_reg_resourcesh]j)}(hstruct iser_reg_resourcesh](j)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM7ubj&)}(h h]h }(hj_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_hhhj_hM7ubj)}(hiser_reg_resourcesh]j:)}(hj_h]hiser_reg_resources}(hj `hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj `ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhj_hM7ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj_hhhj_hM7ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhj_hM7hj_hhubj)}(hhh]h)}(hFast registration resourcesh]hFast registration resources}(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,`hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hM7ubeh}(h]h ](jQstructeh"]h$]h&]jjQjjG`jjG`jjjuh1jhhhjRhNhNubj)}(h**Definition**:: struct iser_reg_resources { struct ib_mr *mr; struct ib_mr *sig_mr; }; **Members** ``mr`` memory region ``sig_mr`` signature memory regionh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjS`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO`ubh:}(hjO`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhM?hjK`ubjS)}(hvstruct iser_reg_resources { struct ib_mr *mr; struct ib_mr *sig_mr; };h]hvstruct iser_reg_resources { struct ib_mr *mr; struct ib_mr *sig_mr; };}hjl`sbah}(h]h ]h"]h$]h&]jjuh1jShn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMAhjK`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.hhMFhjK`ubj)}(hhh](j)}(h``mr`` memory region h](j)}(h``mr``h]j)}(hj`h]hmr}(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.hhM>hj`ubj )}(hhh]h)}(h memory regionh]h memory region}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM>hj`ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM>hj`ubj)}(h"``sig_mr`` signature memory regionTh](j)}(h ``sig_mr``h]j)}(hj`h]hsig_mr}(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.hhM>hj`ubj )}(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&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM>hj`ubeh}(h]h ]h"]h$]h&]uh1jhjK`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_fr_desc (C struct)c.iser_fr_deschNtauh1hhjRhhhNhNubj)}(hhh](j)}(h iser_fr_desch]j)}(hstruct iser_fr_desch](j)}(hjh]hstruct}(hj/ahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ahhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:76: ./drivers/infiniband/ulp/iser/iscsi_iser.hhMEubj&)}(h h]h }(hj=ahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+ahhhjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+yhhhj=yhM7ubj)}(hiscsi_iser_task_xmith]j:)}(hiscsi_iser_task_xmith]hiscsi_iser_task_xmit}(hjPyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLyubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+yhhhj=yhM7ubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjlyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhyubj&)}(h h]h }(hjyyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhyubh)}(hhh]j:)}(h iscsi_taskh]h iscsi_task}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjymodnameN classnameNjWjZ)}j]]j`)}jSjRysbc.iscsi_iser_task_xmitasbuh1hhjhyubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhyubju)}(hjxh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhyubj:)}(htaskh]htask}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdyubah}(h]h ]h"]h$]h&]jjuh1jhj+yhhhj=yhM7ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj'yhhhj=yhM7ubah}(h]j"yah ](jjeh"]h$]h&]jj)jhuh1jhj=yhM7hj$yhhubj)}(hhh]h)}(hxmit iscsi-iser taskh]hxmit iscsi-iser task}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM7hjyhhubah}(h]h ]h"]h$]h&]uh1jhj$yhhhj=yhM7ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjzjjzjjjuh1jhhhjRhNhNubj)}(hu**Parameters** ``struct iscsi_task *task`` iscsi task **Return** zero on success or escalates $error on failure.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM;hj zubj)}(hhh]j)}(h'``struct iscsi_task *task`` iscsi task h](j)}(h``struct iscsi_task *task``h]j)}(hj0zh]hstruct iscsi_task *task}(hj2zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.zubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM8hj*zubj )}(hhh]h)}(h iscsi taskh]h iscsi task}(hjIzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEzhM8hjFzubah}(h]h ]h"]h$]h&]uh1j hj*zubeh}(h]h ]h"]h$]h&]uh1jhjEzhM8hj'zubah}(h]h ]h"]h$]h&]uh1jhj zubh)}(h **Return**h]j)}(hjkzh]hReturn}(hjmzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjizubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hj zubh)}(h/zero on success or escalates $error on failure.h]h/zero on success or escalates $error on failure.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hj zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$iscsi_iser_cleanup_task (C function)c.iscsi_iser_cleanup_taskhNtauh1hhjRhhhNhNubj)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMaubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzhhhjzhMaubj)}(hiscsi_iser_cleanup_taskh]j:)}(hiscsi_iser_cleanup_taskh]hiscsi_iser_cleanup_task}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjzhMaubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzubh)}(hhh]j:)}(h iscsi_taskh]h iscsi_task}(hj {hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj {modnameN classnameNjWjZ)}j]]j`)}jSjzsbc.iscsi_iser_cleanup_taskasbuh1hhjzubj&)}(h h]h }(hj+{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzubju)}(hjxh]h*}(hj9{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjzubj:)}(htaskh]htask}(hjF{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubah}(h]h ]h"]h$]h&]jjuh1jhjzhhhjzhMaubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjzhhhjzhMaubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhjzhMahjzhhubj)}(hhh]h)}(hcleanup an iscsi-iser taskh]hcleanup an iscsi-iser task}(hjp{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMahjm{hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMaubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj{jj{jjjuh1jhhhjRhNhNubj)}(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.chMehj{ubj)}(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.chMbhj{ubj )}(hhh]h)}(h iscsi taskh]h iscsi task}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMbhj{ubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMbhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h **Notes**h]j)}(hj{h]hNotes}(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.chMdhj{ubj)}(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.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMehj|ubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMehj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(iscsi_iser_check_protection (C function)c.iscsi_iser_check_protectionhNtauh1hhjRhhhNhNubj)}(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]j:)}(hu8h]hu8}(hj^|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj`|modnameN classnameNjWjZ)}j]]j`)}jSiscsi_iser_check_protectionsbc.iscsi_iser_check_protectionasbuh1hhjW|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 ]j2ah"]h$]h&]uh1j%hjW|hhhj|hMubj)}(hiscsi_iser_check_protectionh]j:)}(hj||h]hiscsi_iser_check_protection}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjW|hhhj|hMubj)}(h+(struct iscsi_task *task, sector_t *sector)h](j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(h iscsi_taskh]h iscsi_task}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj|modnameN classnameNjWjZ)}j]]jz|c.iscsi_iser_check_protectionasbuh1hhj|ubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(htaskh]htask}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(hsector_t *sectorh](h)}(hhh]j:)}(hsector_th]hsector_t}(hj }hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"}modnameN classnameNjWjZ)}j]]jz|c.iscsi_iser_check_protectionasbuh1hhj}ubj&)}(h h]h }(hj>}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}ubju)}(hjxh]h*}(hjL}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj}ubj:)}(hsectorh]hsector}(hjY}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubeh}(h]h ]h"]h$]h&]jjuh1jhjW|hhhj|hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjS|hhhj|hMubah}(h]jN|ah ](jjeh"]h$]h&]jj)jhuh1jhj|hMhjP|hhubj)}(hhh]h)}(h,check protection information status of task.h]h,check protection information status of 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&]uh1jhjP|hhhj|hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj}jj}jjjuh1jhhhjRhNhNubj)}(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)}(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)}(h iscsi taskh]h iscsi task}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubj)}(h6``sector_t *sector`` error sector if exsists (output) h](j)}(h``sector_t *sector``h]j)}(hj}h]hsector_t *sector}(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)}(h error sector if exsists (output)h]h error sector if exsists (output)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubh)}(h **Return**h]j)}(hj8~h]hReturn}(hj:~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6~ubah}(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}(hjN~hhhNhNubah}(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)}(hj_~h]h Description}(hja~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}ubjx)}(h'In addition the error sector is marked.h]h)}(hjw~h]h'In addition the error sector is marked.}(hjy~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhju~ubah}(h]h ]h"]h$]h&]uh1jxhj~hMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#iscsi_iser_conn_create (C function)c.iscsi_iser_conn_createhNtauh1hhjRhhhNhNubj)}(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)}(hjh]hstruct}(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.chMubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~hhhj~hMubh)}(hhh]j:)}(hiscsi_cls_connh]hiscsi_cls_conn}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj~modnameN classnameNjWjZ)}j]]j`)}jSiscsi_iser_conn_createsbc.iscsi_iser_conn_createasbuh1hhj~hhhj~hMubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~hhhj~hMubju)}(hjxh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj~hhhj~hMubj)}(hiscsi_iser_conn_createh]j:)}(hj~h]hiscsi_iser_conn_create}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhj~hMubj)}(h:(struct iscsi_cls_session *cls_session, uint32_t conn_idx)h](j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubh)}(hhh]j:)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjGmodnameN classnameNjWjZ)}j]]j~c.iscsi_iser_conn_createasbuh1hhj#ubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubju)}(hjxh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj#ubj:)}(h cls_sessionh]h cls_session}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t conn_idxh](h)}(hhh]j:)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j~c.iscsi_iser_conn_createasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hconn_idxh]hconn_idx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(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"create a new iscsi-iser connectionh]h"create a new 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~hhhj~hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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)}(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)}(hA``struct iscsi_cls_session *cls_session`` iscsi class connection h](j)}(h)``struct iscsi_cls_session *cls_session``h]j)}(hj1h]h%struct iscsi_cls_session *cls_session}(hj3hhhNhNubah}(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)}(hiscsi class connectionh]hiscsi class connection}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(hD``uint32_t conn_idx`` connection index within the session (for MCS) h](j)}(h``uint32_t conn_idx``h]j)}(hjjh]huint32_t conn_idx}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjdubj )}(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&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubeh}(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.chMhj ubh)}(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.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!iscsi_iser_conn_bind (C function)c.iscsi_iser_conn_bindhNtauh1hhjRhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hiscsi_iser_conn_bindh]j:)}(hiscsi_iser_conn_bindh]hiscsi_iser_conn_bind}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubh)}(hhh]j:)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjGmodnameN classnameNjWjZ)}j]]j`)}jSj sbc.iscsi_iser_conn_bindasbuh1hhj#ubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#ubju)}(hjxh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj#ubj:)}(h cls_sessionh]h cls_session}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jac.iscsi_iser_conn_bindasbuh1hhjubj&)}(h h]h }(hjՁhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcls_connh]hcls_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint64_t transport_ephh](h)}(hhh]j:)}(huint64_th]huint64_t}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jac.iscsi_iser_conn_bindasbuh1hhjubj&)}(h h]h }(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h transport_ephh]h transport_eph}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint is_leadingh](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj&)}(h h]h }(hj_hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjMubj:)}(h is_leadingh]h is_leading}(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]j݀ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhj߀hhubj)}(hhh]h)}(h)bind iscsi and iser connection structuresh]h)bind iscsi and iser connection structures}(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߀hhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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}(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)}(hiscsi class sessionh]hiscsi class session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj҂ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjςubj)}(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.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&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjςubj)}(h6``uint64_t transport_eph`` transport end-point handle h](j)}(h``uint64_t transport_eph``h]j)}(hjJh]huint64_t transport_eph}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjDubj )}(hhh]h)}(htransport end-point handleh]htransport end-point handle}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjςubj)}(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.chMhj}ubj )}(hhh]h)}(h8indicate if this is the session leading connection (MCS)h]h8indicate if this is the session leading connection (MCS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjςubeh}(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&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"iscsi_iser_conn_start (C function)c.iscsi_iser_conn_starthNtauh1hhjRhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hiscsi_iser_conn_starth]j:)}(hiscsi_iser_conn_starth]hiscsi_iser_conn_start}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct iscsi_cls_conn *cls_conn)h]j)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubj&)}(h h]h }(hjMhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj<ubh)}(hhh]j:)}(hiscsi_cls_connh]hiscsi_cls_conn}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj`modnameN classnameNjWjZ)}j]]j`)}jSj&sbc.iscsi_iser_conn_startasbuh1hhj<ubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj<ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj<ubj:)}(hcls_connh]hcls_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hstart iscsi-iser connectionh]hstart 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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjۄjjۄjjjuh1jhhhjRhNhNubj)}(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.chMhj߄ubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj߄ubh)}(h **Notes**h]j)}(hj?h]hNotes}(hjAhhhNhNubah}(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)}(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}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjXubj )}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjUubah}(h]h ]h"]h$]h&]uh1jhj߄ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!iscsi_iser_conn_stop (C function)c.iscsi_iser_conn_stophNtauh1hhjRhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hiscsi_iser_conn_stoph]j:)}(hiscsi_iser_conn_stoph]hiscsi_iser_conn_stop}(hjυhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj˅ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h+(struct iscsi_cls_conn *cls_conn, int flag)h](j)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiscsi_cls_connh]hiscsi_cls_conn}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSjхsbc.iscsi_iser_conn_stopasbuh1hhjubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcls_connh]hcls_conn}(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint flagh](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj&)}(h h]h }(hjkhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjYubj:)}(hflagh]hflag}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubeh}(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)}(hstop iscsi-iser connectionh]hstop 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&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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)}(hjņh]h Parameters}(hjdž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 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.chMhjކubj )}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjކubeh}(h]h ]h"]h$]h&]uh1jhjhMhjۆubj)}(h=``int flag`` indicate if recover or terminate (passed as is) h](j)}(h ``int flag``h]j)}(hjh]hint flag}(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/indicate if recover or terminate (passed as is)h]h/indicate if recover or terminate (passed as is)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjۆubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Notes**h]j)}(hjXh]hNotes}(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.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}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjqubj )}(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&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hjnubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'iscsi_iser_session_destroy (C function)c.iscsi_iser_session_destroyhNtauh1hhjRhhhNhNubj)}(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}(hjȇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjćhhhn/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 ]j2ah"]h$]h&]uh1j%hjćhhhjևhM-ubj)}(hiscsi_iser_session_destroyh]j:)}(hiscsi_iser_session_destroyh]hiscsi_iser_session_destroy}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjćhhhjևhM-ubj)}(h'(struct iscsi_cls_session *cls_session)h]j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj%modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iscsi_iser_session_destroyasbuh1hhjubj&)}(h h]h }(hjChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h cls_sessionh]h cls_session}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjćhhhjև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 ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(h~**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi class session **Description** Removes and free iscsi host.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.chM1hjubj)}(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}(hjˈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLjubah}(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)}(hiscsi class sessionh]hiscsi class session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjވhM.hj߈ubah}(h]h ]h"]h$]h&]uh1j hjÈubeh}(h]h ]h"]h$]h&]uh1jhjވhM.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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM0hjubh)}(hRemoves and free iscsi host.h]hRemoves and free iscsi host.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&iscsi_iser_session_create (C function)c.iscsi_iser_session_createhNtauh1hhjRhhhNhNubj)}(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)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjEhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMNubj&)}(h h]h }(hjWhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjEhhhjVhMNubh)}(hhh]j:)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjjmodnameN classnameNjWjZ)}j]]j`)}jSiscsi_iser_session_createsbc.iscsi_iser_session_createasbuh1hhjEhhhjVhMNubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjEhhhjVhMNubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjEhhhjVhMNubj)}(hiscsi_iser_session_createh]j:)}(hjh]hiscsi_iser_session_create}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjVhMNubj)}(hW(struct iscsi_endpoint *ep, uint16_t cmds_max, uint16_t qdepth, uint32_t initial_cmdsn)h](j)}(hstruct iscsi_endpoint *eph](j)}(hjh]hstruct}(hjÉhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjЉhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiscsi_endpointh]hiscsi_endpoint}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjމubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.iscsi_iser_session_createasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(heph]hep}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint16_t cmds_maxh](h)}(hhh]j:)}(huint16_th]huint16_t}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj8modnameN classnameNjWjZ)}j]]jc.iscsi_iser_session_createasbuh1hhj/ubj&)}(h h]h }(hjThhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj/ubj:)}(hcmds_maxh]hcmds_max}(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint16_t qdepthh](h)}(hhh]j:)}(huint16_th]huint16_t}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.iscsi_iser_session_createasbuh1hhjwubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubj:)}(hqdepthh]hqdepth}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t initial_cmdsnh](h)}(hhh]j:)}(huint32_th]huint32_t}(hjƊhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjÊubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjȊmodnameN classnameNjWjZ)}j]]jc.iscsi_iser_session_createasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h initial_cmdsnh]h initial_cmdsn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjVhMNubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjAhhhjVhMNubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhjVhMNhj>hhubj)}(hhh]h)}(hcreate an iscsi-iser sessionh]hcreate an 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.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjVhMNubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj4jj4jjjuh1jhhhjRhNhNubj)}(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)}(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.chMRhj8ubj)}(hhh](j)}(h5``struct iscsi_endpoint *ep`` iscsi end-point 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.chMOhjWubj )}(hhh]h)}(hiscsi end-point handleh]hiscsi end-point handle}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMOhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMOhjTubj)}(h7``uint16_t cmds_max`` maximum commands in this session h](j)}(h``uint16_t cmds_max``h]j)}(hjh]huint16_t cmds_max}(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.chMPhjubj )}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjTubj)}(h0``uint16_t qdepth`` session command queue depth h](j)}(h``uint16_t qdepth``h]j)}(hjϋh]huint16_t qdepth}(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.chMQhjɋubj )}(hhh]h)}(hsession command queue depthh]hsession command queue depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1j hjɋubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjTubj)}(h<``uint32_t initial_cmdsn`` initiator command sequnce number h](j)}(h``uint32_t initial_cmdsn``h]j)}(hjh]huint32_t initial_cmdsn}(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.chMRhjubj )}(hhh]h)}(h initiator command sequnce numberh]h initiator command sequnce number}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(h**Description**h]j)}(hjCh]h Description}(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.chMThj8ubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMShj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"iscsi_iser_ep_connect (C function)c.iscsi_iser_ep_connecthNtauh1hhjRhhhNhNubj)}(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)}(hjh]hstruct}(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 }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubh)}(hhh]j:)}(hiscsi_endpointh]hiscsi_endpoint}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSiscsi_iser_ep_connectsbc.iscsi_iser_ep_connectasbuh1hhjhhhjhM ubj&)}(h h]h }(hjȌhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubju)}(hjxh]h*}(hj֌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhM ubj)}(hiscsi_iser_ep_connecth]j:)}(hjŌh]hiscsi_iser_ep_connect}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hF(struct Scsi_Host *shost, struct sockaddr *dst_addr, int non_blocking)h](j)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h Scsi_Hosth]h Scsi_Host}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"modnameN classnameNjWjZ)}j]]jÌc.iscsi_iser_ep_connectasbuh1hhjubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hshosth]hshost}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct sockaddr *dst_addrh](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnubh)}(hhh]j:)}(hsockaddrh]hsockaddr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jÌc.iscsi_iser_ep_connectasbuh1hhjnubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjnubj:)}(hdst_addrh]hdst_addr}(hjɍhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint non_blockingh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjލubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjލubj:)}(h non_blockingh]h non_blocking}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjލubeh}(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 hj}hhubj)}(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 hj%hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj@jj@jjjuh1jhhhjRhNhNubj)}(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)}(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.chMhjDubj)}(hhh](j)}(h&``struct Scsi_Host *shost`` scsi_host h](j)}(h``struct Scsi_Host *shost``h]j)}(hjih]hstruct Scsi_Host *shost}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM hjcubj )}(hhh]h)}(h scsi_hosth]h scsi_host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM hjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj`ubj)}(h2``struct sockaddr *dst_addr`` destination address h](j)}(h``struct sockaddr *dst_addr``h]j)}(hjh]hstruct sockaddr *dst_addr}(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)}(hdestination addressh]hdestination address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj`ubj)}(h3``int non_blocking`` indicate if routine can block h](j)}(h``int non_blocking``h]j)}(hjێh]hint non_blocking}(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)}(hindicate if routine can blockh]hindicate if routine can block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjՎubeh}(h]h ]h"]h$]h&]uh1jhjhMhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubh)}(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.chMhjDubh)}(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.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjDubh)}(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.chMhjDubh)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiscsi_iser_ep_poll (C function)c.iscsi_iser_ep_pollhNtauh1hhjRhhhNhNubj)}(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 ]jah"]h$]h&]uh1jhj~hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~hhhjhM:ubj)}(hiscsi_iser_ep_pollh]j:)}(hiscsi_iser_ep_pollh]hiscsi_iser_ep_poll}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhM:ubj)}(h+(struct iscsi_endpoint *ep, int timeout_ms)h](j)}(hstruct iscsi_endpoint *eph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj̏hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hiscsi_endpointh]hiscsi_endpoint}(hjݏhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjڏubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjߏmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iscsi_iser_ep_pollasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(heph]hep}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint timeout_msh](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-ubj:)}(h timeout_msh]h timeout_ms}(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubeh}(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)}(h2poll for iser connection establishment to completeh]h2poll for iser connection establishment to complete}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM:hjthhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhM:ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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)}(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)}(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)}(hjѐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj͐hM;hjΐubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj͐hM;hjubj)}(h2``int timeout_ms`` polling timeout allowed in ms. h](j)}(h``int timeout_ms``h]j)}(hjh]hint timeout_ms}(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)}(hpolling timeout allowed in ms.h]hpolling timeout allowed in ms.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubeh}(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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM>hjubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chM=hjubh)}(h **Return**h]j)}(hjSh]hReturn}(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.chM@hjubh)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%iscsi_iser_ep_disconnect (C function)c.iscsi_iser_ep_disconnecthNtauh1hhjRhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhMaubj)}(hiscsi_iser_ep_disconnecth]j:)}(hiscsi_iser_ep_disconnecth]hiscsi_iser_ep_disconnect}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMaubj)}(h(struct iscsi_endpoint *ep)h]j)}(hstruct iscsi_endpoint *eph](j)}(hjh]hstruct}(hjՑhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjёubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjёubh)}(hhh]j:)}(hiscsi_endpointh]hiscsi_endpoint}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iscsi_iser_ep_disconnectasbuh1hhjёubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjёubju)}(hjxh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjёubj:)}(heph]hep}(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjёubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj͑ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMahjhhubj)}(hhh]h)}(h$Initiate connection teardown processh]h$Initiate connection teardown process}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMahjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMaubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjpjjpjjjuh1jhhhjRhNhNubj)}(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)}(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:79: ./drivers/infiniband/ulp/iser/iscsi_iser.chMehjtubj)}(hhh]j)}(h4``struct iscsi_endpoint *ep`` iscsi endpoint 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.chMbhjubj )}(hhh]h)}(hiscsi endpoint handleh]hiscsi endpoint handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(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.chMdhjtubh)}(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.chMchjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_send_command (C function)c.iser_send_commandhNtauh1hhjRhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMRubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj'hMRubj)}(hiser_send_commandh]j:)}(hiser_send_commandh]hiser_send_command}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hMRubj)}(h2(struct iscsi_conn *conn, struct iscsi_task *task)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRubh)}(hhh]j:)}(h iscsi_connh]h iscsi_conn}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjvmodnameN classnameNjWjZ)}j]]j`)}jSj<sbc.iser_send_commandasbuh1hhjRubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjRubj:)}(hconnh]hconn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubj)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjȓhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjēubj&)}(h h]h }(hjՓhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjēubh)}(hhh]j:)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.iser_send_commandasbuh1hhjēubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjēubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjēubj:)}(htaskh]htask}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjēubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj'hMRubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj'hMRubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMRhjhhubj)}(hhh]h)}(hsend command PDUh]hsend command PDU}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMRhjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hMRubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjajjajjjuh1jhhhjRhNhNubj)}(h**Parameters** ``struct iscsi_conn *conn`` link to matching iscsi connection ``struct iscsi_task *task`` SCSI command taskh](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMVhjeubj)}(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.chMShjubj )}(hhh]h)}(h!link to matching iscsi connectionh]h!link to matching iscsi connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h-``struct iscsi_task *task`` SCSI command taskh](j)}(h``struct iscsi_task *task``h]j)}(hjÔh]hstruct iscsi_task *task}(hjŔhhhNhNubah}(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.chMUhjubj )}(hhh]h)}(hSCSI command taskh]hSCSI command task}(hjܔhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMThjٔubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjؔhMUhjubeh}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_send_data_out (C function)c.iser_send_data_outhNtauh1hhjRhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj+hMubj)}(hiser_send_data_outh]j:)}(hiser_send_data_outh]hiser_send_data_out}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hMubj)}(hJ(struct iscsi_conn *conn, struct iscsi_task *task, struct iscsi_data *hdr)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubh)}(hhh]j:)}(h iscsi_connh]h iscsi_conn}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzmodnameN classnameNjWjZ)}j]]j`)}jSj@sbc.iser_send_data_outasbuh1hhjVubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjVubj:)}(hconnh]hconn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hj̕hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjȕubj&)}(h h]h }(hjٕhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjȕubh)}(hhh]j:)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.iser_send_data_outasbuh1hhjȕubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjȕubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjȕubj:)}(htaskh]htask}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjȕubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hstruct iscsi_data *hdrh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubh)}(hhh]j:)}(h iscsi_datah]h iscsi_data}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj\modnameN classnameNjWjZ)}j]]jc.iser_send_data_outasbuh1hhj8ubj&)}(h h]h }(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj8ubj:)}(hhdrh]hhdr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubeh}(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)}(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&]uh1jhjhhhj+hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjՖjjՖjjjuh1jhhhjRhNhNubj)}(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)}(hjߖh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݖubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjٖubj)}(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.chMhjubj )}(hhh]h)}(h!link to matching iscsi connectionh]h!link to matching iscsi connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``struct iscsi_task *task`` SCSI command task h](j)}(h``struct iscsi_task *task``h]j)}(hj7h]hstruct iscsi_task *task}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhj1ubj )}(hhh]h)}(hSCSI command taskh]hSCSI command task}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(hD``struct iscsi_data *hdr`` pointer to the LLD's iSCSI message headerh](j)}(h``struct iscsi_data *hdr``h]j)}(hjph]hstruct iscsi_data *hdr}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:89: ./drivers/infiniband/ulp/iser/iser_initiator.chMhjjubj )}(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&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjٖubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$iser_alloc_fastreg_pool (C function)c.iser_alloc_fastreg_poolhNtauh1hhjRhhhNhNubj)}(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}(hjʗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƗhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKubj&)}(h h]h }(hjٗhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƗhhhjؗhKubj)}(hiser_alloc_fastreg_poolh]j:)}(hiser_alloc_fastreg_poolh]hiser_alloc_fastreg_pool}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjƗhhhjؗhKubj)}(h?(struct ib_conn *ib_conn, unsigned cmds_max, unsigned int size)h](j)}(hstruct ib_conn *ib_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_connh]hib_conn}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj'modnameN classnameNjWjZ)}j]]j`)}jSjsbc.iser_alloc_fastreg_poolasbuh1hhjubj&)}(h h]h }(hjEhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hib_connh]hib_conn}(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned cmds_maxh](j)}(hunsignedh]hunsigned}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjuubj:)}(hcmds_maxh]hcmds_max}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hjʘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjؘhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjƗhhhjؗhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj—hhhjؗ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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjؗhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj(jj(jjjuh1jhhhjRhNhNubj)}(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)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhj,ubj)}(hhh](j)}(h6``struct ib_conn *ib_conn`` connection RDMA resources h](j)}(h``struct ib_conn *ib_conn``h]j)}(hjQh]hstruct ib_conn *ib_conn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjKubj )}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjHubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(h:``unsigned int size`` max number of pages per map request h](j)}(h``unsigned int size``h]j)}(hjÙh]hunsigned int size}(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.chKhjubj )}(hhh]h)}(h#max number of pages per map requesth]h#max number of pages per map request}(hjܙhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjؙhKhjٙubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjؙhKhjHubeh}(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:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhj,ubh)}(h&0 on success, or errno code on failureh]h&0 on success, or errno code 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.chKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#iser_free_fastreg_pool (C function)c.iser_free_fastreg_poolhNtauh1hhjRhhhNhNubj)}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKubj&)}(h h]h }(hjRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?hhhjQhKubj)}(hiser_free_fastreg_poolh]j:)}(hiser_free_fastreg_poolh]hiser_free_fastreg_pool}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjQhKubj)}(h(struct ib_conn *ib_conn)h]j)}(hstruct ib_conn *ib_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjfsbc.iser_free_fastreg_poolasbuh1hhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hj̚hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(hib_connh]hib_conn}(hjٚhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj;hhhjQhKubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjQhKhj8hhubj)}(hhh]h)}(h)releases the pool of fast_reg descriptorsh]h)releases the pool of fast_reg descriptors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(hG**Parameters** ``struct ib_conn *ib_conn`` connection RDMA resourcesh](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:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjubj)}(hhh]j)}(h5``struct ib_conn *ib_conn`` connection RDMA resourcesh](j)}(h``struct ib_conn *ib_conn``h]j)}(hjDh]hstruct ib_conn *ib_conn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhj>ubj )}(hhh]h)}(hconnection RDMA resourcesh]hconnection RDMA resources}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chKhjZubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"iser_free_ib_conn_res (C function)c.iser_free_ib_conn_reshNtauh1hhjRhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhMjubj)}(hiser_free_ib_conn_resh]j:)}(hiser_free_ib_conn_resh]hiser_free_ib_conn_res}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMjubj)}(h+(struct iser_conn *iser_conn, bool destroy)h](j)}(hstruct iser_conn *iser_connh](j)}(hjh]hstruct}(hjۛhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjכubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjכubh)}(hhh]j:)}(h iser_connh]h iser_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iser_free_ib_conn_resasbuh1hhjכubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjכubju)}(hjxh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjכubj:)}(h iser_connh]h iser_conn}(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjכubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjӛubj)}(h bool destroyh](j)}(hj*[h]hbool}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjIubj:)}(hdestroyh]hdestroy}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjӛubeh}(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 ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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)}(hjӜh]hstruct iser_conn *iser_conn}(hj՜hhhNhNubah}(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.chMkhj͜ubj )}(hhh]h)}(hiser connection structh]hiser connection struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1j hj͜ubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjʜubj)}(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)}(hj h]h bool destroy}(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.chMnhjubj )}(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).}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMlhj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj!hMnhjʜubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(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.}(hj^hhhNhNubah}(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&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_conn_release (C function)c.iser_conn_releasehNtauh1hhjRhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hiser_conn_releaseh]j:)}(hiser_conn_releaseh]hiser_conn_release}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iser_conn *iser_conn)h]j)}(hstruct iser_conn *iser_connh](j)}(hjh]hstruct}(hjʝhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjƝubj&)}(h h]h }(hjםhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƝubh)}(hhh]j:)}(h iser_connh]h iser_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iser_conn_releaseasbuh1hhjƝubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƝubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjƝubj:)}(h iser_connh]h iser_conn}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjƝubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjejjejjjuh1jhhhjRhNhNubj)}(hI**Parameters** ``struct iser_conn *iser_conn`` iSER connection contexth](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjiubj)}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ] kernelindenta<h"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h iser_conn_terminate (C function)c.iser_conn_terminatehNtauh1hhjRhhhNhNubj)}(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 ]jah"]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 ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hiser_conn_terminateh]j:)}(hiser_conn_terminateh]hiser_conn_terminate}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iser_conn *iser_conn)h]j)}(hstruct iser_conn *iser_connh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubj&)}(h h]h }(hj2hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj!ubh)}(hhh]j:)}(h iser_connh]h iser_conn}(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjEmodnameN classnameNjWjZ)}j]]j`)}jSj sbc.iser_conn_terminateasbuh1hhj!ubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj!ubju)}(hjxh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj!ubj:)}(h iser_connh]h iser_conn}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]j۞ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjݞhhubj)}(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&]uh1jhjݞhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(hx**Parameters** ``struct iser_conn *iser_conn`` iSER connection context **Description** Called with state mutex heldh](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:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjğubj)}(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}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjğubh)}(hCalled with state mutex heldh]hCalled with state mutex held}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMhjğubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hiser_post_send (C function)c.iser_post_sendhNtauh1hhjRhhhNhNubj)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:92: ./drivers/infiniband/ulp/iser/iser_verbs.chMSubj&)}(h h]h }(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjehhhjwhMSubj)}(hiser_post_sendh]j:)}(hiser_post_sendh]hiser_post_send}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjwhMSubj)}(h7(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc)h](j)}(hstruct ib_conn *ib_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_connh]hib_conn}(hjĠhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjƠmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.iser_post_sendasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hib_connh]hib_conn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iser_tx_desc *tx_desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h iser_tx_desch]h iser_tx_desc}(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj8modnameN classnameNjWjZ)}j]]jc.iser_post_sendasbuh1hhjubj&)}(h h]h }(hjThhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(htx_desch]htx_desc}(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjwhMSubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjahhhjwhMSubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhjwhMShj^hhubj)}(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&]uh1jhj^hhhjwhMSubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjRhNhNubj)}(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)}(hjڡh]hstruct ib_conn *ib_conn}(hjܡhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1j hjԡubeh}(h]h ]h"]h$]h&]uh1jhjhMThjѡ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}(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.chMUhj ubj )}(hhh]h)}(hiSER TX descriptorh]hiSER TX descriptor}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMUhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMUhjѡubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(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}(hjdhhhNhNubah}(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&]uh1jhjRhhhNhNubeh}(h]iscsi-extensions-for-rdma-iserah ]h"] iscsi extensions for rdma (iser)ah$]h&]uh1hhjRhhhhhKJubh)}(hhh](h)}(h#Omni-Path (OPA) Virtual NIC supporth]h#Omni-Path (OPA) Virtual NIC support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK`ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vnic_ctrl_port (C struct)c.opa_vnic_ctrl_porthNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_ctrl_porth]j)}(hstruct opa_vnic_ctrl_porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hopa_vnic_ctrl_porth]j:)}(hjh]hopa_vnic_ctrl_port}(hj̢hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjȢubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hOPA virtual NIC control porth]hOPA virtual NIC control port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_vnic_ctrl_port { struct ib_device *ibdev; struct opa_vnic_ctrl_ops *ops; u8 num_ports; }; **Members** ``ibdev`` pointer to ib device ``ops`` opa vnic control operations ``num_ports`` number of opa portsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj ubjS)}(h|struct opa_vnic_ctrl_port { struct ib_device *ibdev; struct opa_vnic_ctrl_ops *ops; u8 num_ports; };h]h|struct opa_vnic_ctrl_port { struct ib_device *ibdev; struct opa_vnic_ctrl_ops *ops; u8 num_ports; };}hj+sbah}(h]h ]h"]h$]h&]jjuh1jShy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj ubj)}(hhh](j)}(h``ibdev`` pointer to ib device h](j)}(h ``ibdev``h]j)}(hj[h]hibdev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjUubj )}(hhh]h)}(hpointer to ib deviceh]hpointer to ib device}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjqubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjRubj)}(h$``ops`` opa vnic control operations h](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hopa vnic control operationsh]hopa vnic control operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubj)}(h!``num_ports`` number of opa portsh](j)}(h ``num_ports``h]j)}(hjͣh]h num_ports}(hjϣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˣubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjǣubj )}(hhh]h)}(hnumber of opa portsh]hnumber of opa ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjǣubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vnic_adapter (C struct)c.opa_vnic_adapterhNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_adapterh]j)}(hstruct opa_vnic_adapterh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#hhhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#hhhj4hKubj)}(hopa_vnic_adapterh]j:)}(hj!h]hopa_vnic_adapter}(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj4hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj4hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj4hKhjhhubj)}(hhh]h)}(h&OPA VNIC netdev private data structureh]h&OPA VNIC netdev private data structure}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_vnic_adapter { struct net_device *netdev; struct ib_device *ibdev; struct opa_vnic_ctrl_port *cport; const struct net_device_ops *rn_ops; u8 port_num; u8 vport_num; struct mutex lock; struct __opa_veswport_info info; u8 vema_mac_addr[ETH_ALEN]; u32 umac_hash; u32 mmac_hash; struct hlist_head __rcu *mactbl; struct mutex mactbl_lock; spinlock_t stats_lock; u8 flow_tbl[OPA_VNIC_FLOW_TBL_SIZE]; unsigned long trap_timeout; u8 trap_count; }; **Members** ``netdev`` pointer to associated netdev ``ibdev`` ib device ``cport`` pointer to opa vnic control port ``rn_ops`` rdma netdev's net_device_ops ``port_num`` OPA port number ``vport_num`` vesw port number ``lock`` adapter lock ``info`` virtual ethernet switch port information ``vema_mac_addr`` mac address configured by vema ``umac_hash`` unicast maclist hash ``mmac_hash`` multicast maclist hash ``mactbl`` hash table of MAC entries ``mactbl_lock`` mac table lock ``stats_lock`` statistics lock ``flow_tbl`` flow to default port redirection table ``trap_timeout`` trap timeout ``trap_count`` no. of traps allowed within timeout periodh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubjS)}(hX)struct opa_vnic_adapter { struct net_device *netdev; struct ib_device *ibdev; struct opa_vnic_ctrl_port *cport; const struct net_device_ops *rn_ops; u8 port_num; u8 vport_num; struct mutex lock; struct __opa_veswport_info info; u8 vema_mac_addr[ETH_ALEN]; u32 umac_hash; u32 mmac_hash; struct hlist_head __rcu *mactbl; struct mutex mactbl_lock; spinlock_t stats_lock; u8 flow_tbl[OPA_VNIC_FLOW_TBL_SIZE]; unsigned long trap_timeout; u8 trap_count; };h]hX)struct opa_vnic_adapter { struct net_device *netdev; struct ib_device *ibdev; struct opa_vnic_ctrl_port *cport; const struct net_device_ops *rn_ops; u8 port_num; u8 vport_num; struct mutex lock; struct __opa_veswport_info info; u8 vema_mac_addr[ETH_ALEN]; u32 umac_hash; u32 mmac_hash; struct hlist_head __rcu *mactbl; struct mutex mactbl_lock; spinlock_t stats_lock; u8 flow_tbl[OPA_VNIC_FLOW_TBL_SIZE]; unsigned long trap_timeout; u8 trap_count; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj)}(hhh](j)}(h(``netdev`` pointer to associated netdev h](j)}(h ``netdev``h]j)}(hj֤h]hnetdev}(hjؤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԤubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjФubj )}(hhh]h)}(hpointer to associated netdevh]hpointer to associated netdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjФubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h``ibdev`` ib device h](j)}(h ``ibdev``h]j)}(hjh]hibdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj ubj )}(hhh]h)}(h ib deviceh]h ib device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj%ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjͤubj)}(h+``cport`` pointer to opa vnic control port h](j)}(h ``cport``h]j)}(hjHh]hcport}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjBubj )}(hhh]h)}(h pointer to opa vnic control porth]h pointer to opa vnic control port}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj^ubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKhjͤubj)}(h(``rn_ops`` rdma netdev's net_device_ops h](j)}(h ``rn_ops``h]j)}(hjh]hrn_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj{ubj )}(hhh]h)}(hrdma netdev's net_device_opsh]hrdma netdev’s net_device_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h``port_num`` OPA port number h](j)}(h ``port_num``h]j)}(hjh]hport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hOPA port numberh]hOPA port number}(hjӥhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϥhKhjХubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjϥhKhjͤubj)}(h``vport_num`` vesw port number h](j)}(h ``vport_num``h]j)}(hjh]h vport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hvesw port numberh]hvesw port number}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h``lock`` adapter lock h](j)}(h``lock``h]j)}(hj,h]hlock}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj&ubj )}(hhh]h)}(h adapter lockh]h adapter lock}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhjͤubj)}(h2``info`` virtual ethernet switch port information h](j)}(h``info``h]j)}(hjeh]hinfo}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj_ubj )}(hhh]h)}(h(virtual ethernet switch port informationh]h(virtual ethernet switch port information}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhjͤubj)}(h1``vema_mac_addr`` mac address configured by vema h](j)}(h``vema_mac_addr``h]j)}(hjh]h vema_mac_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hmac address configured by vemah]hmac address configured by vema}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h#``umac_hash`` unicast maclist hash h](j)}(h ``umac_hash``h]j)}(hjצh]h umac_hash}(hj٦hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjզubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjѦubj )}(hhh]h)}(hunicast maclist hashh]hunicast maclist hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjѦubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h%``mmac_hash`` multicast maclist hash h](j)}(h ``mmac_hash``h]j)}(hjh]h mmac_hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj ubj )}(hhh]h)}(hmulticast maclist hashh]hmulticast maclist hash}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKhj&ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjͤubj)}(h%``mactbl`` hash table of MAC entries h](j)}(h ``mactbl``h]j)}(hjIh]hmactbl}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjCubj )}(hhh]h)}(hhash table of MAC entriesh]hhash table of MAC entries}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKhj_ubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjͤubj)}(h``mactbl_lock`` mac table lock h](j)}(h``mactbl_lock``h]j)}(hjh]h mactbl_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj|ubj )}(hhh]h)}(hmac table lockh]hmac table lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj|ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjͤubj)}(h``stats_lock`` statistics lock h](j)}(h``stats_lock``h]j)}(hjh]h stats_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hstatistics lockh]hstatistics lock}(hjԧhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjЧhKhjѧubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjЧhKhjͤubj)}(h4``flow_tbl`` flow to default port redirection table h](j)}(h ``flow_tbl``h]j)}(hjh]hflow_tbl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(h&flow to default port redirection tableh]h&flow to default port redirection table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjͤubj)}(h``trap_timeout`` trap timeout h](j)}(h``trap_timeout``h]j)}(hj-h]h trap_timeout}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj'ubj )}(hhh]h)}(h trap timeouth]h trap timeout}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjCubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhjͤubj)}(h9``trap_count`` no. of traps allowed within timeout periodh](j)}(h``trap_count``h]j)}(hjfh]h trap_count}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj`ubj )}(hhh]h)}(h*no. of traps allowed within timeout periodh]h*no. of traps allowed within timeout period}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj|ubah}(h]h ]h"]h$]h&]uh1j hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hKhjͤubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h opa_vnic_mac_tbl_node (C struct)c.opa_vnic_mac_tbl_nodehNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_mac_tbl_nodeh]j)}(hstruct opa_vnic_mac_tbl_nodeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKubj&)}(h h]h }(hjΨhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjͨhKubj)}(hopa_vnic_mac_tbl_nodeh]j:)}(hjh]hopa_vnic_mac_tbl_node}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjܨubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjͨhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjͨhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjͨhKhjhhubj)}(hhh]h)}(hOPA VNIC mac table nodeh]hOPA VNIC mac table node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjͨhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX$**Definition**:: struct opa_vnic_mac_tbl_node { struct hlist_node hlist; u16 index; struct __opa_vnic_mactable_entry entry; }; **Members** ``hlist`` hash list handle ``index`` index of entry in the mac table ``entry`` entry in the tableh](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&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubjS)}(hstruct opa_vnic_mac_tbl_node { struct hlist_node hlist; u16 index; struct __opa_vnic_mactable_entry entry; };h]hstruct opa_vnic_mac_tbl_node { struct hlist_node hlist; u16 index; struct __opa_vnic_mactable_entry entry; };}hj?sbah}(h]h ]h"]h$]h&]jjuh1jShy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubh)}(h **Members**h]j)}(hjPh]hMembers}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj)}(hhh](j)}(h``hlist`` hash list handle h](j)}(h ``hlist``h]j)}(hjoh]hhlist}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjiubj )}(hhh]h)}(hhash list handleh]hhash list handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(h*``index`` index of entry in the mac table h](j)}(h ``index``h]j)}(hjh]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubj )}(hhh]h)}(hindex of entry in the mac tableh]hindex of entry in the mac table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(h``entry`` entry in the tableh](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߩubah}(h]h ]h"]h$]h&]uh1jhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhj۩ubj )}(hhh]h)}(hentry in the tableh]hentry in the table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhy/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:98: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.hhKhjubah}(h]h ]h"]h$]h&]uh1j hj۩ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vesw_info (C struct)c.opa_vesw_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(h opa_vesw_infoh]j)}(hstruct opa_vesw_infoh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7hhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7hhhjHhKubj)}(h opa_vesw_infoh]j:)}(hj5h]h opa_vesw_info}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjHhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj3hhhjHhKubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjHhKhj0hhubj)}(hhh]h)}(hOPA vnic switch informationh]hOPA vnic switch information}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKvhjzhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjHhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX,**Definition**:: struct opa_vesw_info { __be16 fabric_id; __be16 vesw_id; u8 rsvd0[6]; __be16 def_port_mask; u8 rsvd1[2]; __be16 pkey; u8 rsvd2[4]; __be32 u_mcast_dlid; __be32 u_ucast_dlid[OPA_VESW_MAX_NUM_DEF_PORT]; __be32 rc; u8 rsvd3[56]; __be16 eth_mtu; u8 rsvd4[2]; }; **Members** ``fabric_id`` 10-bit fabric id ``vesw_id`` 12-bit virtual ethernet switch id ``rsvd0`` reserved bytes ``def_port_mask`` bitmask of default ports ``rsvd1`` reserved bytes ``pkey`` partition key ``rsvd2`` reserved bytes ``u_mcast_dlid`` unknown multicast dlid ``u_ucast_dlid`` array of unknown unicast dlids ``rc`` routing control ``rsvd3`` reserved bytes ``eth_mtu`` Ethernet MTU ``rsvd4`` reserved bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKzhjubjS)}(hX4struct opa_vesw_info { __be16 fabric_id; __be16 vesw_id; u8 rsvd0[6]; __be16 def_port_mask; u8 rsvd1[2]; __be16 pkey; u8 rsvd2[4]; __be32 u_mcast_dlid; __be32 u_ucast_dlid[OPA_VESW_MAX_NUM_DEF_PORT]; __be32 rc; u8 rsvd3[56]; __be16 eth_mtu; u8 rsvd4[2]; };h]hX4struct opa_vesw_info { __be16 fabric_id; __be16 vesw_id; u8 rsvd0[6]; __be16 def_port_mask; u8 rsvd1[2]; __be16 pkey; u8 rsvd2[4]; __be32 u_mcast_dlid; __be32 u_ucast_dlid[OPA_VESW_MAX_NUM_DEF_PORT]; __be32 rc; u8 rsvd3[56]; __be16 eth_mtu; u8 rsvd4[2]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhK|hjubh)}(h **Members**h]j)}(hj˪h]hMembers}(hjͪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɪubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj)}(hhh](j)}(h``fabric_id`` 10-bit fabric id h](j)}(h ``fabric_id``h]j)}(hjh]h fabric_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKxhjubj )}(hhh]h)}(h10-bit fabric idh]h10-bit fabric id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjubj)}(h.``vesw_id`` 12-bit virtual ethernet switch id h](j)}(h ``vesw_id``h]j)}(hj#h]hvesw_id}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKyhjubj )}(hhh]h)}(h!12-bit virtual ethernet switch idh]h!12-bit virtual ethernet switch id}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKyhj9ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj8hKyhjubj)}(h``rsvd0`` reserved bytes h](j)}(h ``rsvd0``h]j)}(hj\h]hrsvd0}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKzhjVubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKzhjrubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKzhjubj)}(h+``def_port_mask`` bitmask of default ports h](j)}(h``def_port_mask``h]j)}(hjh]h def_port_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhK{hjubj )}(hhh]h)}(hbitmask of default portsh]hbitmask of default ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK{hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK{hjubj)}(h``rsvd1`` reserved bytes h](j)}(h ``rsvd1``h]j)}(hjΫh]hrsvd1}(hjЫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̫ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhK|hjȫubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK|hjubah}(h]h ]h"]h$]h&]uh1j hjȫubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjubj)}(h``pkey`` partition key h](j)}(h``pkey``h]j)}(hjh]hpkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhK}hjubj )}(hhh]h)}(h partition keyh]h partition key}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjubj)}(h``rsvd2`` reserved bytes h](j)}(h ``rsvd2``h]j)}(hj@h]hrsvd2}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhK~hj:ubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhK~hjVubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhK~hjubj)}(h(``u_mcast_dlid`` unknown multicast dlid h](j)}(h``u_mcast_dlid``h]j)}(hjyh]h u_mcast_dlid}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjsubj )}(hhh]h)}(hunknown multicast dlidh]hunknown multicast dlid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjsubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``u_ucast_dlid`` array of unknown unicast dlids h](j)}(h``u_ucast_dlid``h]j)}(hjh]h u_ucast_dlid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(harray of unknown unicast dlidsh]harray of unknown unicast dlids}(hjˬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǬhKhjȬubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjǬhKhjubj)}(h``rc`` routing control h](j)}(h``rc``h]j)}(hjh]hrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hrouting controlh]hrouting control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``rsvd3`` reserved bytes h](j)}(h ``rsvd3``h]j)}(hj$h]hrsvd3}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjubj)}(h``eth_mtu`` Ethernet MTU h](j)}(h ``eth_mtu``h]j)}(hj]h]heth_mtu}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjWubj )}(hhh]h)}(h Ethernet MTUh]h Ethernet MTU}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhKhjubj)}(h``rsvd4`` reserved bytesh](j)}(h ``rsvd4``h]j)}(hjh]hrsvd4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h opa_per_veswport_info (C struct)c.opa_per_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_per_veswport_infoh]j)}(hstruct opa_per_veswport_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hopa_per_veswport_infoh]j:)}(hjh]hopa_per_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hOPA vnic per port informationh]hOPA vnic per port information}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjJjjJjjjuh1jhhhjhNhNubj)}(hXR**Definition**:: struct opa_per_veswport_info { __be32 port_num; u8 eth_link_status; u8 rsvd0[3]; u8 base_mac_addr[ETH_ALEN]; u8 config_state; u8 oper_state; __be16 max_mac_tbl_ent; __be16 max_smac_ent; __be32 mac_tbl_digest; u8 rsvd1[4]; __be32 encap_slid; u8 pcp_to_sc_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_sc_mc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_mc[OPA_VNIC_MAX_NUM_PCP]; u8 non_vlan_sc_uc; u8 non_vlan_vl_uc; u8 non_vlan_sc_mc; u8 non_vlan_vl_mc; u8 rsvd2[48]; __be16 uc_macs_gen_count; __be16 mc_macs_gen_count; u8 rsvd3[8]; }; **Members** ``port_num`` port number ``eth_link_status`` current ethernet link state ``rsvd0`` reserved bytes ``base_mac_addr`` base mac address ``config_state`` configured port state ``oper_state`` operational port state ``max_mac_tbl_ent`` max number of mac table entries ``max_smac_ent`` max smac entries in mac table ``mac_tbl_digest`` mac table digest ``rsvd1`` reserved bytes ``encap_slid`` base slid for the port ``pcp_to_sc_uc`` sc by pcp index for unicast ethernet packets ``pcp_to_vl_uc`` vl by pcp index for unicast ethernet packets ``pcp_to_sc_mc`` sc by pcp index for multicast ethernet packets ``pcp_to_vl_mc`` vl by pcp index for multicast ethernet packets ``non_vlan_sc_uc`` sc for non-vlan unicast ethernet packets ``non_vlan_vl_uc`` vl for non-vlan unicast ethernet packets ``non_vlan_sc_mc`` sc for non-vlan multicast ethernet packets ``non_vlan_vl_mc`` vl for non-vlan multicast ethernet packets ``rsvd2`` reserved bytes ``uc_macs_gen_count`` generation count for unicast macs list ``mc_macs_gen_count`` generation count for multicast macs list ``rsvd3`` reserved bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh:}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjNubjS)}(hXstruct opa_per_veswport_info { __be32 port_num; u8 eth_link_status; u8 rsvd0[3]; u8 base_mac_addr[ETH_ALEN]; u8 config_state; u8 oper_state; __be16 max_mac_tbl_ent; __be16 max_smac_ent; __be32 mac_tbl_digest; u8 rsvd1[4]; __be32 encap_slid; u8 pcp_to_sc_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_sc_mc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_mc[OPA_VNIC_MAX_NUM_PCP]; u8 non_vlan_sc_uc; u8 non_vlan_vl_uc; u8 non_vlan_sc_mc; u8 non_vlan_vl_mc; u8 rsvd2[48]; __be16 uc_macs_gen_count; __be16 mc_macs_gen_count; u8 rsvd3[8]; };h]hXstruct opa_per_veswport_info { __be32 port_num; u8 eth_link_status; u8 rsvd0[3]; u8 base_mac_addr[ETH_ALEN]; u8 config_state; u8 oper_state; __be16 max_mac_tbl_ent; __be16 max_smac_ent; __be32 mac_tbl_digest; u8 rsvd1[4]; __be32 encap_slid; u8 pcp_to_sc_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_uc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_sc_mc[OPA_VNIC_MAX_NUM_PCP]; u8 pcp_to_vl_mc[OPA_VNIC_MAX_NUM_PCP]; u8 non_vlan_sc_uc; u8 non_vlan_vl_uc; u8 non_vlan_sc_mc; u8 non_vlan_vl_mc; u8 rsvd2[48]; __be16 uc_macs_gen_count; __be16 mc_macs_gen_count; u8 rsvd3[8]; };}hjosbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjNubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjNubj)}(hhh](j)}(h``port_num`` port number h](j)}(h ``port_num``h]j)}(hjh]hport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(h port numberh]h port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``eth_link_status`` current ethernet link state h](j)}(h``eth_link_status``h]j)}(hjخh]heth_link_status}(hjڮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֮ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjҮubj )}(hhh]h)}(hcurrent ethernet link stateh]hcurrent ethernet link state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjҮubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``rsvd0`` reserved bytes h](j)}(h ``rsvd0``h]j)}(hjh]hrsvd0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj ubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj'ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubj)}(h#``base_mac_addr`` base mac address h](j)}(h``base_mac_addr``h]j)}(hjJh]h base_mac_addr}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjDubj )}(hhh]h)}(hbase mac addressh]hbase mac address}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKhj`ubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjubj)}(h'``config_state`` configured port state h](j)}(h``config_state``h]j)}(hjh]h config_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj}ubj )}(hhh]h)}(hconfigured port stateh]hconfigured port state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h&``oper_state`` operational port state h](j)}(h``oper_state``h]j)}(hjh]h oper_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hoperational port stateh]hoperational port state}(hjկhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѯhKhjүubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjѯhKhjubj)}(h4``max_mac_tbl_ent`` max number of mac table entries h](j)}(h``max_mac_tbl_ent``h]j)}(hjh]hmax_mac_tbl_ent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hmax number of mac table entriesh]hmax number of mac table entries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h/``max_smac_ent`` max smac entries in mac table h](j)}(h``max_smac_ent``h]j)}(hj.h]h max_smac_ent}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj(ubj )}(hhh]h)}(hmax smac entries in mac tableh]hmax smac entries in mac table}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKhjDubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhjubj)}(h$``mac_tbl_digest`` mac table digest h](j)}(h``mac_tbl_digest``h]j)}(hjgh]hmac_tbl_digest}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjaubj )}(hhh]h)}(hmac table digesth]hmac table digest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKhjubj)}(h``rsvd1`` reserved bytes h](j)}(h ``rsvd1``h]j)}(hjh]hrsvd1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h&``encap_slid`` base slid for the port h](j)}(h``encap_slid``h]j)}(hjٰh]h encap_slid}(hj۰hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjװubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjӰubj )}(hhh]h)}(hbase slid for the porth]hbase slid for the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjӰubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``pcp_to_sc_uc`` sc by pcp index for unicast ethernet packets h](j)}(h``pcp_to_sc_uc``h]j)}(hjh]h pcp_to_sc_uc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj ubj )}(hhh]h)}(h,sc by pcp index for unicast ethernet packetsh]h,sc by pcp index for unicast ethernet packets}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhjubj)}(h>``pcp_to_vl_uc`` vl by pcp index for unicast ethernet packets h](j)}(h``pcp_to_vl_uc``h]j)}(hjKh]h pcp_to_vl_uc}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjEubj )}(hhh]h)}(h,vl by pcp index for unicast ethernet packetsh]h,vl by pcp index for unicast ethernet packets}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjubj)}(h@``pcp_to_sc_mc`` sc by pcp index for multicast ethernet packets h](j)}(h``pcp_to_sc_mc``h]j)}(hjh]h pcp_to_sc_mc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj~ubj )}(hhh]h)}(h.sc by pcp index for multicast ethernet packetsh]h.sc by pcp index for multicast ethernet packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h@``pcp_to_vl_mc`` vl by pcp index for multicast ethernet packets h](j)}(h``pcp_to_vl_mc``h]j)}(hjh]h pcp_to_vl_mc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(h.vl by pcp index for multicast ethernet packetsh]h.vl by pcp index for multicast ethernet packets}(hjֱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjұhKhjӱubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjұhKhjubj)}(h<``non_vlan_sc_uc`` sc for non-vlan unicast ethernet packets h](j)}(h``non_vlan_sc_uc``h]j)}(hjh]hnon_vlan_sc_uc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(h(sc for non-vlan unicast ethernet packetsh]h(sc for non-vlan unicast ethernet packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h<``non_vlan_vl_uc`` vl for non-vlan unicast ethernet packets h](j)}(h``non_vlan_vl_uc``h]j)}(hj/h]hnon_vlan_vl_uc}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj)ubj )}(hhh]h)}(h(vl for non-vlan unicast ethernet packetsh]h(vl for non-vlan unicast ethernet packets}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjubj)}(h>``non_vlan_sc_mc`` sc for non-vlan multicast ethernet packets h](j)}(h``non_vlan_sc_mc``h]j)}(hjhh]hnon_vlan_sc_mc}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjbubj )}(hhh]h)}(h*sc for non-vlan multicast ethernet packetsh]h*sc for non-vlan multicast ethernet packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKhj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhjubj)}(h>``non_vlan_vl_mc`` vl for non-vlan multicast ethernet packets h](j)}(h``non_vlan_vl_mc``h]j)}(hjh]hnon_vlan_vl_mc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(h*vl for non-vlan multicast ethernet packetsh]h*vl for non-vlan multicast ethernet packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``rsvd2`` reserved bytes h](j)}(h ``rsvd2``h]j)}(hjڲh]hrsvd2}(hjܲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjزubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjԲubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjԲubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h=``uc_macs_gen_count`` generation count for unicast macs list h](j)}(h``uc_macs_gen_count``h]j)}(hjh]huc_macs_gen_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj ubj )}(hhh]h)}(h&generation count for unicast macs listh]h&generation count for unicast macs list}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhjubj)}(h?``mc_macs_gen_count`` generation count for multicast macs list h](j)}(h``mc_macs_gen_count``h]j)}(hjLh]hmc_macs_gen_count}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjFubj )}(hhh]h)}(h(generation count for multicast macs listh]h(generation count for multicast macs list}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjubj)}(h``rsvd3`` reserved bytesh](j)}(h ``rsvd3``h]j)}(hjh]hrsvd3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_veswport_info (C struct)c.opa_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_infoh]j)}(hstruct opa_veswport_infoh](j)}(hjh]hstruct}(hj߳hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj۳hhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj۳hhhjhKubj)}(hopa_veswport_infoh]j:)}(hjٳh]hopa_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj۳hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj׳hhhjhKubah}(h]jҳah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjԳhhubj)}(hhh]h)}(hOPA vnic port informationh]hOPA vnic port information}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjԳhhhjhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjj9jj9jjjuh1jhhhjhNhNubj)}(h**Definition**:: struct opa_veswport_info { struct opa_vesw_info vesw; struct opa_per_veswport_info vport; }; **Members** ``vesw`` OPA vnic switch information ``vport`` OPA vnic per port informationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh:}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj=ubjS)}(hnstruct opa_veswport_info { struct opa_vesw_info vesw; struct opa_per_veswport_info vport; };h]hnstruct opa_veswport_info { struct opa_vesw_info vesw; struct opa_per_veswport_info vport; };}hj^sbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj=ubh)}(h **Members**h]j)}(hjoh]hMembers}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj=ubj)}(hhh](j)}(h%``vesw`` OPA vnic switch information h](j)}(h``vesw``h]j)}(hjh]hvesw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hOPA vnic switch informationh]hOPA vnic switch information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h'``vport`` OPA vnic per port informationh](j)}(h ``vport``h]j)}(hjǴh]hvport}(hjɴhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŴubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hOPA vnic per port informationh]hOPA vnic per port information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjݴubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjܴhKhjubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(h]On host, each of the virtual ethernet ports belongs to a different virtual ethernet switches.h]h]On host, each of the virtual ethernet ports belongs to a different virtual ethernet switches.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&opa_veswport_mactable_entry (C struct)c.opa_veswport_mactable_entryhNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_mactable_entryh]j)}(h"struct opa_veswport_mactable_entryh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKubj&)}(h h]h }(hjVhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDhhhjUhKubj)}(hopa_veswport_mactable_entryh]j:)}(hjBh]hopa_veswport_mactable_entry}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjUhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj@hhhjUhKubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1jhjUhKhj=hhubj)}(hhh]h)}(h$single entry in the forwarding tableh]h$single entry in the forwarding table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhjUhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_veswport_mactable_entry { u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; __be32 dlid_sd; }; **Members** ``mac_addr`` MAC address ``mac_addr_mask`` MAC address bit mask ``dlid_sd`` Matching DLID and side datah](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubjS)}(hvstruct opa_veswport_mactable_entry { u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; __be32 dlid_sd; };h]hvstruct opa_veswport_mactable_entry { u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; __be32 dlid_sd; };}hjǵsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubh)}(h **Members**h]j)}(hjصh]hMembers}(hjڵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjֵubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj)}(hhh](j)}(h``mac_addr`` MAC address h](j)}(h ``mac_addr``h]j)}(hjh]hmac_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(h MAC addressh]h MAC address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h'``mac_addr_mask`` MAC address bit mask h](j)}(h``mac_addr_mask``h]j)}(hj0h]h mac_addr_mask}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj*ubj )}(hhh]h)}(hMAC address bit maskh]hMAC address bit mask}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKhjubj)}(h'``dlid_sd`` Matching DLID and side datah](j)}(h ``dlid_sd``h]j)}(hjih]hdlid_sd}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjcubj )}(hhh]h)}(hMatching DLID and side datah]hMatching DLID and side data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhjubeh}(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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(hOn the host each virtual ethernet port will have a forwarding table. These tables are used to map a MAC to a LID and other data. For more details see struct opa_veswport_mactable_entries. This is the structure of a single mactable entryh]hOn the host each virtual ethernet port will have a forwarding table. These tables are used to map a MAC to a LID and other data. For more details see struct opa_veswport_mactable_entries. This is the structure of a single mactable entry}(hj¶hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h opa_veswport_mactable (C struct)c.opa_veswport_mactablehNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_mactableh]j)}(hstruct opa_veswport_mactableh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hopa_veswport_mactableh]j:)}(hjh]hopa_veswport_mactable}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jݶah ](jjeh"]h$]h&]jj)jhuh1jhjhKhj߶hhubj)}(hhh]h)}(hForwarding table arrayh]hForwarding table array}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj)hhubah}(h]h ]h"]h$]h&]uh1jhj߶hhhjhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjDjjDjjjuh1jhhhjhNhNubj)}(hXu**Definition**:: struct opa_veswport_mactable { __be16 offset; __be16 num_entries; __be32 mac_tbl_digest; struct opa_veswport_mactable_entry tbl_entries[]; }; **Members** ``offset`` mac table starting offset ``num_entries`` Number of entries to get or set ``mac_tbl_digest`` mac table digest ``tbl_entries`` Array of table entriesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjHubjS)}(hstruct opa_veswport_mactable { __be16 offset; __be16 num_entries; __be32 mac_tbl_digest; struct opa_veswport_mactable_entry tbl_entries[]; };h]hstruct opa_veswport_mactable { __be16 offset; __be16 num_entries; __be32 mac_tbl_digest; struct opa_veswport_mactable_entry tbl_entries[]; };}hjisbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjHubh)}(h **Members**h]j)}(hjzh]hMembers}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjHubj)}(hhh](j)}(h%``offset`` mac table starting offset h](j)}(h ``offset``h]j)}(hjh]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hmac table starting offseth]hmac table starting offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``num_entries`` Number of entries to get or set h](j)}(h``num_entries``h]j)}(hjҷh]h num_entries}(hjԷhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjзubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj̷ubj )}(hhh]h)}(hNumber of entries to get or seth]hNumber of entries to get or set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj̷ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``mac_tbl_digest`` mac table digest h](j)}(h``mac_tbl_digest``h]j)}(hj h]hmac_tbl_digest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjubj )}(hhh]h)}(hmac table digesth]hmac table digest}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h&``tbl_entries`` Array of table entriesh](j)}(h``tbl_entries``h]j)}(hjDh]h tbl_entries}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhj>ubj )}(hhh]h)}(hArray of table entriesh]hArray of table entries}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjZubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKhjubeh}(h]h ]h"]h$]h&]uh1jhjHubeh}(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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(hXThe EM sends down this structure in a MAD indicating the starting offset in the forwarding table that this entry is to be loaded into and the number of entries that that this MAD instance contains The mac_tbl_digest has been added to this MAD structure. It will be set by the EM and it will be used by the EM to check if there are any discrepancies with this value and the value maintained by the EM in the case of VNIC port being deleted or unloaded A new instantiation of a VNIC will always have a value of zero. This value is stored as part of the vnic adapter structure and will be accessed by the GET and SET routines for both the mactable entries and the veswport info.h]hXThe EM sends down this structure in a MAD indicating the starting offset in the forwarding table that this entry is to be loaded into and the number of entries that that this MAD instance contains The mac_tbl_digest has been added to this MAD structure. It will be set by the EM and it will be used by the EM to check if there are any discrepancies with this value and the value maintained by the EM in the case of VNIC port being deleted or unloaded A new instantiation of a VNIC will always have a value of zero. This value is stored as part of the vnic adapter structure and will be accessed by the GET and SET routines for both the mactable entries and the veswport info.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhKhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(opa_veswport_summary_counters (C struct)c.opa_veswport_summary_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_summary_countersh]j)}(h$struct opa_veswport_summary_countersh](j)}(hjh]hstruct}(hjŸhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM ubj&)}(h h]h }(hjӸhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjҸhM ubj)}(hopa_veswport_summary_countersh]j:)}(hjh]hopa_veswport_summary_counters}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]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)}(hsummary countersh]hsummary counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjҸhM ubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX **Definition**:: struct opa_veswport_summary_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 tx_packets; __be64 rx_packets; __be64 tx_bytes; __be64 rx_bytes; __be64 tx_unicast; __be64 tx_mcastbcast; __be64 tx_untagged; __be64 tx_vlan; __be64 tx_64_size; __be64 tx_65_127; __be64 tx_128_255; __be64 tx_256_511; __be64 tx_512_1023; __be64 tx_1024_1518; __be64 tx_1519_max; __be64 rx_unicast; __be64 rx_mcastbcast; __be64 rx_untagged; __be64 rx_vlan; __be64 rx_64_size; __be64 rx_65_127; __be64 rx_128_255; __be64 rx_256_511; __be64 rx_512_1023; __be64 rx_1024_1518; __be64 rx_1519_max; __be64 reserved[16]; }; **Members** ``vp_instance`` vport instance on the OPA port ``vesw_id`` virtual ethernet switch id ``veswport_num`` virtual ethernet switch port number ``tx_errors`` transmit errors ``rx_errors`` receive errors ``tx_packets`` transmit packets ``rx_packets`` receive packets ``tx_bytes`` transmit bytes ``rx_bytes`` receive bytes ``tx_unicast`` unicast packets transmitted ``tx_mcastbcast`` multicast/broadcast packets transmitted ``tx_untagged`` non-vlan packets transmitted ``tx_vlan`` vlan packets transmitted ``tx_64_size`` transmit packet length is 64 bytes ``tx_65_127`` transmit packet length is >=65 and < 127 bytes ``tx_128_255`` transmit packet length is >=128 and < 255 bytes ``tx_256_511`` transmit packet length is >=256 and < 511 bytes ``tx_512_1023`` transmit packet length is >=512 and < 1023 bytes ``tx_1024_1518`` transmit packet length is >=1024 and < 1518 bytes ``tx_1519_max`` transmit packet length >= 1519 bytes ``rx_unicast`` unicast packets received ``rx_mcastbcast`` multicast/broadcast packets received ``rx_untagged`` non-vlan packets received ``rx_vlan`` vlan packets received ``rx_64_size`` received packet length is 64 bytes ``rx_65_127`` received packet length is >=65 and < 127 bytes ``rx_128_255`` received packet length is >=128 and < 255 bytes ``rx_256_511`` received packet length is >=256 and < 511 bytes ``rx_512_1023`` received packet length is >=512 and < 1023 bytes ``rx_1024_1518`` received packet length is >=1024 and < 1518 bytes ``rx_1519_max`` received packet length >= 1519 bytes ``reserved`` reserved bytesh](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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj#ubjS)}(hX struct opa_veswport_summary_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 tx_packets; __be64 rx_packets; __be64 tx_bytes; __be64 rx_bytes; __be64 tx_unicast; __be64 tx_mcastbcast; __be64 tx_untagged; __be64 tx_vlan; __be64 tx_64_size; __be64 tx_65_127; __be64 tx_128_255; __be64 tx_256_511; __be64 tx_512_1023; __be64 tx_1024_1518; __be64 tx_1519_max; __be64 rx_unicast; __be64 rx_mcastbcast; __be64 rx_untagged; __be64 rx_vlan; __be64 rx_64_size; __be64 rx_65_127; __be64 rx_128_255; __be64 rx_256_511; __be64 rx_512_1023; __be64 rx_1024_1518; __be64 rx_1519_max; __be64 reserved[16]; };h]hX struct opa_veswport_summary_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 tx_packets; __be64 rx_packets; __be64 tx_bytes; __be64 rx_bytes; __be64 tx_unicast; __be64 tx_mcastbcast; __be64 tx_untagged; __be64 tx_vlan; __be64 tx_64_size; __be64 tx_65_127; __be64 tx_128_255; __be64 tx_256_511; __be64 tx_512_1023; __be64 tx_1024_1518; __be64 tx_1519_max; __be64 rx_unicast; __be64 rx_mcastbcast; __be64 rx_untagged; __be64 rx_vlan; __be64 rx_64_size; __be64 rx_65_127; __be64 rx_128_255; __be64 rx_256_511; __be64 rx_512_1023; __be64 rx_1024_1518; __be64 rx_1519_max; __be64 reserved[16]; };}hjDsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj#ubh)}(h **Members**h]j)}(hjUh]hMembers}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM;hj#ubj)}(hhh](j)}(h/``vp_instance`` vport instance on the OPA port h](j)}(h``vp_instance``h]j)}(hjth]h vp_instance}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjnubj )}(hhh]h)}(hvport instance on the OPA porth]hvport instance on the OPA port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h'``vesw_id`` virtual ethernet switch id h](j)}(h ``vesw_id``h]j)}(hjh]hvesw_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hvirtual ethernet switch idh]hvirtual ethernet switch id}(hjƹhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¹hMhjùubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj¹hMhjkubj)}(h5``veswport_num`` virtual ethernet switch port number h](j)}(h``veswport_num``h]j)}(hjh]h veswport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h#virtual ethernet switch port numberh]h#virtual ethernet switch port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h``tx_errors`` transmit errors h](j)}(h ``tx_errors``h]j)}(hjh]h tx_errors}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(htransmit errorsh]htransmit errors}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjkubj)}(h``rx_errors`` receive errors h](j)}(h ``rx_errors``h]j)}(hjXh]h rx_errors}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjRubj )}(hhh]h)}(hreceive errorsh]hreceive errors}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjkubj)}(h ``tx_packets`` transmit packets h](j)}(h``tx_packets``h]j)}(hjh]h tx_packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(htransmit packetsh]htransmit packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h``rx_packets`` receive packets h](j)}(h``rx_packets``h]j)}(hjʺh]h rx_packets}(hj̺hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȺubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjĺubj )}(hhh]h)}(hreceive packetsh]hreceive packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߺhMhjubah}(h]h ]h"]h$]h&]uh1j hjĺubeh}(h]h ]h"]h$]h&]uh1jhjߺhMhjkubj)}(h``tx_bytes`` transmit bytes h](j)}(h ``tx_bytes``h]j)}(hjh]htx_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(htransmit bytesh]htransmit bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h``rx_bytes`` receive bytes h](j)}(h ``rx_bytes``h]j)}(hj<h]hrx_bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj6ubj )}(hhh]h)}(h receive bytesh]h receive bytes}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjkubj)}(h+``tx_unicast`` unicast packets transmitted h](j)}(h``tx_unicast``h]j)}(hjuh]h tx_unicast}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjoubj )}(hhh]h)}(hunicast packets transmittedh]hunicast packets transmitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h:``tx_mcastbcast`` multicast/broadcast packets transmitted h](j)}(h``tx_mcastbcast``h]j)}(hjh]h tx_mcastbcast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h'multicast/broadcast packets transmittedh]h'multicast/broadcast packets transmitted}(hjǻhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjûhMhjĻubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjûhMhjkubj)}(h-``tx_untagged`` non-vlan packets transmitted h](j)}(h``tx_untagged``h]j)}(hjh]h tx_untagged}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hnon-vlan packets transmittedh]hnon-vlan packets transmitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h%``tx_vlan`` vlan packets transmitted h](j)}(h ``tx_vlan``h]j)}(hj h]htx_vlan}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM hjubj )}(hhh]h)}(hvlan packets transmittedh]hvlan packets transmitted}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjkubj)}(h2``tx_64_size`` transmit packet length is 64 bytes h](j)}(h``tx_64_size``h]j)}(hjYh]h tx_64_size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM!hjSubj )}(hhh]h)}(h"transmit packet length is 64 bytesh]h"transmit packet length is 64 bytes}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM!hjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM!hjkubj)}(h=``tx_65_127`` transmit packet length is >=65 and < 127 bytes h](j)}(h ``tx_65_127``h]j)}(hjh]h tx_65_127}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM"hjubj )}(hhh]h)}(h.transmit packet length is >=65 and < 127 bytesh]h.transmit packet length is >=65 and < 127 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjkubj)}(h?``tx_128_255`` transmit packet length is >=128 and < 255 bytes h](j)}(h``tx_128_255``h]j)}(hj˼h]h tx_128_255}(hjͼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɼubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM#hjżubj )}(hhh]h)}(h/transmit packet length is >=128 and < 255 bytesh]h/transmit packet length is >=128 and < 255 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1j hjżubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjkubj)}(h?``tx_256_511`` transmit packet length is >=256 and < 511 bytes h](j)}(h``tx_256_511``h]j)}(hjh]h tx_256_511}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM$hjubj )}(hhh]h)}(h/transmit packet length is >=256 and < 511 bytesh]h/transmit packet length is >=256 and < 511 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjkubj)}(hA``tx_512_1023`` transmit packet length is >=512 and < 1023 bytes h](j)}(h``tx_512_1023``h]j)}(hj=h]h tx_512_1023}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM%hj7ubj )}(hhh]h)}(h0transmit packet length is >=512 and < 1023 bytesh]h0transmit packet length is >=512 and < 1023 bytes}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM%hjSubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM%hjkubj)}(hC``tx_1024_1518`` transmit packet length is >=1024 and < 1518 bytes h](j)}(h``tx_1024_1518``h]j)}(hjvh]h tx_1024_1518}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM&hjpubj )}(hhh]h)}(h1transmit packet length is >=1024 and < 1518 bytesh]h1transmit packet length is >=1024 and < 1518 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1j hjpubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjkubj)}(h5``tx_1519_max`` transmit packet length >= 1519 bytes h](j)}(h``tx_1519_max``h]j)}(hjh]h tx_1519_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM'hjubj )}(hhh]h)}(h$transmit packet length >= 1519 bytesh]h$transmit packet length >= 1519 bytes}(hjȽhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĽhM'hjŽubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjĽhM'hjkubj)}(h(``rx_unicast`` unicast packets received h](j)}(h``rx_unicast``h]j)}(hjh]h rx_unicast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM(hjubj )}(hhh]h)}(hunicast packets receivedh]hunicast packets received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjkubj)}(h7``rx_mcastbcast`` multicast/broadcast packets received h](j)}(h``rx_mcastbcast``h]j)}(hj!h]h rx_mcastbcast}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM)hjubj )}(hhh]h)}(h$multicast/broadcast packets receivedh]h$multicast/broadcast packets received}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM)hj7ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj6hM)hjkubj)}(h*``rx_untagged`` non-vlan packets received h](j)}(h``rx_untagged``h]j)}(hjZh]h rx_untagged}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM*hjTubj )}(hhh]h)}(hnon-vlan packets receivedh]hnon-vlan packets received}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM*hjpubah}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ]h"]h$]h&]uh1jhjohM*hjkubj)}(h"``rx_vlan`` vlan packets received h](j)}(h ``rx_vlan``h]j)}(hjh]hrx_vlan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM+hjubj )}(hhh]h)}(hvlan packets receivedh]hvlan packets received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjkubj)}(h2``rx_64_size`` received packet length is 64 bytes h](j)}(h``rx_64_size``h]j)}(hj̾h]h rx_64_size}(hjξhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʾubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM,hjƾubj )}(hhh]h)}(h"received packet length is 64 bytesh]h"received packet length is 64 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1j hjƾubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjkubj)}(h=``rx_65_127`` received packet length is >=65 and < 127 bytes h](j)}(h ``rx_65_127``h]j)}(hjh]h rx_65_127}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM-hjubj )}(hhh]h)}(h.received packet length is >=65 and < 127 bytesh]h.received packet length is >=65 and < 127 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjkubj)}(h?``rx_128_255`` received packet length is >=128 and < 255 bytes h](j)}(h``rx_128_255``h]j)}(hj>h]h rx_128_255}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM.hj8ubj )}(hhh]h)}(h/received packet length is >=128 and < 255 bytesh]h/received packet length is >=128 and < 255 bytes}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM.hjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM.hjkubj)}(h?``rx_256_511`` received packet length is >=256 and < 511 bytes h](j)}(h``rx_256_511``h]j)}(hjwh]h rx_256_511}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM/hjqubj )}(hhh]h)}(h/received packet length is >=256 and < 511 bytesh]h/received packet length is >=256 and < 511 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjkubj)}(hA``rx_512_1023`` received packet length is >=512 and < 1023 bytes h](j)}(h``rx_512_1023``h]j)}(hjh]h rx_512_1023}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM0hjubj )}(hhh]h)}(h0received packet length is >=512 and < 1023 bytesh]h0received packet length is >=512 and < 1023 bytes}(hjɿhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjſhM0hjƿubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjſhM0hjkubj)}(hC``rx_1024_1518`` received packet length is >=1024 and < 1518 bytes h](j)}(h``rx_1024_1518``h]j)}(hjh]h rx_1024_1518}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM1hjubj )}(hhh]h)}(h1received packet length is >=1024 and < 1518 bytesh]h1received packet length is >=1024 and < 1518 bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjkubj)}(h5``rx_1519_max`` received packet length >= 1519 bytes h](j)}(h``rx_1519_max``h]j)}(hj"h]h rx_1519_max}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM2hjubj )}(hhh]h)}(h$received packet length >= 1519 bytesh]h$received packet length >= 1519 bytes}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM2hj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj7hM2hjkubj)}(h``reserved`` reserved bytesh](j)}(h ``reserved``h]j)}(hj[h]hreserved}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM2hjUubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM3hjqubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjphM2hjkubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM6hjhhubh)}(h7All the above are counters of corresponding conditions.h]h7All the above are counters of corresponding conditions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM3hjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&opa_veswport_error_counters (C struct)c.opa_veswport_error_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_error_countersh]j)}(h"struct opa_veswport_error_countersh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM8ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM8ubj)}(hopa_veswport_error_countersh]j:)}(hjh]hopa_veswport_error_counters}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM8ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhM8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM8hjhhubj)}(hhh]h)}(herror countersh]herror counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMbhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8ubeh}(h]h ](jQstructeh"]h$]h&]jjQjj6jj6jjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_veswport_error_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 rsvd0; __be64 tx_smac_filt; __be64 rsvd1; __be64 rsvd2; __be64 rsvd3; __be64 tx_dlid_zero; __be64 rsvd4; __be64 tx_logic; __be64 rsvd5; __be64 tx_drop_state; __be64 rx_bad_veswid; __be64 rsvd6; __be64 rx_runt; __be64 rx_oversize; __be64 rsvd7; __be64 rx_eth_down; __be64 rx_drop_state; __be64 rx_logic; __be64 rsvd8; __be64 rsvd9[16]; }; **Members** ``vp_instance`` vport instance on the OPA port ``vesw_id`` virtual ethernet switch id ``veswport_num`` virtual ethernet switch port number ``tx_errors`` transmit errors ``rx_errors`` receive errors ``rsvd0`` reserved bytes ``tx_smac_filt`` smac filter errors ``rsvd1`` reserved bytes ``rsvd2`` reserved bytes ``rsvd3`` reserved bytes ``tx_dlid_zero`` transmit packets with invalid dlid ``rsvd4`` reserved bytes ``tx_logic`` other transmit errors ``rsvd5`` reserved bytes ``tx_drop_state`` packet tansmission in non-forward port state ``rx_bad_veswid`` received packet with invalid vesw id ``rsvd6`` reserved bytes ``rx_runt`` received ethernet packet with length < 64 bytes ``rx_oversize`` received ethernet packet with length > MTU size ``rsvd7`` reserved bytes ``rx_eth_down`` received packets when interface is down ``rx_drop_state`` received packets in non-forwarding port state ``rx_logic`` other receive errors ``rsvd8`` reserved bytes ``rsvd9`` reserved bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh:}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMfhj:ubjS)}(hX>struct opa_veswport_error_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 rsvd0; __be64 tx_smac_filt; __be64 rsvd1; __be64 rsvd2; __be64 rsvd3; __be64 tx_dlid_zero; __be64 rsvd4; __be64 tx_logic; __be64 rsvd5; __be64 tx_drop_state; __be64 rx_bad_veswid; __be64 rsvd6; __be64 rx_runt; __be64 rx_oversize; __be64 rsvd7; __be64 rx_eth_down; __be64 rx_drop_state; __be64 rx_logic; __be64 rsvd8; __be64 rsvd9[16]; };h]hX>struct opa_veswport_error_counters { __be16 vp_instance; __be16 vesw_id; __be32 veswport_num; __be64 tx_errors; __be64 rx_errors; __be64 rsvd0; __be64 tx_smac_filt; __be64 rsvd1; __be64 rsvd2; __be64 rsvd3; __be64 tx_dlid_zero; __be64 rsvd4; __be64 tx_logic; __be64 rsvd5; __be64 tx_drop_state; __be64 rx_bad_veswid; __be64 rsvd6; __be64 rx_runt; __be64 rx_oversize; __be64 rsvd7; __be64 rx_eth_down; __be64 rx_drop_state; __be64 rx_logic; __be64 rsvd8; __be64 rsvd9[16]; };}hj[sbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhhj:ubh)}(h **Members**h]j)}(hjlh]hMembers}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj:ubj)}(hhh](j)}(h/``vp_instance`` vport instance on the OPA port h](j)}(h``vp_instance``h]j)}(hjh]h vp_instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMdhjubj )}(hhh]h)}(hvport instance on the OPA porth]hvport instance on the OPA port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h'``vesw_id`` virtual ethernet switch id h](j)}(h ``vesw_id``h]j)}(hjh]hvesw_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMehjubj )}(hhh]h)}(hvirtual ethernet switch idh]hvirtual ethernet switch id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(h5``veswport_num`` virtual ethernet switch port number h](j)}(h``veswport_num``h]j)}(hjh]h veswport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMfhjubj )}(hhh]h)}(h#virtual ethernet switch port numberh]h#virtual ethernet switch port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h``tx_errors`` transmit errors h](j)}(h ``tx_errors``h]j)}(hj6h]h tx_errors}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMghj0ubj )}(hhh]h)}(htransmit errorsh]htransmit errors}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMghjLubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMghjubj)}(h``rx_errors`` receive errors h](j)}(h ``rx_errors``h]j)}(hjoh]h rx_errors}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhhjiubj )}(hhh]h)}(hreceive errorsh]hreceive errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h``rsvd0`` reserved bytes h](j)}(h ``rsvd0``h]j)}(hjh]hrsvd0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMihjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(h$``tx_smac_filt`` smac filter errors h](j)}(h``tx_smac_filt``h]j)}(hjh]h tx_smac_filt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMjhjubj )}(hhh]h)}(hsmac filter errorsh]hsmac filter errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubj)}(h``rsvd1`` reserved bytes h](j)}(h ``rsvd1``h]j)}(hjh]hrsvd1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMkhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMkhj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMkhjubj)}(h``rsvd2`` reserved bytes h](j)}(h ``rsvd2``h]j)}(hjSh]hrsvd2}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMlhjMubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMlhjiubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMlhjubj)}(h``rsvd3`` reserved bytes h](j)}(h ``rsvd3``h]j)}(hjh]hrsvd3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMmhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(h4``tx_dlid_zero`` transmit packets with invalid dlid h](j)}(h``tx_dlid_zero``h]j)}(hjh]h tx_dlid_zero}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMnhjubj )}(hhh]h)}(h"transmit packets with invalid dlidh]h"transmit packets with invalid dlid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h``rsvd4`` reserved bytes h](j)}(h ``rsvd4``h]j)}(hjh]hrsvd4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMohjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubj)}(h#``tx_logic`` other transmit errors h](j)}(h ``tx_logic``h]j)}(hj7h]htx_logic}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMphj1ubj )}(hhh]h)}(hother transmit errorsh]hother transmit errors}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMphjMubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMphjubj)}(h``rsvd5`` reserved bytes h](j)}(h ``rsvd5``h]j)}(hjph]hrsvd5}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMqhjjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h?``tx_drop_state`` packet tansmission in non-forward port state h](j)}(h``tx_drop_state``h]j)}(hjh]h tx_drop_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMrhjubj )}(hhh]h)}(h,packet tansmission in non-forward port stateh]h,packet tansmission in non-forward port state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubj)}(h7``rx_bad_veswid`` received packet with invalid vesw id h](j)}(h``rx_bad_veswid``h]j)}(hjh]h rx_bad_veswid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMshjubj )}(hhh]h)}(h$received packet with invalid vesw idh]h$received packet with invalid vesw id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h``rsvd6`` reserved bytes h](j)}(h ``rsvd6``h]j)}(hjh]hrsvd6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMthjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMthj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj0hMthjubj)}(h<``rx_runt`` received ethernet packet with length < 64 bytes h](j)}(h ``rx_runt``h]j)}(hjTh]hrx_runt}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMuhjNubj )}(hhh]h)}(h/received ethernet packet with length < 64 bytesh]h/received ethernet packet with length < 64 bytes}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMuhjjubah}(h]h ]h"]h$]h&]uh1j hjNubeh}(h]h ]h"]h$]h&]uh1jhjihMuhjubj)}(h@``rx_oversize`` received ethernet packet with length > MTU size h](j)}(h``rx_oversize``h]j)}(hjh]h rx_oversize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMvhjubj )}(hhh]h)}(h/received ethernet packet with length > MTU sizeh]h/received ethernet packet with length > MTU size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubj)}(h``rsvd7`` reserved bytes h](j)}(h ``rsvd7``h]j)}(hjh]hrsvd7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMwhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h8``rx_eth_down`` received packets when interface is down h](j)}(h``rx_eth_down``h]j)}(hjh]h rx_eth_down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMxhjubj )}(hhh]h)}(h'received packets when interface is downh]h'received packets when interface is down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h@``rx_drop_state`` received packets in non-forwarding port state h](j)}(h``rx_drop_state``h]j)}(hj8h]h rx_drop_state}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMyhj2ubj )}(hhh]h)}(h-received packets in non-forwarding port stateh]h-received packets in non-forwarding port state}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMyhjNubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMyhjubj)}(h"``rx_logic`` other receive errors h](j)}(h ``rx_logic``h]j)}(hjqh]hrx_logic}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMzhjkubj )}(hhh]h)}(hother receive errorsh]hother receive errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(h``rsvd8`` reserved bytes h](j)}(h ``rsvd8``h]j)}(hjh]hrsvd8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM{hjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(h``rsvd9`` reserved bytesh](j)}(h ``rsvd9``h]j)}(hjh]hrsvd9}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM{hjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM|hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubeh}(h]h ]h"]h$]h&]uh1jhj:ubeh}(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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubh)}(h=All the above are counters of corresponding error conditions.h]h=All the above are counters of corresponding error conditions.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM|hjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_veswport_trap (C struct)c.opa_veswport_traphNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_traph]j)}(hstruct opa_veswport_traph](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`hhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`hhhjqhMubj)}(hopa_veswport_traph]j:)}(hj^h]hopa_veswport_trap}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjqhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj\hhhjqhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjqhMhjYhhubj)}(hhh]h)}(hTrap message sent to EM by VNICh]hTrap message sent to EM by VNIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjqhMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_veswport_trap { __be16 fabric_id; __be16 veswid; __be32 veswportnum; __be16 opaportnum; u8 veswportindex; u8 opcode; __be32 reserved; }; **Members** ``fabric_id`` 10 bit fabric id ``veswid`` 12 bit virtual ethernet switch id ``veswportnum`` logical port number on the Virtual switch ``opaportnum`` physical port num (redundant on host) ``veswportindex`` switch port index on opa port 0 based ``opcode`` operation ``reserved`` 32 bit for alignmenth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubjS)}(hstruct opa_veswport_trap { __be16 fabric_id; __be16 veswid; __be32 veswportnum; __be16 opaportnum; u8 veswportindex; u8 opcode; __be32 reserved; };h]hstruct opa_veswport_trap { __be16 fabric_id; __be16 veswid; __be32 veswportnum; __be16 opaportnum; u8 veswportindex; u8 opcode; __be32 reserved; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj)}(hhh](j)}(h``fabric_id`` 10 bit fabric id h](j)}(h ``fabric_id``h]j)}(hjh]h fabric_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj ubj )}(hhh]h)}(h10 bit fabric idh]h10 bit fabric id}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h-``veswid`` 12 bit virtual ethernet switch id h](j)}(h ``veswid``h]j)}(hjLh]hveswid}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjFubj )}(hhh]h)}(h!12 bit virtual ethernet switch idh]h!12 bit virtual ethernet switch id}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1j hjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(h:``veswportnum`` logical port number on the Virtual switch h](j)}(h``veswportnum``h]j)}(hjh]h veswportnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h)logical port number on the Virtual switchh]h)logical port number on the Virtual switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h5``opaportnum`` physical port num (redundant on host) h](j)}(h``opaportnum``h]j)}(hjh]h opaportnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h%physical port num (redundant on host)h]h%physical port num (redundant on host)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h8``veswportindex`` switch port index on opa port 0 based h](j)}(h``veswportindex``h]j)}(hjh]h veswportindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h%switch port index on opa port 0 basedh]h%switch port index on opa port 0 based}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``opcode`` operation h](j)}(h ``opcode``h]j)}(hj0h]hopcode}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj*ubj )}(hhh]h)}(h operationh]h operation}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj ubj)}(h!``reserved`` 32 bit for alignmenth](j)}(h ``reserved``h]j)}(hjih]hreserved}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjcubj )}(hhh]h)}(h32 bit for alignmenth]h32 bit for alignment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj 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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubh)}(hThe VNIC will send trap messages to the Ethernet manager to inform it about changes to the VNIC config, behaviour etc. This is the format of the trap payload.h]hThe VNIC will send trap messages to the Ethernet manager to inform it about changes to the VNIC config, behaviour etc. This is the format of the trap payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#opa_vnic_iface_mac_entry (C struct)c.opa_vnic_iface_mac_entryhNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_iface_mac_entryh]j)}(hstruct opa_vnic_iface_mac_entryh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hopa_vnic_iface_mac_entryh]j:)}(hjh]hopa_vnic_iface_mac_entry}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hsingle entry in the mac listh]hsingle entry in the mac list}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjDjjDjjjuh1jhhhjhNhNubj)}(h**Definition**:: struct opa_vnic_iface_mac_entry { u8 mac_addr[ETH_ALEN]; }; **Members** ``mac_addr`` MAC addressh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjHubjS)}(h?struct opa_vnic_iface_mac_entry { u8 mac_addr[ETH_ALEN]; };h]h?struct opa_vnic_iface_mac_entry { u8 mac_addr[ETH_ALEN]; };}hjisbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjHubh)}(h **Members**h]j)}(hjzh]hMembers}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjHubj)}(hhh]j)}(h``mac_addr`` MAC addressh](j)}(h ``mac_addr``h]j)}(hjh]hmac_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h MAC addressh]h MAC address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"opa_veswport_iface_macs (C struct)c.opa_veswport_iface_macshNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_veswport_iface_macsh]j)}(hstruct opa_veswport_iface_macsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hopa_veswport_iface_macsh]j:)}(hjh]hopa_veswport_iface_macs}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h$Msg to set globally administered MACh]h$Msg to set globally administered MAC}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjMjjMjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_veswport_iface_macs { __be16 start_idx; __be16 num_macs_in_msg; __be16 tot_macs_in_lst; __be16 gen_count; struct opa_vnic_iface_mac_entry entry[]; }; **Members** ``start_idx`` position of first entry (0 based) ``num_macs_in_msg`` number of MACs in this message ``tot_macs_in_lst`` The total number of MACs the agent has ``gen_count`` gen_count to indicate change ``entry`` The mac list entryh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjQubjS)}(hstruct opa_veswport_iface_macs { __be16 start_idx; __be16 num_macs_in_msg; __be16 tot_macs_in_lst; __be16 gen_count; struct opa_vnic_iface_mac_entry entry[]; };h]hstruct opa_veswport_iface_macs { __be16 start_idx; __be16 num_macs_in_msg; __be16 tot_macs_in_lst; __be16 gen_count; struct opa_vnic_iface_mac_entry entry[]; };}hjrsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjQubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjQubj)}(hhh](j)}(h0``start_idx`` position of first entry (0 based) h](j)}(h ``start_idx``h]j)}(hjh]h start_idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h!position of first entry (0 based)h]h!position of first entry (0 based)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``num_macs_in_msg`` number of MACs in this message h](j)}(h``num_macs_in_msg``h]j)}(hjh]hnum_macs_in_msg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hnumber of MACs in this messageh]hnumber of MACs in this message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``tot_macs_in_lst`` The total number of MACs the agent has h](j)}(h``tot_macs_in_lst``h]j)}(hjh]htot_macs_in_lst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h&The total number of MACs the agent hash]h&The total number of MACs the agent has}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(h+``gen_count`` gen_count to indicate change h](j)}(h ``gen_count``h]j)}(hjMh]h gen_count}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjGubj )}(hhh]h)}(hgen_count to indicate changeh]hgen_count to indicate change}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1j hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjubj)}(h``entry`` The mac list entryh](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hThe mac list entryh]hThe mac list entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(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&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubh)}(h{Same attribute IDS and attribute modifiers as in locally administered addresses used to set globally administered addressesh]h{Same attribute IDS and attribute modifiers as in locally administered addresses used to set globally administered addresses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vnic_vema_mad (C struct)c.opa_vnic_vema_madhNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_vema_madh]j)}(hstruct opa_vnic_vema_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hopa_vnic_vema_madh]j:)}(hjh]hopa_vnic_vema_mad}(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hGeneric VEMA MADh]hGeneric VEMA MAD}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjajjajjjuh1jhhhjhNhNubj)}(hXw**Definition**:: struct opa_vnic_vema_mad { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; u8 data[OPA_VNIC_EMA_DATA]; }; **Members** ``mad_hdr`` Generic MAD header ``rmpp_hdr`` RMPP header for vendor specific MADs ``reserved`` reserved bytes ``oui`` Unique org identifier ``data`` MAD datah](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh:}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjeubjS)}(hstruct opa_vnic_vema_mad { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; u8 data[OPA_VNIC_EMA_DATA]; };h]hstruct opa_vnic_vema_mad { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; u8 data[OPA_VNIC_EMA_DATA]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjeubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjeubj)}(hhh](j)}(h``mad_hdr`` Generic MAD header h](j)}(h ``mad_hdr``h]j)}(hjh]hmad_hdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hGeneric MAD headerh]hGeneric MAD header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``rmpp_hdr`` RMPP header for vendor specific MADs h](j)}(h ``rmpp_hdr``h]j)}(hjh]hrmpp_hdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h$RMPP header for vendor specific MADsh]h$RMPP header for vendor specific MADs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``reserved`` reserved bytes h](j)}(h ``reserved``h]j)}(hj(h]hreserved}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj"ubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h``oui`` Unique org identifier h](j)}(h``oui``h]j)}(hjah]houi}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj[ubj )}(hhh]h)}(hUnique org identifierh]hUnique org identifier}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h``data`` MAD datah](j)}(h``data``h]j)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hMAD datah]hMAD data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vnic_notice_attr (C struct)c.opa_vnic_notice_attrhNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_notice_attrh]j)}(hstruct opa_vnic_notice_attrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hopa_vnic_notice_attrh]j:)}(hjh]hopa_vnic_notice_attr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hGeneric Notice MADh]hGeneric Notice MAD}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjNjjNjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_vnic_notice_attr { u8 gen_type; u8 oui_1; u8 oui_2; u8 oui_3; __be16 trap_num; __be16 toggle_count; __be32 issuer_lid; __be32 reserved; u8 issuer_gid[16]; u8 raw_data[64]; }; **Members** ``gen_type`` Generic/Specific bit and type of notice ``oui_1`` Vendor ID byte 1 ``oui_2`` Vendor ID byte 2 ``oui_3`` Vendor ID byte 3 ``trap_num`` Trap number ``toggle_count`` Notice toggle bit and count value ``issuer_lid`` Trap issuer's lid ``reserved`` reserved bytes ``issuer_gid`` Issuer GID (only if Report method) ``raw_data`` Trap message bodyh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh:}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjRubjS)}(hstruct opa_vnic_notice_attr { u8 gen_type; u8 oui_1; u8 oui_2; u8 oui_3; __be16 trap_num; __be16 toggle_count; __be32 issuer_lid; __be32 reserved; u8 issuer_gid[16]; u8 raw_data[64]; };h]hstruct opa_vnic_notice_attr { u8 gen_type; u8 oui_1; u8 oui_2; u8 oui_3; __be16 trap_num; __be16 toggle_count; __be32 issuer_lid; __be32 reserved; u8 issuer_gid[16]; u8 raw_data[64]; };}hjssbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjRubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjRubj)}(hhh](j)}(h5``gen_type`` Generic/Specific bit and type of notice h](j)}(h ``gen_type``h]j)}(hjh]hgen_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h'Generic/Specific bit and type of noticeh]h'Generic/Specific bit and type of notice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``oui_1`` Vendor ID byte 1 h](j)}(h ``oui_1``h]j)}(hjh]houi_1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hVendor ID byte 1h]hVendor ID byte 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``oui_2`` Vendor ID byte 2 h](j)}(h ``oui_2``h]j)}(hjh]houi_2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hVendor ID byte 2h]hVendor ID byte 2}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjubj)}(h``oui_3`` Vendor ID byte 3 h](j)}(h ``oui_3``h]j)}(hjNh]houi_3}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjHubj )}(hhh]h)}(hVendor ID byte 3h]hVendor ID byte 3}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjubj)}(h``trap_num`` Trap number h](j)}(h ``trap_num``h]j)}(hjh]htrap_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h Trap numberh]h Trap number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``toggle_count`` Notice toggle bit and count value h](j)}(h``toggle_count``h]j)}(hjh]h toggle_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h!Notice toggle bit and count valueh]h!Notice toggle bit and count value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``issuer_lid`` Trap issuer's lid h](j)}(h``issuer_lid``h]j)}(hjh]h issuer_lid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hTrap issuer's lidh]hTrap issuer’s lid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``reserved`` reserved bytes h](j)}(h ``reserved``h]j)}(hj2h]hreserved}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj,ubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h2``issuer_gid`` Issuer GID (only if Report method) h](j)}(h``issuer_gid``h]j)}(hjkh]h issuer_gid}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjeubj )}(hhh]h)}(h"Issuer GID (only if Report method)h]h"Issuer GID (only if Report method)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``raw_data`` Trap message bodyh](j)}(h ``raw_data``h]j)}(hjh]hraw_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hTrap message bodyh]hTrap message body}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!opa_vnic_vema_mad_trap (C struct)c.opa_vnic_vema_mad_traphNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_vema_mad_traph]j)}(hstruct opa_vnic_vema_mad_traph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj hMubj)}(hopa_vnic_vema_mad_traph]j:)}(hjh]hopa_vnic_vema_mad_trap}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(hGeneric VEMA MAD Traph]hGeneric VEMA MAD Trap}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjXjjXjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_vnic_vema_mad_trap { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; struct opa_vnic_notice_attr notice; }; **Members** ``mad_hdr`` Generic MAD header ``rmpp_hdr`` RMPP header for vendor specific MADs ``reserved`` reserved bytes ``oui`` Unique org identifier ``notice`` Notice structureh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh:}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj\ubjS)}(hstruct opa_vnic_vema_mad_trap { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; struct opa_vnic_notice_attr notice; };h]hstruct opa_vnic_vema_mad_trap { struct ib_mad_hdr mad_hdr; struct ib_rmpp_hdr rmpp_hdr; u8 reserved; u8 oui[3]; struct opa_vnic_notice_attr notice; };}hj}sbah}(h]h ]h"]h$]h&]jjuh1jShw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhj\ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhM hj\ubj)}(hhh](j)}(h``mad_hdr`` Generic MAD header h](j)}(h ``mad_hdr``h]j)}(hjh]hmad_hdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hGeneric MAD headerh]hGeneric MAD header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``rmpp_hdr`` RMPP header for vendor specific MADs h](j)}(h ``rmpp_hdr``h]j)}(hjh]hrmpp_hdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(h$RMPP header for vendor specific MADsh]h$RMPP header for vendor specific MADs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``reserved`` reserved bytes h](j)}(h ``reserved``h]j)}(hjh]hreserved}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hreserved bytesh]hreserved bytes}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h``oui`` Unique org identifier h](j)}(h``oui``h]j)}(hjXh]houi}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjRubj )}(hhh]h)}(hUnique org identifierh]hUnique org identifier}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1j hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(h``notice`` Notice structureh](j)}(h ``notice``h]j)}(hjh]hnotice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubj )}(hhh]h)}(hNotice structureh]hNotice structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhw/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:101: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'opa_vnic_vema_report_event (C function)c.opa_vnic_vema_report_eventhNtauh1hhjhhhNhNubj)}(hhh](j)}(hLvoid opa_vnic_vema_report_event (struct opa_vnic_adapter *adapter, u8 event)h]j)}(hKvoid opa_vnic_vema_report_event(struct opa_vnic_adapter *adapter, u8 event)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK7ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhK7ubj)}(hopa_vnic_vema_report_eventh]j:)}(hopa_vnic_vema_report_eventh]hopa_vnic_vema_report_event}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK7ubj)}(h,(struct opa_vnic_adapter *adapter, u8 event)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj&)}(h h]h }(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjHmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.opa_vnic_vema_report_eventasbuh1hhj$ubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$ubju)}(hjxh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj$ubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu8 eventh](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jbc.opa_vnic_vema_report_eventasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(heventh]hevent}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK7ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhK7ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK7hjhhubj)}(hhh]h)}(h'sent trap to report the specified eventh]h'sent trap to report the specified event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK7ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj jj jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``u8 event`` event to be reported **Description** This function calls vema api to sent a trap for the given event.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK;hjubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hj4h]h struct opa_vnic_adapter *adapter}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK8hj.ubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhK8hjJubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhK8hj+ubj)}(h"``u8 event`` event to be reported h](j)}(h ``u8 event``h]j)}(hjmh]hu8 event}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK9hjgubj )}(hhh]h)}(hevent to be reportedh]hevent to be reported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjhK9hj+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&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK;hjubh)}(h@This function calls vema api to sent a trap for the given event.h]h@This function calls vema api to sent a trap for the given event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chK:hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*opa_vnic_get_summary_counters (C function)c.opa_vnic_get_summary_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hrvoid opa_vnic_get_summary_counters (struct opa_vnic_adapter *adapter, struct opa_veswport_summary_counters *cntrs)h]j)}(hqvoid opa_vnic_get_summary_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_summary_counters *cntrs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKMubj)}(hopa_vnic_get_summary_countersh]j:)}(hopa_vnic_get_summary_countersh]hopa_vnic_get_summary_counters}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKMubj)}(hO(struct opa_vnic_adapter *adapter, struct opa_veswport_summary_counters *cntrs)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubj&)}(h h]h }(hj7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjJmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.opa_vnic_get_summary_countersasbuh1hhj&ubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj&ubju)}(hjxh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj&ubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(h+struct opa_veswport_summary_counters *cntrsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_veswport_summary_countersh]hopa_veswport_summary_counters}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jdc.opa_vnic_get_summary_countersasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcntrsh]hcntrs}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKMhjhhubj)}(hhh]h)}(hget summary countersh]hget summary counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj5jj5jjjuh1jhhhjhNhNubj)}(hX5**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_veswport_summary_counters *cntrs`` pointer to destination summary counters structure **Description** This function populates the summary counters that is maintained by the given adapter to destination address provided.h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKQhj9ubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hj^h]h struct opa_vnic_adapter *adapter}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKNhjXubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKNhjtubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjshKNhjUubj)}(hb``struct opa_veswport_summary_counters *cntrs`` pointer to destination summary counters structure h](j)}(h/``struct opa_veswport_summary_counters *cntrs``h]j)}(hjh]h+struct opa_veswport_summary_counters *cntrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKOhjubj )}(hhh]h)}(h1pointer to destination summary counters structureh]h1pointer to destination summary counters structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKOhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKOhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKQhj9ubh)}(huThis function populates the summary counters that is maintained by the given adapter to destination address provided.h]huThis function populates the summary counters that is maintained by the given adapter to destination address provided.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKPhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(opa_vnic_get_error_counters (C function)c.opa_vnic_get_error_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hnvoid opa_vnic_get_error_counters (struct opa_vnic_adapter *adapter, struct opa_veswport_error_counters *cntrs)h]j)}(hmvoid opa_vnic_get_error_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_error_counters *cntrs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKvubj&)}(h h]h }(hj&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj%hKvubj)}(hopa_vnic_get_error_countersh]j:)}(hopa_vnic_get_error_countersh]hopa_vnic_get_error_counters}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj%hKvubj)}(hM(struct opa_vnic_adapter *adapter, struct opa_veswport_error_counters *cntrs)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubj&)}(h h]h }(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjtmodnameN classnameNjWjZ)}j]]j`)}jSj:sbc.opa_vnic_get_error_countersasbuh1hhjPubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjPubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(h)struct opa_veswport_error_counters *cntrsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_veswport_error_countersh]hopa_veswport_error_counters}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.opa_vnic_get_error_countersasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcntrsh]hcntrs}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj%hKvubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhj%hKvubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj%hKvhj hhubj)}(hhh]h)}(hget error countersh]hget error counters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKvhjDhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hKvubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj_jj_jjjuh1jhhhjhNhNubj)}(hX/**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_veswport_error_counters *cntrs`` pointer to destination error counters structure **Description** This function populates the error counters that is maintained by the given adapter to destination address provided.h](h)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKzhjcubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKwhjubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKwhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKwhjubj)}(h^``struct opa_veswport_error_counters *cntrs`` pointer to destination error counters structure h](j)}(h-``struct opa_veswport_error_counters *cntrs``h]j)}(hjh]h)struct opa_veswport_error_counters *cntrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKxhjubj )}(hhh]h)}(h/pointer to destination error counters structureh]h/pointer to destination error counters structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKzhjcubh)}(hsThis function populates the error counters that is maintained by the given adapter to destination address provided.h]hsThis function populates the error counters that is maintained by the given adapter to destination address provided.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKyhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#opa_vnic_get_vesw_info (C function)c.opa_vnic_get_vesw_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hZvoid opa_vnic_get_vesw_info (struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h]j)}(hYvoid opa_vnic_get_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=hhhjOhKubj)}(hopa_vnic_get_vesw_infoh]j:)}(hopa_vnic_get_vesw_infoh]hopa_vnic_get_vesw_info}(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhKubj)}(h>(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjdsbc.opa_vnic_get_vesw_infoasbuh1hhjzubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjzubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hstruct opa_vesw_info *infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h opa_vesw_infoh]h opa_vesw_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.opa_vnic_get_vesw_infoasbuh1hhjubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hinfoh]hinfo}(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj9hhhjOhKubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhKhj6hhubj)}(hhh]j)}(hhh]j)}(hGet the vesw informationh]h)}(hjvh]hGet the vesw information}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjtubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjnhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_vesw_info *info`` pointer to destination vesw info structure **Description** This function copies the vesw info that is maintained by the given adapter to destination address provided.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hJ``struct opa_vesw_info *info`` pointer to destination vesw info structure h](j)}(h``struct opa_vesw_info *info``h]j)}(hjh]hstruct opa_vesw_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj )}(hhh]h)}(h*pointer to destination vesw info structureh]h*pointer to destination vesw info structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubh)}(hkThis function copies the vesw info that is maintained by the given adapter to destination address provided.h]hkThis function copies the vesw info that is maintained by the given adapter to destination address provided.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#opa_vnic_set_vesw_info (C function)c.opa_vnic_set_vesw_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hZvoid opa_vnic_set_vesw_info (struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h]j)}(hYvoid opa_vnic_set_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyhhhjhKubj)}(hopa_vnic_set_vesw_infoh]j:)}(hopa_vnic_set_vesw_infoh]hopa_vnic_set_vesw_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhKubj)}(h>(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.opa_vnic_set_vesw_infoasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct opa_vesw_info *infoh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubj&)}(h h]h }(hj9hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(ubh)}(hhh]j:)}(h opa_vesw_infoh]h opa_vesw_info}(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjLmodnameN classnameNjWjZ)}j]]jc.opa_vnic_set_vesw_infoasbuh1hhj(ubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(ubju)}(hjxh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj(ubj:)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjuhhhjhKubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjrhhubj)}(hhh]j)}(hhh]j)}(hSet the vesw informationh]h)}(hjh]hSet the vesw information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX:**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_vesw_info *info`` pointer to vesw info structure **Description** This function updates the vesw info that is maintained by the given adapter with vesw info provided. Reserved fields are stored and returned back to EM as is.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``struct opa_vesw_info *info`` pointer to vesw info structure h](j)}(h``struct opa_vesw_info *info``h]j)}(hj9h]hstruct opa_vesw_info *info}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhj3ubj )}(hhh]h)}(hpointer to vesw info structureh]hpointer to vesw info structure}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubh)}(hThis function updates the vesw info that is maintained by the given adapter with vesw info provided. Reserved fields are stored and returned back to EM as is.h]hThis function updates the vesw info that is maintained by the given adapter with vesw info provided. Reserved fields are stored and returned back to EM as is.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+opa_vnic_get_per_veswport_info (C function) c.opa_vnic_get_per_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hjvoid opa_vnic_get_per_veswport_info (struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h]j)}(hivoid opa_vnic_get_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hopa_vnic_get_per_veswport_infoh]j:)}(hopa_vnic_get_per_veswport_infoh]hopa_vnic_get_per_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hF(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsb c.opa_vnic_get_per_veswport_infoasbuh1hhjubj&)}(h h]h }(hj4hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hadapterh]hadapter}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct opa_per_veswport_info *infoh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdubh)}(hhh]j:)}(hopa_per_veswport_infoh]hopa_per_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j0 c.opa_vnic_get_per_veswport_infoasbuh1hhjdubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjdubj:)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubeh}(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]j)}(hhh]j)}(h!Get the vesw per port informationh]h)}(hjh]h!Get the vesw per port information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hXT**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_per_veswport_info *info`` pointer to destination vport info structure **Description** This function copies the vesw per port info that is maintained by the given adapter to destination address provided. Note that the read only fields are not copied.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hj<h]h struct opa_vnic_adapter *adapter}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhj6ubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhj3ubj)}(hS``struct opa_per_veswport_info *info`` pointer to destination vport info structure h](j)}(h&``struct opa_per_veswport_info *info``h]j)}(hjuh]h"struct opa_per_veswport_info *info}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjoubj )}(hhh]h)}(h+pointer to destination vport info structureh]h+pointer to destination vport info structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubeh}(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&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubh)}(hThis function copies the vesw per port info that is maintained by the given adapter to destination address provided. Note that the read only fields are not copied.h]hThis function copies the vesw per port info that is maintained by the given adapter to destination address provided. Note that the read only fields are not copied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+opa_vnic_set_per_veswport_info (C function) c.opa_vnic_set_per_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hjvoid opa_vnic_set_per_veswport_info (struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h]j)}(hivoid opa_vnic_set_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hopa_vnic_set_per_veswport_infoh]j:)}(hopa_vnic_set_per_veswport_infoh]hopa_vnic_set_per_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hF(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRmodnameN classnameNjWjZ)}j]]j`)}jSjsb c.opa_vnic_set_per_veswport_infoasbuh1hhj.ubj&)}(h h]h }(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj.ubju)}(hjxh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj.ubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(h"struct opa_per_veswport_info *infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_per_veswport_infoh]hopa_per_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jl c.opa_vnic_set_per_veswport_infoasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]j)}(hhh]j)}(hSet vesw per port informationh]h)}(hj*h]hSet vesw per port information}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM hj(ubah}(h]h ]h"]h$]h&]uh1jhj%hhhj9hNubah}(h]h ]h"]h$]h&]jjuh1jhj9hM hj"hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjOjjOjjjuh1jhhhjhNhNubj)}(hXU**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_per_veswport_info *info`` pointer to vport info structure **Description** This function updates the vesw per port info that is maintained by the given adapter with vesw per port info provided. Reserved fields are stored and returned back to EM as is.h](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMhjSubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjxh]h struct opa_vnic_adapter *adapter}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM hjrubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(hG``struct opa_per_veswport_info *info`` pointer to vport info structure h](j)}(h&``struct opa_per_veswport_info *info``h]j)}(hjh]h"struct opa_per_veswport_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMhjubj )}(hhh]h)}(hpointer to vport info structureh]hpointer to vport info structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjoubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMhjSubh)}(hThis function updates the vesw per port info that is maintained by the given adapter with vesw per port info provided. Reserved fields are stored and returned back to EM as is.h]hThis function updates the vesw per port info that is maintained by the given adapter with vesw per port info provided. Reserved fields are stored and returned back to EM as is.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&opa_vnic_query_mcast_macs (C function)c.opa_vnic_query_mcast_macshNtauh1hhjhhhNhNubj)}(hhh](j)}(hgvoid opa_vnic_query_mcast_macs (struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h]j)}(hfvoid opa_vnic_query_mcast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM3ubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-hhhj?hM3ubj)}(hopa_vnic_query_mcast_macsh]j:)}(hopa_vnic_query_mcast_macsh]hopa_vnic_query_mcast_macs}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hM3ubj)}(hH(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjjubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjjubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjTsbc.opa_vnic_query_mcast_macsasbuh1hhjjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjjubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h$struct opa_veswport_iface_macs *macsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_veswport_iface_macsh]hopa_veswport_iface_macs}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.opa_vnic_query_mcast_macsasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmacsh]hmacs}(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj?hM3ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj)hhhj?hM3ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj?hM3hj&hhubj)}(hhh]h)}(hquery multicast mac listh]hquery multicast mac list}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM3hj^hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hM3ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjyjjyjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_veswport_iface_macs *macs`` pointer mac list **Description** This function populates the provided mac list with the configured multicast addresses in the adapter.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM7hj}ubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM4hjubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(h:``struct opa_veswport_iface_macs *macs`` pointer mac list h](j)}(h(``struct opa_veswport_iface_macs *macs``h]j)}(hjh]h$struct opa_veswport_iface_macs *macs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM5hjubj )}(hhh]h)}(hpointer mac listh]hpointer mac list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubeh}(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&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM7hj}ubh)}(heThis function populates the provided mac list with the configured multicast addresses in the adapter.h]heThis function populates the provided mac list with the configured multicast addresses in the adapter.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chM6hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&opa_vnic_query_ucast_macs (C function)c.opa_vnic_query_ucast_macshNtauh1hhjhhhNhNubj)}(hhh](j)}(hgvoid opa_vnic_query_ucast_macs (struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h]j)}(hfvoid opa_vnic_query_ucast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMSubj&)}(h h]h }(hjjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWhhhjihMSubj)}(hopa_vnic_query_ucast_macsh]j:)}(hopa_vnic_query_ucast_macsh]hopa_vnic_query_ucast_macs}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjihMSubj)}(hH(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSj~sbc.opa_vnic_query_ucast_macsasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h$struct opa_veswport_iface_macs *macsh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_veswport_iface_macsh]hopa_veswport_iface_macs}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj*modnameN classnameNjWjZ)}j]]jc.opa_vnic_query_ucast_macsasbuh1hhjubj&)}(h h]h }(hjFhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmacsh]hmacs}(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjihMSubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjShhhjihMSubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhjihMShjPhhubj)}(hhh]h)}(hquery unicast mac listh]hquery unicast mac list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMShjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihMSubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_adapter *adapter`` vnic port adapter ``struct opa_veswport_iface_macs *macs`` pointer mac list **Description** This function populates the provided mac list with the configured unicast addresses in the adapter.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMWhjubj)}(hhh](j)}(h7``struct opa_vnic_adapter *adapter`` vnic port adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMThjubj )}(hhh]h)}(hvnic port adapterh]hvnic port adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h:``struct opa_veswport_iface_macs *macs`` pointer mac list h](j)}(h(``struct opa_veswport_iface_macs *macs``h]j)}(hjh]h$struct opa_veswport_iface_macs *macs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMUhjubj )}(hhh]h)}(hpointer mac listh]hpointer mac list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubeh}(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&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMWhjubh)}(hcThis function populates the provided mac list with the configured unicast addresses in the adapter.h]hcThis function populates the provided mac list with the configured unicast addresses in the adapter.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh|/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:104: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.chMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hopa_vnic_vema_port (C struct)c.opa_vnic_vema_porthNtauh1hhjhhhNhNubj)}(hhh](j)}(hopa_vnic_vema_porth]j)}(hstruct opa_vnic_vema_porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubj)}(hopa_vnic_vema_porth]j:)}(hjh]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj}hhhjhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjzhhubj)}(hhh]j)}(hhh]j)}(hVNIC VEMA port detailsh]h)}(hjh]hVNIC VEMA port details}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chK^hjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhK^hjhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct opa_vnic_vema_port { struct opa_vnic_ctrl_port *cport; struct ib_mad_agent *mad_agent; struct opa_class_port_info class_port_info; u64 tid; u8 port_num; struct xarray vports; struct ib_event_handler event_handler; struct mutex lock; }; **Members** ``cport`` pointer to port ``mad_agent`` pointer to mad agent for port ``class_port_info`` Class port info information. ``tid`` Transaction id ``port_num`` OPA port number ``vports`` vnic ports ``event_handler`` ib event handler ``lock`` adapter interface lockh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKbhjubjS)}(hXTstruct opa_vnic_vema_port { struct opa_vnic_ctrl_port *cport; struct ib_mad_agent *mad_agent; struct opa_class_port_info class_port_info; u64 tid; u8 port_num; struct xarray vports; struct ib_event_handler event_handler; struct mutex lock; };h]hXTstruct opa_vnic_vema_port { struct opa_vnic_ctrl_port *cport; struct ib_mad_agent *mad_agent; struct opa_class_port_info class_port_info; u64 tid; u8 port_num; struct xarray vports; struct ib_event_handler event_handler; struct mutex lock; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jShv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKdhjubh)}(h **Members**h]j)}(hj'h]hMembers}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKohjubj)}(hhh](j)}(h``cport`` pointer to port h](j)}(h ``cport``h]j)}(hjFh]hcport}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chK`hj@ubj )}(hhh]h)}(hpointer to porth]hpointer to port}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hK`hj\ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hK`hj=ubj)}(h,``mad_agent`` pointer to mad agent for port h](j)}(h ``mad_agent``h]j)}(hjh]h mad_agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKahjyubj )}(hhh]h)}(hpointer to mad agent for porth]hpointer to mad agent for port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjhKahj=ubj)}(h1``class_port_info`` Class port info information. h](j)}(h``class_port_info``h]j)}(hjh]hclass_port_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKbhjubj )}(hhh]h)}(hClass port info information.h]hClass port info information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKbhj=ubj)}(h``tid`` Transaction id h](j)}(h``tid``h]j)}(hjh]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKchjubj )}(hhh]h)}(hTransaction idh]hTransaction id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKchjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKchj=ubj)}(h``port_num`` OPA port number h](j)}(h ``port_num``h]j)}(hj*h]hport_num}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKdhj$ubj )}(hhh]h)}(hOPA port numberh]hOPA port number}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKdhj@ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKdhj=ubj)}(h``vports`` vnic ports h](j)}(h ``vports``h]j)}(hjch]hvports}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKehj]ubj )}(hhh]h)}(h vnic portsh]h vnic ports}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKehjyubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKehj=ubj)}(h#``event_handler`` ib event handler h](j)}(h``event_handler``h]j)}(hjh]h event_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKfhjubj )}(hhh]h)}(hib event handlerh]hib event handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhj=ubj)}(h``lock`` adapter interface lockh](j)}(h``lock``h]j)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKfhjubj )}(hhh]h)}(hadapter interface lockh]hadapter interface lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKghjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhj=ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_get_vport_num (C function)c.vema_get_vport_numhNtauh1hhjhhhNhNubj)}(hhh](j)}(h;u8 vema_get_vport_num (struct opa_vnic_vema_mad *recvd_mad)h]j)}(h:u8 vema_get_vport_num(struct opa_vnic_vema_mad *recvd_mad)h](h)}(hhh]j:)}(hu8h]hu8}(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj4modnameN classnameNjWjZ)}j]]j`)}jSvema_get_vport_numsbc.vema_get_vport_numasbuh1hhj+hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjThhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+hhhjShKubj)}(hvema_get_vport_numh]j:)}(hjPh]hvema_get_vport_num}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhjShKubj)}(h%(struct opa_vnic_vema_mad *recvd_mad)h]j)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jNc.vema_get_vport_numasbuh1hhj}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj}ubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhjShKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj'hhhjShKubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhjShKhj$hhubj)}(hhh]j)}(hhh]j)}(hGet the vnic from the madh]h)}(hjh]hGet the vnic from the mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhjShKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj,jj,jjjuh1jhhhjhNhNubj)}(hy**Parameters** ``struct opa_vnic_vema_mad *recvd_mad`` Received mad **Return** returns value of the vnic port numberh](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj0ubj)}(hhh]j)}(h5``struct opa_vnic_vema_mad *recvd_mad`` Received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjUh]h#struct opa_vnic_vema_mad *recvd_mad}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjOubj )}(hhh]h)}(h Received madh]h Received mad}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj0ubh)}(h%returns value of the vnic port numberh]h%returns value of the vnic port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#vema_get_vport_adapter (C function)c.vema_get_vport_adapterhNtauh1hhjhhhNhNubj)}(hhh](j)}(hwstruct opa_vnic_adapter * vema_get_vport_adapter (struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_port *port)h]j)}(hustruct opa_vnic_adapter *vema_get_vport_adapter(struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_port *port)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSvema_get_vport_adaptersbc.vema_get_vport_adapterasbuh1hhjhhhjhKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubju)}(hjxh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhKubj)}(hvema_get_vport_adapterh]j:)}(hjh]hvema_get_vport_adapter}(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hF(struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_port *port)h](j)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjomodnameN classnameNjWjZ)}j]]jc.vema_get_vport_adapterasbuh1hhjKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjKubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_get_vport_adapterasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]j)}(hhh]j)}(h$Get vnic port adapter from recvd madh]h)}(hjEh]h$Get vnic port adapter from recvd mad}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjCubah}(h]h ]h"]h$]h&]uh1jhj@hhhjThNubah}(h]h ]h"]h$]h&]jjuh1jhjThKhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_mad *recvd_mad`` received mad ``struct opa_vnic_vema_port *port`` ptr to port struct on which MAD was recvd **Return** vnic adapterh](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjnubj)}(hhh](j)}(h5``struct opa_vnic_vema_mad *recvd_mad`` received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubj )}(hhh]h)}(h received madh]h received mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hN``struct opa_vnic_vema_port *port`` ptr to port struct on which MAD was recvd h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubj )}(hhh]h)}(h)ptr to port struct on which MAD was recvdh]h)ptr to port struct on which MAD was recvd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjnubh)}(h vnic adapterh]h vnic adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h vema_mac_tbl_req_ok (C function)c.vema_mac_tbl_req_okhNtauh1hhjhhhNhNubj)}(hhh](j)}(h@bool vema_mac_tbl_req_ok (struct opa_veswport_mactable *mac_tbl)h]j)}(h?bool vema_mac_tbl_req_ok(struct opa_veswport_mactable *mac_tbl)h](j)}(hj*[h]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjHhhhjYhKubj)}(hvema_mac_tbl_req_okh]j:)}(hvema_mac_tbl_req_okh]hvema_mac_tbl_req_ok}(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjYhKubj)}(h'(struct opa_veswport_mactable *mac_tbl)h]j)}(h%struct opa_veswport_mactable *mac_tblh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_veswport_mactableh]hopa_veswport_mactable}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjnsbc.vema_mac_tbl_req_okasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmac_tblh]hmac_tbl}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjHhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjDhhhjYhKubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjYhKhjAhhubj)}(hhh]j)}(hhh]j)}(h'Check if mac request has correct valuesh]h)}(hjh]h'Check if mac request has correct values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubah}(h]h ]h"]h$]h&]uh1jhj hhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj5jj5jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_veswport_mactable *mac_tbl`` mac table **Description** This function checks for the validity of the offset and number of entries required. **Return** true if offset and num_entries are validh](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj9ubj)}(hhh]j)}(h4``struct opa_veswport_mactable *mac_tbl`` mac table h](j)}(h)``struct opa_veswport_mactable *mac_tbl``h]j)}(hj^h]h%struct opa_veswport_mactable *mac_tbl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjXubj )}(hhh]h)}(h mac tableh]h mac table}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjtubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhjshKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj9ubh)}(hSThis function checks for the validity of the offset and number of entries required.h]hSThis function checks for the validity of the offset and number of entries required.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj9ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj9ubh)}(h(true if offset and num_entries are validh]h(true if offset and num_entries are valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_add_vport (C function)c.vema_add_vporthNtauh1hhjhhhNhNubj)}(hhh](j)}(hXstruct opa_vnic_adapter * vema_add_vport (struct opa_vnic_vema_port *port, u8 vport_num)h]j)}(hVstruct opa_vnic_adapter *vema_add_vport(struct opa_vnic_vema_port *port, u8 vport_num)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj&modnameN classnameNjWjZ)}j]]j`)}jSvema_add_vportsbc.vema_add_vportasbuh1hhjhhhjhKubj&)}(h h]h }(hjEhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhKubju)}(hjxh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhKubj)}(hvema_add_vporth]j:)}(hjBh]hvema_add_vport}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h/(struct opa_vnic_vema_port *port, u8 vport_num)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.vema_add_vportasbuh1hhj{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj{ubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h u8 vport_numh](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j@c.vema_add_vportasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(h vport_numh]h vport_num}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]j)}(hhh]j)}(hAdd a new vnic porth]h)}(hjMh]hAdd a new vnic port}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjKubah}(h]h ]h"]h$]h&]uh1jhjHhhhj\hNubah}(h]h ]h"]h$]h&]jjuh1jhj\hKhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjrjjrjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` ptr to opa_vnic_vema_port struct ``u8 vport_num`` vnic port number (to be added) **Description** Return a pointer to the vnic adapter structureh](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjvubj)}(hhh](j)}(hE``struct opa_vnic_vema_port *port`` ptr to opa_vnic_vema_port struct h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubj )}(hhh]h)}(h ptr to opa_vnic_vema_port structh]h ptr to opa_vnic_vema_port struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h0``u8 vport_num`` vnic port number (to be added) h](j)}(h``u8 vport_num``h]j)}(hjh]h u8 vport_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubj )}(hhh]h)}(hvnic port number (to be added)h]hvnic port number (to be added)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjvubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjvubh)}(h.Return a pointer to the vnic adapter structureh]h.Return a pointer to the vnic adapter structure}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%vema_get_class_port_info (C function)c.vema_get_class_port_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_class_port_info (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_get_class_port_info(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPhhhjbhKubj)}(hvema_get_class_port_infoh]j:)}(hvema_get_class_port_infoh]hvema_get_class_port_info}(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhKubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjwsbc.vema_get_class_port_infoasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj#modnameN classnameNjWjZ)}j]]jc.vema_get_class_port_infoasbuh1hhjubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjoubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_get_class_port_infoasbuh1hhjoubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjoubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjoubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjLhhhjbhKubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjbhKhjIhhubj)}(hhh]j)}(hhh]j)}(hGet class info for porth]h)}(hjh]hGet class info for port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hXV**Parameters** ``struct opa_vnic_vema_port *port`` Port on whic MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function copies the latest class port info value set for the port and stores it for generating trapsh](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj"ubj)}(hhh](j)}(hB``struct opa_vnic_vema_port *port`` Port on whic MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjGh]hstruct opa_vnic_vema_port *port}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjAubj )}(hhh]h)}(hPort on whic MAD was receivedh]hPort on whic MAD was received}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhj>ubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjzubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>ubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhjubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj>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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj"ubh)}(hiThis function copies the latest class port info value set for the port and stores it for generating trapsh]hiThis function copies the latest class port info value set for the port and stores it for generating traps}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%vema_set_class_port_info (C function)c.vema_set_class_port_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_set_class_port_info (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_set_class_port_info(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj5hhhjGhMubj)}(hvema_set_class_port_infoh]j:)}(hvema_set_class_port_infoh]hvema_set_class_port_info}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhjGhMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjrubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSj\sbc.vema_set_class_port_infoasbuh1hhjrubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjrubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjrubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_set_class_port_infoasbuh1hhjubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjTubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjxmodnameN classnameNjWjZ)}j]]jc.vema_set_class_port_infoasbuh1hhjTubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjTubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjTubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhjGhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj1hhhjGhMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jhjGhMhj.hhubj)}(hhh]j)}(hhh]j)}(hGet class info for porth]h)}(hjh]hGet class info for port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hXN**Parameters** ``struct opa_vnic_vema_port *port`` Port on whic MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function updates the port class info for the specific vnic and sets up the response mad datah](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj)}(hhh](j)}(hB``struct opa_vnic_vema_port *port`` Port on whic MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hj,h]hstruct opa_vnic_vema_port *port}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj&ubj )}(hhh]h)}(hPort on whic MAD was receivedh]hPort on whic MAD was received}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjeh]h#struct opa_vnic_vema_mad *recvd_mad}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj_ubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj#ubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubh)}(haThis function updates the port class info for the specific vnic and sets up the response mad datah]haThis function updates the port class info for the specific vnic and sets up the response mad data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#vema_get_veswport_info (C function)c.vema_get_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_veswport_info (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_get_veswport_info(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj,hMubj)}(hvema_get_veswport_infoh]j:)}(hvema_get_veswport_infoh]hvema_get_veswport_info}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj{modnameN classnameNjWjZ)}j]]j`)}jSjAsbc.vema_get_veswport_infoasbuh1hhjWubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjWubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_get_veswport_infoasbuh1hhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9ubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj]modnameN classnameNjWjZ)}j]]jc.vema_get_veswport_infoasbuh1hhj9ubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj9ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj9ubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubeh}(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]j)}(hhh]j)}(hGet veswport infoh]h)}(hjh]hGet veswport info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose madh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjJh]h#struct opa_vnic_vema_mad *recvd_mad}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjDubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(h<``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose madh](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj}ubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#vema_set_veswport_info (C function)c.vema_set_veswport_infohNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_set_veswport_info (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_set_veswport_info(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM,ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM,ubj)}(hvema_set_veswport_infoh]j:)}(hvema_set_veswport_infoh]hvema_set_veswport_info}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM,ubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj:modnameN classnameNjWjZ)}j]]j`)}jSjsbc.vema_set_veswport_infoasbuh1hhjubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jTc.vema_set_veswport_infoasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jTc.vema_set_veswport_infoasbuh1hhjubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrsp_madh]hrsp_mad}(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]j)}(hhh]j)}(hSet veswport infoh]h)}(hjh]hSet veswport info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM,hjubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhM,hjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM,ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX%**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function gets the port class infor for vnich](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM0hjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM-hjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hj h]h#struct opa_vnic_vema_mad *recvd_mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM.hjubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjBh]h!struct opa_vnic_vema_mad *rsp_mad}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM/hj<ubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM/hjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM/hjubeh}(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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM1hjubh)}(h0This function gets the port class infor for vnich]h0This function gets the port class infor for vnic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!vema_get_mac_entries (C function)c.vema_get_mac_entrieshNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_mac_entries (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_get_mac_entries(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMWubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMWubj)}(hvema_get_mac_entriesh]j:)}(hvema_get_mac_entriesh]hvema_get_mac_entries}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMWubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.vema_get_mac_entriesasbuh1hhjubj&)}(h h]h }(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjmubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j9c.vema_get_mac_entriesasbuh1hhjmubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjmubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjmubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j9c.vema_get_mac_entriesasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrsp_madh]hrsp_mad}(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMWubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMWhjhhubj)}(hhh]j)}(hhh]j)}(h!Get MAC entries in VNIC MAC tableh]h)}(hjgh]h!Get MAC entries in VNIC MAC table}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMWhjeubah}(h]h ]h"]h$]h&]uh1jhjbhhhjvhNubah}(h]h ]h"]h$]h&]jjuh1jhjvhMWhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMWubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function gets the MAC entries that are programmed into the VNIC MAC forwarding table. It checks for the validity of the index into the MAC table and the number of entries that are to be retrieved.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM[hjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMXhjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMYhjubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hj'h]h!struct opa_vnic_vema_mad *rsp_mad}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMZhj!ubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMZhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMZhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM\hjubh)}(hThis function gets the MAC entries that are programmed into the VNIC MAC forwarding table. It checks for the validity of the index into the MAC table and the number of entries that are to be retrieved.h]hThis function gets the MAC entries that are programmed into the VNIC MAC forwarding table. It checks for the validity of the index into the MAC table and the number of entries that are to be retrieved.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!vema_set_mac_entries (C function)c.vema_set_mac_entrieshNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_set_mac_entries (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_set_mac_entries(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM{ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM{ubj)}(hvema_set_mac_entriesh]j:)}(hvema_set_mac_entriesh]hvema_set_mac_entries}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM{ubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.vema_set_mac_entriesasbuh1hhjubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRubj&)}(h h]h }(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjvmodnameN classnameNjWjZ)}j]]jc.vema_set_mac_entriesasbuh1hhjRubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjRubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_set_mac_entriesasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]j)}(hhh]j)}(h!Set MAC entries in VNIC MAC tableh]h)}(hjLh]h!Set MAC entries in VNIC MAC table}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM{hjJubah}(h]h ]h"]h$]h&]uh1jhjGhhhj[hNubah}(h]h ]h"]h$]h&]jjuh1jhj[hM{hjDhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM{ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjqjjqjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function sets the MAC entries in the VNIC forwarding table It checks for the validity of the index and the number of forwarding table entries to be programmed.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjuubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM|hjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM}hjubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hj h]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM~hjubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM~hj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjuubh)}(hThis function sets the MAC entries in the VNIC forwarding table It checks for the validity of the index and the number of forwarding table entries to be programmed.h]hThis function sets the MAC entries in the VNIC forwarding table It checks for the validity of the index and the number of forwarding table entries to be programmed.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!vema_set_delete_vesw (C function)c.vema_set_delete_veswhNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_set_delete_vesw (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_set_delete_vesw(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hvema_set_delete_veswh]j:)}(hvema_set_delete_veswh]hvema_set_delete_vesw}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.vema_set_delete_veswasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubj&)}(h h]h }(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[modnameN classnameNjWjZ)}j]]jc.vema_set_delete_veswasbuh1hhj7ubj&)}(h h]h }(hjwhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj7ubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_set_delete_veswasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]j)}(hhh]j)}(hReset VESW info to POD valuesh]h)}(hj1h]hReset VESW info to POD values}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj/ubah}(h]h ]h"]h$]h&]uh1jhj,hhhj@hNubah}(h]h ]h"]h$]h&]jjuh1jhj@hMhj)hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjVjjVjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad ``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad **Description** This function clears all the fields of veswport info for the requested vesw and sets them back to the power-on default values. It does not delete the vesw.h](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjZubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjyubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(hD``struct opa_vnic_vema_mad *recvd_mad`` pointer to the received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(hpointer to the received madh]hpointer to the received mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h=``struct opa_vnic_vema_mad *rsp_mad`` pointer to respose mad h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(hpointer to respose madh]hpointer to respose mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjZubh)}(hThis function clears all the fields of veswport info for the requested vesw and sets them back to the power-on default values. It does not delete the vesw.h]hThis function clears all the fields of veswport info for the requested vesw and sets them back to the power-on default values. It does not delete the vesw.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_get_mac_list (C function)c.vema_get_mac_listhNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_mac_list (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad, u16 attr_id)h]j)}(hvoid vema_get_mac_list(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad, u16 attr_id)h](j)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjmhhhjhMubj)}(hvema_get_mac_listh]j:)}(hvema_get_mac_listh]hvema_get_mac_list}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjhMubj)}(hv(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad, u16 attr_id)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.vema_get_mac_listasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj@modnameN classnameNjWjZ)}j]]jc.vema_get_mac_listasbuh1hhjubj&)}(h h]h }(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_get_mac_listasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 attr_idh](h)}(hhh]j:)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.vema_get_mac_listasbuh1hhjubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hattr_idh]hattr_id}(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjmhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjihhhjhMubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjfhhubj)}(hhh]j)}(hhh]j)}(hGet the unicast/multicast macs.h]h)}(hj^h]hGet the unicast/multicast macs.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj\ubah}(h]h ]h"]h$]h&]uh1jhjYhhhjmhNubah}(h]h ]h"]h$]h&]jjuh1jhjmhMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hXE**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters ``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be built ``u16 attr_id`` Attribute ID indicating multicast or unicast mac listh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h\``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(h3Received mad contains fields to set vnic parametersh]h3Received mad contains fields to set vnic parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be built h](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hj h]h!struct opa_vnic_vema_mad *rsp_mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(hResponse mad to be builth]hResponse mad to be built}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3 hMhj4 ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj3 hMhjubj)}(hE``u16 attr_id`` Attribute ID indicating multicast or unicast mac listh](j)}(h``u16 attr_id``h]j)}(hjW h]h u16 attr_id}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjQ ubj )}(hhh]h)}(h5Attribute ID indicating multicast or unicast mac listh]h5Attribute ID indicating multicast or unicast mac list}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjm ubah}(h]h ]h"]h$]h&]uh1j hjQ ubeh}(h]h ]h"]h$]h&]uh1jhjl hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&vema_get_summary_counters (C function)c.vema_get_summary_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_summary_counters (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_get_summary_counters(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj hhhj hMubj)}(hvema_get_summary_countersh]j:)}(hvema_get_summary_countersh]hvema_get_summary_counters}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSj sbc.vema_get_summary_countersasbuh1hhj ubj&)}(h h]h }(hj, hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hporth]hport}(hjG hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hj` hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj\ ubj&)}(h h]h }(hjm hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\ ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj~ hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j( c.vema_get_summary_countersasbuh1hhj\ ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\ ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj\ ubj:)}(h recvd_madh]h recvd_mad}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j( c.vema_get_summary_countersasbuh1hhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hrsp_madh]hrsp_mad}(hj' hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 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]j)}(hhh]j)}(hGets summary counters.h]h)}(hjV h]hGets summary counters.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjT ubah}(h]h ]h"]h$]h&]uh1jhjQ hhhje hNubah}(h]h ]h"]h$]h&]jjuh1jhje hMhjN hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj{ jj{ jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters ``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hj h]hstruct opa_vnic_vema_port *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h\``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hj h]h#struct opa_vnic_vema_mad *recvd_mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(h3Received mad contains fields to set vnic parametersh]h3Received mad contains fields to set vnic parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h>``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hj h]h!struct opa_vnic_vema_mad *rsp_mad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(hResponse mad to be builth]hResponse mad to be built}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj, ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj+ hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$vema_get_error_counters (C function)c.vema_get_error_countershNtauh1hhjhhhNhNubj)}(hhh](j)}(hvoid vema_get_error_counters (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvoid vema_get_error_counters(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjl hhhj~ hMubj)}(hvema_get_error_countersh]j:)}(hvema_get_error_countersh]hvema_get_error_counters}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjl hhhj~ hMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSj sbc.vema_get_error_countersasbuh1hhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hporth]hport}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj, hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj= hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj: ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj? modnameN classnameNjWjZ)}j]]j c.vema_get_error_countersasbuh1hhj ubj&)}(h h]h }(hj[ hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(h recvd_madh]h recvd_mad}(hjv hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j c.vema_get_error_countersasbuh1hhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hrsp_madh]hrsp_mad}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjl hhhj~ hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjh hhhj~ hMubah}(h]jc ah ](jjeh"]h$]h&]jj)jhuh1jhj~ hMhje hhubj)}(hhh]j)}(hhh]j)}(hGets summary counters.h]h)}(hjh]hGets summary counters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhj$hNubah}(h]h ]h"]h$]h&]jjuh1jhj$hMhj hhubah}(h]h ]h"]h$]h&]uh1jhje hhhj~ hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj:jj:jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters ``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj>ubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjch]hstruct opa_vnic_vema_port *port}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj]ubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1j hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubj)}(h\``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(h3Received mad contains fields to set vnic parametersh]h3Received mad contains fields to set vnic parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubj)}(h>``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(hResponse mad to be builth]hResponse mad to be built}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_get (C function) c.vema_gethNtauh1hhjhhhNhNubj)}(hhh](j)}(hwvoid vema_get (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvvoid vema_get(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj+hhhj=hMubj)}(hvema_geth]j:)}(hvema_geth]hvema_get}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj=hMubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjRsb c.vema_getasbuh1hhjhubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j c.vema_getasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjnmodnameN classnameNjWjZ)}j]]j c.vema_getasbuh1hhjJubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjJubj:)}(hrsp_madh]hrsp_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubeh}(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]j)}(hhh]j)}(hProcess received get MADh]h)}(hjh]hProcess received get MAD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` Received mad ``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hj"h]hstruct opa_vnic_vema_port *port}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h5``struct opa_vnic_vema_mad *recvd_mad`` Received mad h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hj[h]h#struct opa_vnic_vema_mad *recvd_mad}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjUubj )}(hhh]h)}(h Received madh]h Received mad}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(h>``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjh]h!struct opa_vnic_vema_mad *rsp_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(hResponse mad to be builth]hResponse mad to be built}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_set (C function) c.vema_sethNtauh1hhjhhhNhNubj)}(hhh](j)}(hwvoid vema_set (struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h]j)}(hvvoid vema_set(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM7ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM7ubj)}(hvema_seth]j:)}(hvema_seth]hvema_set}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM7ubj)}(hi(struct opa_vnic_vema_port *port, struct opa_vnic_vema_mad *recvd_mad, struct opa_vnic_vema_mad *rsp_mad)h](j)}(hstruct opa_vnic_vema_port *porth](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'ubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjKmodnameN classnameNjWjZ)}j]]j`)}jSjsb c.vema_setasbuh1hhj'ubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'ubju)}(hjxh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj'ubj:)}(hporth]hport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h#struct opa_vnic_vema_mad *recvd_madh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]je c.vema_setasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h recvd_madh]h recvd_mad}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h!struct opa_vnic_vema_mad *rsp_madh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_vema_madh]hopa_vnic_vema_mad}(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-modnameN classnameNjWjZ)}j]]je c.vema_setasbuh1hhj ubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hrsp_madh]hrsp_mad}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM7ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhM7ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM7hjhhubj)}(hhh]j)}(hhh]j)}(hProcess received set MADh]h)}(hjh]hProcess received set MAD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM7hjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhM7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM7ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_vema_port *port`` source port on which MAD was received ``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters ``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM;hjubj)}(hhh](j)}(hJ``struct opa_vnic_vema_port *port`` source port on which MAD was received h](j)}(h#``struct opa_vnic_vema_port *port``h]j)}(hjh]hstruct opa_vnic_vema_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM8hjubj )}(hhh]h)}(h%source port on which MAD was receivedh]h%source port on which MAD was received}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjubj)}(h\``struct opa_vnic_vema_mad *recvd_mad`` Received mad contains fields to set vnic parameters h](j)}(h'``struct opa_vnic_vema_mad *recvd_mad``h]j)}(hjh]h#struct opa_vnic_vema_mad *recvd_mad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM9hjubj )}(hhh]h)}(h3Received mad contains fields to set vnic parametersh]h3Received mad contains fields to set vnic parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM9hj0ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj/hM9hjubj)}(h>``struct opa_vnic_vema_mad *rsp_mad`` Response mad to be builth](j)}(h%``struct opa_vnic_vema_mad *rsp_mad``h]j)}(hjSh]h!struct opa_vnic_vema_mad *rsp_mad}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM;hjMubj )}(hhh]h)}(hResponse mad to be builth]hResponse mad to be built}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chM:hjiubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM;hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_send (C function) c.vema_sendhNtauh1hhjhhhNhNubj)}(hhh](j)}(hNvoid vema_send (struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h]j)}(hMvoid vema_send(struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMVubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMVubj)}(h vema_sendh]j:)}(h vema_sendh]h vema_send}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMVubj)}(h?(struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h](j)}(hstruct ib_mad_agent *mad_agenth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_mad_agenth]h ib_mad_agent}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSjsb c.vema_sendasbuh1hhjubj&)}(h h]h }(hj(hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h mad_agenth]h mad_agent}(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_mad_send_wc *mad_wch](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjXubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjXubh)}(hhh]j:)}(hib_mad_send_wch]hib_mad_send_wc}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj|modnameN classnameNjWjZ)}j]]j$ c.vema_sendasbuh1hhjXubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjXubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjXubj:)}(hmad_wch]hmad_wc}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMVubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMVhjhhubj)}(hhh]j)}(hhh]j)}(hSend handler for VEMA MAD agenth]h)}(hjh]hSend handler for VEMA MAD agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMVhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMVubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_mad_agent *mad_agent`` pointer to the mad agent ``struct ib_mad_send_wc *mad_wc`` pointer to mad send work completion information **Description** Free all the data structures associated with the sent MADh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMZhj ubj)}(hhh](j)}(h<``struct ib_mad_agent *mad_agent`` pointer to the mad agent h](j)}(h"``struct ib_mad_agent *mad_agent``h]j)}(hj0h]hstruct ib_mad_agent *mad_agent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMWhj*ubj )}(hhh]h)}(hpointer to the mad agenth]hpointer to the mad agent}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMWhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMWhj'ubj)}(hR``struct ib_mad_send_wc *mad_wc`` pointer to mad send work completion information h](j)}(h!``struct ib_mad_send_wc *mad_wc``h]j)}(hjih]hstruct ib_mad_send_wc *mad_wc}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMXhjcubj )}(hhh]h)}(h/pointer to mad send work completion informationh]h/pointer to mad send work completion information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMXhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMXhj'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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMZhj ubh)}(h9Free all the data structures associated with the sent MADh]h9Free all the data structures associated with the sent MAD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMYhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_recv (C function) c.vema_recvhNtauh1hhjhhhNhNubj)}(hhh](j)}(hpvoid vema_recv (struct ib_mad_agent *mad_agent, struct ib_mad_send_buf *send_buf, struct ib_mad_recv_wc *mad_wc)h]j)}(hovoid vema_recv(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 ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMdubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMdubj)}(h vema_recvh]j:)}(h vema_recvh]h vema_recv}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMdubj)}(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)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj&)}(h h]h }(hj3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubh)}(hhh]j:)}(h ib_mad_agenth]h ib_mad_agent}(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjFmodnameN classnameNjWjZ)}j]]j`)}jSj sb c.vema_recvasbuh1hhj"ubj&)}(h h]h }(hjdhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubju)}(hjxh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj"ubj:)}(h mad_agenth]h mad_agent}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h struct ib_mad_send_buf *send_bufh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mad_send_bufh]hib_mad_send_buf}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j` c.vema_recvasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsend_bufh]hsend_buf}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_mad_recv_wc *mad_wch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_mad_recv_wch]hib_mad_recv_wc}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj(modnameN classnameNjWjZ)}j]]j` c.vema_recvasbuh1hhjubj&)}(h h]h }(hjDhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hmad_wch]hmad_wc}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMdhjhhubj)}(hhh]j)}(hhh]j)}(hRecv handler for VEMA MAD agenth]h)}(hjh]hRecv handler for VEMA MAD agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMdhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ib_mad_agent *mad_agent`` pointer to the mad agent ``struct ib_mad_send_buf *send_buf`` Send buffer if found, else NULL ``struct ib_mad_recv_wc *mad_wc`` pointer to mad send work completion information **Description** Handle only set and get methods and respond to other methods as unsupported. Allocate response buffer and address handle for the response MAD.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhhjubj)}(hhh](j)}(h<``struct ib_mad_agent *mad_agent`` pointer to the 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&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMehjubj )}(hhh]h)}(hpointer to the mad agenth]hpointer to the mad agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(hE``struct ib_mad_send_buf *send_buf`` Send buffer if found, else NULL h](j)}(h$``struct ib_mad_send_buf *send_buf``h]j)}(hjh]h struct ib_mad_send_buf *send_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMfhjubj )}(hhh]h)}(hSend buffer if found, else NULLh]hSend buffer if found, else NULL}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMfhj+ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj*hMfhjubj)}(hR``struct ib_mad_recv_wc *mad_wc`` pointer to mad send work completion information h](j)}(h!``struct ib_mad_recv_wc *mad_wc``h]j)}(hjNh]hstruct ib_mad_recv_wc *mad_wc}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMghjHubj )}(hhh]h)}(h/pointer to mad send work completion informationh]h/pointer to mad send work completion information}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMghjdubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]uh1jhjchMghjubeh}(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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMihjubh)}(hHandle only set and get methods and respond to other methods as unsupported. Allocate response buffer and address handle for the response MAD.h]hHandle only set and get methods and respond to other methods as unsupported. Allocate response buffer and address handle for the response MAD.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_get_port (C function)c.vema_get_porthNtauh1hhjhhhNhNubj)}(hhh](j)}(hYstruct opa_vnic_vema_port * vema_get_port (struct opa_vnic_ctrl_port *cport, u8 port_num)h]j)}(hWstruct opa_vnic_vema_port *vema_get_port(struct opa_vnic_ctrl_port *cport, u8 port_num)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubh)}(hhh]j:)}(hopa_vnic_vema_porth]hopa_vnic_vema_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jS vema_get_portsbc.vema_get_portasbuh1hhjhhhjhMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhhhjhMubj)}(h vema_get_porth]j:)}(hj h]h vema_get_port}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h/(struct opa_vnic_ctrl_port *cport, u8 port_num)h](j)}(h struct opa_vnic_ctrl_port *cporth](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDubj&)}(h h]h }(hjUhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDubh)}(hhh]j:)}(hopa_vnic_ctrl_porth]hopa_vnic_ctrl_port}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhmodnameN classnameNjWjZ)}j]]j c.vema_get_portasbuh1hhjDubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjDubj:)}(hcporth]hcport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubj)}(h u8 port_numh](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j c.vema_get_portasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hport_numh]hport_num}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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]j)}(hhh]j)}(hGets the opa_vnic_vema_porth]h)}(hjh]hGets the opa_vnic_vema_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhj%hNubah}(h]h ]h"]h$]h&]jjuh1jhj%hMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj;jj;jjjuh1jhhhjhNhNubj)}(hXO**Parameters** ``struct opa_vnic_ctrl_port *cport`` pointer to control dev ``u8 port_num`` Port number **Description** This function loops through the ports and returns the opa_vnic_vema port structure that is associated with the OPA port number **Return** ptr to requested opa_vnic_vema_port strucure if success, NULL if noth](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj?ubj)}(hhh](j)}(h<``struct opa_vnic_ctrl_port *cport`` pointer to control dev h](j)}(h$``struct opa_vnic_ctrl_port *cport``h]j)}(hjdh]h struct opa_vnic_ctrl_port *cport}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj^ubj )}(hhh]h)}(hpointer to control devh]hpointer to control dev}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubj)}(h``u8 port_num`` Port number h](j)}(h``u8 port_num``h]j)}(hjh]h u8 port_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj )}(hhh]h)}(h Port numberh]h Port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj[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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj?ubh)}(h~This function loops through the ports and returns the opa_vnic_vema port structure that is associated with the OPA port numberh]h~This function loops through the ports and returns the opa_vnic_vema port structure that is associated with the OPA port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj?ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj?ubh)}(hDptr to requested opa_vnic_vema_port strucure if success, NULL if noth]hDptr to requested opa_vnic_vema_port strucure if success, NULL if not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$opa_vnic_vema_send_trap (C function)c.opa_vnic_vema_send_traphNtauh1hhjhhhNhNubj)}(hhh](j)}(hjvoid opa_vnic_vema_send_trap (struct opa_vnic_adapter *adapter, struct __opa_veswport_trap *data, u32 lid)h]j)}(hivoid opa_vnic_vema_send_trap(struct opa_vnic_adapter *adapter, struct __opa_veswport_trap *data, u32 lid)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hjShhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj@hhhjRhMubj)}(hopa_vnic_vema_send_traph]j:)}(hopa_vnic_vema_send_traph]hopa_vnic_vema_send_trap}(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjRhMubj)}(hM(struct opa_vnic_adapter *adapter, struct __opa_veswport_trap *data, u32 lid)h](j)}(h struct opa_vnic_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}ubh)}(hhh]j:)}(hopa_vnic_adapterh]hopa_vnic_adapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjgsbc.opa_vnic_vema_send_trapasbuh1hhj}ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj}ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj}ubj:)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(h struct __opa_veswport_trap *datah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h__opa_veswport_traph]h__opa_veswport_trap}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.opa_vnic_vema_send_trapasbuh1hhjubj&)}(h h]h }(hj/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdatah]hdata}(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(hu32 lidh](h)}(hhh]j:)}(hu32h]hu32}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhmodnameN classnameNjWjZ)}j]]jc.opa_vnic_vema_send_trapasbuh1hhj_ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_ubj:)}(hlidh]hlid}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubeh}(h]h ]h"]h$]h&]jjuh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj<hhhjRhMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhjRhMhj9hhubj)}(hhh]j)}(hhh]j)}(h$This function sends a trap to the EMh]h)}(hjh]h$This function sends a trap to the EM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(hXM**Parameters** ``struct opa_vnic_adapter *adapter`` pointer to vnic adapter ``struct __opa_veswport_trap *data`` pointer to trap data filled by calling function ``u32 lid`` issuers lid (encap_slid from vesw_port_info) **Description** This function is called from the VNIC driver to send a trap if there is somethng the EM should be notified about. These events currently are 1) UNICAST INTERFACE MACADDRESS changes 2) MULTICAST INTERFACE MACADDRESS changes 3) ETHERNET LINK STATUS changes While allocating the send mad the remote site qpn used is 1 as this is the well known QP.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubj)}(hhh](j)}(h=``struct opa_vnic_adapter *adapter`` pointer to vnic adapter h](j)}(h$``struct opa_vnic_adapter *adapter``h]j)}(hjh]h struct opa_vnic_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj ubj )}(hhh]h)}(hpointer to vnic adapterh]hpointer to vnic adapter}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(hU``struct __opa_veswport_trap *data`` pointer to trap data filled by calling function h](j)}(h$``struct __opa_veswport_trap *data``h]j)}(hjHh]h struct __opa_veswport_trap *data}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjBubj )}(hhh]h)}(h/pointer to trap data filled by calling functionh]h/pointer to trap data filled by calling function}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubj)}(h9``u32 lid`` issuers lid (encap_slid from vesw_port_info) h](j)}(h ``u32 lid``h]j)}(hjh]hu32 lid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj{ubj )}(hhh]h)}(h,issuers lid (encap_slid from vesw_port_info)h]h,issuers lid (encap_slid from vesw_port_info)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubh)}(hXXThis function is called from the VNIC driver to send a trap if there is somethng the EM should be notified about. These events currently are 1) UNICAST INTERFACE MACADDRESS changes 2) MULTICAST INTERFACE MACADDRESS changes 3) ETHERNET LINK STATUS changes While allocating the send mad the remote site qpn used is 1 as this is the well known QP.h]hXXThis function is called from the VNIC driver to send a trap if there is somethng the EM should be notified about. These events currently are 1) UNICAST INTERFACE MACADDRESS changes 2) MULTICAST INTERFACE MACADDRESS changes 3) ETHERNET LINK STATUS changes While allocating the send mad the remote site qpn used is 1 as this is the well known QP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_unregister (C function)c.vema_unregisterhNtauh1hhjhhhNhNubj)}(hhh](j)}(h7void vema_unregister (struct opa_vnic_ctrl_port *cport)h]j)}(h6void vema_unregister(struct opa_vnic_ctrl_port *cport)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMsubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMsubj)}(hvema_unregisterh]j:)}(hvema_unregisterh]hvema_unregister}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMsubj)}(h"(struct opa_vnic_ctrl_port *cport)h]j)}(h struct opa_vnic_ctrl_port *cporth](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubh)}(hhh]j:)}(hopa_vnic_ctrl_porth]hopa_vnic_ctrl_port}(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj^modnameN classnameNjWjZ)}j]]j`)}jSj$sbc.vema_unregisterasbuh1hhj:ubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj:ubj:)}(hcporth]hcport}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMsubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMshjhhubj)}(hhh]j)}(hhh]j)}(hUnregisters agenth]h)}(hjh]hUnregisters agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMshjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]jjuh1jhjhMshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMsubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_ctrl_port *cport`` pointer to control port **Description** This deletes the registration by VEMA for MADsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMwhjubj)}(hhh]j)}(h=``struct opa_vnic_ctrl_port *cport`` pointer to control port h](j)}(h$``struct opa_vnic_ctrl_port *cport``h]j)}(hj h]h struct opa_vnic_ctrl_port *cport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMthj ubj )}(hhh]h)}(hpointer to control porth]hpointer to control port}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj) hMthj* ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj) hMthj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjO h]h Description}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMvhjubh)}(h.This deletes the registration by VEMA for MADsh]h.This deletes the registration by VEMA for MADs}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hvema_register (C function)c.vema_registerhNtauh1hhjhhhNhNubj)}(hhh](j)}(h4int vema_register (struct opa_vnic_ctrl_port *cport)h]j)}(h3int vema_register(struct opa_vnic_ctrl_port *cport)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj hhhj hMubj)}(h vema_registerh]j:)}(h vema_registerh]h vema_register}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h"(struct opa_vnic_ctrl_port *cport)h]j)}(h struct opa_vnic_ctrl_port *cporth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hopa_vnic_ctrl_porth]hopa_vnic_ctrl_port}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSj sbc.vema_registerasbuh1hhj ubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hcporth]hcport}(hj*!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj 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]j)}(hhh]j)}(hRegisters agenth]h)}(hjY!h]hRegisters agent}(hj[!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjW!ubah}(h]h ]h"]h$]h&]uh1jhjT!hhhjh!hNubah}(h]h ]h"]h$]h&]jjuh1jhjh!hMhjQ!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj~!jj~!jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_ctrl_port *cport`` pointer to control port **Description** This function registers the handlers for the VEMA MADs **Return** returns 0 on success. non zero otherwiseh](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubj)}(hhh]j)}(h=``struct opa_vnic_ctrl_port *cport`` pointer to control port h](j)}(h$``struct opa_vnic_ctrl_port *cport``h]j)}(hj!h]h struct opa_vnic_ctrl_port *cport}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubj )}(hhh]h)}(hpointer to control porth]hpointer to control port}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj!ubah}(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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubh)}(h6This function registers the handlers for the VEMA MADsh]h6This function registers the handlers for the VEMA MADs}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubh)}(h **Return**h]j)}(hj "h]hReturn}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubh)}(h(returns 0 on success. non zero otherwiseh]h(returns 0 on success. non zero otherwise}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%opa_vnic_ctrl_config_dev (C function)c.opa_vnic_ctrl_config_devhNtauh1hhjhhhNhNubj)}(hhh](j)}(hIvoid opa_vnic_ctrl_config_dev (struct opa_vnic_ctrl_port *cport, bool en)h]j)}(hHvoid opa_vnic_ctrl_config_dev(struct opa_vnic_ctrl_port *cport, bool en)h](j)}(hvoidh]hvoid}(hjN"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ"hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj]"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjJ"hhhj\"hMubj)}(hopa_vnic_ctrl_config_devh]j:)}(hopa_vnic_ctrl_config_devh]hopa_vnic_ctrl_config_dev}(hjo"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjk"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJ"hhhj\"hMubj)}(h+(struct opa_vnic_ctrl_port *cport, bool en)h](j)}(h struct opa_vnic_ctrl_port *cporth](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubh)}(hhh]j:)}(hopa_vnic_ctrl_porth]hopa_vnic_ctrl_port}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"modnameN classnameNjWjZ)}j]]j`)}jSjq"sbc.opa_vnic_ctrl_config_devasbuh1hhj"ubj&)}(h h]h }(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubju)}(hjxh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj"ubj:)}(hcporth]hcport}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hbool enh](j)}(hj*[h]hbool}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj&)}(h h]h }(hj #hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"ubj:)}(henh]hen}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhjJ"hhhj\"hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjF"hhhj\"hMubah}(h]jA"ah ](jjeh"]h$]h&]jj)jhuh1jhj\"hMhjC"hhubj)}(hhh]j)}(hhh]j)}(hmThis function sends a trap to the EM by way of ib_modify_port to indicate support for ethernet on the fabric.h]h)}(hjG#h]hmThis function sends a trap to the EM by way of ib_modify_port to indicate support for ethernet on the fabric.}(hjI#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjE#ubah}(h]h ]h"]h$]h&]uh1jhjB#hhhjV#hNubah}(h]h ]h"]h$]h&]jjuh1jhjV#hMhj?#hhubah}(h]h ]h"]h$]h&]uh1jhjC"hhhj\"hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjl#jjl#jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct opa_vnic_ctrl_port *cport`` pointer to control port ``bool en`` enable or disable ethernet on fabric supporth](h)}(h**Parameters**h]j)}(hjv#h]h Parameters}(hjx#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt#ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjp#ubj)}(hhh](j)}(h=``struct opa_vnic_ctrl_port *cport`` pointer to control port h](j)}(h$``struct opa_vnic_ctrl_port *cport``h]j)}(hj#h]h struct opa_vnic_ctrl_port *cport}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj#ubj )}(hhh]h)}(hpointer to control porth]hpointer to control port}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubj)}(h8``bool en`` enable or disable ethernet on fabric supporth](j)}(h ``bool en``h]j)}(hj#h]hbool en}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj#ubj )}(hhh]h)}(h,enable or disable ethernet on fabric supporth]h,enable or disable ethernet on fabric support}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhjp#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"opa_vnic_vema_add_one (C function)c.opa_vnic_vema_add_onehNtauh1hhjhhhNhNubj)}(hhh](j)}(h4int opa_vnic_vema_add_one (struct ib_device *device)h]j)}(h3int opa_vnic_vema_add_one(struct ib_device *device)h](j)}(hinth]hint}(hj($hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$$hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj7$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$$hhhj6$hMubj)}(hopa_vnic_vema_add_oneh]j:)}(hopa_vnic_vema_add_oneh]hopa_vnic_vema_add_one}(hjI$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjE$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$$hhhj6$hMubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hje$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhja$ubj&)}(h h]h }(hjr$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja$ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj$modnameN classnameNjWjZ)}j]]j`)}jSjK$sbc.opa_vnic_vema_add_oneasbuh1hhja$ubj&)}(h h]h }(hj$hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hja$ubju)}(hjxh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthja$ubj:)}(hdeviceh]hdevice}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hja$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]$ubah}(h]h ]h"]h$]h&]jjuh1jhj$$hhhj6$hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj $hhhj6$hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj6$hMhj$hhubj)}(hhh]j)}(hhh]j)}(hHandle new ib deviceh]h)}(hj$h]hHandle new ib device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hNubah}(h]h ]h"]h$]h&]jjuh1jhj$hMhj$hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj6$hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj%jj%jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_device *device`` ib device pointer **Description** Allocate the vnic control port and initialize 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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj%ubj)}(hhh]j)}(h/``struct ib_device *device`` ib device pointer h](j)}(h``struct ib_device *device``h]j)}(hj;%h]hstruct ib_device *device}(hj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9%ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj5%ubj )}(hhh]h)}(hib device pointerh]hib device pointer}(hjT%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP%hMhjQ%ubah}(h]h ]h"]h$]h&]uh1j hj5%ubeh}(h]h ]h"]h$]h&]uh1jhjP%hMhj2%ubah}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]j)}(hjv%h]h Description}(hjx%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt%ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj%ubh)}(h1Allocate the vnic control port and initialize it.h]h1Allocate the vnic control port and initialize it.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"opa_vnic_vema_rem_one (C function)c.opa_vnic_vema_rem_onehNtauh1hhjhhhNhNubj)}(hhh](j)}(hHvoid opa_vnic_vema_rem_one (struct ib_device *device, void *client_data)h]j)}(hGvoid opa_vnic_vema_rem_one(struct ib_device *device, void *client_data)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMubj&)}(h h]h }(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%hhhj%hMubj)}(hopa_vnic_vema_rem_oneh]j:)}(hopa_vnic_vema_rem_oneh]hopa_vnic_vema_rem_one}(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hMubj)}(h-(struct ib_device *device, void *client_data)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%ubj&)}(h h]h }(hj&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj&modnameN classnameNjWjZ)}j]]j`)}jSj%sbc.opa_vnic_vema_rem_oneasbuh1hhj%ubj&)}(h h]h }(hj6&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%ubju)}(hjxh]h*}(hjD&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj%ubj:)}(hdeviceh]hdevice}(hjQ&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hvoid *client_datah](j)}(hvoidh]hvoid}(hjj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf&ubj&)}(h h]h }(hjx&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjf&ubju)}(hjxh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjf&ubj:)}(h client_datah]h client_data}(hj&hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjf&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]j)}(hhh]j)}(hHandle ib device removalh]h)}(hj&h]hHandle ib device removal}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hNubah}(h]h ]h"]h$]h&]jjuh1jhj&hMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj&jj&jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ib_device *device`` ib device pointer ``void *client_data`` ib client data **Description** Uninitialize and free the vnic control port.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj&ubj)}(hhh](j)}(h/``struct ib_device *device`` ib device pointer 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&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj 'ubj )}(hhh]h)}(hib device pointerh]hib device pointer}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%'hMhj&'ubah}(h]h ]h"]h$]h&]uh1j hj 'ubeh}(h]h ]h"]h$]h&]uh1jhj%'hMhj'ubj)}(h%``void *client_data`` ib client data h](j)}(h``void *client_data``h]j)}(hjI'h]hvoid *client_data}(hjK'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG'ubah}(h]h ]h"]h$]h&]uh1jhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhjC'ubj )}(hhh]h)}(hib client datah]hib client data}(hjb'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^'hMhj_'ubah}(h]h ]h"]h$]h&]uh1j hjC'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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj&ubh)}(h,Uninitialize and free the vnic control port.h]h,Uninitialize and free the vnic control port.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:107: ./drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]!omni-path-opa-virtual-nic-supportah ]h"]#omni-path (opa) virtual nic supportah$]h&]uh1hhjRhhhhhK`ubh)}(hhh](h)}(h,InfiniBand SCSI RDMA protocol target supporth]h,InfiniBand SCSI RDMA protocol target support}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhKoubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_command_state (C enum)c.srpt_command_statehNtauh1hhj'hhhNhNubj)}(hhh](j)}(hsrpt_command_stateh]j)}(henum srpt_command_stateh](j)}(hj%h]henum}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj&)}(h h]h }(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'hhhj'hKubj)}(hsrpt_command_stateh]j:)}(hj'h]hsrpt_command_state}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubah}(h]h ](jjeh"]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"SCSI command state managed by SRPTh]h"SCSI command state managed by SRPT}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj!(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hKubeh}(h]h ](jQenumeh"]h$]h&]jjQjj<(jj<(jjjuh1jhhhj'hNhNubj)}(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)}(hjF(h]h Constants}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD(ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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)}(hje(h]hSRPT_STATE_NEW}(hjg(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1hhjz(hKhj{(ubah}(h]h ]h"]h$]h&]uh1j hj_(ubeh}(h]h ]h"]h$]h&]uh1jhjz(hKhj\(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)}(hj(h]hSRPT_STATE_NEED_DATA}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj(ubj )}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj\(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)}(hj(h]hSRPT_STATE_DATA_IN}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj(ubj )}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj\(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)}(hj)h]hSRPT_STATE_CMD_RSP_SENT}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1j hj )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)}(hjK)h]hSRPT_STATE_MGMT}(hjM)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjE)ubj )}(hhh]h)}(h*Processing a SCSI task management command.h]h*Processing a SCSI task management command.}(hjd)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`)hKhja)ubah}(h]h ]h"]h$]h&]uh1j hjE)ubeh}(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)}(hj)h]hSRPT_STATE_MGMT_RSP_SENT}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1j hj~)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj\(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)}(hj)h]hSRPT_STATE_DONE}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj)ubj )}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj\(ubeh}(h]h ]h"]h$]h&]uh1jhj@(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_ioctx (C struct) c.srpt_ioctxhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h srpt_ioctxh]j)}(hstruct srpt_ioctxh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj&)}(h h]h }(hj%*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj*hhhj$*hKubj)}(h srpt_ioctxh]j:)}(hj*h]h srpt_ioctx}(hj7*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3*ubah}(h]h ](jjeh"]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#shared SRPT I/O context informationh]h#shared SRPT I/O context information}(hjY*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjV*hhubah}(h]h ]h"]h$]h&]uh1jhj *hhhj$*hKubeh}(h]h ](jQstructeh"]h$]h&]jjQjjq*jjq*jjjuh1jhhhj'hNhNubj)}(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&]uh1jhjy*ubh:}(hjy*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhju*ubjS)}(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; };}hj*sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhju*ubh)}(h **Members**h]j)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhju*ubj)}(hhh](j)}(h"``cqe`` Completion queue element. h](j)}(h``cqe``h]j)}(hj*h]hcqe}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj*ubj )}(hhh]h)}(hCompletion queue element.h]hCompletion queue element.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj*ubj)}(h``buf`` Pointer to the buffer. h](j)}(h``buf``h]j)}(hj*h]hbuf}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj*ubj )}(hhh]h)}(hPointer to the buffer.h]hPointer to the buffer.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj*ubj)}(h#``dma`` DMA address of the buffer. h](j)}(h``dma``h]j)}(hj8+h]hdma}(hj:+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6+ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2+ubj )}(hhh]h)}(hDMA address of the buffer.h]hDMA address of the buffer.}(hjQ+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM+hKhjN+ubah}(h]h ]h"]h$]h&]uh1j hj2+ubeh}(h]h ]h"]h$]h&]uh1jhjM+hKhj*ubj)}(hR``offset`` Offset of the first byte in **buf** and **dma** that is actually used. h](j)}(h ``offset``h]j)}(hjq+h]hoffset}(hjs+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo+ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjk+ubj )}(hhh]h)}(hFOffset of the first byte in **buf** and **dma** that is actually used.h](hOffset of the first byte in }(hj+hhhNhNubj)}(h**buf**h]hbuf}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh and }(hj+hhhNhNubj)}(h**dma**h]hdma}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh that is actually used.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1j hjk+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj*ubj)}(h;``index`` Index of the I/O context in its ioctx_ring array.h](j)}(h ``index``h]j)}(hj+h]hindex}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj+ubj )}(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.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj+ubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj*ubeh}(h]h ]h"]h$]h&]uh1jhju*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_recv_ioctx (C struct)c.srpt_recv_ioctxhNtauh1hhj'hhhNhNubj)}(hhh](j)}(hsrpt_recv_ioctxh]j)}(hstruct srpt_recv_ioctxh](j)}(hjh]hstruct}(hj(,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$,hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj&)}(h h]h }(hj6,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$,hhhj5,hKubj)}(hsrpt_recv_ioctxh]j:)}(hj",h]hsrpt_recv_ioctx}(hjH,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjD,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$,hhhj5,hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj ,hhhj5,hKubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jhj5,hKhj,hhubj)}(hhh]h)}(hSRPT receive I/O contexth]hSRPT receive I/O context}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjg,hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj5,hKubeh}(h]h ](jQstructeh"]h$]h&]jjQjj,jj,jjjuh1jhhhj'hNhNubj)}(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}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh:}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj,ubjS)}(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; };}hj,sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj,ubh)}(h **Members**h]j)}(hj,h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj,ubj)}(hhh](j)}(h``ioctx`` See above. h](j)}(h ``ioctx``h]j)}(hj,h]hioctx}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj,ubj )}(hhh]h)}(h See above.h]h See above.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj,ubj)}(h@``wait_list`` Node for insertion in srpt_rdma_ch.cmd_wait_list. h](j)}(h ``wait_list``h]j)}(hj-h]h wait_list}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1j hj -ubeh}(h]h ]h"]h$]h&]uh1jhj%-hKhj,ubj)}(h.``byte_len`` Number of bytes in **ioctx.buf**.h](j)}(h ``byte_len``h]j)}(hjI-h]hbyte_len}(hjK-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjC-ubj )}(hhh]h)}(h!Number of bytes in **ioctx.buf**.h](hNumber of bytes in }(hjb-hhhNhNubj)}(h **ioctx.buf**h]h ioctx.buf}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb-ubh.}(hjb-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj_-ubah}(h]h ]h"]h$]h&]uh1j hjC-ubeh}(h]h ]h"]h$]h&]uh1jhj^-hKhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_send_ioctx (C struct)c.srpt_send_ioctxhNtauh1hhj'hhhNhNubj)}(hhh](j)}(hsrpt_send_ioctxh]j)}(hstruct srpt_send_ioctxh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj&)}(h h]h }(hj-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-hhhj-hKubj)}(hsrpt_send_ioctxh]j:)}(hj-h]hsrpt_send_ioctx}(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ](jjeh"]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)}(hSRPT send I/O contexth]hSRPT send I/O context}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj-hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hKubeh}(h]h ](jQstructeh"]h$]h&]jjQjj.jj.jjjuh1jhhhj'hNhNubj)}(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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubjS)}(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]; };}hj4.sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubh)}(h **Members**h]j)}(hjE.h]hMembers}(hjG.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC.ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubj)}(hhh](j)}(h``ioctx`` See above. h](j)}(h ``ioctx``h]j)}(hjd.h]hioctx}(hjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj^.ubj )}(hhh]h)}(h See above.h]h See above.}(hj}.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy.hKhjz.ubah}(h]h ]h"]h$]h&]uh1j hj^.ubeh}(h]h ]h"]h$]h&]uh1jhjy.hKhj[.ubj)}(h``ch`` Channel pointer. h](j)}(h``ch``h]j)}(hj.h]hch}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubj )}(hhh]h)}(hChannel pointer.h]hChannel pointer.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj[.ubj)}(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)}(hj.h]h 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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubj )}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj.ubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj[.ubj)}(hH``s_rw_ctx`` **rw_ctxs** points here if only a single rw_ctx is needed. h](j)}(h ``s_rw_ctx``h]j)}(hj/h]hs_rw_ctx}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1j hj /ubeh}(h]h ]h"]h$]h&]uh1jhj%/hKhj[.ubj)}(h&``rw_ctxs`` RDMA read/write contexts. h](j)}(h ``rw_ctxs``h]j)}(hjW/h]hrw_ctxs}(hjY/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjQ/ubj )}(hhh]h)}(hRDMA read/write contexts.h]hRDMA read/write contexts.}(hjp/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl/hKhjm/ubah}(h]h ]h"]h$]h&]uh1j hjQ/ubeh}(h]h ]h"]h$]h&]uh1jhjl/hKhj[.ubj)}(h+``imm_sg`` Scatterlist for immediate data. h](j)}(h ``imm_sg``h]j)}(hj/h]himm_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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj/ubj )}(hhh]h)}(hScatterlist for immediate data.h]hScatterlist for immediate data.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj[.ubj)}(h,``rdma_cqe`` RDMA completion queue element. h](j)}(h ``rdma_cqe``h]j)}(hj/h]hrdma_cqe}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj/ubj )}(hhh]h)}(hRDMA completion queue element.h]hRDMA completion queue element.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj[.ubj)}(h``state`` I/O context state. h](j)}(h ``state``h]j)}(hj0h]hstate}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj/ubj )}(hhh]h)}(hI/O context state.h]hI/O context state.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj[.ubj)}(h,``cmd`` Target core command data structure. h](j)}(h``cmd``h]j)}(hj;0h]hcmd}(hj=0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj90ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj50ubj )}(hhh]h)}(h#Target core command data structure.h]h#Target core command data structure.}(hjT0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP0hKhjQ0ubah}(h]h ]h"]h$]h&]uh1j hj50ubeh}(h]h ]h"]h$]h&]uh1jhjP0hKhj[.ubj)}(hB``n_rdma`` Number of work requests needed to transfer this ioctx. h](j)}(h ``n_rdma``h]j)}(hjt0h]hn_rdma}(hjv0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjn0ubj )}(hhh]h)}(h6Number of work requests needed to transfer this ioctx.h]h6Number of work requests needed to transfer this ioctx.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1j hjn0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj[.ubj)}(h$``n_rw_ctx`` Size of rw_ctxs array. h](j)}(h ``n_rw_ctx``h]j)}(hj0h]hn_rw_ctx}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj0ubj )}(hhh]h)}(hSize of rw_ctxs array.h]hSize of rw_ctxs array.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj[.ubj)}(hL``queue_status_only`` Send a SCSI status back to the initiator but no data. h](j)}(h``queue_status_only``h]j)}(hj0h]hqueue_status_only}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj0ubj )}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj[.ubj)}(h6``sense_data`` Sense data to be sent to the initiator.h](j)}(h``sense_data``h]j)}(hj1h]h sense_data}(hj!1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj1ubj )}(hhh]h)}(h'Sense data to be sent to the initiator.h]h'Sense data to be sent to the initiator.}(hj81hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj51ubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhj41hKhj[.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrdma_ch_state (C enum)c.rdma_ch_statehNtauh1hhj'hhhNhNubj)}(hhh](j)}(h rdma_ch_stateh]j)}(henum rdma_ch_stateh](j)}(hj%h]henum}(hjy1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhju1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hju1hhhj1hKubj)}(h rdma_ch_stateh]j:)}(hjs1h]h rdma_ch_state}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhju1hhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjq1hhhj1hKubah}(h]jl1ah ](jjeh"]h$]h&]jj)jhuh1jhj1hKhjn1hhubj)}(hhh]h)}(hSRP channel stateh]hSRP channel state}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj1hhubah}(h]h ]h"]h$]h&]uh1jhjn1hhhj1hKubeh}(h]h ](jQenumeh"]h$]h&]jjQjj1jj1jjjuh1jhhhj'hNhNubj)}(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)}(hj1h]h Constants}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj1ubj)}(hhh](j)}(h7``CH_CONNECTING`` QP is in RTR state; waiting for RTU. h](j)}(h``CH_CONNECTING``h]j)}(hj1h]h CH_CONNECTING}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj1ubj )}(hhh]h)}(h$QP is in RTR state; waiting for RTU.h]h$QP is in RTR state; waiting for RTU.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj1ubj)}(h ``CH_LIVE`` QP is in RTS state. h](j)}(h ``CH_LIVE``h]j)}(hj52h]hCH_LIVE}(hj72hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj32ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj/2ubj )}(hhh]h)}(hQP is in RTS state.h]hQP is in RTS state.}(hjN2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ2hKhjK2ubah}(h]h ]h"]h$]h&]uh1j hj/2ubeh}(h]h ]h"]h$]h&]uh1jhjJ2hKhj1ubj)}(hX``CH_DISCONNECTING`` DREQ has been sent and waiting for DREP or DREQ has been received. h](j)}(h``CH_DISCONNECTING``h]j)}(hjn2h]hCH_DISCONNECTING}(hjp2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjh2ubj )}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2ubah}(h]h ]h"]h$]h&]uh1j hjh2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj1ubj)}(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)}(hj2h]h CH_DRAINING}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2ubj )}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj1ubj)}(h6``CH_DISCONNECTED`` Last completion has been received.h](j)}(h``CH_DISCONNECTED``h]j)}(hj2h]hCH_DISCONNECTED}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2ubj )}(hhh]h)}(h"Last completion has been received.h]h"Last completion has been received.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj2ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_rdma_ch (C struct)c.srpt_rdma_chhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h srpt_rdma_chh]j)}(hstruct srpt_rdma_chh](j)}(hjh]hstruct}(hj<3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj83hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMubj&)}(h h]h }(hjJ3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj83hhhjI3hMubj)}(h srpt_rdma_chh]j:)}(hj63h]h srpt_rdma_ch}(hj\3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjX3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj83hhhjI3hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj43hhhjI3hMubah}(h]j/3ah ](jjeh"]h$]h&]jj)jhuh1jhjI3hMhj13hhubj)}(hhh]h)}(h RDMA channelh]h RDMA channel}(hj~3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj{3hhubah}(h]h ]h"]h$]h&]uh1jhj13hhhjI3hMubeh}(h]h ](jQstructeh"]h$]h&]jjQjj3jj3jjjuh1jhhhj'hNhNubj)}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj3ubjS)}(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; };}hj3sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj3ubh)}(h **Members**h]j)}(hj3h]hMembers}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM*hj3ubj)}(hhh](j)}(h5``nexus`` I_T nexus this channel is associated with. h](j)}(h ``nexus``h]j)}(hj3h]hnexus}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj3ubj )}(hhh]h)}(h*I_T nexus this channel is associated with.h]h*I_T nexus this channel is associated with.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj3ubj)}(h?``qp`` IB queue pair used for communicating over this channel. h](j)}(h``qp``h]j)}(hj$4h]hqp}(hj&4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj4ubj )}(hhh]h)}(h7IB queue pair used for communicating over this channel.h]h7IB queue pair used for communicating over this channel.}(hj=4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj94hKhj:4ubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhj94hKhj3ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj]4h]h{unnamed_union}}(hj_4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhjW4ubj )}(hhh]h)}(h anonymoush]h anonymous}(hjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr4hKhjs4ubah}(h]h ]h"]h$]h&]uh1j hjW4ubeh}(h]h ]h"]h$]h&]uh1jhjr4hKhj3ubj)}(h``ib_cm`` See below. h](j)}(h ``ib_cm``h]j)}(hj4h]hib_cm}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhKhj4ubj )}(hhh]h)}(h See below.h]h See below.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj3ubj)}(h6``ib_cm.cm_id`` IB CM ID associated with the channel. h](j)}(h``ib_cm.cm_id``h]j)}(hj4h]h ib_cm.cm_id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj4ubj )}(hhh]h)}(h%IB CM ID associated with the channel.h]h%IB CM ID associated with the channel.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubj)}(h``rdma_cm`` See below. h](j)}(h ``rdma_cm``h]j)}(hj5h]hrdma_cm}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj5ubj )}(hhh]h)}(h See below.h]h See below.}(hj!5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj3ubj)}(h:``rdma_cm.cm_id`` RDMA CM ID associated with the channel. h](j)}(h``rdma_cm.cm_id``h]j)}(hjA5h]h rdma_cm.cm_id}(hjC5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj;5ubj )}(hhh]h)}(h'RDMA CM ID associated with the channel.h]h'RDMA CM ID associated with the channel.}(hjZ5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV5hMhjW5ubah}(h]h ]h"]h$]h&]uh1j hj;5ubeh}(h]h ]h"]h$]h&]uh1jhjV5hMhj3ubj)}(h-``cq`` IB completion queue for this channel. h](j)}(h``cq``h]j)}(hjz5h]hcq}(hj|5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjt5ubj )}(hhh]h)}(h%IB completion queue for this channel.h]h%IB completion queue for this channel.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1j hjt5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj3ubj)}(h&``cq_size`` Number of CQEs in **cq**. h](j)}(h ``cq_size``h]j)}(hj5h]hcq_size}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj5ubj )}(hhh]h)}(hNumber of CQEs in **cq**.h](hNumber of CQEs in }(hj5hhhNhNubj)}(h**cq**h]hcq}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj3ubj)}(h"``zw_cqe`` Zero-length write CQE. h](j)}(h ``zw_cqe``h]j)}(hj5h]hzw_cqe}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj5ubj )}(hhh]h)}(hZero-length write CQE.h]hZero-length write CQE.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj3ubj)}(h``rcu`` RCU head. h](j)}(h``rcu``h]j)}(hj76h]hrcu}(hj96hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj56ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj16ubj )}(hhh]h)}(h RCU head.h]h RCU head.}(hjP6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL6hMhjM6ubah}(h]h ]h"]h$]h&]uh1j hj16ubeh}(h]h ]h"]h$]h&]uh1jhjL6hMhj3ubj)}(h ``kref`` kref for this channel. h](j)}(h``kref``h]j)}(hjp6h]hkref}(hjr6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjj6ubj )}(hhh]h)}(hkref for this channel.h]hkref for this channel.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1j hjj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj3ubj)}(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)}(hj6h]hclosed}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hj6ubj )}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj6ubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj3ubj)}(h#``rq_size`` IB receive queue size. h](j)}(h ``rq_size``h]j)}(hj6h]hrq_size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hj6ubj )}(hhh]h)}(hIB receive queue size.h]hIB receive queue size.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj3ubj)}(hC``max_rsp_size`` Maximum size of an RSP response message in bytes. h](j)}(h``max_rsp_size``h]j)}(hj7h]h max_rsp_size}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hj7ubj )}(hhh]h)}(h1Maximum size of an RSP response message in bytes.h]h1Maximum size of an RSP response message in bytes.}(hj57hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj17hM hj27ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj17hM hj3ubj)}(hE``sq_wr_avail`` number of work requests available in the send queue. h](j)}(h``sq_wr_avail``h]j)}(hjU7h]h sq_wr_avail}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hjO7ubj )}(hhh]h)}(h4number of work requests available in the send queue.h]h4number of work requests available in the send queue.}(hjn7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj7hM hjk7ubah}(h]h ]h"]h$]h&]uh1j hjO7ubeh}(h]h ]h"]h$]h&]uh1jhjj7hM hj3ubj)}(hK``sport`` pointer to the information of the HCA port used by this channel. h](j)}(h ``sport``h]j)}(hj7h]hsport}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj7ubj )}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj3ubj)}(hG``max_ti_iu_len`` maximum target-to-initiator information unit length. h](j)}(h``max_ti_iu_len``h]j)}(hj7h]h max_ti_iu_len}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj7ubj )}(hhh]h)}(h4maximum target-to-initiator information unit length.h]h4maximum target-to-initiator information unit length.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj3ubj)}(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)}(hj8h]hreq_lim}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj7ubj )}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj8ubah}(h]h ]h"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj3ubj)}(hH``req_lim_delta`` Number of credits not yet sent back to the initiator. h](j)}(h``req_lim_delta``h]j)}(hj;8h]h req_lim_delta}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj98ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj58ubj )}(hhh]h)}(h5Number of credits not yet sent back to the initiator.h]h5Number of credits not yet sent back to the initiator.}(hjT8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP8hMhjQ8ubah}(h]h ]h"]h$]h&]uh1j hj58ubeh}(h]h ]h"]h$]h&]uh1jhjP8hMhj3ubj)}(hE``imm_data_offset`` Offset from start of SRP_CMD for immediate data. h](j)}(h``imm_data_offset``h]j)}(hjt8h]himm_data_offset}(hjv8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjn8ubj )}(hhh]h)}(h0Offset from start of SRP_CMD for immediate data.h]h0Offset from start of SRP_CMD for immediate data.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hjn8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj3ubj)}(h+``spinlock`` Protects free_list and state. h](j)}(h ``spinlock``h]j)}(hj8h]hspinlock}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj8ubj )}(hhh]h)}(hProtects free_list and state.h]hProtects free_list and state.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj3ubj)}(h6``state`` channel state. See also enum rdma_ch_state. h](j)}(h ``state``h]j)}(hj8h]hstate}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj8ubj )}(hhh]h)}(h+channel state. See also enum rdma_ch_state.h]h+channel state. See also enum rdma_ch_state.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj3ubj)}(h1``rsp_buf_cache`` kmem_cache for **ioctx_ring**. h](j)}(h``rsp_buf_cache``h]j)}(hj9h]h rsp_buf_cache}(hj!9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj9ubj )}(hhh]h)}(hkmem_cache for **ioctx_ring**.h](hkmem_cache for }(hj89hhhNhNubj)}(h**ioctx_ring**h]h ioctx_ring}(hj@9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj89ubh.}(hj89hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj49hMhj59ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj49hMhj3ubj)}(h``ioctx_ring`` Send ring. h](j)}(h``ioctx_ring``h]j)}(hjj9h]h ioctx_ring}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjd9ubj )}(hhh]h)}(h Send ring.h]h Send ring.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hjd9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj3ubj)}(h6``req_buf_cache`` kmem_cache for **ioctx_recv_ring**. h](j)}(h``req_buf_cache``h]j)}(hj9h]h req_buf_cache}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj9ubj )}(hhh]h)}(h#kmem_cache for **ioctx_recv_ring**.h](hkmem_cache for }(hj9hhhNhNubj)}(h**ioctx_recv_ring**h]hioctx_recv_ring}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj3ubj)}(h.``ioctx_recv_ring`` Receive I/O context ring. h](j)}(h``ioctx_recv_ring``h]j)}(hj9h]hioctx_recv_ring}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj9ubj )}(hhh]h)}(hReceive I/O context ring.h]hReceive I/O context ring.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j hj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj3ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1j hj!:ubeh}(h]h ]h"]h$]h&]uh1jhj<:hMhj3ubj)}(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}(hjb:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjZ:ubj )}(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.}(hjy:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjv:ubah}(h]h ]h"]h$]h&]uh1j hjZ:ubeh}(h]h ]h"]h$]h&]uh1jhju:hMhj3ubj)}(h9``pkey`` P_Key of the IB partition for this SRP channel. h](j)}(h``pkey``h]j)}(hj:h]hpkey}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM hj:ubj )}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM hj:ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM hj3ubj)}(hI``using_rdma_cm`` Whether the RDMA/CM or IB/CM is used for this channel. h](j)}(h``using_rdma_cm``h]j)}(hj:h]h using_rdma_cm}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj:ubj )}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj3ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj;ubj )}(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&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj!;hMhj3ubj)}(h?``sess`` Session information associated with this SRP channel. h](j)}(h``sess``h]j)}(hjE;h]hsess}(hjG;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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&]uh1hhjZ;hM!hj[;ubah}(h]h ]h"]h$]h&]uh1j hj?;ubeh}(h]h ]h"]h$]h&]uh1jhjZ;hM!hj3ubj)}(h``sess_name`` Session name. h](j)}(h ``sess_name``h]j)}(hj~;h]h sess_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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM"hjx;ubj )}(hhh]h)}(h Session name.h]h Session name.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM"hj;ubah}(h]h ]h"]h$]h&]uh1j hjx;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM"hj3ubj)}(h=``release_work`` Allows scheduling of srpt_release_channel().h](j)}(h``release_work``h]j)}(hj;h]h release_work}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM"hj;ubj )}(hhh]h)}(h,Allows scheduling of srpt_release_channel().h]h,Allows scheduling of srpt_release_channel().}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM#hj;ubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM"hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_nexus (C struct) c.srpt_nexushNtauh1hhj'hhhNhNubj)}(hhh](j)}(h srpt_nexush]j)}(hstruct srpt_nexush](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj <hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM)ubj&)}(h h]h }(hj<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj <hhhj<hM)ubj)}(h srpt_nexush]j:)}(hj <h]h srpt_nexus}(hj1<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-<ubah}(h]h ](jjeh"]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 I_T nexush]h I_T nexus}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMNhjP<hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hM)ubeh}(h]h ](jQstructeh"]h$]h&]jjQjjk<jjk<jjjuh1jhhhj'hNhNubj)}(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}(hjw<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs<ubh:}(hjs<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMRhjo<ubjS)}(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]; };}hj<sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMThjo<ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM\hjo<ubj)}(hhh](j)}(h*``rcu`` RCU head for this data structure. h](j)}(h``rcu``h]j)}(hj<h]hrcu}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMPhj<ubj )}(hhh]h)}(h!RCU head for this data structure.h]h!RCU head for this data structure.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMPhj<ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMPhj<ubj)}(h*``entry`` srpt_port.nexus_list list node. h](j)}(h ``entry``h]j)}(hj<h]hentry}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMQhj<ubj )}(hhh]h)}(hsrpt_port.nexus_list list node.h]hsrpt_port.nexus_list list node.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMQhj=ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hMQhj<ubj)}(hD``ch_list`` struct srpt_rdma_ch list. Protected by srpt_port.mutex. h](j)}(h ``ch_list``h]j)}(hj2=h]hch_list}(hj4=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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.}(hjK=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG=hMRhjH=ubah}(h]h ]h"]h$]h&]uh1j hj,=ubeh}(h]h ]h"]h$]h&]uh1jhjG=hMRhj<ubj)}(hK``i_port_id`` 128-bit initiator port identifier copied from SRP_LOGIN_REQ. h](j)}(h ``i_port_id``h]j)}(hjk=h]h i_port_id}(hjm=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMShje=ubj )}(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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMShj=ubah}(h]h ]h"]h$]h&]uh1j hje=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMShj<ubj)}(hG``t_port_id`` 128-bit target port identifier copied from SRP_LOGIN_REQ.h](j)}(h ``t_port_id``h]j)}(hj=h]h t_port_id}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMShj=ubj )}(hhh]h)}(h9128-bit target port identifier copied from SRP_LOGIN_REQ.h]h9128-bit target port identifier copied from SRP_LOGIN_REQ.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMThj=ubah}(h]h ]h"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMShj<ubeh}(h]h ]h"]h$]h&]uh1jhjo<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_port_attrib (C struct)c.srpt_port_attribhNtauh1hhj'hhhNhNubj)}(hhh](j)}(hsrpt_port_attribh]j)}(hstruct srpt_port_attribh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMZubj&)}(h h]h }(hj >hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=hhhj >hMZubj)}(hsrpt_port_attribh]j:)}(hj=h]hsrpt_port_attrib}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj >hMZubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj=hhhj >hMZubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhj >hMZhj=hhubj)}(hhh]h)}(hattributes for SRPT porth]hattributes for SRPT port}(hj@>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM^hj=>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj >hMZubeh}(h]h ](jQstructeh"]h$]h&]jjQjjX>jjX>jjjuh1jhhhj'hNhNubj)}(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}(hjd>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`>ubh:}(hj`>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhj\>ubjS)}(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&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMdhj\>ubh)}(h **Members**h]j)}(hj>h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./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)}(hj>h]hsrp_max_rdma_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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM`hj>ubj )}(hhh]h)}(h7Maximum size of SRP RDMA transfers for new connections.h]h7Maximum size of SRP RDMA transfers for new connections.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM`hj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM`hj>ubj)}(hE``srp_max_rsp_size`` Maximum size of SRP response messages in bytes. h](j)}(h``srp_max_rsp_size``h]j)}(hj>h]hsrp_max_rsp_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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMahj>ubj )}(hhh]h)}(h/Maximum size of SRP response messages in bytes.h]h/Maximum size of SRP response messages in bytes.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMahj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMahj>ubj)}(h1``srp_sq_size`` Shared receive queue (SRQ) size. h](j)}(h``srp_sq_size``h]j)}(hj?h]h srp_sq_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:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhj?ubj )}(hhh]h)}(h Shared receive queue (SRQ) size.h]h Shared receive queue (SRQ) size.}(hj8?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4?hMbhj5?ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1jhj4?hMbhj>ubj)}(h&``use_srq`` Whether or not to use SRQ.h](j)}(h ``use_srq``h]j)}(hjX?h]huse_srq}(hjZ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMbhjR?ubj )}(hhh]h)}(hWhether or not to use SRQ.h]hWhether or not to use SRQ.}(hjq?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMchjn?ubah}(h]h ]h"]h$]h&]uh1j hjR?ubeh}(h]h ]h"]h$]h&]uh1jhjm?hMbhj>ubeh}(h]h ]h"]h$]h&]uh1jhj\>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_tpg (C struct) c.srpt_tpghNtauh1hhj'hhhNhNubj)}(hhh](j)}(hsrpt_tpgh]j)}(hstruct srpt_tpgh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMiubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?hhhj?hMiubj)}(hsrpt_tpgh]j:)}(hj?h]hsrpt_tpg}(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj?hMiubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj?hhhj?hMiubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhj?hMihj?hhubj)}(hhh]h)}(h0information about a single "target portal group"h]h4information about a single “target portal group”}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMlhj?hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMiubeh}(h]h ](jQstructeh"]h$]h&]jjQjj @jj @jjjuh1jhhhj'hNhNubj)}(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}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh:}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphj@ubjS)}(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; };}hj1@sbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMrhj@ubh)}(h **Members**h]j)}(hjB@h]hMembers}(hjD@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@@ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMxhj@ubj)}(hhh](j)}(h+``entry`` Entry in **sport_id->tpg_list**. h](j)}(h ``entry``h]j)}(hja@h]hentry}(hjc@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMnhj[@ubj )}(hhh]h)}(h Entry in **sport_id->tpg_list**.h](h Entry in }(hjz@hhhNhNubj)}(h**sport_id->tpg_list**h]hsport_id->tpg_list}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz@ubh.}(hjz@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjv@hMnhjw@ubah}(h]h ]h"]h$]h&]uh1j hj[@ubeh}(h]h ]h"]h$]h&]uh1jhjv@hMnhjX@ubj)}(h4``sport_id`` Port name this TPG is associated with. h](j)}(h ``sport_id``h]j)}(hj@h]hsport_id}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMohj@ubj )}(hhh]h)}(h&Port name this TPG is associated with.h]h&Port name this TPG is associated with.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMohj@ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMohjX@ubj)}(h``tpg`` LIO TPG data structure.h](j)}(h``tpg``h]j)}(hj@h]htpg}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMohj@ubj )}(hhh]h)}(hLIO TPG data structure.h]hLIO TPG data structure.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphj@ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMohjX@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(h**Description**h]j)}(hj(Ah]h Description}(hj*AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Aubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMshj'hhubh)}(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>AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMphj'hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_port_id (C struct)c.srpt_port_idhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h srpt_port_idh]j)}(hstruct srpt_port_idh](j)}(hjh]hstruct}(hjfAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjbAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMvubj&)}(h h]h }(hjtAhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbAhhhjsAhMvubj)}(h srpt_port_idh]j:)}(hj`Ah]h srpt_port_id}(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbAhhhjsAhMvubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj^AhhhjsAhMvubah}(h]jYAah ](jjeh"]h$]h&]jj)jhuh1jhjsAhMvhj[Ahhubj)}(hhh]h)}(hLIO RDMA port informationh]hLIO RDMA port information}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM{hjAhhubah}(h]h ]h"]h$]h&]uh1jhj[AhhhjsAhMvubeh}(h]h ](jQstructeh"]h$]h&]jjQjjAjjAjjjuh1jhhhj'hNhNubj)}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh:}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjAubjS)}(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]; };}hjAsbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjAubh)}(h **Members**h]j)}(hjAh]hMembers}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjAubj)}(hhh](j)}(h)``mutex`` Protects **tpg_list** changes. h](j)}(h ``mutex``h]j)}(hjBh]hmutex}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM}hjBubj )}(hhh]h)}(hProtects **tpg_list** changes.h](h Protects }(hj.BhhhNhNubj)}(h **tpg_list**h]htpg_list}(hj6BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Bubh changes.}(hj.BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*BhM}hj+Bubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhj*BhM}hj Bubj)}(h6``tpg_list`` TPGs associated with the RDMA port name. h](j)}(h ``tpg_list``h]j)}(hj`Bh]htpg_list}(hjbBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Bubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhM~hjZBubj )}(hhh]h)}(h(TPGs associated with the RDMA port name.h]h(TPGs associated with the RDMA port name.}(hjyBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuBhM~hjvBubah}(h]h ]h"]h$]h&]uh1j hjZBubeh}(h]h ]h"]h$]h&]uh1jhjuBhM~hj Bubj)}(h0``wwn`` WWN associated with the RDMA port name. h](j)}(h``wwn``h]j)}(hjBh]hwwn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjBubj )}(hhh]h)}(h'WWN associated with the RDMA port name.h]h'WWN associated with the RDMA port name.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj Bubj)}(h/``name`` ASCII representation of the port name.h](j)}(h``name``h]j)}(hjBh]hname}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjBubj )}(hhh]h)}(h&ASCII representation of the port name.h]h&ASCII representation of the port name.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj Bubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj'hhubh)}(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+ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj'hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_port (C struct) c.srpt_porthNtauh1hhj'hhhNhNubj)}(hhh](j)}(h srpt_porth]j)}(hstruct srpt_porth](j)}(hjh]hstruct}(hjSChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjOChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMubj&)}(h h]h }(hjaChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOChhhj`ChMubj)}(h srpt_porth]j:)}(hjMCh]h srpt_port}(hjsChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoCubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOChhhj`ChMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjKChhhj`ChMubah}(h]jFCah ](jjeh"]h$]h&]jj)jhuh1jhj`ChMhjHChhubj)}(hhh]h)}(hSRPT RDMA port informationh]hSRPT RDMA port information}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjChhubah}(h]h ]h"]h$]h&]uh1jhjHChhhj`ChMubeh}(h]h ](jQstructeh"]h$]h&]jjQjjCjjCjjjuh1jhhhj'hNhNubj)}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjCubjS)}(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; };}hjCsbah}(h]h ]h"]h$]h&]jjuh1jShl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjCubh)}(h **Members**h]j)}(hjCh]hMembers}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjCubj)}(hhh](j)}(h-``sdev`` backpointer to the HCA information. h](j)}(h``sdev``h]j)}(hjDh]hsdev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjCubj )}(hhh]h)}(h#backpointer to the HCA information.h]h#backpointer to the HCA information.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(hC``mad_agent`` per-port management datagram processing information. h](j)}(h ``mad_agent``h]j)}(hj;Dh]h mad_agent}(hj=DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj5Dubj )}(hhh]h)}(h4per-port management datagram processing information.h]h4per-port management datagram processing information.}(hjTDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPDhMhjQDubah}(h]h ]h"]h$]h&]uh1j hj5Dubeh}(h]h ]h"]h$]h&]uh1jhjPDhMhjCubj)}(h8``enabled`` Whether or not this target port is enabled. h](j)}(h ``enabled``h]j)}(hjtDh]henabled}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjnDubj )}(hhh]h)}(h+Whether or not this target port is enabled.h]h+Whether or not this target port is enabled.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjnDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(h ``port`` one-based port number. h](j)}(h``port``h]j)}(hjDh]hport}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjDubj )}(hhh]h)}(hone-based port number.h]hone-based port number.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(h.``sm_lid`` cached value of the port's sm_lid. h](j)}(h ``sm_lid``h]j)}(hjDh]hsm_lid}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjDubj )}(hhh]h)}(h"cached value of the port's sm_lid.h]h$cached value of the port’s sm_lid.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(h(``lid`` cached value of the port's lid. h](j)}(h``lid``h]j)}(hjEh]hlid}(hj!EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjEubj )}(hhh]h)}(hcached value of the port's lid.h]h!cached value of the port’s lid.}(hj8EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4EhMhj5Eubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhj4EhMhjCubj)}(h(``gid`` cached value of the port's gid. h](j)}(h``gid``h]j)}(hjXEh]hgid}(hjZEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjREubj )}(hhh]h)}(hcached value of the port's gid.h]h!cached value of the port’s gid.}(hjqEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmEhMhjnEubah}(h]h ]h"]h$]h&]uh1j hjREubeh}(h]h ]h"]h$]h&]uh1jhjmEhMhjCubj)}(hI``work`` work structure for refreshing the aforementioned cached values. h](j)}(h``work``h]j)}(hjEh]hwork}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjEubj )}(hhh]h)}(h?work structure for refreshing the aforementioned cached values.h]h?work structure for refreshing the aforementioned cached values.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjCubj)}(h(``guid_name`` port name in GUID format. h](j)}(h ``guid_name``h]j)}(hjEh]h guid_name}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjEubj )}(hhh]h)}(hport name in GUID format.h]hport name in GUID format.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjCubj)}(hJ``guid_id`` LIO target port information for the port name in GUID format. h](j)}(h ``guid_id``h]j)}(hjFh]hguid_id}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjEubj )}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjCubj)}(h&``gid_name`` port name in GID format. h](j)}(h ``gid_name``h]j)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Fubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj6Fubj )}(hhh]h)}(hport name in GID format.h]hport name in GID format.}(hjUFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQFhMhjRFubah}(h]h ]h"]h$]h&]uh1j hj6Fubeh}(h]h ]h"]h$]h&]uh1jhjQFhMhjCubj)}(hH``gid_id`` LIO target port information for the port name in GID format. h](j)}(h ``gid_id``h]j)}(hjuFh]hgid_id}(hjwFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjoFubj )}(hhh]h)}(hJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Jubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj6Jubj )}(hhh]h)}(hSerializes use_srq changes.h]hSerializes use_srq changes.}(hjUJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQJhMhjRJubah}(h]h ]h"]h$]h&]uh1j hj6Jubeh}(h]h ]h"]h$]h&]uh1jhjQJhMhjHubj)}(h'``use_srq`` Whether or not to use SRQ. h](j)}(h ``use_srq``h]j)}(hjuJh]huse_srq}(hjwJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjoJubj )}(hhh]h)}(hWhether or not to use SRQ.h]hWhether or not to use SRQ.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1j hjoJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjHubj)}(h9``req_buf_cache`` kmem_cache for **ioctx_ring** buffers. h](j)}(h``req_buf_cache``h]j)}(hjJh]h req_buf_cache}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjJubj )}(hhh]h)}(h&kmem_cache for **ioctx_ring** buffers.h](hkmem_cache for }(hjJhhhNhNubj)}(h**ioctx_ring**h]h ioctx_ring}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh buffers.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjHubj)}(h``ioctx_ring`` Per-HCA SRQ. h](j)}(h``ioctx_ring``h]j)}(hjJh]h ioctx_ring}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjJubj )}(hhh]h)}(h Per-HCA SRQ.h]h Per-HCA SRQ.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjHubj)}(h9``event_handler`` Per-HCA asynchronous IB event handler. h](j)}(h``event_handler``h]j)}(hj2Kh]h event_handler}(hj4KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Kubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhj,Kubj )}(hhh]h)}(h&Per-HCA asynchronous IB event handler.h]h&Per-HCA asynchronous IB event handler.}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGKhMhjHKubah}(h]h ]h"]h$]h&]uh1j hj,Kubeh}(h]h ]h"]h$]h&]uh1jhjGKhMhjHubj)}(h ``list`` Node in srpt_dev_list. h](j)}(h``list``h]j)}(hjkKh]hlist}(hjmKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjeKubj )}(hhh]h)}(hNode in srpt_dev_list.h]hNode in srpt_dev_list.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1j hjeKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjHubj)}(h7``port`` Information about the ports owned by this HCA.h](j)}(h``port``h]j)}(hjKh]hport}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjKubj )}(hhh]h)}(h.Information about the ports owned by this HCA.h]h.Information about the ports owned by this HCA.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:113: ./drivers/infiniband/ulp/srpt/ib_srpt.hhMhjKubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjHubeh}(h]h ]h"]h$]h&]uh1jhj\Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_event_handler (C function)c.srpt_event_handlerhNtauh1hhj'hhhNhNubj)}(hhh](j)}(hRvoid srpt_event_handler (struct ib_event_handler *handler, struct ib_event *event)h]j)}(hQvoid srpt_event_handler(struct ib_event_handler *handler, struct ib_event *event)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKubj&)}(h h]h }(hj LhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjKhhhj LhKubj)}(hsrpt_event_handlerh]j:)}(hsrpt_event_handlerh]hsrpt_event_handler}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj LhKubj)}(h:(struct ib_event_handler *handler, struct ib_event *event)h](j)}(h struct ib_event_handler *handlerh](j)}(hjh]hstruct}(hj;LhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7Lubj&)}(h h]h }(hjHLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7Lubh)}(hhh]j:)}(hib_event_handlerh]hib_event_handler}(hjYLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVLubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[LmodnameN classnameNjWjZ)}j]]j`)}jSj!Lsbc.srpt_event_handlerasbuh1hhj7Lubj&)}(h h]h }(hjyLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7Lubju)}(hjxh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj7Lubj:)}(hhandlerh]hhandler}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3Lubj)}(hstruct ib_event *eventh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubh)}(hhh]j:)}(hib_eventh]hib_event}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjLmodnameN classnameNjWjZ)}j]]juLc.srpt_event_handlerasbuh1hhjLubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjLubju)}(hjxh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjLubj:)}(heventh]hevent}(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3Lubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhj LhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjKhhhj LhKubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhj LhKhjKhhubj)}(hhh]h)}(h'asynchronous IB event callback functionh]h'asynchronous IB event callback function}(hj.MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhj+Mhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhj LhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjFMjjFMjjjuh1jhhhj'hNhNubj)}(hX**Parameters** ``struct ib_event_handler *handler`` IB event handler registered by ib_register_event_handler(). ``struct ib_event *event`` Description of the event that occurred. **Description** Callback function called by the InfiniBand core when an asynchronous IB event occurs. This callback may occur in interrupt context. See also section 11.5.2, Set Asynchronous Event Handler in the InfiniBand Architecture Specification.h](h)}(h**Parameters**h]j)}(hjPMh]h Parameters}(hjRMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNMubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjJMubj)}(hhh](j)}(ha``struct ib_event_handler *handler`` IB event handler registered by ib_register_event_handler(). h](j)}(h$``struct ib_event_handler *handler``h]j)}(hjoMh]h struct ib_event_handler *handler}(hjqMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjiMubj )}(hhh]h)}(h;IB event handler registered by ib_register_event_handler().h]h;IB event handler registered by ib_register_event_handler().}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKhjMubah}(h]h ]h"]h$]h&]uh1j hjiMubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjfMubj)}(hC``struct ib_event *event`` Description of the event that occurred. h](j)}(h``struct ib_event *event``h]j)}(hjMh]hstruct ib_event *event}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjMubj )}(hhh]h)}(h'Description of the event that occurred.h]h'Description of the event that occurred.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKhjMubah}(h]h ]h"]h$]h&]uh1j hjMubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjfMubeh}(h]h ]h"]h$]h&]uh1jhjJMubh)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjJMubh)}(hCallback function called by the InfiniBand core when an asynchronous IB event occurs. This callback may occur in interrupt context. See also section 11.5.2, Set Asynchronous Event Handler in the InfiniBand Architecture Specification.h]hCallback function called by the InfiniBand core when an asynchronous IB event occurs. This callback may occur in interrupt context. See also section 11.5.2, Set Asynchronous Event Handler in the InfiniBand Architecture Specification.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjJMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_srq_event (C function)c.srpt_srq_eventhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h7void srpt_srq_event (struct ib_event *event, void *ctx)h]j)}(h6void srpt_srq_event(struct ib_event *event, void *ctx)h](j)}(hvoidh]hvoid}(hj(NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Nhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKubj&)}(h h]h }(hj7NhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$Nhhhj6NhKubj)}(hsrpt_srq_eventh]j:)}(hsrpt_srq_eventh]hsrpt_srq_event}(hjINhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjENubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$Nhhhj6NhKubj)}(h#(struct ib_event *event, void *ctx)h](j)}(hstruct ib_event *eventh](j)}(hjh]hstruct}(hjeNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjaNubj&)}(h h]h }(hjrNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaNubh)}(hhh]j:)}(hib_eventh]hib_event}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjNmodnameN classnameNjWjZ)}j]]j`)}jSjKNsbc.srpt_srq_eventasbuh1hhjaNubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjaNubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjaNubj:)}(heventh]hevent}(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]Nubj)}(h void *ctxh](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjNubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjNubj:)}(hctxh]hctx}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]Nubeh}(h]h ]h"]h$]h&]jjuh1jhj$Nhhhj6NhKubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj Nhhhj6NhKubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhj6NhKhjNhhubj)}(hhh]h)}(hSRQ event callback functionh]hSRQ event callback function}(hj*OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhj'Ohhubah}(h]h ]h"]h$]h&]uh1jhjNhhhj6NhKubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjBOjjBOjjjuh1jhhhj'hNhNubj)}(h**Parameters** ``struct ib_event *event`` Description of the event that occurred. ``void *ctx`` Context pointer specified at SRQ creation time.h](h)}(h**Parameters**h]j)}(hjLOh]h Parameters}(hjNOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJOubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjFOubj)}(hhh](j)}(hC``struct ib_event *event`` Description of the event that occurred. h](j)}(h``struct ib_event *event``h]j)}(hjkOh]hstruct ib_event *event}(hjmOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjeOubj )}(hhh]h)}(h'Description of the event that occurred.h]h'Description of the event that occurred.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjOubah}(h]h ]h"]h$]h&]uh1j hjeOubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjbOubj)}(h=``void *ctx`` Context pointer specified at SRQ creation time.h](j)}(h ``void *ctx``h]j)}(hjOh]h void *ctx}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjOubj )}(hhh]h)}(h/Context pointer specified at SRQ creation time.h]h/Context pointer specified at SRQ creation time.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjOubah}(h]h ]h"]h$]h&]uh1j hjOubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjbOubeh}(h]h ]h"]h$]h&]uh1jhjFOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_qp_event (C function)c.srpt_qp_eventhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h6void srpt_qp_event (struct ib_event *event, void *ptr)h]j)}(h5void srpt_qp_event(struct ib_event *event, void *ptr)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj PhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjOhhhj PhMubj)}(h srpt_qp_eventh]j:)}(h srpt_qp_eventh]h srpt_qp_event}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhj PhMubj)}(h#(struct ib_event *event, void *ptr)h](j)}(hstruct ib_event *eventh](j)}(hjh]hstruct}(hj;PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7Pubj&)}(h h]h }(hjHPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7Pubh)}(hhh]j:)}(hib_eventh]hib_event}(hjYPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVPubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[PmodnameN classnameNjWjZ)}j]]j`)}jSj!Psbc.srpt_qp_eventasbuh1hhj7Pubj&)}(h h]h }(hjyPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj7Pubju)}(hjxh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj7Pubj:)}(heventh]hevent}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7Pubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3Pubj)}(h void *ptrh](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj&)}(h h]h }(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPubju)}(hjxh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjPubj:)}(hptrh]hptr}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3Pubeh}(h]h ]h"]h$]h&]jjuh1jhjOhhhj PhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjOhhhj PhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jhj PhMhjOhhubj)}(hhh]h)}(hQP event callback functionh]hQP event callback function}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhj PhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjQjjQjjjuh1jhhhj'hNhNubj)}(hx**Parameters** ``struct ib_event *event`` Description of the event that occurred. ``void *ptr`` SRPT RDMA channel.h](h)}(h**Parameters**h]j)}(hj"Qh]h Parameters}(hj$QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Qubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjQubj)}(hhh](j)}(hC``struct ib_event *event`` Description of the event that occurred. h](j)}(h``struct ib_event *event``h]j)}(hjAQh]hstruct ib_event *event}(hjCQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Qubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj;Qubj )}(hhh]h)}(h'Description of the event that occurred.h]h'Description of the event that occurred.}(hjZQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVQhMhjWQubah}(h]h ]h"]h$]h&]uh1j hj;Qubeh}(h]h ]h"]h$]h&]uh1jhjVQhMhj8Qubj)}(h ``void *ptr`` SRPT RDMA channel.h](j)}(h ``void *ptr``h]j)}(hjzQh]h void *ptr}(hj|QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjtQubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjQubah}(h]h ]h"]h$]h&]uh1j hjtQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj8Qubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_set_ioc (C function)c.srpt_set_iochNtauh1hhj'hhhNhNubj)}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1ubj&)}(h h]h }(hjQhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjQhhhjQhM1ubj)}(h srpt_set_ioch]j:)}(h srpt_set_ioch]h srpt_set_ioc}(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjQhM1ubj)}(h (u8 *c_list, u32 slot, u8 value)h](j)}(h u8 *c_listh](h)}(hhh]j:)}(hu8h]hu8}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRmodnameN classnameNjWjZ)}j]]j`)}jSjQsbc.srpt_set_iocasbuh1hhj Rubj&)}(h h]h }(hj4RhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj Rubju)}(hjxh]h*}(hjBRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj Rubj:)}(hc_listh]hc_list}(hjORhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Rubj)}(hu32 sloth](h)}(hhh]j:)}(hu32h]hu32}(hjkRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhRubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmRmodnameN classnameNjWjZ)}j]]j0Rc.srpt_set_iocasbuh1hhjdRubj&)}(h h]h }(hjRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdRubj:)}(hsloth]hslot}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Rubj)}(hu8 valueh](h)}(hhh]j:)}(hu8h]hu8}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjRmodnameN classnameNjWjZ)}j]]j0Rc.srpt_set_iocasbuh1hhjRubj&)}(h h]h }(hjRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRubj:)}(hvalueh]hvalue}(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Rubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhjQhM1ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjQhhhjQhM1ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjQhM1hjQhhubj)}(hhh]h)}(h!initialize a IOUnitInfo structureh]h!initialize a IOUnitInfo structure}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1hjShhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhM1ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj!Sjj!Sjjjuh1jhhhj'hNhNubj)}(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+Sh]h Parameters}(hj-ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Subah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hj%Subj)}(hhh](j)}(h ``u8 *c_list`` controller list. h](j)}(h``u8 *c_list``h]j)}(hjJSh]h u8 *c_list}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2hjDSubj )}(hhh]h)}(hcontroller list.h]hcontroller list.}(hjcShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ShM2hj`Subah}(h]h ]h"]h$]h&]uh1j hjDSubeh}(h]h ]h"]h$]h&]uh1jhj_ShM2hjASubj)}(h$``u32 slot`` one-based slot number. h](j)}(h ``u32 slot``h]j)}(hjSh]hu32 slot}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3hj}Subj )}(hhh]h)}(hone-based slot number.h]hone-based slot number.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM3hjSubah}(h]h ]h"]h$]h&]uh1j hj}Subeh}(h]h ]h"]h$]h&]uh1jhjShM3hjASubj)}(h``u8 value`` four-bit value. h](j)}(h ``u8 value``h]j)}(hjSh]hu8 value}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4hjSubj )}(hhh]h)}(hfour-bit value.h]hfour-bit value.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM4hjSubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjShM4hjASubeh}(h]h ]h"]h$]h&]uh1jhj%Subh)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM6hj%Subh)}(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 ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hj%Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%srpt_get_class_port_info (C function)c.srpt_get_class_port_infohNtauh1hhj'hhhNhNubj)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Whhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMvubj&)}(h h]h }(hjMWhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:WhhhjLWhMvubj)}(h srpt_get_ioch]j:)}(h srpt_get_ioch]h srpt_get_ioc}(hj_WhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[Wubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:WhhhjLWhMvubj)}(h:(struct srpt_port *sport, u32 slot, struct ib_dm_mad *mad)h](j)}(hstruct srpt_port *sporth](j)}(hjh]hstruct}(hj{WhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwWubj&)}(h h]h }(hjWhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwWubh)}(hhh]j:)}(h srpt_porth]h srpt_port}(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjWmodnameN classnameNjWjZ)}j]]j`)}jSjaWsbc.srpt_get_iocasbuh1hhjwWubj&)}(h h]h }(hjWhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwWubju)}(hjxh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjwWubj:)}(hsporth]hsport}(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsWubj)}(hu32 sloth](h)}(hhh]j:)}(hu32h]hu32}(hjWhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjWmodnameN classnameNjWjZ)}j]]jWc.srpt_get_iocasbuh1hhjWubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjWubj:)}(hsloth]hslot}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsWubj)}(hstruct ib_dm_mad *madh](j)}(hjh]hstruct}(hj5XhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1Xubj&)}(h h]h }(hjBXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1Xubh)}(hhh]j:)}(h ib_dm_madh]h ib_dm_mad}(hjSXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPXubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjUXmodnameN classnameNjWjZ)}j]]jWc.srpt_get_iocasbuh1hhj1Xubj&)}(h h]h }(hjqXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj1Xubju)}(hjxh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj1Xubj:)}(hmadh]hmad}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsWubeh}(h]h ]h"]h$]h&]jjuh1jhj:WhhhjLWhMvubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj6WhhhjLWhMvubah}(h]j1Wah ](jjeh"]h$]h&]jj)jhuh1jhjLWhMvhj3Whhubj)}(hhh]h)}(h2write IOControllerprofile to a management datagramh]h2write IOControllerprofile to a management datagram}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMvhjXhhubah}(h]h ]h"]h$]h&]uh1jhj3WhhhjLWhMvubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjXjjXjjjuh1jhhhj'hNhNubj)}(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)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMzhjXubj)}(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)}(hjXh]hstruct srpt_port *sport}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMwhjXubj )}(hhh]h)}(h1HCA port through which the MAD has been received.h]h1HCA port through which the MAD has been received.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj YhMwhj Yubah}(h]h ]h"]h$]h&]uh1j hjXubeh}(h]h ]h"]h$]h&]uh1jhj YhMwhjXubj)}(hA``u32 slot`` Slot number specified in DM_ATTR_IOC_PROFILE query. h](j)}(h ``u32 slot``h]j)}(hj0Yh]hu32 slot}(hj2YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Yubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMxhj*Yubj )}(hhh]h)}(h3Slot number specified in DM_ATTR_IOC_PROFILE query.h]h3Slot number specified in DM_ATTR_IOC_PROFILE query.}(hjIYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEYhMxhjFYubah}(h]h ]h"]h$]h&]uh1j hj*Yubeh}(h]h ]h"]h$]h&]uh1jhjEYhMxhjXubj)}(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)}(hjiYh]hstruct ib_dm_mad *mad}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMyhjcYubj )}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~YhMyhjYubah}(h]h ]h"]h$]h&]uh1j hjcYubeh}(h]h ]h"]h$]h&]uh1jhj~YhMyhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM{hjXubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMzhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!srpt_get_svc_entries (C function)c.srpt_get_svc_entrieshNtauh1hhj'hhhNhNubj)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjYhhhjYhMubj)}(hsrpt_get_svc_entriesh]j:)}(hsrpt_get_svc_entriesh]hsrpt_get_svc_entries}(hj ZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjYhMubj)}(h=(u64 ioc_guid, u16 slot, u8 hi, u8 lo, struct ib_dm_mad *mad)h](j)}(h u64 ioc_guidh](h)}(hhh]j:)}(hu64h]hu64}(hj)ZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&Zubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj+ZmodnameN classnameNjWjZ)}j]]j`)}jSj Zsbc.srpt_get_svc_entriesasbuh1hhj"Zubj&)}(h h]h }(hjIZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj"Zubj:)}(hioc_guidh]hioc_guid}(hjWZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hu16 sloth](h)}(hhh]j:)}(hu16h]hu16}(hjsZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpZubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjuZmodnameN classnameNjWjZ)}j]]jEZc.srpt_get_svc_entriesasbuh1hhjlZubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjlZubj:)}(hsloth]hslot}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjlZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hu8 hih](h)}(hhh]j:)}(hu8h]hu8}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjZmodnameN classnameNjWjZ)}j]]jEZc.srpt_get_svc_entriesasbuh1hhjZubj&)}(h h]h }(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjZubj:)}(hhih]hhi}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hu8 loh](h)}(hhh]j:)}(hu8h]hu8}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj[modnameN classnameNjWjZ)}j]]jEZc.srpt_get_svc_entriesasbuh1hhjZubj&)}(h h]h }(hj![hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjZubj:)}(hloh]hlo}(hj/[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hstruct ib_dm_mad *madh](j)}(hjh]hstruct}(hjH[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD[ubj&)}(h h]h }(hjU[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjD[ubh)}(hhh]j:)}(h ib_dm_madh]h ib_dm_mad}(hjf[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjc[ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjh[modnameN classnameNjWjZ)}j]]jEZc.srpt_get_svc_entriesasbuh1hhjD[ubj&)}(h h]h }(hj[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjD[ubju)}(hjxh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjD[ubj:)}(hmadh]hmad}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjD[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjYhhhjYhMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjYhMhjYhhubj)}(hhh]h)}(h-write ServiceEntries to a management datagramh]h-write ServiceEntries to a management datagram}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj[jj[jjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj[ubj)}(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&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj\ubj )}(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&]uh1hhj\hMhj \ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(h$``u16 slot`` I/O controller number. h](j)}(h ``u16 slot``h]j)}(hjC\h]hu16 slot}(hjE\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./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&]uh1hhjX\hMhjY\ubah}(h]h ]h"]h$]h&]uh1j hj=\ubeh}(h]h ]h"]h$]h&]uh1jhjX\hMhj\ubj)}(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&]uh1jhjz\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjv\ubj )}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1j hjv\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(hO``u8 lo`` Start of the range of service entries to be specified in the reply.. h](j)}(h ``u8 lo``h]j)}(hj\h]hu8 lo}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj\ubj )}(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..}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1j hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj\ubj )}(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.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1j hj\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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj[ubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!srpt_mgmt_method_get (C function)c.srpt_mgmt_method_gethNtauh1hhj'hhhNhNubj)}(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}(hjn]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj]hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj}]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjj]hhhj|]hMubj)}(hsrpt_mgmt_method_geth]j:)}(hsrpt_mgmt_method_geth]hsrpt_mgmt_method_get}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjj]hhhj|]hMubj)}(hH(struct srpt_port *sp, struct ib_mad *rq_mad, struct ib_dm_mad *rsp_mad)h](j)}(hstruct srpt_port *sph](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubh)}(hhh]j:)}(h srpt_porth]h srpt_port}(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj]modnameN classnameNjWjZ)}j]]j`)}jSj]sbc.srpt_mgmt_method_getasbuh1hhj]ubj&)}(h h]h }(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj]ubju)}(hjxh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj]ubj:)}(hsph]hsp}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hstruct ib_mad *rq_madh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubj&)}(h h]h }(hj*^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj^ubh)}(hhh]j:)}(hib_madh]hib_mad}(hj;^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8^ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj=^modnameN classnameNjWjZ)}j]]j]c.srpt_mgmt_method_getasbuh1hhj^ubj&)}(h h]h }(hjY^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj^ubju)}(hjxh]h*}(hjg^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj^ubj:)}(hrq_madh]hrq_mad}(hjt^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hstruct ib_dm_mad *rsp_madh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubj&)}(h h]h }(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj^ubh)}(hhh]j:)}(h ib_dm_madh]h ib_dm_mad}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj^modnameN classnameNjWjZ)}j]]j]c.srpt_mgmt_method_getasbuh1hhj^ubj&)}(h h]h }(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj^ubju)}(hjxh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj^ubj:)}(hrsp_madh]hrsp_mad}(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubeh}(h]h ]h"]h$]h&]jjuh1jhjj]hhhj|]hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjf]hhhj|]hMubah}(h]ja]ah ](jjeh"]h$]h&]jj)jhuh1jhj|]hMhjc]hhubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj _hhubah}(h]h ]h"]h$]h&]uh1jhjc]hhhj|]hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj&_jj&_jjjuh1jhhhj'hNhNubj)}(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)}(hj0_h]h Parameters}(hj2_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj._ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./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)}(hjO_h]hstruct srpt_port *sp}(hjQ_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjI_ubj )}(hhh]h)}(h1HCA port through which the MAD has been received.h]h1HCA port through which the MAD has been received.}(hjh_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd_hMhje_ubah}(h]h ]h"]h$]h&]uh1j hjI_ubeh}(h]h ]h"]h$]h&]uh1jhjd_hMhjF_ubj)}(h(``struct ib_mad *rq_mad`` received MAD. h](j)}(h``struct ib_mad *rq_mad``h]j)}(hj_h]hstruct ib_mad *rq_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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj_ubj )}(hhh]h)}(h received MAD.h]h received MAD.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjF_ubj)}(h+``struct ib_dm_mad *rsp_mad`` response MAD.h](j)}(h``struct ib_dm_mad *rsp_mad``h]j)}(hj_h]hstruct ib_dm_mad *rsp_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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj_ubj )}(hhh]h)}(h response MAD.h]h response MAD.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj_ubah}(h]h ]h"]h$]h&]uh1j hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjF_ubeh}(h]h ]h"]h$]h&]uh1jhj*_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"srpt_mad_send_handler (C function)c.srpt_mad_send_handlerhNtauh1hhj'hhhNhNubj)}(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}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj*`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`hhhj)`hMubj)}(hsrpt_mad_send_handlerh]j:)}(hsrpt_mad_send_handlerh]hsrpt_mad_send_handler}(hj<`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj)`hMubj)}(h?(struct ib_mad_agent *mad_agent, struct ib_mad_send_wc *mad_wc)h](j)}(hstruct ib_mad_agent *mad_agenth](j)}(hjh]hstruct}(hjX`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjT`ubj&)}(h h]h }(hje`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjT`ubh)}(hhh]j:)}(h ib_mad_agenth]h ib_mad_agent}(hjv`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjs`ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjx`modnameN classnameNjWjZ)}j]]j`)}jSj>`sbc.srpt_mad_send_handlerasbuh1hhjT`ubj&)}(h h]h }(hj`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjT`ubju)}(hjxh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjT`ubj:)}(h mad_agenth]h mad_agent}(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjT`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjP`ubj)}(hstruct ib_mad_send_wc *mad_wch](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubj&)}(h h]h }(hj`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`ubh)}(hhh]j:)}(hib_mad_send_wch]hib_mad_send_wc}(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj`modnameN classnameNjWjZ)}j]]j`c.srpt_mad_send_handlerasbuh1hhj`ubj&)}(h h]h }(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`ubju)}(hjxh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj`ubj:)}(hmad_wch]hmad_wc}(hj!ahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjP`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)}(hMAD send completion callbackh]hMAD send completion callback}(hjKahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjHahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj)`hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjcajjcajjjuh1jhhhj'hNhNubj)}(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)}(hjmah]h Parameters}(hjoahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkaubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjgaubj)}(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)}(hjah]hstruct ib_mad_agent *mad_agent}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubj )}(hhh]h)}(h(Return value of ib_register_mad_agent().h]h(Return value of ib_register_mad_agent().}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(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)}(hjah]hstruct ib_mad_send_wc *mad_wc}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubj )}(hhh]h)}(h5Work completion reporting that the MAD has been sent.h]h5Work completion reporting that the MAD has been sent.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjaubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubeh}(h]h ]h"]h$]h&]uh1jhjgaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"srpt_mad_recv_handler (C function)c.srpt_mad_recv_handlerhNtauh1hhj'hhhNhNubj)}(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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj.bhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbhhhj-bhMubj)}(hsrpt_mad_recv_handlerh]j:)}(hsrpt_mad_recv_handlerh]hsrpt_mad_recv_handler}(hj@bhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:cubj&)}(h h]h }(hjKchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:cubh)}(hhh]j:)}(hib_mad_recv_wch]hib_mad_recv_wc}(hj\chhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYcubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj^cmodnameN classnameNjWjZ)}j]]jbc.srpt_mad_recv_handlerasbuh1hhj:cubj&)}(h h]h }(hjzchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:cubju)}(hjxh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj:cubj:)}(hmad_wch]hmad_wc}(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTbubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhj-bhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjbhhhj-bhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj-bhMhjbhhubj)}(hhh]h)}(hMAD reception callback functionh]hMAD reception callback function}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj-bhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjcjjcjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjcubj)}(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)}(hjdh]hstruct ib_mad_agent *mad_agent}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjcubj )}(hhh]h)}(h(Return value of ib_register_mad_agent().h]h(Return value of ib_register_mad_agent().}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubj)}(h/``struct ib_mad_send_buf *send_buf`` Not used. h](j)}(h$``struct ib_mad_send_buf *send_buf``h]j)}(hj9dh]h struct ib_mad_send_buf *send_buf}(hj;dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7dubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj3dubj )}(hhh]h)}(h Not used.h]h Not used.}(hjRdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNdhMhjOdubah}(h]h ]h"]h$]h&]uh1j hj3dubeh}(h]h ]h"]h$]h&]uh1jhjNdhMhjcubj)}(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)}(hjrdh]hstruct ib_mad_recv_wc *mad_wc}(hjtdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjldubj )}(hhh]h)}(h7Work completion reporting that a MAD has been received.h]h7Work completion reporting that a MAD has been received.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjdubah}(h]h ]h"]h$]h&]uh1j hjldubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_refresh_port (C function)c.srpt_refresh_porthNtauh1hhj'hhhNhNubj)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^ubj&)}(h h]h }(hjdhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdhhhjdhM^ubj)}(hsrpt_refresh_porth]j:)}(hsrpt_refresh_porth]hsrpt_refresh_port}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjdhM^ubj)}(h(struct srpt_port *sport)h]j)}(hstruct srpt_port *sporth](j)}(hjh]hstruct}(hj ehhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjeubh)}(hhh]j:)}(h srpt_porth]h srpt_port}(hj'ehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$eubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj)emodnameN classnameNjWjZ)}j]]j`)}jSjdsbc.srpt_refresh_portasbuh1hhjeubj&)}(h h]h }(hjGehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjeubju)}(hjxh]h*}(hjUehhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjeubj:)}(hsporth]hsport}(hjbehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubah}(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)}(hconfigure a HCA porth]hconfigure a HCA port}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM^ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjejjejjjuh1jhhhj'hNhNubj)}(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)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMbhjeubj)}(hhh]j)}(h+``struct srpt_port *sport`` SRPT HCA port. h](j)}(h``struct srpt_port *sport``h]j)}(hjeh]hstruct srpt_port *sport}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_hjeubj )}(hhh]h)}(hSRPT HCA port.h]hSRPT HCA port.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM_hjeubah}(h]h ]h"]h$]h&]uh1j hjeubeh}(h]h ]h"]h$]h&]uh1jhjehM_hjeubah}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjfh]h Description}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMahjeubh)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM`hjeubh)}(h**Note**h]j)}(hj/fh]hNote}(hj1fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-fubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMdhjeubh)}(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.}(hjEfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMehjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&srpt_unregister_mad_agent (C function)c.srpt_unregister_mad_agenthNtauh1hhj'hhhNhNubj)}(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}(hjtfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpfhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjpfhhhjfhMubj)}(hsrpt_unregister_mad_agenth]j:)}(hsrpt_unregister_mad_agenth]hsrpt_unregister_mad_agent}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjpfhhhjfhMubj)}(h((struct srpt_device *sdev, int port_cnt)h](j)}(hstruct srpt_device *sdevh](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjfubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjfubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjfmodnameN classnameNjWjZ)}j]]j`)}jSjfsbc.srpt_unregister_mad_agentasbuh1hhjfubj&)}(h h]h }(hjfhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjfubju)}(hjxh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjfubj:)}(hsdevh]hsdev}(hj ghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h int port_cnth](j)}(hinth]hint}(hj#ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj&)}(h h]h }(hj1ghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjgubj:)}(hport_cnth]hport_cnt}(hj?ghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhjpfhhhjfhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjlfhhhjfhMubah}(h]jgfah ](jjeh"]h$]h&]jj)jhuh1jhjfhMhjifhhubj)}(hhh]h)}(h!unregister MAD callback functionsh]h!unregister MAD callback functions}(hjighhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjfghhubah}(h]h ]h"]h$]h&]uh1jhjifhhhjfhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjgjjgjjjuh1jhhhj'hNhNubj)}(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)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjgubj)}(hhh](j)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j)}(hjgh]hstruct srpt_device *sdev}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjgubj )}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubj)}(h5``int port_cnt`` number of ports with registered MAD h](j)}(h``int port_cnt``h]j)}(hjgh]h int port_cnt}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjgubj )}(hhh]h)}(h#number of ports with registered MADh]h#number of ports with registered MAD}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1j hjgubeh}(h]h ]h"]h$]h&]uh1jhjghMhjgubeh}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Note**h]j)}(hjhh]hNote}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjgubh)}(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.}(hj4hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_alloc_ioctx (C function)c.srpt_alloc_ioctxhNtauh1hhj'hhhNhNubj)}(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)}(hjh]hstruct}(hjchhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_hhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjqhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_hhhhjphhMubh)}(hhh]j:)}(h srpt_ioctxh]h srpt_ioctx}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhmodnameN classnameNjWjZ)}j]]j`)}jSsrpt_alloc_ioctxsbc.srpt_alloc_ioctxasbuh1hhj_hhhhjphhMubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_hhhhjphhMubju)}(hjxh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj_hhhhjphhMubj)}(hsrpt_alloc_ioctxh]j:)}(hjhh]hsrpt_alloc_ioctx}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhhjphhMubj)}(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)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhubj&)}(h h]h }(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhmodnameN classnameNjWjZ)}j]]jhc.srpt_alloc_ioctxasbuh1hhjhubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhubju)}(hjxh]h*}(hj'ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjhubj:)}(hsdevh]hsdev}(hj4ihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hint ioctx_sizeh](j)}(hinth]hint}(hjMihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIiubj&)}(h h]h }(hj[ihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjIiubj:)}(h ioctx_sizeh]h ioctx_size}(hjiihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hstruct kmem_cache *buf_cacheh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~iubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~iubh)}(hhh]j:)}(h kmem_cacheh]h kmem_cache}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjimodnameN classnameNjWjZ)}j]]jhc.srpt_alloc_ioctxasbuh1hhj~iubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~iubju)}(hjxh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj~iubj:)}(h buf_cacheh]h buf_cache}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~iubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(henum dma_data_direction dirh](j)}(hj%h]henum}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj jubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjjmodnameN classnameNjWjZ)}j]]jhc.srpt_alloc_ioctxasbuh1hhjiubj&)}(h h]h }(hj.jhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubj:)}(hdirh]hdir}(hjnhMhj?nubah}(h]h ]h"]h$]h&]uh1j hj#nubeh}(h]h ]h"]h$]h&]uh1jhj>nhMhjmubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j)}(hjbnh]hstruct kmem_cache *buf_cache}(hjdnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`nubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj\nubj )}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hj{nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwnhMhjxnubah}(h]h ]h"]h$]h&]uh1j hj\nubeh}(h]h ]h"]h$]h&]uh1jhjwnhMhjmubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j)}(hjnh]henum dma_data_direction dir}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjnubj )}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjnubah}(h]h ]h"]h$]h&]uh1j hjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubeh}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"srpt_alloc_ioctx_ring (C function)c.srpt_alloc_ioctx_ringhNtauh1hhj'hhhNhNubj)}(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)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnhhhjohMubh)}(hhh]j:)}(h srpt_ioctxh]h srpt_ioctx}(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjomodnameN classnameNjWjZ)}j]]j`)}jSsrpt_alloc_ioctx_ringsbc.srpt_alloc_ioctx_ringasbuh1hhjnhhhjohMubj&)}(h h]h }(hj5ohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjnhhhjohMubju)}(hjxh]h*}(hjCohhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjnhhhjohMubju)}(hjxh]h*}(hjPohhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjnhhhjohMubj)}(hsrpt_alloc_ioctx_ringh]j:)}(hj2oh]hsrpt_alloc_ioctx_ring}(hjaohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]oubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjohMubj)}(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)}(hjh]hstruct}(hj|ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjxoubj&)}(h h]h }(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjxoubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjomodnameN classnameNjWjZ)}j]]j0oc.srpt_alloc_ioctx_ringasbuh1hhjxoubj&)}(h h]h }(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjxoubju)}(hjxh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjxoubj:)}(hsdevh]hsdev}(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubj)}(h int ring_sizeh](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj&)}(h h]h }(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjoubj:)}(h ring_sizeh]h ring_size}(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubj)}(hint ioctx_sizeh](j)}(hinth]hint}(hj!phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj&)}(h h]h }(hj/phhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjpubj:)}(h ioctx_sizeh]h ioctx_size}(hj=phhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubj)}(hstruct kmem_cache *buf_cacheh](j)}(hjh]hstruct}(hjVphhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRpubj&)}(h h]h }(hjcphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRpubh)}(hhh]j:)}(h kmem_cacheh]h kmem_cache}(hjtphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqpubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjvpmodnameN classnameNjWjZ)}j]]j0oc.srpt_alloc_ioctx_ringasbuh1hhjRpubj&)}(h h]h }(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjRpubju)}(hjxh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjRpubj:)}(h buf_cacheh]h buf_cache}(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubj)}(hint alignment_offseth](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj&)}(h h]h }(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjpubj:)}(halignment_offseth]halignment_offset}(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubj)}(henum dma_data_direction dirh](j)}(hj%h]henum}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpubj&)}(h h]h }(hjqhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjpubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjqmodnameN classnameNjWjZ)}j]]j0oc.srpt_alloc_ioctx_ringasbuh1hhjpubj&)}(h h]h }(hj7qhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjpubj:)}(hdirh]hdir}(hjEqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtoubeh}(h]h ]h"]h$]h&]jjuh1jhjnhhhjohMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjnhhhjohMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjohMhjnhhubj)}(hhh]h)}(h.allocate a ring of SRPT I/O context structuresh]h.allocate a ring of SRPT I/O context structures}(hjoqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjlqhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjohMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjqjjqjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjqubj)}(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)}(hjqh]hstruct srpt_device *sdev}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjqubj )}(hhh]h)}(h,Device to allocate the I/O context ring for.h]h,Device to allocate the I/O context ring for.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h>``int ring_size`` Number of elements in the I/O context ring. h](j)}(h``int ring_size``h]j)}(hjqh]h int ring_size}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjqubj )}(hhh]h)}(h+Number of elements in the I/O context ring.h]h+Number of elements in the I/O context ring.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1j hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h%``int ioctx_size`` I/O context size. h](j)}(h``int ioctx_size``h]j)}(hj"rh]hint ioctx_size}(hj$rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj rubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubj )}(hhh]h)}(hI/O context size.h]hI/O context size.}(hj;rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7rhMhj8rubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhj7rhMhjqubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j)}(hj[rh]hstruct kmem_cache *buf_cache}(hj]rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjUrubj )}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hjtrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjprhMhjqrubah}(h]h ]h"]h$]h&]uh1j hjUrubeh}(h]h ]h"]h$]h&]uh1jhjprhMhjqubj)}(h^``int alignment_offset`` Offset in each ring buffer at which the SRP information unit starts. h](j)}(h``int alignment_offset``h]j)}(hjrh]hint alignment_offset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjrubj )}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjqubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j)}(hjrh]henum dma_data_direction dir}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjrubj )}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjrubah}(h]h ]h"]h$]h&]uh1j hjrubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjqubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!srpt_free_ioctx_ring (C function)c.srpt_free_ioctx_ringhNtauh1hhj'hhhNhNubj)}(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(shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$shhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM.ubj&)}(h h]h }(hj7shhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj$shhhj6shM.ubj)}(hsrpt_free_ioctx_ringh]j:)}(hsrpt_free_ioctx_ringh]hsrpt_free_ioctx_ring}(hjIshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEsubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$shhhj6shM.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)}(hjh]hstruct}(hjeshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjasubj&)}(h h]h }(hjrshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjasubh)}(hhh]j:)}(h srpt_ioctxh]h srpt_ioctx}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjsmodnameN classnameNjWjZ)}j]]j`)}jSjKssbc.srpt_free_ioctx_ringasbuh1hhjasubj&)}(h h]h }(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjasubju)}(hjxh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjasubju)}(hjxh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjasubj:)}(h ioctx_ringh]h ioctx_ring}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjasubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]subj)}(hstruct srpt_device *sdevh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjsubj&)}(h h]h }(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjsubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjtmodnameN classnameNjWjZ)}j]]jsc.srpt_free_ioctx_ringasbuh1hhjsubj&)}(h h]h }(hj thhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjsubju)}(hjxh]h*}(hj.thhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjsubj:)}(hsdevh]hsdev}(hj;thhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]subj)}(h int ring_sizeh](j)}(hinth]hint}(hjTthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPtubj&)}(h h]h }(hjbthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjPtubj:)}(h ring_sizeh]h ring_size}(hjpthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]subj)}(hstruct kmem_cache *buf_cacheh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtubj&)}(h h]h }(hjthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubh)}(hhh]j:)}(h kmem_cacheh]h kmem_cache}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjtmodnameN classnameNjWjZ)}j]]jsc.srpt_free_ioctx_ringasbuh1hhjtubj&)}(h h]h }(hjthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubju)}(hjxh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjtubj:)}(h buf_cacheh]h buf_cache}(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]subj)}(henum dma_data_direction dirh](j)}(hj%h]henum}(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjumodnameN classnameNjWjZ)}j]]jsc.srpt_free_ioctx_ringasbuh1hhjtubj&)}(h h]h }(hj5uhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjtubj:)}(hdirh]hdir}(hjCuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]subeh}(h]h ]h"]h$]h&]jjuh1jhj$shhhj6shM.ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj shhhj6shM.ubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhj6shM.hjshhubj)}(hhh]h)}(h,free the ring of SRPT I/O context structuresh]h,free the ring of SRPT I/O context structures}(hjmuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM.hjjuhhubah}(h]h ]h"]h$]h&]uh1jhjshhhj6shM.ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjujjujjjuh1jhhhj'hNhNubj)}(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)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2hjuubj)}(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)}(hjuh]hstruct srpt_ioctx **ioctx_ring}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/hjuubj )}(hhh]h)}(hI/O context ring to be freed.h]hI/O context ring to be freed.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM/hjuubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM/hjuubj)}(h/``struct srpt_device *sdev`` SRPT HCA pointer. h](j)}(h``struct srpt_device *sdev``h]j)}(hjuh]hstruct srpt_device *sdev}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0hjuubj )}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM0hjuubah}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM0hjuubj)}(h+``int ring_size`` Number of ring elements. h](j)}(h``int ring_size``h]j)}(hj vh]h int ring_size}(hj"vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1hjvubj )}(hhh]h)}(hNumber of ring elements.h]hNumber of ring elements.}(hj9vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5vhM1hj6vubah}(h]h ]h"]h$]h&]uh1j hjvubeh}(h]h ]h"]h$]h&]uh1jhj5vhM1hjuubj)}(h3``struct kmem_cache *buf_cache`` I/O buffer cache. h](j)}(h ``struct kmem_cache *buf_cache``h]j)}(hjYvh]hstruct kmem_cache *buf_cache}(hj[vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2hjSvubj )}(hhh]h)}(hI/O buffer cache.h]hI/O buffer cache.}(hjrvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnvhM2hjovubah}(h]h ]h"]h$]h&]uh1j hjSvubeh}(h]h ]h"]h$]h&]uh1jhjnvhM2hjuubj)}(h3``enum dma_data_direction dir`` DMA data direction.h](j)}(h``enum dma_data_direction dir``h]j)}(hjvh]henum dma_data_direction dir}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4hjvubj )}(hhh]h)}(hDMA data direction.h]hDMA data direction.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3hjvubah}(h]h ]h"]h$]h&]uh1j hjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM4hjuubeh}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_set_cmd_state (C function)c.srpt_set_cmd_statehNtauh1hhj'hhhNhNubj)}(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}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjvhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMEubj&)}(h h]h }(hjvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvhhhjvhMEubh)}(hhh]j:)}(hsrpt_command_stateh]hsrpt_command_state}(hj whhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj wmodnameN classnameNjWjZ)}j]]j`)}jSsrpt_set_cmd_statesbc.srpt_set_cmd_stateasbuh1hhjvhhhjvhMEubj&)}(h h]h }(hj,whhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjvhhhjvhMEubj)}(hsrpt_set_cmd_stateh]j:)}(hj)wh]hsrpt_set_cmd_state}(hj>whhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:wubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjvhMEubj)}(h<(struct srpt_send_ioctx *ioctx, enum srpt_command_state new)h](j)}(hstruct srpt_send_ioctx *ioctxh](j)}(hjh]hstruct}(hjYwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUwubj&)}(h h]h }(hjfwhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjUwubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjwwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtwubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjywmodnameN classnameNjWjZ)}j]]j'wc.srpt_set_cmd_stateasbuh1hhjUwubj&)}(h h]h }(hjwhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjUwubju)}(hjxh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjUwubj:)}(hioctxh]hioctx}(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQwubj)}(henum srpt_command_state newh](j)}(hj%h]henum}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjwubj&)}(h h]h }(hjwhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubh)}(hhh]j:)}(hsrpt_command_stateh]hsrpt_command_state}(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjwmodnameN classnameNjWjZ)}j]]j'wc.srpt_set_cmd_stateasbuh1hhjwubj&)}(h h]h }(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjwubj:)}(hnewh]hnew}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQwubeh}(h]h ]h"]h$]h&]jjuh1jhjvhhhjvhMEubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjvhhhjvhMEubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjvhMEhjvhhubj)}(hhh]h)}(hset the state of a SCSI commandh]hset the state of a SCSI command}(hj=xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMEhj:xhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjvhMEubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjUxjjUxjjjuh1jhhhj'hNhNubj)}(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_xh]h Parameters}(hjaxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]xubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMIhjYxubj)}(hhh](j)}(h4``struct srpt_send_ioctx *ioctx`` Send I/O context. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j)}(hj~xh]hstruct srpt_send_ioctx *ioctx}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|xubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMFhjxxubj )}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMFhjxubah}(h]h ]h"]h$]h&]uh1j hjxxubeh}(h]h ]h"]h$]h&]uh1jhjxhMFhjuxubj)}(h7``enum srpt_command_state new`` New I/O context state. h](j)}(h``enum srpt_command_state new``h]j)}(hjxh]henum srpt_command_state new}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMGhjxubj )}(hhh]h)}(hNew I/O context state.h]hNew I/O context state.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMGhjxubah}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMGhjuxubeh}(h]h ]h"]h$]h&]uh1jhjYxubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMIhjYxubh)}(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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMHhjYxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(srpt_test_and_set_cmd_state (C function)c.srpt_test_and_set_cmd_statehNtauh1hhj'hhhNhNubj)}(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)}(hj*[h]hbool}(hj7yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3yhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMYubj&)}(h h]h }(hjEyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj3yhhhjDyhMYubj)}(hsrpt_test_and_set_cmd_stateh]j:)}(hsrpt_test_and_set_cmd_stateh]hsrpt_test_and_set_cmd_state}(hjWyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSyubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3yhhhjDyhMYubj)}(hY(struct srpt_send_ioctx *ioctx, enum srpt_command_state old, enum srpt_command_state new)h](j)}(hstruct srpt_send_ioctx *ioctxh](j)}(hjh]hstruct}(hjsyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoyubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjoyubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjymodnameN classnameNjWjZ)}j]]j`)}jSjYysbc.srpt_test_and_set_cmd_stateasbuh1hhjoyubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjoyubju)}(hjxh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjoyubj:)}(hioctxh]hioctx}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkyubj)}(henum srpt_command_state oldh](j)}(hj%h]henum}(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyubj&)}(h h]h }(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyubh)}(hhh]j:)}(hsrpt_command_stateh]hsrpt_command_state}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzmodnameN classnameNjWjZ)}j]]jyc.srpt_test_and_set_cmd_stateasbuh1hhjyubj&)}(h h]h }(hj!zhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjyubj:)}(holdh]hold}(hj/zhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkyubj)}(henum srpt_command_state newh](j)}(hj%h]henum}(hjHzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDzubj&)}(h h]h }(hjUzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDzubh)}(hhh]j:)}(hsrpt_command_stateh]hsrpt_command_state}(hjfzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjczubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjhzmodnameN classnameNjWjZ)}j]]jyc.srpt_test_and_set_cmd_stateasbuh1hhjDzubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjDzubj:)}(hnewh]hnew}(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkyubeh}(h]h ]h"]h$]h&]jjuh1jhj3yhhhjDyhMYubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj/yhhhjDyhMYubah}(h]j*yah ](jjeh"]h$]h&]jj)jhuh1jhjDyhMYhj,yhhubj)}(hhh]h)}(h#test and set the state of a commandh]h#test and set the state of a command}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMYhjzhhubah}(h]h ]h"]h$]h&]uh1jhj,yhhhjDyhMYubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjzjjzjjjuh1jhhhj'hNhNubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM]hjzubj)}(hhh](j)}(h4``struct srpt_send_ioctx *ioctx`` Send I/O context. h](j)}(h!``struct srpt_send_ioctx *ioctx``h]j)}(hjzh]hstruct srpt_send_ioctx *ioctx}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMZhjzubj )}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMZhj{ubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMZhjzubj)}(h;``enum srpt_command_state old`` Current I/O context state. h](j)}(h``enum srpt_command_state old``h]j)}(hj6{h]henum srpt_command_state old}(hj8{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM[hj0{ubj )}(hhh]h)}(hCurrent I/O context state.h]hCurrent I/O context state.}(hjO{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK{hM[hjL{ubah}(h]h ]h"]h$]h&]uh1j hj0{ubeh}(h]h ]h"]h$]h&]uh1jhjK{hM[hjzubj)}(h7``enum srpt_command_state new`` New I/O context state. h](j)}(h``enum srpt_command_state new``h]j)}(hjo{h]henum srpt_command_state new}(hjq{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM\hji{ubj )}(hhh]h)}(hNew I/O context state.h]hNew I/O context state.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM\hj{ubah}(h]h ]h"]h$]h&]uh1j hji{ubeh}(h]h ]h"]h$]h&]uh1jhj{hM\hjzubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^hjzubh)}(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’.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM]hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_post_recv (C function)c.srpt_post_recvhNtauh1hhj'hhhNhNubj)}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMrubj&)}(h h]h }(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj{hhhj{hMrubj)}(hsrpt_post_recvh]j:)}(hsrpt_post_recvh]hsrpt_post_recv}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj |ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj{hMrubj)}(hR(struct srpt_device *sdev, struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *ioctx)h](j)}(hstruct srpt_device *sdevh](j)}(hjh]hstruct}(hj,|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(|ubj&)}(h h]h }(hj9|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(|ubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjJ|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjL|modnameN classnameNjWjZ)}j]]j`)}jSj|sbc.srpt_post_recvasbuh1hhj(|ubj&)}(h h]h }(hjj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj(|ubju)}(hjxh]h*}(hjx|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj(|ubj:)}(hsdevh]hsdev}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$|ubj)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj|modnameN classnameNjWjZ)}j]]jf|c.srpt_post_recvasbuh1hhj|ubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(hchh]hch}(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$|ubj)}(hstruct srpt_recv_ioctx *ioctxh](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj }ubj&)}(h h]h }(hj}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj }ubh)}(hhh]j:)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hj,}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)}ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj.}modnameN classnameNjWjZ)}j]]jf|c.srpt_post_recvasbuh1hhj }ubj&)}(h h]h }(hjJ}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj }ubju)}(hjxh]h*}(hjX}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj }ubj:)}(hioctxh]hioctx}(hje}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj }ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$|ubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hMrubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj{hhhj{hMrubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj{hMrhj{hhubj)}(hhh]h)}(hpost an IB receive requesth]hpost an IB receive request}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMrhj}hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hMrubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj}jj}jjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMvhj}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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMshj}ubj )}(hhh]h)}(hSRPT HCA pointer.h]hSRPT HCA pointer.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMshj}ubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMshj}ubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMthj~ubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hj"~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMthj~ubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMthj}ubj)}(h>``struct srpt_recv_ioctx *ioctx`` Receive I/O context pointer.h](j)}(h!``struct srpt_recv_ioctx *ioctx``h]j)}(hjB~h]hstruct srpt_recv_ioctx *ioctx}(hjD~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMvhj<~ubj )}(hhh]h)}(hReceive I/O context pointer.h]hReceive I/O context pointer.}(hj[~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMuhjX~ubah}(h]h ]h"]h$]h&]uh1j hj<~ubeh}(h]h ]h"]h$]h&]uh1jhjW~hMvhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"srpt_zerolength_write (C function)c.srpt_zerolength_writehNtauh1hhj'hhhNhNubj)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~hhhj~hMubj)}(hsrpt_zerolength_writeh]j:)}(hsrpt_zerolength_writeh]hsrpt_zerolength_write}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhj~hMubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~ubj&)}(h h]h }(hj~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~ubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj~modnameN classnameNjWjZ)}j]]j`)}jSj~sbc.srpt_zerolength_writeasbuh1hhj~ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~ubju)}(hjxh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj~ubj:)}(hchh]hch}(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjYhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjtjjtjjjuh1jhhhj'hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjxubj)}(hhh]j)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjxubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_get_desc_tbl (C function)c.srpt_get_desc_tblhNtauh1hhj'hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM#ubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhj+hM#ubj)}(hsrpt_get_desc_tblh]j:)}(hsrpt_get_desc_tblh]hsrpt_get_desc_tbl}(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+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)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubh)}(hhh]j:)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjzmodnameN classnameNjWjZ)}j]]j`)}jSj@sbc.srpt_get_desc_tblasbuh1hhjVubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjVubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjVubj:)}(h recv_ioctxh]h recv_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hstruct srpt_send_ioctx *ioctxh](j)}(hjh]hstruct}(hj̀hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjȀubj&)}(h h]h }(hjـhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjȀubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhjȀubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjȀubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjȀubj:)}(hioctxh]hioctx}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjȀubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hstruct srp_cmd *srp_cmdh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubh)}(hhh]j:)}(hsrp_cmdh]hsrp_cmd}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj\modnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhj8ubj&)}(h h]h }(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj8ubj:)}(hsrp_cmdh]hsrp_cmd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(henum dma_data_direction *dirh](j)}(hj%h]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hdma_data_directionh]hdma_data_direction}(hjʁhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjǁubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj́modnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hstruct scatterlist **sgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h scatterlisth]h scatterlist}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj<modnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhjubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubju)}(hjxh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hunsigned int *sg_cnth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hjÂhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjтhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hsg_cnth]hsg_cnt}(hjނhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(h u64 *data_lenh](h)}(hhh]j:)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdata_lenh]hdata_len}(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hu16 imm_data_offseth](h)}(hhh]j:)}(hu16h]hu16}(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjQmodnameN classnameNjWjZ)}j]]jc.srpt_get_desc_tblasbuh1hhjHubj&)}(h h]h }(hjmhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjHubj:)}(himm_data_offseth]himm_data_offset}(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubeh}(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/parse the data descriptors of a SRP_CMD requesth]h/parse the data descriptors of a SRP_CMD request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hM#ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM'hjubj)}(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)}(hjh]h"struct srpt_recv_ioctx *recv_ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM$hjubj )}(hhh]h)}(h=I/O context associated with the received command **srp_cmd**.h](h1I/O context associated with the received command }(hjhhhNhNubj)}(h **srp_cmd**h]hsrp_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM$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)}(hj1h]hstruct srpt_send_ioctx *ioctx}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhM%hjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM%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)}(hjjh]hstruct srp_cmd *srp_cmd}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM&hjdubj )}(hhh]h)}(h$Pointer to the SRP_CMD request data.h]h$Pointer to the SRP_CMD request data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1jhjhM&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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM(hjubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM'hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(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:116: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1j hjׄubeh}(h]h ]h"]h$]h&]uh1jhjhM)hj݃ubj)}(h1``unsigned int *sg_cnt`` [out] length of **sg**. h](j)}(h``unsigned int *sg_cnt``h]j)}(hjh]hunsigned int *sg_cnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM*hjubj )}(hhh]h)}(h[out] length of **sg**.h](h[out] length of }(hj/hhhNhNubj)}(h**sg**h]hsg}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM*hj,ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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)}(hjah]h u64 *data_len}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM,hj[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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM+hjwubah}(h]h ]h"]h$]h&]uh1j hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM,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)}(hjh]hu16 imm_data_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM.hjubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hj݃ubeh}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0hjubh)}(h9This function initializes ioctx->nrbuf and ioctx->r_bufs.h]h9This function initializes ioctx->nrbuf and ioctx->r_bufs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_init_ch_qp (C function)c.srpt_init_ch_qphNtauh1hhj'hhhNhNubj)}(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 ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj'hhhj9hMubj)}(hsrpt_init_ch_qph]j:)}(hsrpt_init_ch_qph]hsrpt_init_ch_qp}(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdubj&)}(h h]h }(hjuhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjNsbc.srpt_init_ch_qpasbuh1hhjdubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjdubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjdubj:)}(hchh]hch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjچhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjֆubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjֆubh)}(hhh]j:)}(hib_qph]hib_qp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_init_ch_qpasbuh1hhjֆubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjֆubju)}(hjxh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjֆubj:)}(hqph]hqp}(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjֆubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhj'hhhj9hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj#hhhj9hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hMhj hhubj)}(hhh]h)}(h initialize queue pair attributesh]h initialize queue pair attributes}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjsjjsjjjuh1jhhhj'hNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjwubj)}(hhh](j)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjχubj )}(hhh]h)}(hQueue pair pointer.h]hQueue pair pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjχubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjwubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_ch_qp_rtr (C function)c.srpt_ch_qp_rtrhNtauh1hhj'hhhNhNubj)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjdhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjQhhhjchMubj)}(hsrpt_ch_qp_rtrh]j:)}(hsrpt_ch_qp_rtrh]hsrpt_ch_qp_rtr}(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjchMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjxsbc.srpt_ch_qp_rtrasbuh1hhjubj&)}(h h]h }(hjЈhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjވhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hchh]hch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_qph]hib_qp}(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj$modnameN classnameNjWjZ)}j]]j̈c.srpt_ch_qp_rtrasbuh1hhjubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hqph]hqp}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjMhhhjchMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjchMhjJhhubj)}(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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjۉhMhjubj)}(h8``struct ib_qp *qp`` queue pair to change the state of. 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h"queue pair to change the state of.h]h"queue pair to change the state of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hsrpt_ch_qp_rtsh]j:)}(hsrpt_ch_qp_rtsh]hsrpt_ch_qp_rts}(hjNJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjÊubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h+(struct srpt_rdma_ch *ch, struct ib_qp *qp)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjߊubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjߊubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjɊsbc.srpt_ch_qp_rtsasbuh1hhjߊubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjߊubju)}(hjxh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjߊubj:)}(hchh]hch}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjߊubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjۊubj)}(hstruct ib_qp *qph](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjQubh)}(hhh]j:)}(hib_qph]hib_qp}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjumodnameN classnameNjWjZ)}j]]jc.srpt_ch_qp_rtsasbuh1hhjQubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjQubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjQubj:)}(hqph]hqp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubeh}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjӋhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(h7``struct srpt_rdma_ch *ch`` channel of the queue pair. h](j)}(h``struct srpt_rdma_ch *ch``h]j)}(hjh]hstruct srpt_rdma_ch *ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(hchannel of the queue pair.h]hchannel of the queue pair.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h8``struct ib_qp *qp`` queue pair to change the state of. h](j)}(h``struct ib_qp *qp``h]j)}(hjPh]hstruct ib_qp *qp}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjJubj )}(hhh]h)}(h"queue pair to change the state of.h]h"queue pair to change the state of.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubh)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_build_cmd_rsp (C function)c.srpt_build_cmd_rsphNtauh1hhj'hhhNhNubj)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj|hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjihhhj{hMubj)}(hsrpt_build_cmd_rsph]j:)}(hsrpt_build_cmd_rsph]hsrpt_build_cmd_rsp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhj{hMubj)}(hM(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u64 tag, int status)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjȓhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjœubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjʓmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_build_cmd_rspasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hchh]hch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct srpt_send_ioctx *ioctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj)hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj<modnameN classnameNjWjZ)}j]]jc.srpt_build_cmd_rspasbuh1hhjubj&)}(h h]h }(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hioctxh]hioctx}(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 tagh](h)}(hhh]j:)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_build_cmd_rspasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(htagh]htag}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int statush](j)}(hinth]hint}(hjԔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjДubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjДubj:)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjДubeh}(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)}(hbuild a SRP_RSP responseh]hbuild a SRP_RSP response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj2jj2jjjuh1jhhhj'hNhNubj)}(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<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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubj)}(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)}(hj[h]hstruct srpt_rdma_ch *ch}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjUubj )}(hhh]h)}(h9RDMA channel through which the request has been received.h]h9RDMA channel through which the request has been received.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1j hjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(hK``u64 tag`` tag of the request for which this response is being generated. h](j)}(h ``u64 tag``h]j)}(hjΕh]hu64 tag}(hjЕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̕ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjȕubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(hK``int status`` value for the STATUS field of the SRP_RSP information unit. h](j)}(h``int status``h]j)}(hjh]h int status}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubh)}(h2Returns the size in bytes of the SRP_RSP response.h]h2Returns the size in bytes of the SRP_RSP response.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubh)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#srpt_build_tskmgmt_rsp (C function)c.srpt_build_tskmgmt_rsphNtauh1hhj'hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(hsrpt_build_tskmgmt_rsph]j:)}(hsrpt_build_tskmgmt_rsph]hsrpt_build_tskmgmt_rsp}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hN(struct srpt_rdma_ch *ch, struct srpt_send_ioctx *ioctx, u8 rsp_code, u64 tag)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjӖhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjϖubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjϖubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_build_tskmgmt_rspasbuh1hhjϖubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjϖubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjϖubj:)}(hchh]hch}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjϖubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj˖ubj)}(hstruct srpt_send_ioctx *ioctxh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubj&)}(h h]h }(hjRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjemodnameN classnameNjWjZ)}j]]j c.srpt_build_tskmgmt_rspasbuh1hhjAubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjAubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjAubj:)}(hioctxh]hioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj˖ubj)}(h u8 rsp_codeh](h)}(hhh]j:)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j c.srpt_build_tskmgmt_rspasbuh1hhjubj&)}(h h]h }(hj֗hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hrsp_codeh]hrsp_code}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj˖ubj)}(hu64 tagh](h)}(hhh]j:)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j c.srpt_build_tskmgmt_rspasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(htagh]htag}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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 build a task management responseh]h build a task management response}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjnjjnjjjuh1jhhhj'hNhNubj)}(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)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubj)}(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)}(hjh]hstruct srpt_rdma_ch *ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h9RDMA channel through which the request has been received.h]h9RDMA channel through which the request has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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)}(hjИh]hstruct srpt_send_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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjʘubj )}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjʘubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hK``u64 tag`` Tag of the request for which this response is being generated. h](j)}(h ``u64 tag``h]j)}(hjBh]hu64 tag}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjrubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubh)}(h2Returns the size in bytes of the SRP_RSP response.h]h2Returns the size in bytes of the SRP_RSP response.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_handle_cmd (C function)c.srpt_handle_cmdhNtauh1hhj'hhhNhNubj)}(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 ]jah"]h$]h&]uh1jhj͙hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj͙hhhjߙhM ubj)}(hsrpt_handle_cmdh]j:)}(hsrpt_handle_cmdh]hsrpt_handle_cmd}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj.modnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_handle_cmdasbuh1hhj ubj&)}(h h]h }(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hchh]hch}(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jHc.srpt_handle_cmdasbuh1hhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hjʚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(h recv_ioctxh]h recv_ioctx}(hjךhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct srpt_send_ioctx *send_ioctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jHc.srpt_handle_cmdasbuh1hhjubj&)}(h h]h }(hj,hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h send_ioctxh]h send_ioctx}(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(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}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jhjƙhhhjߙhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(hhh](j)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(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&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjǛhM hjubj)}(h<``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j)}(hjh]h"struct srpt_recv_ioctx *recv_ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(hhh]h)}(hReceive I/O context.h]hReceive I/O context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!srpt_handle_tsk_mgmt (C function)c.srpt_handle_tsk_mgmthNtauh1hhj'hhhNhNubj)}(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 ]jah"]h$]h&]uh1jhjzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMcubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjzhhhjhMcubj)}(hsrpt_handle_tsk_mgmth]j:)}(hsrpt_handle_tsk_mgmth]hsrpt_handle_tsk_mgmt}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjhMcubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjȜhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjٜhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj֜ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjۜmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_handle_tsk_mgmtasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hchh]hch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj&)}(h h]h }(hj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubh)}(hhh]j:)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjMmodnameN classnameNjWjZ)}j]]jc.srpt_handle_tsk_mgmtasbuh1hhj)ubj&)}(h h]h }(hjihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj)ubju)}(hjxh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj)ubj:)}(h recv_ioctxh]h recv_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct srpt_send_ioctx *send_ioctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hsrpt_send_ioctxh]hsrpt_send_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_handle_tsk_mgmtasbuh1hhjubj&)}(h h]h }(hjٝhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h send_ioctxh]h send_ioctx}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhMcubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjvhhhjhMcubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjhMchjshhubj)}(hhh]h)}(h'process a SRP_TSK_MGMT information unith]h'process a SRP_TSK_MGMT information unit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMcubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj6jj6jjjuh1jhhhj'hNhNubj)}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMghj: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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMdhjYubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMdhjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1jhjthMdhjVubj)}(h<``struct srpt_recv_ioctx *recv_ioctx`` Receive I/O context. h](j)}(h&``struct srpt_recv_ioctx *recv_ioctx``h]j)}(hjh]h"struct srpt_recv_ioctx *recv_ioctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMehjubj )}(hhh]h)}(hReceive I/O context.h]hReceive I/O context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjVubj)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMfhj˞ubj )}(hhh]h)}(hSend I/O context.h]hSend I/O context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1j hj˞ubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhhj: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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMghj: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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMihj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_handle_new_iu (C function)c.srpt_handle_new_iuhNtauh1hhj'hhhNhNubj)}(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)}(hj*[h]hbool}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjnhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj\hhhjmhMubj)}(hsrpt_handle_new_iuh]j:)}(hsrpt_handle_new_iuh]hsrpt_handle_new_iu}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhjmhMubj)}(h=(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx)h](j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_handle_new_iuasbuh1hhjubj&)}(h h]h }(hjڟhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hchh]hch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"struct srpt_recv_ioctx *recv_ioctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(hsrpt_recv_ioctxh]hsrpt_recv_ioctx}(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj.modnameN classnameNjWjZ)}j]]j֟c.srpt_handle_new_iuasbuh1hhj ubj&)}(h h]h }(hjJhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(h recv_ioctxh]h recv_ioctx}(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhjmhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjXhhhjmhMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjmhMhjUhhubj)}(hhh]h)}(h)process a newly received information unith]h)process a newly received information unit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjmhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjʠubj )}(hhh]h)}(hBRDMA channel through which the information unit has been received.h]hBRDMA channel through which the information unit has been received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjʠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǠubj)}(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)}(hj h]h"struct srpt_recv_ioctx *recv_ioctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h9Receive I/O context associated with the information unit.h]h9Receive I/O context associated with the information unit.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǠubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_send_done (C function)c.srpt_send_donehNtauh1hhj'hhhNhNubj)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjrhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj_hhhjqhMubj)}(hsrpt_send_doneh]j:)}(hsrpt_send_doneh]hsrpt_send_done}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhjqhMubj)}(h$(struct ib_cq *cq, struct ib_wc *wc)h](j)}(hstruct ib_cq *cqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_cqh]hib_cq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_send_doneasbuh1hhjubj&)}(h h]h }(hjޡhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcqh]hcq}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_wc *wch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hib_wch]hib_wc}(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj2modnameN classnameNjWjZ)}j]]jڡc.srpt_send_doneasbuh1hhjubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hwch]hwc}(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhjqhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj[hhhjqhMubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjqhMhjXhhubj)}(hhh]h)}(hsend completion callbackh]hsend completion callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh](j)}(h'``struct ib_cq *cq`` Completion queue. 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj΢ubj )}(hhh]h)}(hCompletion queue.h]hCompletion queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hj΢ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjˢubj)}(h&``struct ib_wc *wc`` Work completion. h](j)}(h``struct ib_wc *wc``h]j)}(hj h]hstruct ib_wc *wc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(hhh]h)}(hWork completion.h]hWork completion.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM hj#ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjˢubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Note**h]j)}(hjHh]hNote}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubh)}(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^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_create_ch_ib (C function)c.srpt_create_ch_ibhNtauh1hhj'hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM4ubj)}(hsrpt_create_ch_ibh]j:)}(hsrpt_create_ch_ibh]hsrpt_create_ch_ib}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM4ubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjʣhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjƣubj&)}(h h]h }(hjףhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƣubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_create_ch_ibasbuh1hhjƣubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjƣubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjƣubj:)}(hchh]hch}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjƣubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj£ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM4hjhhubj)}(hhh]h)}(h)create receive and send completion queuesh]h)create receive and send completion queues}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM4hjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM4ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjejjejjjuh1jhhhj'hNhNubj)}(h@**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM8hjiubj)}(hhh]j)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM:hjubj )}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM5hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_close_ch (C function)c.srpt_close_chhNtauh1hhj'hhhNhNubj)}(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)}(hj*[h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhMubj)}(h srpt_close_chh]j:)}(h srpt_close_chh]h srpt_close_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj&)}(h h]h }(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjDmodnameN classnameNjWjZ)}j]]j`)}jSj sbc.srpt_close_chasbuh1hhj ubj&)}(h h]h }(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj ubju)}(hjxh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj ubj:)}(hchh]hch}(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjhMubah}(h]jۤah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjݤhhubj)}(hhh]h)}(hclose a RDMA channelh]hclose a RDMA channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjݤhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./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)}(hjh]hstruct srpt_rdma_ch *ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjߥubah}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjåubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjåubh)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjåubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_cm_req_recv (C function)c.srpt_cm_req_recvhNtauh1hhj'hhhNhNubj)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjshhhjhMubj)}(hsrpt_cm_req_recvh]j:)}(hsrpt_cm_req_recvh]hsrpt_cm_req_recv}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhMubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_deviceh]h srpt_device}(hjҦhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjϦubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjԦmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_cm_req_recvasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj)}(hjh]hconst}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hsdevh]hsdev}(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ib_cm_id *ib_cm_idh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj&)}(h h]h }(hjNhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=ubh)}(hhh]j:)}(hib_cm_idh]hib_cm_id}(hj_hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjamodnameN classnameNjWjZ)}j]]jc.srpt_cm_req_recvasbuh1hhj=ubj&)}(h h]h }(hj}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj=ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj=ubj:)}(hib_cm_idh]hib_cm_id}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct rdma_cm_id *rdma_cm_idh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h rdma_cm_idh]h rdma_cm_id}(hjϧhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj̧ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjѧmodnameN classnameNjWjZ)}j]]jc.srpt_cm_req_recvasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h rdma_cm_idh]h rdma_cm_id}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 port_numh](h)}(hhh]j:)}(hu8h]hu8}(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj&modnameN classnameNjWjZ)}j]]jc.srpt_cm_req_recvasbuh1hhjubj&)}(h h]h }(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj:)}(hport_numh]hport_num}(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h __be16 pkeyh](h)}(hhh]j:)}(h__be16h]h__be16}(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjnmodnameN classnameNjWjZ)}j]]jc.srpt_cm_req_recvasbuh1hhjeubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjeubj:)}(hpkeyh]hpkey}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct srp_login_req *reqh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hj̨hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj٨hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srp_login_reqh]h srp_login_req}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]jc.srpt_cm_req_recvasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hreqh]hreq}(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *src_addrh](j)}(hjh]hconst}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubj)}(hcharh]hchar}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj&)}(h h]h }(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj8ubju)}(hjxh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj8ubj:)}(hsrc_addrh]hsrc_addr}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjlhhubj)}(hhh]h)}(h$process the event IB_CM_REQ_RECEIVEDh]h$process the event IB_CM_REQ_RECEIVED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj©jj©jjjuh1jhhhj'hNhNubj)}(hX**Parameters** ``struct srpt_device *const sdev`` HCA through which the login request was received. ``struct ib_cm_id *ib_cm_id`` IB/CM connection identifier in case of IB/CM. ``struct rdma_cm_id *rdma_cm_id`` RDMA/CM connection identifier in case of RDMA/CM. ``u8 port_num`` Port through which the REQ message was received. ``__be16 pkey`` P_Key of the incoming connection. ``const struct srp_login_req *req`` SRP login request. ``const char *src_addr`` GID (IB/CM) or IP address (RDMA/CM) of the port that submitted the login request. **Description** Ownership 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](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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjƩubj)}(hhh](j)}(hU``struct srpt_device *const sdev`` HCA through which the login request was received. h](j)}(h"``struct srpt_device *const sdev``h]j)}(hjh]hstruct srpt_device *const sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h1HCA through which the login request was received.h]h1HCA through which the login request was received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hL``struct ib_cm_id *ib_cm_id`` IB/CM connection identifier in case of IB/CM. h](j)}(h``struct ib_cm_id *ib_cm_id``h]j)}(hj$h]hstruct ib_cm_id *ib_cm_id}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h-IB/CM connection identifier in case of IB/CM.h]h-IB/CM connection identifier in case of IB/CM.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(hT``struct rdma_cm_id *rdma_cm_id`` RDMA/CM connection identifier in case of RDMA/CM. h](j)}(h!``struct rdma_cm_id *rdma_cm_id``h]j)}(hj]h]hstruct rdma_cm_id *rdma_cm_id}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjWubj )}(hhh]h)}(h1RDMA/CM connection identifier in case of RDMA/CM.h]h1RDMA/CM connection identifier in case of RDMA/CM.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubj)}(hA``u8 port_num`` Port through which the REQ message was received. h](j)}(h``u8 port_num``h]j)}(hjh]h u8 port_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h0Port through which the REQ message was received.h]h0Port through which the REQ message was received.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``__be16 pkey`` P_Key of the incoming connection. h](j)}(h``__be16 pkey``h]j)}(hjϪh]h __be16 pkey}(hjѪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͪubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjɪubj )}(hhh]h)}(h!P_Key of the incoming connection.h]h!P_Key of the incoming connection.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjɪubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``const struct srp_login_req *req`` SRP login request. h](j)}(h#``const struct srp_login_req *req``h]j)}(hjh]hconst struct srp_login_req *req}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(hSRP login request.h]hSRP login request.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hk``const char *src_addr`` GID (IB/CM) or IP address (RDMA/CM) of the port that submitted the login request. h](j)}(h``const char *src_addr``h]j)}(hjAh]hconst char *src_addr}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj;ubj )}(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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjWubah}(h]h ]h"]h$]h&]uh1j hj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjƩubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjƩubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjƩubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_cm_rtu_recv (C function)c.srpt_cm_rtu_recvhNtauh1hhj'hhhNhNubj)}(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}(hj«hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMb ubj&)}(h h]h }(hjѫhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjЫhMb ubj)}(hsrpt_cm_rtu_recvh]j:)}(hsrpt_cm_rtu_recvh]hsrpt_cm_rtu_recv}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj߫ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjЫhMb ubj)}(h(struct srpt_rdma_ch *ch)h]j)}(hstruct srpt_rdma_ch *chh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h srpt_rdma_chh]h srpt_rdma_ch}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_cm_rtu_recvasbuh1hhjubj&)}(h h]h }(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hchh]hch}(hjXhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjЫhMb ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjhhhjЫhMb ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjЫhMb hjhhubj)}(hhh]h)}(h7process an IB_CM_RTU_RECEIVED or USER_ESTABLISHED eventh]h7process an IB_CM_RTU_RECEIVED or USER_ESTABLISHED event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMb hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjЫhMb ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(h**Parameters** ``struct srpt_rdma_ch *ch`` SRPT RDMA channel. **Description** An RTU (ready to use) message indicates that the connection has been established and that the recipient may begin transmitting.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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMf hjubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMc hjubj )}(hhh]h)}(hSRPT RDMA channel.h]hSRPT RDMA channel.}(hjܬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjجhMc hj٬ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjجhMc 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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMe hjubh)}(hAn RTU (ready to use) message indicates that the connection has been established and that the recipient may begin transmitting.h]hAn RTU (ready to use) message indicates that the connection has been established and that the recipient may begin transmitting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMd hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_cm_handler (C function)c.srpt_cm_handlerhNtauh1hhj'hhhNhNubj)}(hhh](j)}(hMint srpt_cm_handler (struct ib_cm_id *cm_id, const struct ib_cm_event *event)h]j)}(hLint srpt_cm_handler(struct ib_cm_id *cm_id, const struct ib_cm_event *event)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hjRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj?hhhjQhM ubj)}(hsrpt_cm_handlerh]j:)}(hsrpt_cm_handlerh]hsrpt_cm_handler}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjQhM ubj)}(h9(struct ib_cm_id *cm_id, const struct ib_cm_event *event)h](j)}(hstruct ib_cm_id *cm_idh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubh)}(hhh]j:)}(hib_cm_idh]hib_cm_id}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjfsbc.srpt_cm_handlerasbuh1hhj|ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj|ubju)}(hjxh]h*}(hj̭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj|ubj:)}(hcm_idh]hcm_id}(hj٭hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hconst struct ib_cm_event *eventh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_cm_eventh]h ib_cm_event}(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(ubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj-modnameN classnameNjWjZ)}j]]jc.srpt_cm_handlerasbuh1hhjubj&)}(h h]h }(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(heventh]hevent}(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhM ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj;hhhjQhM ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjQhM hj8hhubj)}(hhh]h)}(h'IB connection manager callback functionh]h'IB connection manager callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh](j)}(h8``struct ib_cm_id *cm_id`` IB/CM connection identifier. h](j)}(h``struct ib_cm_id *cm_id``h]j)}(hjϮh]hstruct ib_cm_id *cm_id}(hjѮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͮubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjɮubj )}(hhh]h)}(hIB/CM connection identifier.h]hIB/CM connection identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjɮubeh}(h]h ]h"]h$]h&]uh1jhjhM hjƮubj)}(h1``const struct ib_cm_event *event`` IB/CM event. h](j)}(h#``const struct ib_cm_event *event``h]j)}(hjh]hconst struct ib_cm_event *event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(hhh]h)}(h IB/CM event.h]h IB/CM event.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjƮubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubh)}(h**Note**h]j)}(hjjh]hNote}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h srpt_queue_response (C function)c.srpt_queue_responsehNtauh1hhj'hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/ ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM/ ubj)}(hsrpt_queue_responseh]j:)}(hsrpt_queue_responseh]hsrpt_queue_response}(hjЯhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj̯ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM/ ubj)}(h(struct se_cmd *cmd)h]j)}(hstruct se_cmd *cmdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(hse_cmdh]hse_cmd}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj modnameN classnameNjWjZ)}j]]j`)}jSjүsbc.srpt_queue_responseasbuh1hhjubj&)}(h h]h }(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hcmdh]hcmd}(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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'transmit the response to a SCSI commandh]h'transmit the response to a SCSI command}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM/ hjlhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM3 hjubj)}(hhh]j)}(h,``struct se_cmd *cmd`` SCSI target command. h](j)}(h``struct se_cmd *cmd``h]j)}(hjh]hstruct se_cmd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM0 hjubj )}(hhh]h)}(hSCSI target command.h]hSCSI target command.}(hjɰhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjŰhM0 hjưubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjŰhM0 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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM2 hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM1 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_release_sport (C function)c.srpt_release_sporthNtauh1hhj'hhhNhNubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj,hhhj>hM ubj)}(hsrpt_release_sporth]j:)}(hsrpt_release_sporth]hsrpt_release_sport}(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj>hM ubj)}(h(struct srpt_port *sport)h]j)}(hstruct srpt_port *sporth](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubh)}(hhh]j:)}(h srpt_porth]h srpt_port}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjSsbc.srpt_release_sportasbuh1hhjiubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjiubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjiubj:)}(hsporth]hsport}(hjƱhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubah}(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.disable login and wait for associated channelsh]h.disable login and wait for associated channels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(h<**Parameters** ``struct srpt_port *sport`` SRPT HCA 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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj ubj)}(hhh]j)}(h*``struct srpt_port *sport`` SRPT HCA port.h](j)}(h``struct srpt_port *sport``h]j)}(hj1h]hstruct srpt_port *sport}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj+ubj )}(hhh]h)}(hSRPT HCA port.h]hSRPT HCA port.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjGubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_lookup_port (C function)c.srpt_lookup_porthNtauh1hhj'hhhNhNubj)}(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)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubh)}(hhh]j:)}(hport_and_port_idh]hport_and_port_id}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSsrpt_lookup_portsbc.srpt_lookup_portasbuh1hhjhhhjhM ubj&)}(h h]h }(hj˲hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM ubj)}(hsrpt_lookup_porth]j:)}(hjȲh]hsrpt_lookup_port}(hjݲhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjٲubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(const char *name)h]j)}(hconst char *nameh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hnameh]hname}(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(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)}(hLook up an RDMA port by nameh]hLook up an RDMA port by name}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj~jj~jjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]j)}(h%``const char *name`` ASCII port name h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(hhh]h)}(hASCII port nameh]hASCII port name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_add_one (C function)c.srpt_add_onehNtauh1hhj'hhhNhNubj)}(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'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hj6hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj#hhhj5hM ubj)}(h srpt_add_oneh]j:)}(h srpt_add_oneh]h srpt_add_one}(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj5hM ubj)}(h(struct ib_device *device)h]j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubj&)}(h h]h }(hjqhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`ubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjJsbc.srpt_add_oneasbuh1hhj`ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj`ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj`ubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubah}(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,InfiniBand device addition callback functionh]h,InfiniBand device addition callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(h?**Parameters** ``struct ib_device *device`` Describes a HCA.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]j)}(h-``struct ib_device *device`` Describes a HCA.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj"ubj )}(hhh]h)}(hDescribes a HCA.h]hDescribes a HCA.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hj>ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_remove_one (C function)c.srpt_remove_onehNtauh1hhj'hhhNhNubj)}(hhh](j)}(hBvoid srpt_remove_one (struct ib_device *device, void *client_data)h]j)}(hAvoid srpt_remove_one(struct ib_device *device, void *client_data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj~hhhjhM ubj)}(hsrpt_remove_oneh]j:)}(hsrpt_remove_oneh]hsrpt_remove_one}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhM ubj)}(h-(struct ib_device *device, void *client_data)h](j)}(hstruct ib_device *deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hj̵hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h ib_deviceh]h ib_device}(hjݵhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjڵubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjߵmodnameN classnameNjWjZ)}j]]j`)}jSjsbc.srpt_remove_oneasbuh1hhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hvoid *client_datah](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj&)}(h h]h }(hj?hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj-ubju)}(hjxh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj-ubj:)}(h client_datah]h client_data}(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubeh}(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)}(h+InfiniBand device removal callback functionh]h+InfiniBand device removal callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhM ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh](j)}(h.``struct ib_device *device`` Describes a HCA. 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(hhh]h)}(hDescribes a HCA.h]hDescribes a HCA.}(hj޶hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڶhM hj۶ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjڶhM hjubj)}(hU``void *client_data`` The value passed as the third argument to ib_set_client_data().h](j)}(h``void *client_data``h]j)}(hjh]hvoid *client_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj )}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_close_session (C function)c.srpt_close_sessionhNtauh1hhj'hhhNhNubj)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM\ ubj&)}(h h]h }(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjThhhjfhM\ ubj)}(hsrpt_close_sessionh]j:)}(hsrpt_close_sessionh]hsrpt_close_session}(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhM\ ubj)}(h(struct se_session *se_sess)h]j)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h se_sessionh]h se_session}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSj{sbc.srpt_close_sessionasbuh1hhjubj&)}(h h]h }(hjӷhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hse_sessh]hse_sess}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjThhhjfhM\ ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjPhhhjfhM\ ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjfhM\ hjMhhubj)}(hhh]h)}(hforcibly close a sessionh]hforcibly close a session}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM\ hjhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjfhM\ ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj0jj0jjjuh1jhhhj'hNhNubj)}(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)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM` hj4ubj)}(hhh]j)}(h4``struct se_session *se_sess`` SCSI target session. h](j)}(h``struct se_session *se_sess``h]j)}(hjYh]hstruct se_session *se_sess}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM] hjSubj )}(hhh]h)}(hSCSI target session.h]hSCSI target session.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM] hjoubah}(h]h ]h"]h$]h&]uh1j hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM] hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM_ hj4ubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM^ hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!srpt_parse_i_port_id (C function)c.srpt_parse_i_port_idhNtauh1hhj'hhhNhNubj)}(hhh](j)}(h=int srpt_parse_i_port_id (u8 i_port_id[16], const char *name)h]j)}(hhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj&)}(h h]h }(hjKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubh)}(hhh]j:)}(h config_grouph]h config_group}(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj^modnameN classnameNjWjZ)}j]]jc.srpt_make_tportasbuh1hhj:ubj&)}(h h]h }(hjzhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj:ubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthj:ubj:)}(hgrouph]hgroup}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjƾubj)}(hconst char *nameh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubj)}(hcharh]hchar}(hjɿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj&)}(h h]h }(hj׿hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjƾubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjahMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhjLhhhjahMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjahMhjIhhubj)}(hhh]h)}(hKconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$porth]hKconfigfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjahMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjj4jj4jjjuh1jhhhj'hNhNubj)}(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>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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj8ubj)}(hhh](j)}(h0``struct target_fabric_configfs *tf`` Not used. h](j)}(h%``struct target_fabric_configfs *tf``h]j)}(hj]h]h!struct target_fabric_configfs *tf}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjWubj )}(hhh]h)}(h Not used.h]h Not used.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h)``struct config_group *group`` Not used. h](j)}(h``struct config_group *group``h]j)}(hjh]hstruct config_group *group}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h Not used.h]h Not used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h``const char *name`` $port.h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubj )}(hhh]h)}(h$port.h]h$port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_drop_tport (C function)c.srpt_drop_tporthNtauh1hhj'hhhNhNubj)}(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)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMubj&)}(h h]h }(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hj%hhhj7hMubj)}(hsrpt_drop_tporth]j:)}(hsrpt_drop_tporth]hsrpt_drop_tport}(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj7hMubj)}(h(struct se_wwn *wwn)h]j)}(hstruct se_wwn *wwnh](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjbubj&)}(h h]h }(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbubh)}(hhh]j:)}(hse_wwnh]hse_wwn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetjmodnameN classnameNjWjZ)}j]]j`)}jSjLsbc.srpt_drop_tportasbuh1hhjbubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjbubju)}(hjxh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjbubj:)}(hwwnh]hwwn}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^ubah}(h]h ]h"]h$]h&]jjuh1jhj%hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhjhhubj)}(hhh]h)}(hKconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$porth]hKconfigfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(h/**Parameters** ``struct se_wwn *wwn`` $port.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:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM hjubj)}(hhh]j)}(h``struct se_wwn *wwn`` $port.h](j)}(h``struct se_wwn *wwn``h]j)}(hj*h]hstruct se_wwn *wwn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM"hj$ubj )}(hhh]h)}(h$port.h]h$port.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMhj@ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM"hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsrpt_init_module (C function)c.srpt_init_modulehNtauh1hhj'hhhNhNubj)}(hhh](j)}(hint srpt_init_module (void)h]j)}(hint srpt_init_module(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]!Mh&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM`ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM`ubj)}(hsrpt_init_moduleh]j:)}(hsrpt_init_moduleh]hsrpt_init_module}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM`ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM`ubeh}(h]h ]h"]h$]h&]jjjuh1j jjhj|hhhjhM`ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhM`hjyhhubj)}(hhh]h)}(hkernel module initializationh]hkernel module initialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chM`hjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM`ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhj'hNhNubj)}(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 h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMdhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj,h]hvoid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhj&ubj )}(hhh]h)}(h no argumentsh]h no arguments}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Note**h]j)}(hjgh]hNote}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chKhjubh)}(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}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:116: ./drivers/infiniband/ulp/srpt/ib_srpt.chMbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'hhhNhNubeh}(h],infiniband-scsi-rdma-protocol-target-supportah ]h"],infiniband scsi rdma protocol target supportah$]h&]uh1hhjRhhhhhKoubh)}(hhh](h)}(h/iSCSI Extensions for RDMA (iSER) target supporth]h/iSCSI Extensions for RDMA (iSER) target support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKxubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!isert_conn_terminate (C function)c.isert_conn_terminatehNtauh1hhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:122: ./drivers/infiniband/ulp/isert/ib_isert.chM:ubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhjhM:ubj)}(hisert_conn_terminateh]j:)}(hisert_conn_terminateh]hisert_conn_terminate}(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM:ubj)}(h(struct isert_conn *isert_conn)h]j)}(hstruct isert_conn *isert_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj&)}(h h]h }(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubh)}(hhh]j:)}(h isert_connh]h isert_conn}(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubah}(h]h ]h"]h$]h&] refdomainjQreftypejS reftargetj"modnameN classnameNjWjZ)}j]]j`)}jSjsbc.isert_conn_terminateasbuh1hhjubj&)}(h h]h }(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjubju)}(hjxh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jthjubj:)}(h isert_connh]h isert_conn}(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubeh}(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)}(hInitiate connection terminationh]hInitiate connection termination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:122: ./drivers/infiniband/ulp/isert/ib_isert.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM:ubeh}(h]h ](jQfunctioneh"]h$]h&]jjQjjjjjjjuh1jhhhjhNhNubj)}(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)}(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:122: ./drivers/infiniband/ulp/isert/ib_isert.chM>hjubj)}(hhh]j)}(h:``struct isert_conn *isert_conn`` isert connection struct h](j)}(h!``struct isert_conn *isert_conn``h]j)}(hjh]hstruct isert_conn *isert_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:122: ./drivers/infiniband/ulp/isert/ib_isert.chM;hjubj )}(hhh]h)}(hisert connection structh]hisert connection struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubah}(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:122: ./drivers/infiniband/ulp/isert/ib_isert.chM=hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:122: ./drivers/infiniband/ulp/isert/ib_isert.chM=hjubh)}(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&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/driver-api/infiniband:122: ./drivers/infiniband/ulp/isert/ib_isert.chMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)isert_put_unsol_pending_cmds (C function)c.isert_put_unsol_pending_cmdshNtauh1hhjhhhNhNubj)}(hhh](j)}(hjjjNjSjv j{ j j j j jrjwjjjjjjjjjjjjjjjjj!j!j $j$jS(jX(j*,j/,j-j-j 1j1j2j2j4j4j7j7j=j=jrEjwEjIjIj7Njj>j]?jb?j@j@jDjDjFjFj@JjEJjNjNjOjOjjRj|jRjRjRjTjTj*Vj/VjnYjsYj[j[j]j]j_j_j"aj'ajbjbjdjdj"gj'gj/lj4ljojojpjpjsjsjDujIujvjvj"yj'yjzjzjN|jS|j~j~j݀jjjjjjjj<jAj{jjujzjjj jjjjj—j6j;jjjjj۞jj\jaj'jjjjjjjj.j3jjjҳj׳j;j@jݶjjjjjjWj\jjjjjjjjjjjjjjj jj4j9jpjujjjjj$j)jNjSjxj}j"j'jjj?jDjjjGjLj,j1jjjjjjjjjjjdjij j jc jh j"j'jjjjjjjjj7j<jjj j jA"jF"j$j $j%j%jj'j'j'j *j*j,j ,j-j-jl1jq1j/3j43j<j <j=j=j?j?jYAj^AjFCjKCjGjGjKjKjNj NjOjOjQjQj/Tj4TjUjUj1Wj6WjYjYja]jf]j`j`jbjbjdjdjgfjlfjVhj[hjkjkjnjnjsj sjvjvj*yj/yj{j{j~j~jjjj#jHjMjjjjjEjJjۏjj6j;j`jejjjęjəjqjvjSjXjVj[jjjۤjjjjojjj6j;jjj#j(j~jjjjujzjKjPj̸jѸjjźjjjGjLjj!jwj|jjjjjHjMu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.