root/opal/mca/btl/ugni/btl_ugni_frag.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mca_btl_ugni_base_frag_constructor
  2. mca_btl_ugni_eager_frag_constructor
  3. mca_btl_ugni_post_descriptor_constructor
  4. mca_btl_ugni_rdma_desc_constructor
  5. mca_btl_ugni_rdma_desc_destructor
  6. mca_btl_ugni_rdma_desc_init
  7. mca_btl_ugni_frag_init

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2011-2018 Los Alamos National Security, LLC. All rights
   4  *                         reserved.
   5  * Copyright (c) 2011      UT-Battelle, LLC. All rights reserved.
   6  * $COPYRIGHT$
   7  *
   8  * Additional copyrights may follow
   9  *
  10  * $HEADER$
  11  */
  12 
  13 #include "btl_ugni.h"
  14 #include "btl_ugni_frag.h"
  15 
  16 static inline void mca_btl_ugni_base_frag_constructor (mca_btl_ugni_base_frag_t *frag)
  17 {
  18     memset ((char *) frag + sizeof (frag->base), 0, sizeof (*frag) - sizeof (frag->base));
  19     frag->segments[0].seg_addr.pval = frag->base.super.ptr;
  20 }
  21 
  22 static inline void mca_btl_ugni_eager_frag_constructor (mca_btl_ugni_base_frag_t *frag)
  23 {
  24     struct mca_btl_ugni_reg_t *reg =
  25         (struct mca_btl_ugni_reg_t *) frag->base.super.registration;
  26 
  27     mca_btl_ugni_base_frag_constructor (frag);
  28 
  29     frag->memory_handle = reg->handle;
  30 }
  31 
  32 OBJ_CLASS_INSTANCE(mca_btl_ugni_smsg_frag_t, mca_btl_base_descriptor_t,
  33                    mca_btl_ugni_base_frag_constructor, NULL);
  34 
  35 OBJ_CLASS_INSTANCE(mca_btl_ugni_rdma_frag_t, mca_btl_base_descriptor_t,
  36                    mca_btl_ugni_base_frag_constructor, NULL);
  37 
  38 OBJ_CLASS_INSTANCE(mca_btl_ugni_eager_frag_t, mca_btl_base_descriptor_t,
  39                    mca_btl_ugni_eager_frag_constructor, NULL);
  40 
  41 static void mca_btl_ugni_post_descriptor_constructor (mca_btl_ugni_post_descriptor_t *desc)
  42 {
  43     desc->cq = NULL;
  44 }
  45 
  46 OBJ_CLASS_INSTANCE(mca_btl_ugni_post_descriptor_t, opal_free_list_item_t,
  47                    mca_btl_ugni_post_descriptor_constructor, NULL);
  48 
  49 static void mca_btl_ugni_rdma_desc_constructor (mca_btl_ugni_rdma_desc_t *desc)
  50 {
  51     desc->device = NULL;
  52     desc->gni_handle = 0;
  53     desc->tries = 0;
  54 }
  55 
  56 static void mca_btl_ugni_rdma_desc_destructor (mca_btl_ugni_rdma_desc_t *desc)
  57 {
  58     if (0 != desc->gni_handle) {
  59         (void) GNI_EpDestroy (desc->gni_handle);
  60         desc->gni_handle = 0;
  61     }
  62 }
  63 
  64 int mca_btl_ugni_rdma_desc_init (opal_free_list_item_t *item, void *ctx)
  65 {
  66     mca_btl_ugni_rdma_desc_t *rdma_desc = (mca_btl_ugni_rdma_desc_t *) item;
  67     mca_btl_ugni_device_t *device = (mca_btl_ugni_device_t *) ctx;
  68     gni_return_t grc;
  69 
  70     grc = GNI_EpCreate (device->dev_handle, device->dev_rdma_local_cq.gni_handle, &rdma_desc->gni_handle);
  71     rdma_desc->device = device;
  72     return mca_btl_rc_ugni_to_opal (grc);
  73 }
  74 
  75 
  76 OBJ_CLASS_INSTANCE(mca_btl_ugni_rdma_desc_t, opal_free_list_item_t,
  77                    mca_btl_ugni_rdma_desc_constructor, mca_btl_ugni_rdma_desc_destructor);
  78 
  79 int mca_btl_ugni_frag_init (mca_btl_ugni_base_frag_t *frag, void *id)
  80 {
  81     /* NTH: the id is a combination of the module id and the free list id. for now there
  82      * is only ever one module so the module id is ignored. if this changes the code
  83      * here and btl_ugni_add_procs.c (opal_free_list_init calls) needs to be updated */
  84     intptr_t free_list_id = (intptr_t) id & 0xff;
  85     mca_btl_ugni_module_t *ugni_module = mca_btl_ugni_component.modules;
  86 
  87     frag->msg_id = opal_pointer_array_add (&ugni_module->pending_smsg_frags_bb, (void *) frag);
  88     frag->my_list = ugni_module->frags_lists + free_list_id;
  89 
  90     return OPAL_SUCCESS;
  91 }

/* [<][>][^][v][top][bottom][index][help] */