1
1

This commit fixes 2370, by having the solaris paffinity module return error codes for get_physical_processor_id and having odls_default_fork_local_proc check get_physical_processor_id for OPAL_ERROR

This commit was SVN r22948.
Этот коммит содержится в:
Terry Dontje 2010-04-09 15:10:46 +00:00
родитель 101b896f2e
Коммит 282a537cf7
2 изменённых файлов: 18 добавлений и 14 удалений

Просмотреть файл

@ -10,7 +10,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved.
*
* $COPYRIGHT$
*
@ -197,13 +197,17 @@ static int solaris_module_get_core_info(int socket, int *num_cores)
static int solaris_module_get_physical_processor_id(int logical_processor_id)
{
processorid_t currid, cpuid_max, cpuid_log=0;
processorid_t currid, retid, cpuid_max, cpuid_log=0;
processor_info_t pinfo;
/* cpuid_max is the max number available for a system arch. It is
* an inclusive list. e.g. If cpuid_max=31, cpuid would be 0-31 */
cpuid_max = sysconf(_SC_CPUID_MAX);
if ( 0 > (cpuid_max = sysconf(_SC_CPUID_MAX))) {
return OPAL_ERR_NOT_SUPPORTED;
}
/* set retid to OPAL_ERROR to reflect no processor found to match logical proc */
retid = OPAL_ERROR;
/* Because not all CPU ID in cpuid_max are actually valid,
* and CPU ID may also not be contiguous. Therefore we
* need to run through processor_info to ensure the validity.
@ -212,13 +216,15 @@ static int solaris_module_get_physical_processor_id(int logical_processor_id)
if (0 == processor_info(currid, &pinfo)) {
if (P_ONLINE == pinfo.pi_state || P_NOINTR == pinfo.pi_state) {
if (cpuid_log == logical_processor_id) {
retid = currid;
break;
}
cpuid_log++;
}
}
}
return currid;
return retid;
}
static int solaris_module_get_physical_socket_id(int logical_socket_id)

Просмотреть файл

@ -527,22 +527,20 @@ static int odls_default_fork_local_proc(orte_app_context_t* context,
* to us, so index into the node's array to get the
* physical cpu
*/
if (logical_cpu < orte_odls_globals.num_processors) {
/* We have a processor to bind to */
phys_cpu = opal_paffinity_base_get_physical_processor_id(logical_cpu);
if (0 > phys_cpu) {
ORTE_ODLS_IF_BIND_NOT_REQD("bind-to-core");
orte_show_help("help-odls-default.txt",
"odls-default:invalid-phys-cpu", true);
ORTE_ODLS_ERROR_OUT(ORTE_ERR_FATAL);
}
} else {
phys_cpu = opal_paffinity_base_get_physical_processor_id(logical_cpu);
if (OPAL_ERROR == phys_cpu){
/* No processor to bind to so error out */
ORTE_ODLS_IF_BIND_NOT_REQD("bind-to-core");
orte_show_help("help-odls-default.txt",
"odls-default:not-enough-resources", true,
"processors", orte_process_info.nodename,
"bind-to-core", context->app);
ORTE_ODLS_ERROR_OUT(ORTE_ERR_FATAL);
} else if (0 > phys_cpu) {
ORTE_ODLS_IF_BIND_NOT_REQD("bind-to-core");
orte_show_help("help-odls-default.txt",
"odls-default:invalid-phys-cpu", true);
ORTE_ODLS_ERROR_OUT(ORTE_ERR_FATAL);
}
}
OPAL_PAFFINITY_CPU_SET(phys_cpu, mask);