\hypertarget{btl__mx_8h}{\section{ompi/mca/btl/mx/btl\+\_\+mx.h File Reference}
\label{btl__mx_8h}\index{ompi/mca/btl/mx/btl\+\_\+mx.\+h@{ompi/mca/btl/mx/btl\+\_\+mx.\+h}}
}
{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include $<$sys/types.\+h$>$}\\*
{\ttfamily \#include $<$string.\+h$>$}\\*
{\ttfamily \#include \char`\"{}ompi/class/ompi\+\_\+free\+\_\+list.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/mca/event/event.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/btl/btl.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/btl/base/base.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/mpool/mpool.\+h\char`\"{}}\\*
{\ttfamily \#include $<$myriexpress.\+h$>$}\\*
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structmca__btl__mx__component__t}{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t}
\begin{DoxyCompactList}\small\item\em M\+X B\+T\+L component. \end{DoxyCompactList}\item 
struct \hyperlink{structmca__btl__mx__module__t}{mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t}
\begin{DoxyCompactList}\small\item\em B\+T\+L Module Interface. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\hypertarget{btl__mx_8h_a911c98a56d02bb58416c47953b353bfd}{\#define \hyperlink{btl__mx_8h_a911c98a56d02bb58416c47953b353bfd}{B\+T\+L\+\_\+\+M\+X\+\_\+\+R\+E\+C\+V\+\_\+\+M\+A\+S\+K}~0x00000000000000ff\+U\+L\+L}\label{btl__mx_8h_a911c98a56d02bb58416c47953b353bfd}

\begin{DoxyCompactList}\small\item\em The mask used for receive and for the P\+U\+T protocol. \end{DoxyCompactList}\item 
\hypertarget{btl__mx_8h_acb2e468af07733729f408340793021d8}{\#define {\bfseries B\+T\+L\+\_\+\+M\+X\+\_\+\+P\+U\+T\+\_\+\+M\+A\+S\+K}~0xffffffffffffffff\+U\+L\+L}\label{btl__mx_8h_acb2e468af07733729f408340793021d8}

\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{btl__mx_8h_a3846f680c770e22977df484df2555acb}{typedef struct \\*
\hyperlink{structmca__btl__mx__component__t}{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t} {\bfseries mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t}}\label{btl__mx_8h_a3846f680c770e22977df484df2555acb}

\item 
\hypertarget{btl__mx_8h_afefeab56355d4f65f4af11b7d7fe4e38}{typedef struct \hyperlink{structmca__btl__mx__module__t}{mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t} {\bfseries mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t}}\label{btl__mx_8h_afefeab56355d4f65f4af11b7d7fe4e38}

\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$$\ast$ \hyperlink{btl__mx_8h_ae6fec0f7da01170ea1033a2ef5a69a34}{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init} (int $\ast$num\+\_\+btl\+\_\+modules, bool allow\+\_\+multi\+\_\+user\+\_\+threads, bool have\+\_\+hidden\+\_\+threads)
\begin{DoxyCompactList}\small\item\em M\+X component initialization. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_ab866085d2afb1b34b0145070fccf022d}{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress} (void)
\begin{DoxyCompactList}\small\item\em M\+X component progress. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a9ee08bb872e6ad6f26e2fec1ab1bbb3b}{mca\+\_\+btl\+\_\+mx\+\_\+finalize} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl)
\begin{DoxyCompactList}\small\item\em Cleanup any resources held by the B\+T\+L. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a29088584258b177dd134fde3616f567b}{mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, size\+\_\+t nprocs, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$peers, \hyperlink{structopal__bitmap__t}{opal\+\_\+bitmap\+\_\+t} $\ast$reachable)
\begin{DoxyCompactList}\small\item\em P\+M\+L-\/$>$B\+T\+L notification of change in the process list. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a09d6caaad2b6516acbed4a4e1c81dbc3}{mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, size\+\_\+t nprocs, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$peers)
\begin{DoxyCompactList}\small\item\em P\+M\+L-\/$>$B\+T\+L notification of change in the process list. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a772632d8c726b21137c6fa16d610f042}{mca\+\_\+btl\+\_\+mx\+\_\+send} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$btl\+\_\+peer, struct \hyperlink{structmca__btl__base__descriptor__t}{mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$descriptor, mca\+\_\+btl\+\_\+base\+\_\+tag\+\_\+t tag)
\begin{DoxyCompactList}\small\item\em Initiate an asynchronous send. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a12d1847f21b58297c4c3b7415b031f8a}{mca\+\_\+btl\+\_\+mx\+\_\+register} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, mca\+\_\+btl\+\_\+base\+\_\+tag\+\_\+t tag, \hyperlink{btl_8h_a6b39783709e482be956466e3a5847eff}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+recv\+\_\+cb\+\_\+fn\+\_\+t} cbfunc, void $\ast$cbdata)
\begin{DoxyCompactList}\small\item\em Register a callback function that is called on receipt of a fragment. \end{DoxyCompactList}\item 
\hyperlink{structmca__btl__base__descriptor__t}{mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$ \hyperlink{btl__mx_8h_ab6605592d3d68b936d5543dd6af3eb16}{mca\+\_\+btl\+\_\+mx\+\_\+alloc} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$endpoint, uint8\+\_\+t order, size\+\_\+t size, uint32\+\_\+t flags)
\begin{DoxyCompactList}\small\item\em Allocate a descriptor with a segment of the requested size. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_ae159c42ff39227eb18d3bc2a96dcf8c5}{mca\+\_\+btl\+\_\+mx\+\_\+free} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, \hyperlink{structmca__btl__base__descriptor__t}{mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$des)
\begin{DoxyCompactList}\small\item\em Return a segment allocated by this B\+T\+L. \end{DoxyCompactList}\item 
\hyperlink{structmca__btl__base__descriptor__t}{mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$ \hyperlink{btl__mx_8h_a804cf040e59f4a6fbd707663effc3a74}{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$peer, struct \hyperlink{structmca__mpool__base__registration__t}{mca\+\_\+mpool\+\_\+base\+\_\+registration\+\_\+t} $\ast$, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, uint8\+\_\+t order, size\+\_\+t reserve, size\+\_\+t $\ast$size, uint32\+\_\+t flags)
\begin{DoxyCompactList}\small\item\em Prepare a descriptor for send/rdma using the supplied convertor. \end{DoxyCompactList}\item 
\hyperlink{structmca__btl__base__descriptor__t}{mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$ \hyperlink{btl__mx_8h_acbd612f3229ee7906edb18dd1df12a91}{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst} (struct \hyperlink{structmca__btl__base__module__t}{mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$btl, struct \hyperlink{structmca__btl__base__endpoint__t}{mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$peer, struct \hyperlink{structmca__mpool__base__registration__t}{mca\+\_\+mpool\+\_\+base\+\_\+registration\+\_\+t} $\ast$, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, uint8\+\_\+t order, size\+\_\+t reserve, size\+\_\+t $\ast$size, uint32\+\_\+t flags)
\begin{DoxyCompactList}\small\item\em Prepare a descriptor for send/rdma using the supplied convertor. \end{DoxyCompactList}\item 
int \hyperlink{btl__mx_8h_a48e9e5cc29a20c095493c5ea2790cf92}{mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event} (int state)
\begin{DoxyCompactList}\small\item\em Fault Tolerance Event Notification \hyperlink{structFunction}{Function}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{btl__mx_8h_a15b537af1ce0267203c1c83af322f88c}{O\+M\+P\+I\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \\*
\hyperlink{structmca__btl__mx__component__t}{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t} {\bfseries mca\+\_\+btl\+\_\+mx\+\_\+component}}\label{btl__mx_8h_a15b537af1ce0267203c1c83af322f88c}

\item 
\hypertarget{btl__mx_8h_a5411a8f219e4967e9d42708a4ee77e76}{\hyperlink{structmca__btl__mx__module__t}{mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t} {\bfseries mca\+\_\+btl\+\_\+mx\+\_\+module}}\label{btl__mx_8h_a5411a8f219e4967e9d42708a4ee77e76}

\end{DoxyCompactItemize}


\subsection{Function Documentation}
\hypertarget{btl__mx_8h_a29088584258b177dd134fde3616f567b}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs@{mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs@{mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+add\+\_\+procs (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{size\+\_\+t}]{nprocs, }
\item[{struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$$\ast$}]{procs, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$}]{peers, }
\item[{{\bf opal\+\_\+bitmap\+\_\+t} $\ast$}]{reachable}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a29088584258b177dd134fde3616f567b}


P\+M\+L-\/$>$B\+T\+L notification of change in the process list. 


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) \\
\hline
{\em nprocs} & (I\+N) Number of processes \\
\hline
{\em procs} & (I\+N) Set of processes \\
\hline
{\em peers} & (O\+U\+T) Set of (optional) peer addressing info. \\
\hline
{\em peers} & (I\+N/\+O\+U\+T) Set of processes that are reachable via this B\+T\+L. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or error status on failure. 
\end{DoxyReturn}
By default don't allow communications with self nor with any other processes on the same node. The B\+T\+L self and sm are supposed to take care of such communications.

References mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t\+::endpoint\+\_\+btl, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+support\+\_\+self, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+support\+\_\+sharedmem, O\+B\+J\+\_\+\+R\+E\+L\+E\+A\+S\+E, ompi\+\_\+proc\+\_\+local\+\_\+proc, opal\+\_\+bitmap\+\_\+set\+\_\+bit(), O\+P\+A\+L\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+L\+O\+C\+K, O\+P\+A\+L\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+U\+N\+L\+O\+C\+K, ompi\+\_\+proc\+\_\+t\+::proc\+\_\+flags, and mca\+\_\+btl\+\_\+mx\+\_\+proc\+\_\+t\+::proc\+\_\+lock.

\hypertarget{btl__mx_8h_ab6605592d3d68b936d5543dd6af3eb16}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+alloc@{mca\+\_\+btl\+\_\+mx\+\_\+alloc}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+alloc@{mca\+\_\+btl\+\_\+mx\+\_\+alloc}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+alloc}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t}$\ast$ mca\+\_\+btl\+\_\+mx\+\_\+alloc (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$}]{endpoint, }
\item[{uint8\+\_\+t}]{order, }
\item[{size\+\_\+t}]{size, }
\item[{uint32\+\_\+t}]{flags}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_ab6605592d3d68b936d5543dd6af3eb16}


Allocate a descriptor with a segment of the requested size. 

Note that the B\+T\+L layer may choose to return a smaller size if it cannot support the request.


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em size} & (I\+N) \hyperlink{classRequest}{Request} segment size.\\
\hline
\end{DoxyParams}
Allocate a descriptor with a segment of the requested size.


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em size} & (I\+N) \hyperlink{classRequest}{Request} segment size. \\
\hline
\end{DoxyParams}


References mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t\+::btl\+\_\+eager\+\_\+limit, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+flags, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src\+\_\+cnt, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::order, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+addr, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+len, and mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::super.

\hypertarget{btl__mx_8h_ae6fec0f7da01170ea1033a2ef5a69a34}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init@{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init@{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t}$\ast$$\ast$ mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init (
\begin{DoxyParamCaption}
\item[{int $\ast$}]{num\+\_\+btl\+\_\+modules, }
\item[{bool}]{allow\+\_\+multi\+\_\+user\+\_\+threads, }
\item[{bool}]{have\+\_\+hidden\+\_\+threads}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_ae6fec0f7da01170ea1033a2ef5a69a34}


M\+X component initialization. 


\begin{DoxyParams}{Parameters}
{\em num\+\_\+btl\+\_\+modules} & (O\+U\+T) Number of B\+T\+Ls returned in B\+T\+L array. \\
\hline
{\em allow\+\_\+multi\+\_\+user\+\_\+threads} & (O\+U\+T) Flag indicating wether B\+T\+L supports user threads (T\+R\+U\+E) \\
\hline
{\em have\+\_\+hidden\+\_\+threads} & (O\+U\+T) Flag indicating wether B\+T\+L uses threads (T\+R\+U\+E) \\
\hline
\end{DoxyParams}
As the M\+X M\+T\+L get initialized before the M\+X B\+T\+L it will call the mx\+\_\+init and the environment variables set by the B\+T\+L will be useless. Closing the M\+X will force the next call to mx\+\_\+init to take these environment variables into account.

References mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t\+::btl\+\_\+eager\+\_\+limit, mca\+\_\+btl\+\_\+mx\+\_\+finalize(), mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+bonding, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+btls, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint\+\_\+addr, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+free\+\_\+list\+\_\+inc, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+free\+\_\+list\+\_\+max, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+free\+\_\+list\+\_\+num, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+lock, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+max\+\_\+btls, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+procs, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+send\+\_\+eager\+\_\+frags, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+send\+\_\+user\+\_\+frags, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+unique\+\_\+network\+\_\+id, O\+B\+J\+\_\+\+C\+L\+A\+S\+S, O\+B\+J\+\_\+\+C\+O\+N\+S\+T\+R\+U\+C\+T, ompi\+\_\+modex\+\_\+send(), opal\+\_\+output(), mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::super, and mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::super.

\hypertarget{btl__mx_8h_ab866085d2afb1b34b0145070fccf022d}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress@{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress@{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+progress (
\begin{DoxyParamCaption}
\item[{void}]{}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_ab866085d2afb1b34b0145070fccf022d}


M\+X component progress. 

The upper level extract the data from the fragment. Now we can register the fragment again with the M\+X B\+T\+L.

References mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t\+::btl\+\_\+eager\+\_\+limit, B\+T\+L\+\_\+\+M\+X\+\_\+\+R\+E\+C\+V\+\_\+\+M\+A\+S\+K, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+cbfunc, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+dst, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+flags, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+btls, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint, opal\+\_\+output(), mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+addr, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+len, and mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::super.

\hypertarget{btl__mx_8h_a09d6caaad2b6516acbed4a4e1c81dbc3}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs@{mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs@{mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+del\+\_\+procs (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{size\+\_\+t}]{nprocs, }
\item[{struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$$\ast$}]{procs, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$}]{peers}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a09d6caaad2b6516acbed4a4e1c81dbc3}


P\+M\+L-\/$>$B\+T\+L notification of change in the process list. 


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L instance \\
\hline
{\em nproc} & (I\+N) Number of processes. \\
\hline
{\em procs} & (I\+N) Set of processes. \\
\hline
{\em peers} & (I\+N) Set of peer data structures. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{classStatus}{Status} indicating if cleanup was successful 
\end{DoxyReturn}


References opal\+\_\+output().

\hypertarget{btl__mx_8h_a9ee08bb872e6ad6f26e2fec1ab1bbb3b}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+finalize@{mca\+\_\+btl\+\_\+mx\+\_\+finalize}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+finalize@{mca\+\_\+btl\+\_\+mx\+\_\+finalize}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+finalize}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+finalize (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a9ee08bb872e6ad6f26e2fec1ab1bbb3b}


Cleanup any resources held by the B\+T\+L. 


\begin{DoxyParams}{Parameters}
{\em btl} & B\+T\+L instance. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or error status on failure. 
\end{DoxyReturn}


References mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+lock, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+peers, and O\+B\+J\+\_\+\+D\+E\+S\+T\+R\+U\+C\+T.



Referenced by mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init().

\hypertarget{btl__mx_8h_ae159c42ff39227eb18d3bc2a96dcf8c5}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+free@{mca\+\_\+btl\+\_\+mx\+\_\+free}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+free@{mca\+\_\+btl\+\_\+mx\+\_\+free}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+free (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{{\bf mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$}]{des}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_ae159c42ff39227eb18d3bc2a96dcf8c5}


Return a segment allocated by this B\+T\+L. 


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em descriptor} & (I\+N) Allocated descriptor.\\
\hline
\end{DoxyParams}
Return a segment allocated by this B\+T\+L. \hypertarget{btl__mx_8h_a48e9e5cc29a20c095493c5ea2790cf92}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event@{mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event@{mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+ft\+\_\+event (
\begin{DoxyParamCaption}
\item[{int}]{state}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a48e9e5cc29a20c095493c5ea2790cf92}


Fault Tolerance Event Notification \hyperlink{structFunction}{Function}. 


\begin{DoxyParams}{Parameters}
{\em state} & Checkpoint Stae \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status 
\end{DoxyReturn}
\hypertarget{btl__mx_8h_acbd612f3229ee7906edb18dd1df12a91}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst@{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst@{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t}$\ast$ mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+dst (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$}]{endpoint, }
\item[{struct {\bf mca\+\_\+mpool\+\_\+base\+\_\+registration\+\_\+t} $\ast$}]{registration, }
\item[{struct {\bf opal\+\_\+convertor\+\_\+t} $\ast$}]{convertor, }
\item[{uint8\+\_\+t}]{order, }
\item[{size\+\_\+t}]{reserve, }
\item[{size\+\_\+t $\ast$}]{size, }
\item[{uint32\+\_\+t}]{flags}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_acbd612f3229ee7906edb18dd1df12a91}


Prepare a descriptor for send/rdma using the supplied convertor. 

If the convertor references data that is contigous, the descriptor may simply point to the user buffer. Otherwise, this routine is responsible for allocating buffer space and packing if required.


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em endpoint} & (I\+N) B\+T\+L peer addressing \\
\hline
{\em convertor} & (I\+N) Data type convertor \\
\hline
{\em reserve} & (I\+N) Additional bytes requested by upper layer to precede user data \\
\hline
{\em size} & (I\+N/\+O\+U\+T) Number of bytes to prepare (I\+N), number of bytes actually prepared (O\+U\+T) \\
\hline
\end{DoxyParams}


References mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+dst, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+dst\+\_\+cnt, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+flags, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint, opal\+\_\+output(), mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::order, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+addr, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+key, and mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+len.

\hypertarget{btl__mx_8h_a804cf040e59f4a6fbd707663effc3a74}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src@{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src@{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src}]{\setlength{\rightskip}{0pt plus 5cm}{\bf mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t}$\ast$ mca\+\_\+btl\+\_\+mx\+\_\+prepare\+\_\+src (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$}]{endpoint, }
\item[{struct {\bf mca\+\_\+mpool\+\_\+base\+\_\+registration\+\_\+t} $\ast$}]{registration, }
\item[{struct {\bf opal\+\_\+convertor\+\_\+t} $\ast$}]{convertor, }
\item[{uint8\+\_\+t}]{order, }
\item[{size\+\_\+t}]{reserve, }
\item[{size\+\_\+t $\ast$}]{size, }
\item[{uint32\+\_\+t}]{flags}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a804cf040e59f4a6fbd707663effc3a74}


Prepare a descriptor for send/rdma using the supplied convertor. 

If the convertor references data that is contigous, the descriptor may simply point to the user buffer. Otherwise, this routine is responsible for allocating buffer space and packing if required.


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em endpoint} & (I\+N) B\+T\+L peer addressing \\
\hline
{\em convertor} & (I\+N) Data type convertor \\
\hline
{\em reserve} & (I\+N) Additional bytes requested by upper layer to precede user data \\
\hline
{\em size} & (I\+N/\+O\+U\+T) Number of bytes to prepare (I\+N), number of bytes actually prepared (O\+U\+T)\\
\hline
\end{DoxyParams}
Prepare a descriptor for send/rdma using the supplied convertor.


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em peer} & (I\+N) B\+T\+L peer addressing \\
\hline
\end{DoxyParams}
let the convertor figure out the correct pointer depending on the data layout

References mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t\+::btl\+\_\+eager\+\_\+limit, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+flags, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src\+\_\+cnt, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::order, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+addr, and mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+len.

\hypertarget{btl__mx_8h_a12d1847f21b58297c4c3b7415b031f8a}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+register@{mca\+\_\+btl\+\_\+mx\+\_\+register}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+register@{mca\+\_\+btl\+\_\+mx\+\_\+register}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+register}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+register (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{mca\+\_\+btl\+\_\+base\+\_\+tag\+\_\+t}]{tag, }
\item[{{\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+recv\+\_\+cb\+\_\+fn\+\_\+t}}]{cbfunc, }
\item[{void $\ast$}]{cbdata}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a12d1847f21b58297c4c3b7415b031f8a}


Register a callback function that is called on receipt of a fragment. 


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{classStatus}{Status} indicating if registration was successful
\end{DoxyReturn}
Register a callback function that is called on receipt of a fragment. 

References mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t\+::btl\+\_\+eager\+\_\+limit, B\+T\+L\+\_\+\+M\+X\+\_\+\+R\+E\+C\+V\+\_\+\+M\+A\+S\+K, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+dst, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+dst\+\_\+cnt, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src\+\_\+cnt, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+max\+\_\+posted\+\_\+recv, mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+t\+::mx\+\_\+use\+\_\+unexpected, opal\+\_\+output(), and mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::super.

\hypertarget{btl__mx_8h_a772632d8c726b21137c6fa16d610f042}{\index{btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}!mca\+\_\+btl\+\_\+mx\+\_\+send@{mca\+\_\+btl\+\_\+mx\+\_\+send}}
\index{mca\+\_\+btl\+\_\+mx\+\_\+send@{mca\+\_\+btl\+\_\+mx\+\_\+send}!btl\+\_\+mx.\+h@{btl\+\_\+mx.\+h}}
\subsubsection[{mca\+\_\+btl\+\_\+mx\+\_\+send}]{\setlength{\rightskip}{0pt plus 5cm}int mca\+\_\+btl\+\_\+mx\+\_\+send (
\begin{DoxyParamCaption}
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+module\+\_\+t} $\ast$}]{btl, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$}]{endpoint, }
\item[{struct {\bf mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t} $\ast$}]{descriptor, }
\item[{mca\+\_\+btl\+\_\+base\+\_\+tag\+\_\+t}]{tag}
\end{DoxyParamCaption}
)}}\label{btl__mx_8h_a772632d8c726b21137c6fa16d610f042}


Initiate an asynchronous send. 


\begin{DoxyParams}{Parameters}
{\em btl} & (I\+N) B\+T\+L module \\
\hline
{\em endpoint} & (I\+N) B\+T\+L addressing information \\
\hline
{\em descriptor} & (I\+N) Description of the data to be transfered \\
\hline
{\em tag} & (I\+N) The tag value used to notify the peer. \\
\hline
\end{DoxyParams}


References mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+cbfunc, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+flags, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src, mca\+\_\+btl\+\_\+base\+\_\+descriptor\+\_\+t\+::des\+\_\+src\+\_\+cnt, mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::mx\+\_\+endpoint, mca\+\_\+btl\+\_\+base\+\_\+endpoint\+\_\+t\+::mx\+\_\+peer\+\_\+addr, opal\+\_\+output(), mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+addr, mca\+\_\+btl\+\_\+base\+\_\+segment\+\_\+t\+::seg\+\_\+len, and mca\+\_\+btl\+\_\+mx\+\_\+module\+\_\+t\+::super.

