Just to follow up my earlier post, checking out master and building that gives 
me the same lock up in ompi_info

>      ompi_info.exe!opal_atomic_lifo_push(opal_atomic_lifo_t * lifo, 
> opal_list_item_t * item) Line 73 C
      ompi_info.exe!ompi_free_list_grow(ompi_free_list_t * flist, unsigned 
__int64 num_elements) Line 257       C
      ompi_info.exe!ompi_rb_tree_init(ompi_rb_tree_t * tree, int (void *, void 
*) * comp) Line 77     C
      ompi_info.exe!mca_mpool_base_tree_init() Line 88       C
      ompi_info.exe!mca_mpool_base_open() Line 86     C
      ompi_info.exe!ompi_info_register_components(opal_pointer_array_t * 
mca_types, opal_pointer_array_t * component_map) Line 264    C
      ompi_info.exe!main(int argc, char * * argv) Line 158   C
      ompi_info.exe!__tmainCRTStartup() Line 536      C
      ompi_info.exe!mainCRTStartup() Line 377  C
      kernel32.dll!000007feac87167e()   Unknown
      ntdll.dll!000007feae4cc3f1()      Unknown

at the line below with the * at the start. Well actually I guess it's sitting 
in a spin lock. Should I continue playing or is master unstable?

Thanks
JB

/* Add one element to the LIFO. We will return the last head of the list
* to allow the upper level to detect if this element is the first one in the
* list (if the list was empty before this operation).
*/
static inline opal_list_item_t* opal_atomic_lifo_push( opal_atomic_lifo_t* lifo,
                                                       opal_list_item_t* item )
{
#if OPAL_ENABLE_MULTI_THREADS
    do {
*       item->opal_list_next = lifo->opal_lifo_head;
        opal_atomic_wmb();
        if( opal_atomic_cmpset_ptr( &(lifo->opal_lifo_head),
                                    (void*)item->opal_list_next,
                                    item ) ) {
            opal_atomic_cmpset_32((volatile int32_t*)&item->item_free, 1, 0);
            return (opal_list_item_t*)item->opal_list_next;
        }
        /* DO some kind of pause to release the bus */
    } while( 1 );
#else
    item->opal_list_next = lifo->opal_lifo_head;
    lifo->opal_lifo_head = item;
    return (opal_list_item_t*)item->opal_list_next;
#endif  /* OPAL_ENABLE_MULTI_THREADS */
}

Reply via email to