@@ -43,24 +43,6 @@ mca_rcache_base_module_t* mca_rcache_base_module_create (const char* name, void
4343 mca_base_component_list_item_t * cli ;
4444 mca_rcache_base_selected_module_t * sm ;
4545
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-
6446 /* on the very first creation of a module we init the memory
6547 callback */
6648 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
7153 * coded this more succinctly, but this is more clear. Do not
7254 * check memory hooks if the rcache does not provide an
7355 * 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 ) {
7665 if ((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT ) ==
7766 ((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT ) &
7867 opal_mem_hooks_support_level ())) {
68+ if (-1 == opal_leave_pinned ) {
69+ opal_leave_pinned = !opal_leave_pinned_pipeline ;
70+ }
7971 opal_mem_hooks_register_release (mca_rcache_base_mem_cb , NULL );
8072 } else {
8173 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
9082 }
9183 }
9284
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+
93103 return module ;
94104}
95105
0 commit comments