From a6e0589f0149ef7d68978716d6b55ad786b5a308 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Thu, 14 Aug 2008 14:26:26 +0000 Subject: [PATCH] Update to PLPA v1.2b3. Sorry again for the mid-day configure change... This commit was SVN r19292. --- opal/mca/paffinity/linux/plpa/README | 34 +++++++----------- opal/mca/paffinity/linux/plpa/VERSION | 4 +-- .../linux/plpa/src/libplpa/plpa.h.in | 36 +++++++++++++++---- .../linux/plpa/src/libplpa/plpa_map.c | 34 ++++++++++++++---- .../linux/plpa/src/plpa-info/plpa-info.c | 3 +- 5 files changed, 72 insertions(+), 39 deletions(-) diff --git a/opal/mca/paffinity/linux/plpa/README b/opal/mca/paffinity/linux/plpa/README index 05f4519624..19854b2c79 100644 --- a/opal/mca/paffinity/linux/plpa/README +++ b/opal/mca/paffinity/linux/plpa/README @@ -429,13 +429,7 @@ PLPA_INIT *must* be invoked if using the m4 macros): --enable-included-mode command line switch. - PLPA_INCLUDED - or - PLPA_INCLUDED(config-prefix) - NOTE: 1-argument form is deprecated and will be removed in PLPA - v1.2 - Force the building of PLPA in included mode. See PLPA_INIT for a - description of config-prefix (note that passing config-prefix - through PLPA_INIT is the preferred way to set it). + Force the building of PLPA in included mode. - PLPA_SET_SYMBOL_PREFIX(foo) Tells the PLPA to prefix all types and public symbols with "foo" @@ -467,19 +461,15 @@ PLPA_INIT *must* be invoked if using the m4 macros): executables. - PLPA_INIT(config-prefix, action-upon-success, action-upon-failure) - or - PLPA_INIT(action-upon-success, action-upon-failure) - NOTE: 2-argument form is deprecated and will be removed in PLPA - v1.2 Invoke the PLPA tests and setup the PLPA to build. A traversal of "make" into the PLPA directory should build everything (it is safe to list the PLPA directory in the SUBDIRS of a higher-level - Makefile.am, for example). PLPA_INIT must be invoked after the - INCLUDED / STANDALONE / SET_SYMBOL_PREFIX macros. The first - argument is the 3-argument form is the prefix to use for AC_OUTPUT - files. Hence, if your embedded PLPA is located in the source tree - at contrib/plpa, you'd pass [contrib/plpa] as the first argument. - The 2-argument form assumes the prefix ".". + Makefile.am, for example). ***PLPA_INIT must be invoked after the + STANDALONE, INCLUDED, SET_SYMBOL_PREFIX, DISABLE_EXECUTABLES, and + ENABLE_EXECUTABLES macros.*** The first argument is the prefix to + use for AC_OUTPUT files. Hence, if your embedded PLPA is located in + the source tree at contrib/plpa, you should pass [contrib/plpa] as + the first argument. - PLPA_DO_AM_CONDITIONALS If you embed PLPA in a larger project and build it conditionally @@ -494,17 +484,17 @@ PLPA_INIT *must* be invoked if using the m4 macros): Here's an example of integrating with a larger project named sandbox: shell$ cd sandbox -shell$ cp -r /somewhere/else/plpa- . +shell$ cp -r /somewhere/else/plpa- plpa shell$ edit acinclude.m4 -...add the line "m4_include(plpa-/config/plpa.m4)"... +...add the line "m4_include(plpa/config/plpa.m4)"... shell$ edit Makefile.am -...add "plpa-" to SUBDIRS... -...add "$(top_builddir)/plpa-/src/libplpa/libplpa_included.la" to +...add "plpa" to SUBDIRS... +...add "$(top_builddir)/plpa/src/libplpa/libplpa_included.la" to my executable's LDADD line... shell$ edit configure.ac ...add "PLPA_INCLUDED" line... ...add "PLPA_SET_SYMBOL_PREFIX(sandbox_plpa_)" line... -...add "PLPA_INIT(plpa_happy=yes, plpa_happy=no)" line... +...add "PLPA_INIT([./plpa], [plpa_happy=yes], [plpa_happy=no])" line... ...add error checking for plpa_happy=no case... shell$ edit src/my_program.c ...add #include ... diff --git a/opal/mca/paffinity/linux/plpa/VERSION b/opal/mca/paffinity/linux/plpa/VERSION index 15f0c0b089..7c95a0ac56 100644 --- a/opal/mca/paffinity/linux/plpa/VERSION +++ b/opal/mca/paffinity/linux/plpa/VERSION @@ -16,7 +16,7 @@ release=0 # requirement is that it must be entirely printable ASCII characters # and have no white space. -greek=b2 +greek=b3 # If want_svn=1, then the SVN r number will be included in the overall # PLPA version number in some form. @@ -33,4 +33,4 @@ want_svn=0 # distribution tarball is being made from an SVN checkout, the value # of svn_r in this file is replaced with the output of "svnversion". -svn_r=r192 +svn_r=r197 diff --git a/opal/mca/paffinity/linux/plpa/src/libplpa/plpa.h.in b/opal/mca/paffinity/linux/plpa/src/libplpa/plpa.h.in index 13cdff0e99..40266b67d1 100644 --- a/opal/mca/paffinity/linux/plpa/src/libplpa/plpa.h.in +++ b/opal/mca/paffinity/linux/plpa/src/libplpa/plpa.h.in @@ -199,17 +199,31 @@ int PLPA_NAME(map_to_processor_id)(int socket_id, int core_id, int PLPA_NAME(map_to_socket_core)(int processor_id, int *socket_id, int *core_id); -/* Returns both the number of processors (cores) in a system and the +/* Returns both the total number of processors in a system and the maximum Linux virtual processor ID (because it may be higher than the number of processors if there are "holes" in the available Linux virtual processor IDs). Returns 0 upon success. */ int PLPA_NAME(get_processor_info)(int *num_processors, int *max_processor_id); +/* Typedefs for specifying which processors / sockets / cores to count + in get_processor_id() */ +typedef enum { + /* Only count online processors */ + PLPA_NAME_CAPS(COUNT_ONLINE), + /* Only count offline processors */ + PLPA_NAME_CAPS(COUNT_OFFLINE), + /* Count all processors (online and offline) */ + PLPA_NAME_CAPS(COUNT_ALL) +} PLPA_NAME(count_specification_t); + /* Returns the Linux processor ID for the Nth processor. For example, if the Linux processor IDs have "holes", use this function to say - "give me the Linux processor ID of the 4th processor." Returns 0 - upon success. */ -int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id); + "give me the Linux processor ID of the 4th processor." count_spec + specifies whether to count online, offline, or all processors when + looking for the processor_num'th processor. Returns 0 upon + success. */ +int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id, + PLPA_NAME(count_specification_t) count_spec); /* Check to see if a given Linux processor ID exists / is online. Returns 0 on success. */ @@ -222,7 +236,10 @@ int PLPA_NAME(get_socket_info)(int *num_sockets, int *max_socket_id); /* Returns the Linux socket ID for the Nth socket. For example, if the socket IDs have "holes", use this function to say "give me the - Linux socket ID of the 2nd socket." Returns 0 upon success. */ + Linux socket ID of the 2nd socket." Linux does not specify the + socket/core tuple information for offline processors, so a + plpa_count_specification_t parameter is not used here. Returns 0 + upon success. */ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id); /* Return both the number of cores and the max code ID for a given @@ -233,7 +250,9 @@ int PLPA_NAME(get_core_info)(int socket_id, int *num_cores, int *max_core_id); /* Given a specific socket, returns the Linux core ID for the Nth core. For example, if the core IDs have "holes", use this function to say "give me the Linux core ID of the 4th core on socket ID 7." - Returns 0 upon success. */ + Linux does not specify the socket/core tuple information for + offline processors, so a plpa_count_specification_t parameter is + not used here. Returns 0 upon success. Returns 0 upon success. */ int PLPA_NAME(get_core_id)(int socket_id, int core_num, int *core_id); /* Check to see if a given Linux (socket_id,core_id) tuple exists / is @@ -241,7 +260,8 @@ int PLPA_NAME(get_core_id)(int socket_id, int core_num, int *core_id); int PLPA_NAME(get_core_flags)(int socket_id, int core_id, int *exists, int *online); -/* Set PLPA's cache behavior. Returns 0 upon success. */ +/* Typedefs for specifying the cache behavior via + plpa_set_cache_behavior() */ typedef enum { /* Use the cache (default behavior); fills the cache right now if it's not already full */ @@ -252,6 +272,8 @@ typedef enum { /* Refresh the cache right now */ PLPA_NAME_CAPS(CACHE_REFRESH) } PLPA_NAME(cache_behavior_t); + +/* Set PLPA's cache behavior. Returns 0 upon success. */ int PLPA_NAME(set_cache_behavior)(PLPA_NAME(cache_behavior_t)); /* Shut down PLPA. This function releases resources used by the PLPA. diff --git a/opal/mca/paffinity/linux/plpa/src/libplpa/plpa_map.c b/opal/mca/paffinity/linux/plpa/src/libplpa/plpa_map.c index 259b813072..07cd56e147 100644 --- a/opal/mca/paffinity/linux/plpa/src/libplpa/plpa_map.c +++ b/opal/mca/paffinity/linux/plpa/src/libplpa/plpa_map.c @@ -126,6 +126,7 @@ #include #include #include +#include typedef struct tuple_t_ { int processor_id, socket_id, core_id, online; @@ -633,9 +634,11 @@ int PLPA_NAME(get_processor_info)(int *num_processors_arg, /* Returns the Linux processor ID for the Nth processor (starting with 0). */ -int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id) +int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id, + PLPA_NAME(count_specification_t) count_spec) { int ret, i, count; + bool match; /* Initialize if not already done so */ if (!PLPA_NAME(initialized)) { @@ -667,9 +670,29 @@ int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id) /* Find the processor_num'th processor */ for (count = i = 0; i <= max_processor_id; ++i) { if (map_processor_id_to_tuple[i].processor_id >= 0) { - if (count++ == processor_num) { - *processor_id = map_processor_id_to_tuple[i].processor_id; - return 0; + match = false; + switch (count_spec) { + case PLPA_NAME_CAPS(COUNT_ONLINE): + if (map_processor_id_to_tuple[i].online) { + match = true; + } + break; + + case PLPA_NAME_CAPS(COUNT_OFFLINE): + if (!map_processor_id_to_tuple[i].online) { + match = true; + } + break; + + case PLPA_NAME_CAPS(COUNT_ALL): + match = true; + break; + } + if (match) { + if (count++ == processor_num) { + *processor_id = map_processor_id_to_tuple[i].processor_id; + return 0; + } } } } @@ -781,7 +804,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id) /* Check for bozo arguments */ if (NULL == socket_id) { - printf("get_socket_id bad 1\n"); return EINVAL; } @@ -792,7 +814,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id) /* Check for out of range params */ if (socket_num < 0 || socket_num > num_sockets) { - printf("get_socket_id bad 2\n"); return EINVAL; } @@ -814,7 +835,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id) } /* Didn't find it */ - printf("get_socket id bad 3\n"); return ENODEV; } diff --git a/opal/mca/paffinity/linux/plpa/src/plpa-info/plpa-info.c b/opal/mca/paffinity/linux/plpa/src/plpa-info/plpa-info.c index 9ff0a2000e..488422271b 100644 --- a/opal/mca/paffinity/linux/plpa/src/plpa-info/plpa-info.c +++ b/opal/mca/paffinity/linux/plpa/src/plpa-info/plpa-info.c @@ -119,7 +119,8 @@ int main(int argc, char *argv[]) fprintf(stderr, "plpa_get_processor_info failed\n"); } else { for (num_offline = i = 0; i < num_processors; ++i) { - if (0 != PLPA_NAME(get_processor_id)(i, &processor_id)) { + if (0 != PLPA_NAME(get_processor_id)(i, &processor_id, + PLPA_NAME_CAPS(COUNT_ALL))) { fprintf(stderr, "pla_get_processor_id failed\n"); break; }