@@ -241,7 +241,7 @@ int mca_rcache_base_vma_tree_init (mca_rcache_base_vma_module_t *vma_module)
241241{
242242 OBJ_CONSTRUCT (& vma_module -> rb_tree , opal_rb_tree_t );
243243 OBJ_CONSTRUCT (& vma_module -> vma_list , opal_list_t );
244- OBJ_CONSTRUCT (& vma_module -> vma_gc_list , opal_list_t );
244+ OBJ_CONSTRUCT (& vma_module -> vma_gc_lifo , opal_lifo_t );
245245 vma_module -> reg_cur_cache_size = 0 ;
246246 return opal_rb_tree_init (& vma_module -> rb_tree , mca_rcache_base_vma_tree_node_compare );
247247}
@@ -250,7 +250,7 @@ void mca_rcache_base_vma_tree_finalize (mca_rcache_base_vma_module_t *vma_module
250250{
251251 opal_rb_tree_init (& vma_module -> rb_tree , mca_rcache_base_vma_tree_node_compare );
252252 OBJ_DESTRUCT (& vma_module -> vma_list );
253- OBJ_DESTRUCT (& vma_module -> vma_gc_list );
253+ OBJ_DESTRUCT (& vma_module -> vma_gc_lifo );
254254 OBJ_DESTRUCT (& vma_module -> rb_tree );
255255}
256256
@@ -423,7 +423,7 @@ static void mca_rcache_base_vma_cleanup (mca_rcache_base_vma_module_t *vma_modul
423423{
424424 opal_list_item_t * item ;
425425
426- while (NULL != (item = opal_list_remove_first (& vma_module -> vma_gc_list ))) {
426+ while (NULL != (item = opal_lifo_pop_atomic (& vma_module -> vma_gc_lifo ))) {
427427 OBJ_RELEASE (item );
428428 }
429429}
@@ -434,10 +434,10 @@ int mca_rcache_base_vma_tree_insert (mca_rcache_base_vma_module_t *vma_module,
434434 mca_rcache_base_vma_item_t * i ;
435435 uintptr_t begin = (uintptr_t )reg -> base , end = (uintptr_t )reg -> bound ;
436436
437- opal_mutex_lock (& vma_module -> vma_lock );
438-
439437 mca_rcache_base_vma_cleanup (vma_module );
440438
439+ opal_mutex_lock (& vma_module -> vma_lock );
440+
441441 i = (mca_rcache_base_vma_item_t * ) opal_rb_tree_find_with (& vma_module -> rb_tree ,
442442 (void * ) begin , mca_rcache_base_vma_tree_node_compare_closest );
443443
@@ -570,7 +570,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
570570 mca_rcache_base_vma_update_byte_count (vma_module ,
571571 vma -> start - vma -> end - 1 );
572572 opal_list_remove_item (& vma_module -> vma_list , & vma -> super );
573- opal_list_append (& vma_module -> vma_gc_list , & vma -> super );
573+ opal_lifo_push_atomic (& vma_module -> vma_gc_lifo , & vma -> super );
574574 vma = next ;
575575 } else {
576576 int merged ;
@@ -588,7 +588,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
588588 prev -> end = vma -> end ;
589589 opal_list_remove_item (& vma_module -> vma_list , & vma -> super );
590590 opal_rb_tree_delete (& vma_module -> rb_tree , vma );
591- opal_list_append (& vma_module -> vma_gc_list , & vma -> super );
591+ opal_lifo_push_atomic (& vma_module -> vma_gc_lifo , & vma -> super );
592592 vma = prev ;
593593 merged = 1 ;
594594 }
@@ -602,7 +602,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
602602 vma -> end = next -> end ;
603603 opal_list_remove_item (& vma_module -> vma_list , & next -> super );
604604 opal_rb_tree_delete (& vma_module -> rb_tree , next );
605- opal_list_append (& vma_module -> vma_gc_list , & next -> super );
605+ opal_lifo_push_atomic (& vma_module -> vma_gc_lifo , & next -> super );
606606 merged = 1 ;
607607 }
608608 } while (merged );
0 commit comments