This source file includes following definitions.
- mca_btl_vader_sc_emu_aop_complete
- mca_btl_vader_emu_aop
- mca_btl_vader_sc_emu_afop_complete
- mca_btl_vader_emu_afop
- mca_btl_vader_emu_acswap
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 #include "opal_config.h"
  13 
  14 #include "btl_vader.h"
  15 #include "btl_vader_frag.h"
  16 #include "btl_vader_endpoint.h"
  17 #include "btl_vader_xpmem.h"
  18 
  19 static void mca_btl_vader_sc_emu_aop_complete (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint,
  20                                                 mca_btl_base_descriptor_t *desc, int status)
  21 {
  22     mca_btl_vader_frag_t *frag = (mca_btl_vader_frag_t *) desc;
  23     void *local_address = frag->rdma.local_address;
  24     void *context = frag->rdma.context;
  25     void *cbdata = frag->rdma.cbdata;
  26     mca_btl_base_rdma_completion_fn_t cbfunc = frag->rdma.cbfunc;
  27 
  28     
  29     MCA_BTL_VADER_FRAG_RETURN(frag);
  30 
  31     cbfunc (btl, endpoint, local_address, NULL, context, cbdata, status);
  32 }
  33 
  34 int mca_btl_vader_emu_aop (struct mca_btl_base_module_t *btl, struct mca_btl_base_endpoint_t *endpoint,
  35                            uint64_t remote_address, mca_btl_base_registration_handle_t *remote_handle,
  36                            mca_btl_base_atomic_op_t op, uint64_t operand, int flags, int order,
  37                            mca_btl_base_rdma_completion_fn_t cbfunc, void *cbcontext, void *cbdata)
  38 {
  39     mca_btl_vader_frag_t *frag;
  40 
  41     frag = mca_btl_vader_rdma_frag_alloc (btl, endpoint, MCA_BTL_VADER_OP_ATOMIC, operand, 0, op, 0, order, flags, NULL,
  42                                           remote_address, cbfunc, cbcontext, cbdata, mca_btl_vader_sc_emu_aop_complete);
  43     if (OPAL_UNLIKELY(NULL == frag)) {
  44         return OPAL_ERR_OUT_OF_RESOURCE;
  45     }
  46 
  47     
  48     (void) mca_btl_vader_send (btl, endpoint, &frag->base, MCA_BTL_TAG_VADER);
  49 
  50     return OPAL_SUCCESS;
  51 }
  52 
  53 static void mca_btl_vader_sc_emu_afop_complete (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint,
  54                                                 mca_btl_base_descriptor_t *desc, int status)
  55 {
  56     mca_btl_vader_frag_t *frag = (mca_btl_vader_frag_t *) desc;
  57     mca_btl_vader_sc_emu_hdr_t *hdr;
  58     void *local_address = frag->rdma.local_address;
  59     void *context = frag->rdma.context;
  60     void *cbdata = frag->rdma.cbdata;
  61     mca_btl_base_rdma_completion_fn_t cbfunc = frag->rdma.cbfunc;
  62 
  63     hdr = (mca_btl_vader_sc_emu_hdr_t *) frag->segments[0].seg_addr.pval;
  64 
  65     *((int64_t *) frag->rdma.local_address) = hdr->operand[0];
  66 
  67     
  68     MCA_BTL_VADER_FRAG_RETURN(frag);
  69 
  70     cbfunc (btl, endpoint, local_address, NULL, context, cbdata, status);
  71 }
  72 
  73 int mca_btl_vader_emu_afop (struct mca_btl_base_module_t *btl, struct mca_btl_base_endpoint_t *endpoint,
  74                             void *local_address, uint64_t remote_address, mca_btl_base_registration_handle_t *local_handle,
  75                             mca_btl_base_registration_handle_t *remote_handle, mca_btl_base_atomic_op_t op,
  76                             uint64_t operand, int flags, int order, mca_btl_base_rdma_completion_fn_t cbfunc,
  77                             void *cbcontext, void *cbdata)
  78 {
  79     mca_btl_vader_frag_t *frag;
  80 
  81     frag = mca_btl_vader_rdma_frag_alloc (btl, endpoint, MCA_BTL_VADER_OP_ATOMIC, operand, 0, op, 0, order, flags,
  82                                           local_address, remote_address, cbfunc, cbcontext, cbdata,
  83                                           mca_btl_vader_sc_emu_afop_complete);
  84     if (OPAL_UNLIKELY(NULL == frag)) {
  85         return OPAL_ERR_OUT_OF_RESOURCE;
  86     }
  87 
  88     
  89     (void) mca_btl_vader_send (btl, endpoint, &frag->base, MCA_BTL_TAG_VADER);
  90 
  91     return OPAL_SUCCESS;
  92 }
  93 
  94 int mca_btl_vader_emu_acswap (struct mca_btl_base_module_t *btl, struct mca_btl_base_endpoint_t *endpoint,
  95                               void *local_address, uint64_t remote_address, mca_btl_base_registration_handle_t *local_handle,
  96                               mca_btl_base_registration_handle_t *remote_handle, uint64_t compare, uint64_t value, int flags,
  97                               int order, mca_btl_base_rdma_completion_fn_t cbfunc, void *cbcontext, void *cbdata)
  98 {
  99     mca_btl_vader_frag_t *frag;
 100 
 101     frag = mca_btl_vader_rdma_frag_alloc (btl, endpoint, MCA_BTL_VADER_OP_CSWAP, compare, value, 0, 0, order,
 102                                           flags, local_address, remote_address, cbfunc, cbcontext, cbdata,
 103                                           mca_btl_vader_sc_emu_afop_complete);
 104     if (OPAL_UNLIKELY(NULL == frag)) {
 105         return OPAL_ERR_OUT_OF_RESOURCE;
 106     }
 107 
 108     
 109     (void) mca_btl_vader_send (btl, endpoint, &frag->base, MCA_BTL_TAG_VADER);
 110 
 111     return OPAL_SUCCESS;
 112 }