@@ -43,24 +43,6 @@ mca_rcache_base_module_t* mca_rcache_base_module_create (const char* name, void
43
43
mca_base_component_list_item_t * cli ;
44
44
mca_rcache_base_selected_module_t * sm ;
45
45
46
- OPAL_LIST_FOREACH (cli , & opal_rcache_base_framework .framework_components , mca_base_component_list_item_t ) {
47
- component = (mca_rcache_base_component_t * ) cli -> cli_component ;
48
- if (0 == strcmp (component -> rcache_version .mca_component_name , name )) {
49
- module = component -> rcache_init (resources );
50
- break ;
51
- }
52
- }
53
-
54
- if ( NULL == module ) {
55
- return NULL ;
56
- }
57
-
58
- sm = OBJ_NEW (mca_rcache_base_selected_module_t );
59
- sm -> rcache_component = component ;
60
- sm -> rcache_module = module ;
61
- sm -> user_data = user_data ;
62
- opal_list_append (& mca_rcache_base_modules , (opal_list_item_t * ) sm );
63
-
64
46
/* on the very first creation of a module we init the memory
65
47
callback */
66
48
if (!mca_rcache_base_used_mem_hooks ) {
@@ -71,11 +53,21 @@ mca_rcache_base_module_t* mca_rcache_base_module_create (const char* name, void
71
53
* coded this more succinctly, but this is more clear. Do not
72
54
* check memory hooks if the rcache does not provide an
73
55
* range invalidation function.. */
74
- if ((opal_leave_pinned > 0 || opal_leave_pinned_pipeline ) &&
75
- module -> rcache_invalidate_range ) {
56
+ if (opal_leave_pinned != 0 || opal_leave_pinned_pipeline ) {
57
+ /* open the memory manager components. Memory hooks may be
58
+ triggered before this (any time after mem_free_init(),
59
+ actually). This is a hook available for memory manager hooks
60
+ without good initialization routine support */
61
+ (void ) mca_base_framework_open (& opal_memory_base_framework , 0 );
62
+ }
63
+
64
+ if (opal_leave_pinned != 0 || opal_leave_pinned_pipeline ) {
76
65
if ((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT ) ==
77
66
((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT ) &
78
67
opal_mem_hooks_support_level ())) {
68
+ if (-1 == opal_leave_pinned ) {
69
+ opal_leave_pinned = !opal_leave_pinned_pipeline ;
70
+ }
79
71
opal_mem_hooks_register_release (mca_rcache_base_mem_cb , NULL );
80
72
} else {
81
73
opal_show_help ("help-rcache-base.txt" , "leave pinned failed" ,
@@ -90,6 +82,24 @@ mca_rcache_base_module_t* mca_rcache_base_module_create (const char* name, void
90
82
}
91
83
}
92
84
85
+ OPAL_LIST_FOREACH (cli , & opal_rcache_base_framework .framework_components , mca_base_component_list_item_t ) {
86
+ component = (mca_rcache_base_component_t * ) cli -> cli_component ;
87
+ if (0 == strcmp (component -> rcache_version .mca_component_name , name )) {
88
+ module = component -> rcache_init (resources );
89
+ break ;
90
+ }
91
+ }
92
+
93
+ if ( NULL == module ) {
94
+ return NULL ;
95
+ }
96
+
97
+ sm = OBJ_NEW (mca_rcache_base_selected_module_t );
98
+ sm -> rcache_component = component ;
99
+ sm -> rcache_module = module ;
100
+ sm -> user_data = user_data ;
101
+ opal_list_append (& mca_rcache_base_modules , (opal_list_item_t * ) sm );
102
+
93
103
return module ;
94
104
}
95
105
0 commit comments