diff --git a/orte/mca/rmaps/base/rmaps_base_binding.c b/orte/mca/rmaps/base/rmaps_base_binding.c index 54a2049ec8..63f550009d 100644 --- a/orte/mca/rmaps/base/rmaps_base_binding.c +++ b/orte/mca/rmaps/base/rmaps_base_binding.c @@ -150,6 +150,16 @@ static int bind_upwards(orte_job_t *jdata, } } + /* some systems do not report cores, and so we can get a situation where our + * default binding policy will fail for no necessary reason. So if we are + * computing a binding due to our default policy, and no cores are found + * on this node, just silently skip it - we will not bind + */ + if (!(OPAL_BIND_GIVEN & opal_hwloc_binding_policy) && + HWLOC_TYPE_DEPTH_UNKNOWN == hwloc_get_type_depth(node->topology, HWLOC_OBJ_CORE)) { + continue; + } + /* we share topologies in order * to save space, so we need to reset the usage info to reflect * our own current state @@ -314,6 +324,16 @@ static int bind_downwards(orte_job_t *jdata, } } + /* some systems do not report cores, and so we can get a situation where our + * default binding policy will fail for no necessary reason. So if we are + * computing a binding due to our default policy, and no cores are found + * on this node, just silently skip it - we will not bind + */ + if (!(OPAL_BIND_GIVEN & opal_hwloc_binding_policy) && + HWLOC_TYPE_DEPTH_UNKNOWN == hwloc_get_type_depth(node->topology, HWLOC_OBJ_CORE)) { + continue; + } + /* we share topologies in order * to save space, so we need to reset the usage info to reflect * our own current state @@ -480,6 +500,16 @@ static int bind_in_place(orte_job_t *jdata, } } + /* some systems do not report cores, and so we can get a situation where our + * default binding policy will fail for no necessary reason. So if we are + * computing a binding due to our default policy, and no cores are found + * on this node, just silently skip it - we will not bind + */ + if (!(OPAL_BIND_GIVEN & opal_hwloc_binding_policy) && + HWLOC_TYPE_DEPTH_UNKNOWN == hwloc_get_type_depth(node->topology, HWLOC_OBJ_CORE)) { + continue; + } + /* we share topologies in order * to save space, so we need to reset the usage info to reflect * our own current state