1
1
openmpi/ompi/mca/rcache/vma/rcache_vma_mru.c
2006-08-15 18:40:08 +00:00

99 строки
3.0 KiB
C

/**
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
*
* Copyright (c) 2006 Voltaire. All rights reserved.
*
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
* Description of the Registration Cache framework
*/
#include "opal/mca/mca.h"
#include "rcache_vma_mru.h"
#include "ompi/mca/mpool/mpool.h"
/*
* initialize the vma mru
*/
int mca_rcache_vma_mru_init(mca_rcache_vma_module_t* rcache){
OBJ_CONSTRUCT(&rcache->mru_list, opal_list_t);
return OMPI_SUCCESS;
}
/*
* insert an item in the vma mru
*/
int mca_rcache_vma_mru_insert(
mca_rcache_vma_module_t* rcache,
mca_mpool_base_registration_t* reg
) {
mca_mpool_base_registration_t* old_reg;
if(rcache->reg_mru_len <= rcache->mru_list.opal_list_length) {
/* call deregister - which removes the registration from
* the tree and mru list. memory will be deregistered when
* the reference count goes to zero.
*/
old_reg = (mca_mpool_base_registration_t*)
opal_list_get_first(&rcache->mru_list);
/* we need to retain first, because we only want the registration
removed from the tree and the mru */
old_reg->mpool->mpool_retain(old_reg->mpool, old_reg);
old_reg->mpool->mpool_deregister(old_reg->mpool, old_reg);
}
opal_list_append(&rcache->mru_list,(opal_list_item_t*) reg);
return OMPI_SUCCESS;
}
/*
* remove an item from the vma mru
*/
int mca_rcache_vma_mru_delete(
mca_rcache_vma_module_t* rcache,
mca_mpool_base_registration_t *reg
){
int rc;
if(NULL == opal_list_remove_item(&rcache->mru_list,
(opal_list_item_t*)reg)) {
rc = OMPI_ERROR;
} else {
rc = OMPI_SUCCESS;
}
return rc;
}
/*
* touch an item in the mru list
*/
int mca_rcache_vma_mru_touch(
mca_rcache_vma_module_t* rcache,
mca_mpool_base_registration_t* reg
){
int rc;
if(NULL == opal_list_remove_item(&rcache->mru_list,
(opal_list_item_t*)reg)) {
rc = OMPI_ERROR;
} else {
opal_list_append(&rcache->mru_list, (opal_list_item_t*)reg);
rc = OMPI_SUCCESS;
}
return rc;
}