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) { 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 { 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; opal_list_item_t* item;
void* base_addr; void* base_addr;
void* bound_addr; void* bound_addr;
if(size == 0) {
return;
}
base_addr = down_align_addr( base, mca_mpool_base_page_size_log); 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); bound_addr = up_align_addr((void*) ((unsigned long) base + size - 1), mca_mpool_base_page_size_log);
OBJ_CONSTRUCT(&regs, ompi_pointer_array_t); OBJ_CONSTRUCT(&regs, ompi_pointer_array_t);

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

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

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

@ -36,8 +36,6 @@ struct mca_mpool_base_registration_t {
unsigned char* base; unsigned char* base;
unsigned char* bound; unsigned char* bound;
unsigned char* alloc_base; unsigned char* alloc_base;
unsigned char* base_align;
unsigned char* bound_align;
void* user_data; void* user_data;
uint32_t ref_count; uint32_t ref_count;
uint32_t flags; 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.base = NULL;
registration->base_reg.bound = NULL; registration->base_reg.bound = NULL;
registration->base_reg.base_align = NULL;
registration->base_reg.bound_align = NULL;
registration->base_reg.flags = 0; registration->base_reg.flags = 0;
} }

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

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

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

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

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

@ -75,9 +75,9 @@ int mca_rcache_rb_find (
if(rc == OMPI_SUCCESS) { if(rc == OMPI_SUCCESS) {
*cnt = 1; *cnt = 1;
} }
assert(tree_item->reg->bound - tree_item->reg->base > 0); assert(tree_item->reg->bound - tree_item->reg->base >= 0);
assert(((void*) tree_item->reg->base_align) <= addr); assert(((void*) tree_item->reg->base) <= addr);
assert(((void*) tree_item->reg->bound_align) >= addr); assert(((void*) tree_item->reg->bound) >= addr);
return rc; 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); ompi_rb_tree_find(&rcache->rb_tree, &key);
if(NULL != found ) { if(NULL != found ) {
if((void*) found->reg->base_align > base || if((void*) found->reg->base > base ||
(void*) found->reg->bound_align < base){ (void*) found->reg->bound < base){
assert(0); assert(0);
} }
} }
@ -116,8 +116,8 @@ int mca_rcache_rb_tree_insert(
return rc; return rc;
rb_tree_item = (mca_rcache_rb_tree_item_t*) item; rb_tree_item = (mca_rcache_rb_tree_item_t*) item;
rb_tree_item->key.base = reg->base_align; rb_tree_item->key.base = reg->base;
rb_tree_item->key.bound = reg->bound_align; rb_tree_item->key.bound = reg->bound;
rb_tree_item->reg = reg; rb_tree_item->reg = reg;
rc = ompi_rb_tree_insert(&rb_module->rb_tree, rc = ompi_rb_tree_insert(&rb_module->rb_tree,