This source file includes following definitions.
- mca_rcache_gpusm_registration_constructor
- mca_rcache_gpusm_registration_destructor
- mca_rcache_gpusm_module_init
- mca_rcache_gpusm_find
- mca_rcache_gpusm_register
- mca_rcache_gpusm_deregister
- mca_rcache_gpusm_finalize
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 #include "opal_config.h"
  41 #include "opal/mca/rcache/base/base.h"
  42 #include "opal/mca/rcache/gpusm/rcache_gpusm.h"
  43 #include "opal/mca/common/cuda/common_cuda.h"
  44 
  45 
  46 
  47 
  48 
  49 static void mca_rcache_gpusm_registration_constructor( mca_rcache_gpusm_registration_t *item )
  50 {
  51     mca_common_cuda_construct_event_and_handle(&item->event,
  52                                                (void *)&item->evtHandle);
  53 }
  54 
  55 
  56 
  57 
  58 static void mca_rcache_gpusm_registration_destructor( mca_rcache_gpusm_registration_t *item )
  59 {
  60     mca_common_cuda_destruct_event(item->event);
  61 }
  62 
  63 OBJ_CLASS_INSTANCE(mca_rcache_gpusm_registration_t, mca_rcache_base_registration_t,
  64                    mca_rcache_gpusm_registration_constructor,
  65                    mca_rcache_gpusm_registration_destructor);
  66 
  67 
  68 
  69 
  70 void mca_rcache_gpusm_module_init(mca_rcache_gpusm_module_t* rcache)
  71 {
  72     rcache->super.rcache_component = &mca_rcache_gpusm_component.super;
  73     rcache->super.rcache_register = mca_rcache_gpusm_register;
  74     rcache->super.rcache_find = mca_rcache_gpusm_find;
  75     rcache->super.rcache_deregister = mca_rcache_gpusm_deregister;
  76     rcache->super.rcache_finalize = mca_rcache_gpusm_finalize;
  77 
  78     OBJ_CONSTRUCT(&rcache->reg_list, opal_free_list_t);
  79 
  80     
  81 
  82 
  83     opal_free_list_init (&rcache->reg_list, sizeof(struct mca_rcache_common_cuda_reg_t),
  84             opal_cache_line_size,
  85             OBJ_CLASS(mca_rcache_gpusm_registration_t),
  86             0,opal_cache_line_size,
  87             0, -1, 64, NULL, 0, NULL, NULL, NULL);
  88 
  89 }
  90 
  91 
  92 
  93 
  94 
  95 int mca_rcache_gpusm_find(mca_rcache_base_module_t *rcache, void *addr,
  96                          size_t size,
  97                          mca_rcache_base_registration_t **reg)
  98 {
  99     return mca_rcache_gpusm_register(rcache, addr, size, 0, 0, reg);
 100 }
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 int mca_rcache_gpusm_register(mca_rcache_base_module_t *rcache, void *addr,
 109                              size_t size, uint32_t flags, int32_t access_flags,
 110                              mca_rcache_base_registration_t **reg)
 111 {
 112     mca_rcache_gpusm_module_t *rcache_gpusm = (mca_rcache_gpusm_module_t*)rcache;
 113     mca_rcache_base_registration_t *gpusm_reg;
 114     opal_free_list_item_t *item;
 115     unsigned char *base, *bound;
 116     int rc;
 117 
 118     
 119 
 120 
 121 
 122     *reg = NULL;
 123 
 124     base = addr;
 125     bound = (unsigned char *)addr + size - 1;
 126 
 127     item = opal_free_list_get (&rcache_gpusm->reg_list);
 128     if(NULL == item) {
 129         return OPAL_ERR_OUT_OF_RESOURCE;
 130     }
 131     gpusm_reg = (mca_rcache_base_registration_t*)item;
 132 
 133     gpusm_reg->rcache = rcache;
 134     gpusm_reg->base = base;
 135     gpusm_reg->bound = bound;
 136     gpusm_reg->flags = flags;
 137     gpusm_reg->access_flags = access_flags;
 138 
 139     rc = cuda_getmemhandle (base, size, gpusm_reg, NULL);
 140 
 141     if(rc != OPAL_SUCCESS) {
 142         opal_free_list_return (&rcache_gpusm->reg_list, item);
 143         return rc;
 144     }
 145 
 146     *reg = gpusm_reg;
 147     (*reg)->ref_count++;
 148     return OPAL_SUCCESS;
 149 
 150 }
 151 
 152 
 153 
 154 
 155 int mca_rcache_gpusm_deregister(struct mca_rcache_base_module_t *rcache,
 156                                mca_rcache_base_registration_t *reg)
 157 {
 158     int rc;
 159     mca_rcache_gpusm_module_t *rcache_gpusm = (mca_rcache_gpusm_module_t *)rcache;
 160 
 161     rc = cuda_ungetmemhandle (NULL, reg);
 162     opal_free_list_return (&rcache_gpusm->reg_list, (opal_free_list_item_t *) reg);
 163     return OPAL_SUCCESS;
 164 }
 165 
 166 
 167 
 168 
 169 void mca_rcache_gpusm_finalize(struct mca_rcache_base_module_t *rcache)
 170 {
 171     opal_free_list_item_t *item;
 172     mca_rcache_gpusm_module_t *rcache_gpusm = (mca_rcache_gpusm_module_t *)rcache;
 173 
 174     
 175 
 176 
 177     while (NULL != (item = (opal_free_list_item_t *)opal_lifo_pop(&(rcache_gpusm->reg_list.super)))) {
 178         OBJ_DESTRUCT(item);
 179     }
 180 
 181     OBJ_DESTRUCT(&rcache_gpusm->reg_list);
 182     return;
 183 }