@@ -241,7 +241,7 @@ int mca_rcache_base_vma_tree_init (mca_rcache_base_vma_module_t *vma_module)
241
241
{
242
242
OBJ_CONSTRUCT (& vma_module -> rb_tree , opal_rb_tree_t );
243
243
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 );
245
245
vma_module -> reg_cur_cache_size = 0 ;
246
246
return opal_rb_tree_init (& vma_module -> rb_tree , mca_rcache_base_vma_tree_node_compare );
247
247
}
@@ -250,7 +250,7 @@ void mca_rcache_base_vma_tree_finalize (mca_rcache_base_vma_module_t *vma_module
250
250
{
251
251
opal_rb_tree_init (& vma_module -> rb_tree , mca_rcache_base_vma_tree_node_compare );
252
252
OBJ_DESTRUCT (& vma_module -> vma_list );
253
- OBJ_DESTRUCT (& vma_module -> vma_gc_list );
253
+ OBJ_DESTRUCT (& vma_module -> vma_gc_lifo );
254
254
OBJ_DESTRUCT (& vma_module -> rb_tree );
255
255
}
256
256
@@ -423,7 +423,7 @@ static void mca_rcache_base_vma_cleanup (mca_rcache_base_vma_module_t *vma_modul
423
423
{
424
424
opal_list_item_t * item ;
425
425
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 ))) {
427
427
OBJ_RELEASE (item );
428
428
}
429
429
}
@@ -434,10 +434,10 @@ int mca_rcache_base_vma_tree_insert (mca_rcache_base_vma_module_t *vma_module,
434
434
mca_rcache_base_vma_item_t * i ;
435
435
uintptr_t begin = (uintptr_t )reg -> base , end = (uintptr_t )reg -> bound ;
436
436
437
- opal_mutex_lock (& vma_module -> vma_lock );
438
-
439
437
mca_rcache_base_vma_cleanup (vma_module );
440
438
439
+ opal_mutex_lock (& vma_module -> vma_lock );
440
+
441
441
i = (mca_rcache_base_vma_item_t * ) opal_rb_tree_find_with (& vma_module -> rb_tree ,
442
442
(void * ) begin , mca_rcache_base_vma_tree_node_compare_closest );
443
443
@@ -570,7 +570,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
570
570
mca_rcache_base_vma_update_byte_count (vma_module ,
571
571
vma -> start - vma -> end - 1 );
572
572
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 );
574
574
vma = next ;
575
575
} else {
576
576
int merged ;
@@ -588,7 +588,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
588
588
prev -> end = vma -> end ;
589
589
opal_list_remove_item (& vma_module -> vma_list , & vma -> super );
590
590
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 );
592
592
vma = prev ;
593
593
merged = 1 ;
594
594
}
@@ -602,7 +602,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
602
602
vma -> end = next -> end ;
603
603
opal_list_remove_item (& vma_module -> vma_list , & next -> super );
604
604
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 );
606
606
merged = 1 ;
607
607
}
608
608
} while (merged );
0 commit comments