1
1

fix off by one on up_align_addr, use base and bound instead of base_align and

bound_align.. 

This commit was SVN r7521.
Этот коммит содержится в:
Galen Shipman 2005-09-27 18:10:44 +00:00
родитель 621fb2b99e
Коммит 09e67ce4fd
9 изменённых файлов: 22 добавлений и 29 удалений

Просмотреть файл

@ -44,7 +44,7 @@ static inline void *down_align_addr(void* addr, unsigned int shift) {
}
static inline void *up_align_addr(void*addr, unsigned int shift) {
return (void*) ((((unsigned long) addr) | ~((~(unsigned long) 0) << shift)) + 1);
return (void*) ((((unsigned long) addr) | ~((~(unsigned long) 0) << shift)));
}
struct mca_mpool_base_selected_module_t {

Просмотреть файл

@ -36,6 +36,10 @@ void mca_mpool_base_mem_cb(void* base, size_t size, void* cbdata)
opal_list_item_t* item;
void* base_addr;
void* bound_addr;
if(size == 0) {
return;
}
base_addr = down_align_addr( base, mca_mpool_base_page_size_log);
bound_addr = up_align_addr((void*) ((unsigned long) base + size - 1), mca_mpool_base_page_size_log);
OBJ_CONSTRUCT(&regs, ompi_pointer_array_t);

Просмотреть файл

@ -92,12 +92,10 @@ int mca_mpool_gm_register(
return OMPI_ERR_OUT_OF_RESOURCE;
}
reg->mpool = mpool;
reg->base = addr;
reg->base = down_align_addr(addr, mca_mpool_base_page_size_log);
reg->flags = flags;
reg->bound = reg->base + size - 1;
reg->base_align = down_align_addr(addr, mca_mpool_base_page_size_log);
reg->bound_align = up_align_addr(reg->bound
, mca_mpool_base_page_size_log);
reg->bound = up_align_addr(reg->base + size -1
, mca_mpool_base_page_size_log);
OPAL_THREAD_ADD32(&reg->ref_count,1);

Просмотреть файл

@ -36,8 +36,6 @@ struct mca_mpool_base_registration_t {
unsigned char* base;
unsigned char* bound;
unsigned char* alloc_base;
unsigned char* base_align;
unsigned char* bound_align;
void* user_data;
uint32_t ref_count;
uint32_t flags;

Просмотреть файл

@ -65,8 +65,6 @@ static void mca_mpool_mvapi_registration_constructor( mca_mpool_mvapi_registrati
{
registration->base_reg.base = NULL;
registration->base_reg.bound = NULL;
registration->base_reg.base_align = NULL;
registration->base_reg.bound_align = NULL;
registration->base_reg.flags = 0;
}

Просмотреть файл

@ -126,13 +126,11 @@ int mca_mpool_mvapi_register(
vapi_reg->l_key = mr_out.l_key;
vapi_reg->r_key = mr_out.r_key;
vapi_reg->base_reg.base = addr;
vapi_reg->base_reg.bound = (unsigned char*) (unsigned long) addr + size - 1;
vapi_reg->base_reg.base_align = down_align_addr(addr, mca_mpool_base_page_size_log);
vapi_reg->base_reg.bound_align = up_align_addr(vapi_reg->base_reg.bound
vapi_reg->base_reg.base = down_align_addr(addr, mca_mpool_base_page_size_log);
vapi_reg->base_reg.bound = up_align_addr((void*) ((unsigned long) addr + size - 1)
, mca_mpool_base_page_size_log);
assert(vapi_reg->base_reg.bound - vapi_reg->base_reg.base > 0);
assert(vapi_reg->base_reg.bound - vapi_reg->base_reg.base >= 0);
if(flags & (MCA_MPOOL_FLAGS_CACHE | MCA_MPOOL_FLAGS_PERSIST)) {
mpool->rcache->rcache_insert(mpool->rcache,

Просмотреть файл

@ -103,13 +103,10 @@ int mca_mpool_openib_register(mca_mpool_base_module_t* mpool,
return OMPI_ERROR;
}
vapi_reg->base_reg.base = addr;
vapi_reg->base_reg.bound = (void*) ((char*) addr + size - 1);
vapi_reg->base_reg.base_align = down_align_addr(addr, mca_mpool_base_page_size_log);
vapi_reg->base_reg.bound_align = up_align_addr(vapi_reg->base_reg.bound
, mca_mpool_base_page_size_log);
vapi_reg->base_reg.base = down_align_addr(addr, mca_mpool_base_page_size_log);
vapi_reg->base_reg.bound = up_align_addr( (void*) ((char*) addr + size - 1)
, mca_mpool_base_page_size_log);
if(flags & (MCA_MPOOL_FLAGS_CACHE | MCA_MPOOL_FLAGS_PERSIST)) {
mpool->rcache->rcache_insert(mpool->rcache,
(mca_mpool_base_registration_t*) vapi_reg,

Просмотреть файл

@ -75,9 +75,9 @@ int mca_rcache_rb_find (
if(rc == OMPI_SUCCESS) {
*cnt = 1;
}
assert(tree_item->reg->bound - tree_item->reg->base > 0);
assert(((void*) tree_item->reg->base_align) <= addr);
assert(((void*) tree_item->reg->bound_align) >= addr);
assert(tree_item->reg->bound - tree_item->reg->base >= 0);
assert(((void*) tree_item->reg->base) <= addr);
assert(((void*) tree_item->reg->bound) >= addr);
return rc;
}

Просмотреть файл

@ -60,8 +60,8 @@ struct mca_rcache_rb_tree_item_t * mca_rcache_rb_tree_find(
ompi_rb_tree_find(&rcache->rb_tree, &key);
if(NULL != found ) {
if((void*) found->reg->base_align > base ||
(void*) found->reg->bound_align < base){
if((void*) found->reg->base > base ||
(void*) found->reg->bound < base){
assert(0);
}
}
@ -116,8 +116,8 @@ int mca_rcache_rb_tree_insert(
return rc;
rb_tree_item = (mca_rcache_rb_tree_item_t*) item;
rb_tree_item->key.base = reg->base_align;
rb_tree_item->key.bound = reg->bound_align;
rb_tree_item->key.base = reg->base;
rb_tree_item->key.bound = reg->bound;
rb_tree_item->reg = reg;
rc = ompi_rb_tree_insert(&rb_module->rb_tree,