Merge pull request #8123 from jjhursey/v4.1-pmix-v3.2
v4.1.x: Update Internal PMIx to OpenPMIx v3.2.1rc1
Этот коммит содержится в:
Коммит
40e104d087
@ -16,6 +16,7 @@
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015-2016 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -60,6 +61,9 @@ AC_DEFUN([MCA_opal_pmix_pmix3x_CONFIG],[
|
||||
[opal_pmix_pmix3x_args="--with-devel-headers $opal_pmix_pmix3x_args"])
|
||||
CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS"
|
||||
|
||||
# OpenPMIx Man pages are not needed when embedded. Avoids pandoc check
|
||||
opal_pmix_pmix3x_args="--disable-man-pages $opal_pmix_pmix3x_args"
|
||||
|
||||
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix3x_basedir/pmix],
|
||||
[$opal_pmix_pmix3x_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
|
||||
[opal_pmix_pmix3x_happy=1], [opal_pmix_pmix3x_happy=0])
|
||||
|
274
opal/mca/pmix/pmix3x/pmix/HACKING
Обычный файл
274
opal/mca/pmix/pmix3x/pmix/HACKING
Обычный файл
@ -0,0 +1,274 @@
|
||||
Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
University Research and Technology
|
||||
Corporation. All rights reserved.
|
||||
Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
of Tennessee Research Foundation. All rights
|
||||
reserved.
|
||||
Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
University of Stuttgart. All rights reserved.
|
||||
Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
All rights reserved.
|
||||
Copyright (c) 2008-2020 Cisco Systems, Inc. All rights reserved
|
||||
Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
$COPYRIGHT$
|
||||
|
||||
Additional copyrights may follow
|
||||
|
||||
$HEADER$
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
This file is here for those who are building/exploring PMIx in its
|
||||
source code form, most likely through a developer's tree (i.e., a Git
|
||||
checkout).
|
||||
|
||||
|
||||
Debugging vs. Optimized Builds
|
||||
==============================
|
||||
|
||||
**If you are building PMIx from a Git checkout**, the default build
|
||||
includes a lot of debugging features. This happens automatically when
|
||||
when configure detects the hidden ".git" Git meta directory (that is
|
||||
present in all Git checkouts) in your source tree, and therefore
|
||||
activates a number of developer-only debugging features in the PMIx
|
||||
code base.
|
||||
|
||||
By definition, debugging builds will perform [much] slower than
|
||||
optimized builds of PMIx. You should *NOT* conduct timing tests
|
||||
or try to run production performance numbers with debugging builds.
|
||||
|
||||
**REMEMBER** that you need to add appropriate -O directives
|
||||
to your CFLAGS so your compiler will optimize the code! Otherwise,
|
||||
while we will have disabled various debug code paths, the resulting
|
||||
binary will not have been optimized.
|
||||
|
||||
NOTE: this version of PMIx requires the Libevent package to build
|
||||
and operate. Any version of Libevent greater than or equal to
|
||||
2.0.21 is acceptable. It optionally supports the HWLOC package
|
||||
for providing topology information to both the host environment
|
||||
(by collecting local inventory for rollup) and local client
|
||||
processes. Any version of HWLOC greater than 1.10 is supported,
|
||||
although versions in the 2.x series are recommended.
|
||||
|
||||
If you wish to build an optimized version of PMIx from a
|
||||
developer's checkout, you have a couple of options:
|
||||
|
||||
1. Manually specify configure options to disable the debugging
|
||||
option. You'll need to carefully examine the output of
|
||||
"./configure --help" to see which options to disable.
|
||||
They are all listed, but some are less obvious than others (they
|
||||
are not listed here because it is a changing set of flags; by
|
||||
Murphy's Law, listing them here will pretty much guarantee that
|
||||
this file will get out of date):
|
||||
|
||||
shell$ ./autogen.pl
|
||||
shell$ ./configure --disable-debug ...
|
||||
[...lots of output...]
|
||||
shell$ make all install
|
||||
|
||||
2. Use a VPATH build. Simply build PMIx from a different
|
||||
directory than the source tree -- one where the .git subdirectory
|
||||
is not present. For example:
|
||||
|
||||
shell$ git clone https://github.com/openpmix/openpmix.git pmix
|
||||
shell$ cd pmix
|
||||
shell$ ./autogen.pl
|
||||
shell$ mkdir build
|
||||
shell$ cd build
|
||||
shell$ ../configure ...
|
||||
[...lots of output...]
|
||||
shell$ make all install
|
||||
|
||||
Note that in both cases you must point configure at the libevent
|
||||
installation using the --with-libevent=<dir> option if it is in
|
||||
a non-standard location. Similarly, non-standard locations for
|
||||
the HWLOC package must be specified using the --with-hwloc=<dir>
|
||||
option. In both cases, PMIx will automatically detect these
|
||||
packages in standard locations and build-in support for them
|
||||
unless otherwise specified using the respective configure option.
|
||||
|
||||
|
||||
Use of GNU Autoconf, Automake, and Libtool (and m4)
|
||||
===================================================
|
||||
|
||||
This procedure is *ONLY* necessary if you are building from a
|
||||
developer's tree. If you have a PMIx distribution tarball, this
|
||||
procedure is unnecessary -- you can (and should) skip reading this
|
||||
section.
|
||||
|
||||
If you are building PMIx from a developer's tree, you must first
|
||||
install fairly recent versions of the GNU tools Autoconf, Automake,
|
||||
and Libtool (and possibly GNU m4, because recent versions of Autoconf
|
||||
have specific GNU m4 version requirements). The specific versions
|
||||
required depend on if you are using the master or a release branch (and
|
||||
which release branch you are using). The specific versions can be
|
||||
found at:
|
||||
|
||||
https://pmix.org/code/getting-the-reference-implementation/
|
||||
|
||||
You can check what versions of the autotools you have installed with
|
||||
the following:
|
||||
|
||||
shell$ m4 --version
|
||||
shell$ autoconf --version
|
||||
shell$ automake --version
|
||||
shell$ libtoolize --version
|
||||
|
||||
To strengthen the above point: the core PMIx developers typically
|
||||
use very, very recent versions of the GNU tools. There are known bugs
|
||||
in older versions of the GNU tools that PMIx no longer compensates
|
||||
for (it seemed senseless to indefinitely support patches for ancient
|
||||
versions of Autoconf, for example). You *WILL* have problems if you
|
||||
do not use recent versions of the GNU tools.
|
||||
|
||||
If you need newer versions, you are *strongly* encouraged to heed the
|
||||
following advice:
|
||||
|
||||
NOTE: On MacOS/X, the default "libtool" program is different than the
|
||||
GNU libtool. You must download and install the GNU version
|
||||
(e.g., via MacPorts, Homebrew, or some other mechanism).
|
||||
|
||||
1. Unless your OS distribution has easy-to-use binary installations,
|
||||
the sources can be can be downloaded from:
|
||||
|
||||
ftp://ftp.gnu.org/gnu/autoconf/
|
||||
ftp://ftp.gnu.org/gnu/automake/
|
||||
ftp://ftp.gnu.org/gnu/libtool/
|
||||
and if you need it:
|
||||
ftp://ftp.gnu.org/gnu/m4/
|
||||
|
||||
NOTE: It is certainly easiest to download/build/install all four of
|
||||
these tools together. But note that PMIx has no specific m4
|
||||
requirements; it is only listed here because Autoconf requires
|
||||
minimum versions of GNU m4. Hence, you may or may not *need* to
|
||||
actually install a new version of GNU m4. That being said, if you
|
||||
are confused or don't know, just install the latest GNU m4 with the
|
||||
rest of the GNU Autotools and everything will work out fine.
|
||||
|
||||
2. Build and install the tools in the following order:
|
||||
|
||||
2a. m4
|
||||
2b. Autoconf
|
||||
2c. Automake
|
||||
2d. Libtool
|
||||
|
||||
3. You MUST install the last three tools (Autoconf, Automake, Libtool)
|
||||
into the same prefix directory. These three tools are somewhat
|
||||
inter-related, and if they're going to be used together, they MUST
|
||||
share a common installation prefix.
|
||||
|
||||
You can install m4 anywhere as long as it can be found in the path;
|
||||
it may be convenient to install it in the same prefix as the other
|
||||
three. Or you can use any recent-enough m4 that is in your path.
|
||||
|
||||
3a. It is *strongly* encouraged that you do not install your new
|
||||
versions over the OS-installed versions. This could cause
|
||||
other things on your system to break. Instead, install into
|
||||
$HOME/local, or /usr/local, or wherever else you tend to
|
||||
install "local" kinds of software.
|
||||
3b. In doing so, be sure to prefix your $path with the directory
|
||||
where they are installed. For example, if you install into
|
||||
$HOME/local, you may want to edit your shell startup file
|
||||
(.bashrc, .cshrc, .tcshrc, etc.) to have something like:
|
||||
|
||||
# For bash/sh:
|
||||
export PATH=$HOME/local/bin:$PATH
|
||||
# For csh/tcsh:
|
||||
set path = ($HOME/local/bin $path)
|
||||
|
||||
3c. Ensure to set your $path *BEFORE* you configure/build/install
|
||||
the four packages.
|
||||
|
||||
4. All four packages require two simple commands to build and
|
||||
install (where PREFIX is the prefix discussed in 3, above).
|
||||
|
||||
shell$ cd m4-1.4.13
|
||||
shell$ ./configure --prefix=PREFIX
|
||||
shell$ make; make install
|
||||
|
||||
--> If you are using the csh or tcsh shells, be sure to run the
|
||||
"rehash" command after you install each package.
|
||||
|
||||
shell$ cd ../autoconf-2.68
|
||||
shell$ ./configure --prefix=PREFIX
|
||||
shell$ make; make install
|
||||
|
||||
--> If you are using the csh or tcsh shells, be sure to run the
|
||||
"rehash" command after you install each package.
|
||||
|
||||
shell$ cd ../automake-1.11.1
|
||||
shell$ ./configure --prefix=PREFIX
|
||||
shell$ make; make install
|
||||
|
||||
--> If you are using the csh or tcsh shells, be sure to run the
|
||||
"rehash" command after you install each package.
|
||||
|
||||
shell$ cd ../libtool-2.2.8
|
||||
shell$ ./configure --prefix=PREFIX
|
||||
shell$ make; make install
|
||||
|
||||
--> If you are using the csh or tcsh shells, be sure to run the
|
||||
"rehash" command after you install each package.
|
||||
|
||||
m4, Autoconf and Automake build and install very quickly; Libtool will
|
||||
take a minute or two.
|
||||
|
||||
5. You can now run PMIx’s top-level "autogen.pl" script. This script
|
||||
will invoke the GNU Autoconf, Automake, and Libtool commands in the
|
||||
proper order and setup to run PMIx's top-level "configure" script.
|
||||
|
||||
5a. You generally need to run autogen.pl only when the top-level
|
||||
file "configure.ac" changes, or any files in the config/ or
|
||||
<project>/config/ directories change (these directories are
|
||||
where a lot of "include" files for PMI’xs configure script
|
||||
live).
|
||||
|
||||
5b. You do *NOT* need to re-run autogen.pl if you modify a
|
||||
Makefile.am.
|
||||
|
||||
Use of Flex
|
||||
===========
|
||||
|
||||
Flex may be used during the compilation of a developer's checkout (it is
|
||||
not used to build official distribution tarballs). Other flavors of
|
||||
lex are *not* supported: given the choice of making parsing code
|
||||
portable between all flavors of lex and doing more interesting work on
|
||||
PMIx, we greatly prefer the latter.
|
||||
|
||||
Note that no testing has been performed to see what the minimum
|
||||
version of Flex is required by PMIx. We suggest that you use
|
||||
v2.5.35 at the earliest.
|
||||
|
||||
Note that the flex-generated code generates some compiler warnings on
|
||||
some platforms, but the warnings do not seem to be consistent or
|
||||
uniform on all platforms, compilers, and flex versions. As such, we
|
||||
have done little to try to remove those warnings.
|
||||
|
||||
If you do not have Flex installed, it can be downloaded from the
|
||||
following URL:
|
||||
|
||||
https://github.com/westes/flex
|
||||
|
||||
Use of Pandoc
|
||||
=============
|
||||
|
||||
Similar to prior sections, you need to read/care about this section
|
||||
*ONLY* if you are building from a developer's tree (i.e., a Git clone
|
||||
of the Open MPI source tree). If you have an Open MPI distribution
|
||||
tarball, the contents of this section are optional -- you can (and
|
||||
probably should) skip reading this section.
|
||||
|
||||
The Pandoc tool is used to generate Open MPI's man pages.
|
||||
Specifically: Open MPI's man pages are written in Markdown; Pandoc is
|
||||
the tool that converts that Markdown to nroff (i.e., the format of man
|
||||
pages).
|
||||
|
||||
You must have Pandoc >=v1.12 when building Open MPI from a developer's
|
||||
tree. If configure cannot find Pandoc >=v1.12, it will abort.
|
||||
|
||||
If you need to install Pandoc, check your operating system-provided
|
||||
packages (to include MacOS Homebrew and MacPorts). The Pandoc project
|
||||
itself also offers binaries for their releases:
|
||||
|
||||
https://pandoc.org/
|
@ -11,7 +11,7 @@
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2019 Amazon.com, Inc. or its affiliates. All Rights
|
||||
# reserved.
|
||||
# $COPYRIGHT$
|
||||
@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --disable-dlopen
|
||||
headers =
|
||||
sources =
|
||||
nodist_headers =
|
||||
EXTRA_DIST = AUTHORS README INSTALL VERSION LICENSE autogen.pl
|
||||
EXTRA_DIST = AUTHORS README HACKING INSTALL VERSION LICENSE autogen.pl Makefile.pmix-rules
|
||||
|
||||
# Only install the valgrind suppressions file and man pages
|
||||
# if we're building in standalone mode
|
||||
@ -60,3 +60,6 @@ nroff:
|
||||
|
||||
dist-hook:
|
||||
env LS_COLORS= sh "$(top_srcdir)/config/distscript.sh" "$(top_srcdir)" "$(distdir)" "$(PMIX_VERSION)" "$(PMIX_REPO_REV)"
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = maint/pmix.pc
|
||||
|
42
opal/mca/pmix/pmix3x/pmix/Makefile.pmix-rules
Обычный файл
42
opal/mca/pmix/pmix3x/pmix/Makefile.pmix-rules
Обычный файл
@ -0,0 +1,42 @@
|
||||
# -*- makefile -*-
|
||||
# Copyright (c) 2008-2020 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
# Copyright (c) 2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
MD2NROFF = $(PMIX_TOP_SRCDIR)/config/md2nroff.pl
|
||||
|
||||
%.1: %.1.md
|
||||
$(PMIX_V_GEN) $(MD2NROFF) --source=$< --dest=$@ --pandoc=$(PANDOC)
|
||||
|
||||
# It is an error to "configure --disable-man-pages" and then try to
|
||||
# "make dist".
|
||||
if !PMIX_ENABLE_MAN_PAGES
|
||||
dist-hook:
|
||||
@echo "************************************************************************************"
|
||||
@echo "ERROR: 'make dist' inoperable when Open PMIx is configured with --disable-man-pages"
|
||||
@echo "************************************************************************************"
|
||||
@/bin/false
|
||||
endif
|
||||
|
||||
# A little verbosity magic; "make" will show the terse output. "make
|
||||
# V=1" will show the actual commands used (just like the other
|
||||
# Automake-generated compilation/linker rules).
|
||||
V=0
|
||||
|
||||
PMIX_V_LN_S = $(pmix__v_LN_S_$V)
|
||||
pmix__v_LN_S_ = $(pmix__v_LN_S_$AM_DEFAULT_VERBOSITY)
|
||||
pmix__v_LN_S_0 = @echo " LN_S " `basename $@`;
|
||||
|
||||
PMIX_V_MKDIR = $(pmix__v_MKDIR_$V)
|
||||
pmix__v_MKDIR_ = $(pmix__v_MKDIR_$AM_DEFAULT_VERBOSITY)
|
||||
pmix__v_MKDIR_0 = @echo " MKDIR " $@;
|
||||
|
||||
PMIX_V_GEN = $(pmix__v_GEN_$V)
|
||||
pmix__v_GEN_ = $(pmix__v_GEN_$AM_DEFAULT_VERBOSITY)
|
||||
pmix__v_GEN_0 = @echo " GENERATE" $@;
|
@ -20,11 +20,55 @@ other, a single NEWS-worthy item might apply to different series. For
|
||||
example, a bug might be fixed in the master, and then moved to
|
||||
multiple release branches.
|
||||
|
||||
Master (not on release branches yet)
|
||||
------------------------------------
|
||||
|
||||
3.1.6 -- TBD
|
||||
|
||||
3.2.2 -- TBD
|
||||
----------------------
|
||||
|
||||
|
||||
3.2.1 -- 5 Nov 2020
|
||||
----------------------
|
||||
- PR #1890:
|
||||
- Fix Issue #1889: Fix symlinks in unit tests to include new timeout
|
||||
- Fix Issue #1891: Remove pnet/opa component that should not be in v3.2
|
||||
- PR #1904: Add more metadata to string generated from preg/compress
|
||||
|
||||
|
||||
3.2.0 -- 22 Oct 2020
|
||||
----------------------
|
||||
- PR #1402/#1403/#1421/#1423: Modex size reductions
|
||||
- PR #1752: Convert man pages to Markdown (pandoc)
|
||||
- PR #1766: Move from -levent to -levent_core for linking Libevent
|
||||
- PR #1832: Sync 3.2 branch with master
|
||||
- New attributes:
|
||||
- PMIX_HOSTNAME_ALIASES
|
||||
- PMIX_HOSTNAME_KEEP_FQDN
|
||||
- PMIX_GET_REFRESH_CACHE
|
||||
- PMIX_REQUIRED_KEY
|
||||
- Removed PMIX_VALUE_COMPRESSED_STRING_UNPACK macro from pmix_common.h
|
||||
- New frameworks
|
||||
- PR #1139: pcompress - Compression methods
|
||||
- PR #1423: psquash - Flexible integer packing
|
||||
- New components
|
||||
- PR #1139: preg/compress - regular expression methods
|
||||
- PR #1422 Modified string representations produced by PMIx_generate_regex
|
||||
and PMIx_generate_ppn.
|
||||
- Issue #1586: Fixed dmodex support and PMIx_Get behavior
|
||||
- PR #1748: Removed --with-pmix-symbol-rename configure option
|
||||
- PR #1848: Expose PMIX_REGEX constant per v3.2 standard
|
||||
- PR #1885: Fix immediate flag behavior at the server
|
||||
|
||||
|
||||
3.1.6 -- 20 Aug 2020
|
||||
----------------------
|
||||
- PR #1669: Silence unnecessary error log message
|
||||
- PR #1776: Fixed crash of dstore locks destructor
|
||||
- PR #1825: Add option to bypass local-only fence optimization
|
||||
- PR #1830: Increase timeout in test case
|
||||
|
||||
|
||||
3.1.5 -- 14 Feb 2020
|
||||
----------------------
|
||||
NOTE: The signature of the PMIx_Allocation_request has changed
|
||||
@ -33,7 +77,7 @@ in accordance with an Errata update of the PMIx v3 Standard
|
||||
- PR #1433: Return the correct status from PMIx_Publish
|
||||
- PR #1445: Sync. with master to fix 'get' of data for unknown namespace
|
||||
Includes the following PRs from master
|
||||
- PR #1382: dstore: fixed truncate key-names while restoring
|
||||
- PR #1382: dstore: fixed truncate key-names while restoring
|
||||
- PR #1405: Fix xnspace dmodex and add verbose debug
|
||||
- PR #1406: Resolve request for job-level data
|
||||
- PR #1407/#1409/#1411: Fix dmodex across nspaces
|
||||
@ -58,11 +102,6 @@ in accordance with an Errata update of the PMIx v3 Standard
|
||||
- PR #1613: dstore: Fix cache size calculation
|
||||
- PR #1622: Fix multiple occurrences of unaligned access in pmix tests
|
||||
- PR #1620: Re-address the collective tracker problem
|
||||
- PR #1625: Fix library triplet
|
||||
- PR #1630: Fix support for PGI compiler pgcc18
|
||||
- PR #1637: Realign behavior of PMIx_Get and PMIx_Get_nb
|
||||
- PR #1640: Properly handle forwarded output when no handler registered
|
||||
|
||||
|
||||
|
||||
3.1.4 -- 9 Aug 2019
|
||||
@ -293,6 +332,68 @@ in accordance with an Errata update of the PMIx v3 Standard
|
||||
- Fix several memory and file descriptor leaks
|
||||
|
||||
|
||||
2.2.4 -- 07 Jun 2020
|
||||
----------------------
|
||||
- PR #1466: Silence spurious error log
|
||||
- PR #1489: Allow specification of hostname to use by client
|
||||
- PR #1499/#1512/#1518/#1525/#1528/#1533/#1553: Fix internal tests
|
||||
- PR #1678: Update "check_vendor" for PGI problem
|
||||
- PR #1734: Fix resource leaks in ptl/usock component
|
||||
- PR #1777: Fix crash of dstor locks destructor in ds12
|
||||
- PR #1788: Remove unnecessary error logs
|
||||
|
||||
|
||||
2.2.3 -- 15 Aug 2019
|
||||
----------------------
|
||||
- PR #1162: Fix race condition when clients fail while in a PMIx
|
||||
collective operation
|
||||
- PR #1163: Fix a compiler warning in atomics on POWER arch
|
||||
- PR #1165: Add BuildRequires: libevent-devel to spec file
|
||||
- PR #1180: Remove dependency on C++ compiler for thread detection
|
||||
- PR #1180: Add detection for Flex when building in non-tarball situations
|
||||
- PR #1182: configury: use PMIX_ENABLE_DLOPEN_SUPPORT instead of enable_dlopen
|
||||
- PR #1188: Link libpmix.so to MCA component libraries
|
||||
- PR #1190: Ensure any cached notifications arrive after reg completes
|
||||
- PR #1194: Ensure any cached notifications arrive after registration completes
|
||||
- PR #1209: Update configure logic for clock_gettime
|
||||
- PR #1213/#1217/#1221: Add configure option "--enable-nonglobal-dlopen"
|
||||
If the MCA component libraries should link back to libpmix.so
|
||||
- PR #1231: SPEC: Allow splitting PMIx in pmix and pmix-libpmi packages
|
||||
- PR #1253: Preserve user-provided CFLAGS to protect autotools
|
||||
- PR #1267: Correct dmodex example
|
||||
- PR #1275: IPv6 IF Read: Buffer Overflow
|
||||
- PR #1295: Fix comment: IPv6 IF_NAMESIZE
|
||||
- PR #1296: Allow setup_fork to proceed even if gdds and pnet don't contribute
|
||||
- PR #1296: Allow servers to pass NULL module
|
||||
- PR #1297: Provide internal blocking ability to the register/deregister fns
|
||||
- PR #1298: Add dummy handshake component to psec framework for testing
|
||||
- PR #1303: Allow jobs to not specify proc-level info
|
||||
- PR #1304: Provide proc data in cases where host does not
|
||||
- PR #1305: Add some more values that can be computed
|
||||
- PR #1308: Add missing tool rendezvous file
|
||||
- PR #1309: Fix potential integer overflow in regex
|
||||
- PR #1311: Work around memory bug in older gcc compilers
|
||||
- PR #1329: Add -fPIC to static builds
|
||||
- PR #1334: Cache only -W CFLAG entries to fix 32-bit builds
|
||||
- PR #1341: Do not use '==' in m4 test statements
|
||||
- PR #1342: Fix if_linux_ipv6_open interface filter
|
||||
- PR #1344: Remove unnecessary libtool init for c++
|
||||
- PR #1346: Fix incorrect pointer casts/deref
|
||||
- PR #1347/#1348: Fix use of gethostname
|
||||
- PR #1353/#1357: util/environ: use setenv() if available
|
||||
- PR #1354: Plug a misc memory leak in the pmix_query_caddy_t destructor
|
||||
- PR #1356: Fix another pointer cast/deref in test suite
|
||||
- PR #1358: Implement support for class-based info arrays
|
||||
- PR #1359: Plug misc minor memory leaks
|
||||
- PR #1369: Fix legacy support for PMI-1
|
||||
- PR #1370: Cleanup handling of data requests for different nspaces
|
||||
- PR #1193: Resolve get of proc-specific job-level info from another nspace
|
||||
- PR #1377: Skip fastpath/dstore for NULL keys
|
||||
- PR #1379: Change IF_NAMESIZE to PMIX_IF_NAMESIZE and set to safe size
|
||||
- PR #1385: Check for EINVAL return from posix_fallocate
|
||||
- PR #1389: Plug misc memory leaks in configure
|
||||
|
||||
|
||||
2.2.2 -- 24 Jan 2019
|
||||
----------------------
|
||||
- Fix a bug in macro identifying system events
|
||||
|
@ -8,14 +8,14 @@ Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
|
||||
University of Stuttgart. All rights reserved.
|
||||
Copyright (c) 2004-2007 The Regents of the University of California.
|
||||
All rights reserved.
|
||||
Copyright (c) 2006-2015 Cisco Systems, Inc. All rights reserved.
|
||||
Copyright (c) 2006-2020 Cisco Systems, Inc. All rights reserved.
|
||||
Copyright (c) 2006-2011 Mellanox Technologies. All rights reserved.
|
||||
Copyright (c) 2006-2012 Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2007 Myricom, Inc. All rights reserved.
|
||||
Copyright (c) 2008 IBM Corporation. All rights reserved.
|
||||
Copyright (c) 2010 Oak Ridge National Labs. All rights reserved.
|
||||
Copyright (c) 2011 University of Houston. All rights reserved.
|
||||
Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||
$COPYRIGHT$
|
||||
|
||||
Additional copyrights may follow
|
||||
@ -25,16 +25,20 @@ $HEADER$
|
||||
===========================================================================
|
||||
|
||||
When submitting questions and problems, be sure to include as much
|
||||
extra information as possible. The issues template on the
|
||||
GitHub repo provides directions:
|
||||
extra information as possible. This web page details all the
|
||||
information that we request in order to provide assistance:
|
||||
|
||||
http://github.com/pmix/pmix/issues
|
||||
https://pmix.org/support/
|
||||
|
||||
The best way to report bugs, send comments, or ask questions is to
|
||||
open an issue on the repo. Alternatively, you are welcome to sign
|
||||
up for the developer/user mailing list:
|
||||
post them on the OpenPMIx GitHub issue tracker:
|
||||
|
||||
pmix@googlegroups.com
|
||||
https://github.com/openpmix/openpmix/issues
|
||||
|
||||
Alternatively, you can sign up on the PMIx mailing list, which is
|
||||
hosted by Google Groups:
|
||||
|
||||
pmix@googlegroups.com
|
||||
|
||||
Because of spam, only subscribers are allowed to post to this list
|
||||
(ensure that you subscribe with and post from exactly the same e-mail
|
||||
@ -43,18 +47,13 @@ joe@mycomputer.example.com!). You can subscribe to the list here:
|
||||
|
||||
https://groups.google.com/d/forum/pmix
|
||||
|
||||
Finally, just to round out all the possible ways to communicate with the
|
||||
PMIx community, you are invited to join the community's Slack channel:
|
||||
|
||||
pmix-workspace.slack.com
|
||||
|
||||
Thanks for your time.
|
||||
|
||||
===========================================================================
|
||||
|
||||
More information is available in the PMIx FAQ:
|
||||
|
||||
https://pmix.org/support
|
||||
https://pmix.org/support/faq/
|
||||
|
||||
We are in early days, so please be patient - info will grow as questions
|
||||
are addressed.
|
||||
@ -69,7 +68,7 @@ General notes
|
||||
|
||||
- The majority of PMIx's documentation is here in this file, the
|
||||
included man pages, and on the web site FAQ
|
||||
(https://pmix.org/support). This will eventually be
|
||||
(https://pmix.org/support/faq/). This will eventually be
|
||||
supplemented with cohesive installation and user documentation files.
|
||||
|
||||
- Systems that have been tested are:
|
||||
@ -197,22 +196,21 @@ PMIx's version numbers are the union of several different values:
|
||||
major, minor, release, and an optional quantifier.
|
||||
|
||||
* Major: The major number is the first integer in the version string
|
||||
(e.g., v1.2.3) and indicates the corresponding version of the PMIx
|
||||
Standard. In other words, a PMIx library release starting with "v2"
|
||||
indicates that the implementation conforms to version 2 of the PMIx
|
||||
Standard.
|
||||
(e.g., v1.2.3). Changes in the major number typically indicate a
|
||||
significant change in the code base and/or end-user
|
||||
functionality. The major number is always included in the version
|
||||
number.
|
||||
|
||||
* Minor: The minor number is the second integer in the version
|
||||
string (e.g., v1.2.3). Changes in the minor number typically
|
||||
indicate a incremental change in the code base and/or end-user
|
||||
functionality, but not the supported version of the Standard.
|
||||
The minor number is always included in the version number.
|
||||
functionality. The minor number is always included in the version
|
||||
number:
|
||||
|
||||
* Release: The release number is the third integer in the version
|
||||
string (e.g., v1.2.3). Changes in the release number typically
|
||||
indicate a bug fix in the code base and/or end-user
|
||||
functionality. The release number is always included in the
|
||||
version number.
|
||||
functionality.
|
||||
|
||||
* Quantifier: PMIx version numbers sometimes have an arbitrary
|
||||
string affixed to the end of the version number. Common strings
|
||||
@ -299,15 +297,16 @@ Application Binary Interface (ABI) Compatibility
|
||||
------------------------------------------------
|
||||
|
||||
PMIx provides forward ABI compatibility in all versions of a given
|
||||
feature release series. For example, on a single platform, an pmix
|
||||
feature release series and its corresponding
|
||||
super stable series. For example, on a single platform, an pmix
|
||||
application linked against PMIx v1.3.2 shared libraries can be
|
||||
updated to point to the shared libraries in any successive v1.3.x or
|
||||
v1.4 release and still work properly (e.g., via the LD_LIBRARY_PATH
|
||||
environment variable or other operating system mechanism).
|
||||
|
||||
PMIx reserves the right to break ABI compatibility at new major
|
||||
PMIx reserves the right to break ABI compatibility at new feature
|
||||
release series. For example, the same pmix application from above
|
||||
(linked against PMIx v1.3.2 shared libraries) may *not* work with
|
||||
(linked against PMIx v1.3.2 shared libraries) will *not* work with
|
||||
PMIx v1.5 shared libraries.
|
||||
|
||||
===========================================================================
|
||||
@ -318,7 +317,7 @@ Common Questions
|
||||
Many common questions about building and using PMIx are answered
|
||||
on the FAQ:
|
||||
|
||||
https://pmix.org/support
|
||||
https://pmix.org/support/faq/
|
||||
|
||||
===========================================================================
|
||||
|
||||
@ -329,19 +328,23 @@ Found a bug? Got a question? Want to make a suggestion? Want to
|
||||
contribute to PMIx? Please let us know!
|
||||
|
||||
When submitting questions and problems, be sure to include as much
|
||||
extra information as possible. Again, the issues template is your
|
||||
friend in this regard!
|
||||
extra information as possible. This web page details all the
|
||||
information that we request in order to provide assistance:
|
||||
|
||||
https://github.com/pmix/pmix/issues
|
||||
https://pmix.org/support/
|
||||
|
||||
Questions and comments should generally be sent to the PMIx mailing
|
||||
list (pmix@googlegroups.com). Because of spam, only
|
||||
subscribers are allowed to post to this list (ensure that you
|
||||
subscribe with and post from *exactly* the same e-mail address --
|
||||
joe@example.com is considered different than
|
||||
joe@mycomputer.example.com!). Visit this page to subscribe to the
|
||||
user's list:
|
||||
Questions and comments should generally be posted to the OpenPMIx
|
||||
GitHub issue tracker:
|
||||
|
||||
https://github.com/openpmix/openpmix/issues
|
||||
|
||||
Alternatively, question can also be sent to the PMIx mailing list
|
||||
(pmix@googlegroups.com). Because of spam, only subscribers are
|
||||
allowed to post to this list (ensure that you subscribe with and post
|
||||
from *exactly* the same e-mail address -- joe@example.com is
|
||||
considered different than joe@mycomputer.example.com!). Visit this
|
||||
page to subscribe to the user's list:
|
||||
|
||||
https://groups.google.com/d/forum/pmix
|
||||
|
||||
Make today a PMIx day!
|
||||
Make today an PMIx day!
|
||||
|
@ -6,7 +6,6 @@
|
||||
# Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
|
||||
|
||||
# This is the VERSION file for PMIx, describing the precise
|
||||
# version of PMIx in this distribution. The various components of
|
||||
# the version number below are combined to form a single version
|
||||
@ -16,8 +15,8 @@
|
||||
# <major>.<minor>.<release>.
|
||||
|
||||
major=3
|
||||
minor=1
|
||||
release=5
|
||||
minor=2
|
||||
release=1
|
||||
|
||||
# greek is used for alpha or beta release tags. If it is non-empty,
|
||||
# it will be appended to the version number. It does not have to be
|
||||
@ -25,14 +24,14 @@ release=5
|
||||
# The only requirement is that it must be entirely printable ASCII
|
||||
# characters and have no white space.
|
||||
|
||||
greek=
|
||||
greek=rc1
|
||||
|
||||
# If repo_rev is empty, then the repository version number will be
|
||||
# obtained during "make dist" via the "git describe --tags --always"
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=gitedebb24
|
||||
repo_rev=git1063ca6
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -46,7 +45,7 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Feb 19, 2020"
|
||||
date="Oct 30, 2020"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
||||
@ -77,13 +76,13 @@ date="Feb 19, 2020"
|
||||
# Version numbers are described in the Libtool current:revision:age
|
||||
# format.
|
||||
|
||||
libpmix_so_version=4:25:2
|
||||
libpmix_so_version=4:31:2
|
||||
libpmi_so_version=1:1:0
|
||||
libpmi2_so_version=1:0:0
|
||||
|
||||
# "Common" components install standalone libraries that are run-time
|
||||
# linked by one or more components. So they need to be versioned as
|
||||
# well. Yuck; this somewhat breaks the
|
||||
# components-don't-affect-the-build-system abstraction.
|
||||
# # linked by one or more components. So they need to be versioned as
|
||||
# # well. Yuck; this somewhat breaks the
|
||||
# # components-don't-affect-the-build-system abstraction.
|
||||
#
|
||||
libmca_common_dstore_so_version=1:2:0
|
||||
|
@ -4,7 +4,7 @@
|
||||
# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013 Mellanox Technologies, Inc.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2015 IBM Corporation. All rights reserved.
|
||||
@ -275,7 +275,7 @@ sub mca_generate_framework_header(\$\@) {
|
||||
#ifndef $ifdef_string
|
||||
#define $ifdef_string
|
||||
|
||||
#include <src/mca/base/pmix_mca_base_framework.h>
|
||||
#include \"src/mca/base/pmix_mca_base_framework.h\"
|
||||
|
||||
$framework_decl_output
|
||||
static pmix_mca_base_framework_t *pmix_frameworks[] = {
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Copyright (c) 2013-2016 Intel, Inc. All rights reserved
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2016 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2006-2020 Cisco Systems, Inc. All rights reserved
|
||||
# Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
@ -27,6 +27,7 @@ EXTRA_DIST = \
|
||||
c_get_alignment.m4 \
|
||||
pmix_get_version.sh \
|
||||
distscript.sh \
|
||||
md2nroff.pl \
|
||||
pmix_check_attributes.m4 \
|
||||
pmix_check_broken_qsort.m4 \
|
||||
pmix_check_compiler_version.m4 \
|
||||
@ -42,7 +43,6 @@ EXTRA_DIST = \
|
||||
pmix.m4 \
|
||||
pmix_search_libs.m4 \
|
||||
pmix_setup_cc.m4 \
|
||||
pmix_setup_zlib.m4 \
|
||||
pmix_setup_libevent.m4 \
|
||||
pmix_mca_priority_sort.pl \
|
||||
mca_library_paths.txt
|
||||
|
136
opal/mca/pmix/pmix3x/pmix/config/md2nroff.pl
Исполняемый файл
136
opal/mca/pmix/pmix3x/pmix/config/md2nroff.pl
Исполняемый файл
@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (c) 2020 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# This script is friendly to both Python 2 and Python 3.
|
||||
|
||||
use strict;
|
||||
|
||||
use IPC::Open3;
|
||||
use File::Basename;
|
||||
use Getopt::Long;
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
my $source_arg;
|
||||
my $dest_arg;
|
||||
my $pandoc_arg = "pandoc";
|
||||
my $help_arg;
|
||||
my $verbose_arg;
|
||||
|
||||
my $ok = Getopt::Long::GetOptions("source=s" => \$source_arg,
|
||||
"dest=s" => \$dest_arg,
|
||||
"pandoc=s" => \$pandoc_arg,
|
||||
"help" => \$help_arg,
|
||||
"verbose" => \$verbose_arg);
|
||||
|
||||
if (!$source_arg || !$dest_arg) {
|
||||
print("Must specify --source and --dest\n");
|
||||
$ok = 0;
|
||||
}
|
||||
|
||||
if (!$ok || $help_arg) {
|
||||
print "Invalid command line argument.\n\n"
|
||||
if (!$ok);
|
||||
print "Options:
|
||||
--source FILE Source Markdown filename
|
||||
--dest FILE Destination nroff file
|
||||
--pandoc FILE Location of pandoc executable
|
||||
--help This help list
|
||||
--verbose Be verbose when running\n";
|
||||
exit($ok ? 0 : 1);
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# If the destination exists, read it in
|
||||
my $dest_content;
|
||||
if (-f $dest_arg) {
|
||||
open(FILE, $dest_arg) ||
|
||||
die "Can't open $dest_arg";
|
||||
$dest_content .= $_
|
||||
while(<FILE>);
|
||||
close(FILE);
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# Read in the source
|
||||
die "Error: $source_arg does not exist"
|
||||
if (! -f $source_arg);
|
||||
|
||||
my $source_content;
|
||||
open(FILE, $source_arg) ||
|
||||
die "Can't open $source_arg";
|
||||
$source_content .= $_
|
||||
while(<FILE>);
|
||||
close(FILE);
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# Figure out the section of man page
|
||||
die "Cannot figure out man page section from source filename"
|
||||
if (!($source_arg =~ m/(\d+).md$/));
|
||||
my $man_section = $1;
|
||||
|
||||
my $shortfile = basename($source_arg);
|
||||
$shortfile =~ s/\.$man_section\.md$//;
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
|
||||
my $today = sprintf("%04d-%02d-%02d", ($year+1900), $mon, $mday);
|
||||
|
||||
# Run opal_get_version.sh to get the OMPI version.
|
||||
my $config_dir = dirname($0);
|
||||
my $get_version = "$config_dir/opal_get_version.sh";
|
||||
my $VERSION_file = "$config_dir/../VERSION";
|
||||
my $out = `$get_version $VERSION_file --full`;
|
||||
chomp($out);
|
||||
|
||||
# Pandoc does not handle markdown links in output nroff properly, so
|
||||
# just remove all links. Specifically: some versions of Pandoc ignore
|
||||
# the links, but others handle it badly.
|
||||
$source_content =~ s/\[(.+)\]\((.+)\)/\1/g;
|
||||
|
||||
# Add the pandoc header
|
||||
$source_content = "---
|
||||
section: $man_section
|
||||
title: $shortfile
|
||||
header: Open PMIx
|
||||
footer: $today
|
||||
---
|
||||
|
||||
$source_content";
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
print("*** Processing: $source_arg --> $dest_arg\n")
|
||||
if ($verbose_arg);
|
||||
|
||||
# Run Pandoc
|
||||
my $pid = open3(my $child_stdin, my $child_stdout, my $child_stderr,
|
||||
"$pandoc_arg -s --from=markdown --to=man");
|
||||
print $child_stdin $source_content;
|
||||
close($child_stdin);
|
||||
my $pandoc_rendered;
|
||||
$pandoc_rendered .= $_
|
||||
while(<$child_stdout>);
|
||||
close($child_stdout);
|
||||
close($child_stderr)
|
||||
if ($child_stderr);
|
||||
waitpid($pid, 0);
|
||||
|
||||
# Write the output to the target file
|
||||
open(FILE, ">$dest_arg") ||
|
||||
die "Can't open $dest_arg for writing";
|
||||
print FILE $pandoc_rendered;
|
||||
close(FILE);
|
||||
|
||||
exit(0);
|
@ -43,6 +43,11 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
AC_REQUIRE([AM_PROG_CC_C_O])
|
||||
|
||||
|
||||
# initialize
|
||||
PMIX_EMBEDDED_LDFLAGS=
|
||||
PMIX_EMBEDDED_LIBS=
|
||||
PMIX_EMBEDDED_CPPFLAGS=
|
||||
|
||||
# If no prefix was defined, set a good value
|
||||
m4_ifval([$1],
|
||||
[m4_define([pmix_config_prefix],[$1/])],
|
||||
@ -168,22 +173,6 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
# replaced, not the entire file.
|
||||
AC_CONFIG_HEADERS(pmix_config_prefix[src/include/pmix_config.h])
|
||||
|
||||
# Rename symbols?
|
||||
AC_ARG_WITH([pmix-symbol-rename],
|
||||
AC_HELP_STRING([--with-pmix-symbol-rename=PREFIX],
|
||||
[Provide a prefix to rename PMIx symbols]))
|
||||
AC_MSG_CHECKING([for symbol rename])
|
||||
AS_IF([test ! -z "$with_pmix_symbol_rename" && test "$with_pmix_symbol_rename" != "yes"],
|
||||
[AC_MSG_RESULT([$with_pmix_symbol_rename])
|
||||
pmix_symbol_rename="$with_pmix_symbol_rename"
|
||||
PMIX_RENAME=$with_pmix_symbol_rename],
|
||||
[AC_MSG_RESULT([no])
|
||||
pmix_symbol_rename=""
|
||||
PMIX_RENAME=])
|
||||
AC_DEFINE_UNQUOTED(PMIX_SYMBOL_RENAME, [$pmix_symbol_rename],
|
||||
[The pmix symbol rename include directive])
|
||||
AC_SUBST(PMIX_RENAME)
|
||||
AC_CONFIG_FILES(pmix_config_prefix[include/pmix_rename.h])
|
||||
|
||||
# Add any extra lib?
|
||||
AC_ARG_WITH([pmix-extra-lib],
|
||||
@ -416,9 +405,11 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
time.h unistd.h dirent.h \
|
||||
crt_externs.h signal.h \
|
||||
ioLib.h sockLib.h hostLib.h limits.h \
|
||||
sys/statfs.h sys/statvfs.h \
|
||||
sys/fcntl.h sys/statfs.h sys/statvfs.h \
|
||||
netdb.h ucred.h zlib.h sys/auxv.h \
|
||||
sys/sysctl.h])
|
||||
sys/sysctl.h termio.h termios.h pty.h \
|
||||
libutil.h util.h grp.h sys/cdefs.h utmp.h stropts.h \
|
||||
sys/utsname.h])
|
||||
|
||||
AC_CHECK_HEADERS([sys/mount.h], [], [],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
@ -663,7 +654,7 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
# -lrt might be needed for clock_gettime
|
||||
PMIX_SEARCH_LIBS_CORE([clock_gettime], [rt])
|
||||
|
||||
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv])
|
||||
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv fork execve waitpid])
|
||||
|
||||
# On some hosts, htonl is a define, so the AC_CHECK_FUNC will get
|
||||
# confused. On others, it's in the standard library, but stubbed with
|
||||
@ -752,7 +743,7 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
##################################
|
||||
# Libevent
|
||||
##################################
|
||||
pmix_show_title "Libevent"
|
||||
pmix_show_title "Event libraries"
|
||||
|
||||
PMIX_LIBEV_CONFIG
|
||||
PMIX_LIBEVENT_CONFIG
|
||||
@ -779,12 +770,13 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
|
||||
|
||||
##################################
|
||||
# ZLIB COMPRESSION
|
||||
# ZLIB
|
||||
##################################
|
||||
pmix_show_title "ZLIB"
|
||||
|
||||
PMIX_ZLIB_CONFIG
|
||||
|
||||
|
||||
##################################
|
||||
# Dstore Locking
|
||||
##################################
|
||||
@ -813,15 +805,19 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
MCA-variable-setting mechansism). This MCA variable
|
||||
controls whether warnings are displayed when an MCA
|
||||
component fails to load at run time due to an error.
|
||||
(default: enabled, meaning that
|
||||
(default: enabled in --enable-debug builds, meaning that
|
||||
mca_base_component_show_load_errors is enabled
|
||||
by default])])
|
||||
by default when configured with --enable-debug])])
|
||||
if test "$enable_show_load_errors_by_default" = "no" ; then
|
||||
PMIX_SHOW_LOAD_ERRORS_DEFAULT=0
|
||||
AC_MSG_RESULT([disabled by default])
|
||||
else
|
||||
PMIX_SHOW_LOAD_ERRORS_DEFAULT=1
|
||||
AC_MSG_RESULT([enabled by default])
|
||||
PMIX_SHOW_LOAD_ERRORS_DEFAULT=$WANT_DEBUG
|
||||
if test "$WANT_DEBUG" = "1"; then
|
||||
AC_MSG_RESULT([enabled by default])
|
||||
else
|
||||
AC_MSG_RESULT([disabled by default])
|
||||
fi
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(PMIX_SHOW_LOAD_ERRORS_DEFAULT, $PMIX_SHOW_LOAD_ERRORS_DEFAULT,
|
||||
[Default value for mca_base_component_show_load_errors MCA variable])
|
||||
@ -854,11 +850,16 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
# rather than have successive assignments to these shell
|
||||
# variables, lest the $(foo) names try to get evaluated here.
|
||||
# Yuck!
|
||||
CPPFLAGS="-I$PMIX_top_builddir -I$PMIX_top_srcdir -I$PMIX_top_srcdir/src -I$PMIX_top_builddir/include -I$PMIX_top_srcdir/include $CPPFLAGS"
|
||||
cpp_includes="$PMIX_top_builddir $PMIX_top_srcdir $PMIX_top_srcdir/src $PMIX_top_builddir/include"
|
||||
else
|
||||
CPPFLAGS="-I$PMIX_top_srcdir -I$PMIX_top_srcdir/src -I$PMIX_top_srcdir/include $CPPFLAGS"
|
||||
cpp_includes="$PMIX_top_srcdir $PMIX_top_srcdir/src"
|
||||
fi
|
||||
CPP_INCLUDES="$(echo $cpp_includes | $SED 's/[[^ \]]* */'"$pmix_cc_iquote"'&/g')"
|
||||
CPPFLAGS="$CPP_INCLUDES -I$PMIX_top_srcdir/include $CPPFLAGS $PMIX_FINAL_CPPFLAGS"
|
||||
LDFLAGS="$LDFLAGS $PMIX_FINAL_LDFLAGS"
|
||||
LIBS="$LIBS $PMIX_FINAL_LIBS"
|
||||
|
||||
############################################################################
|
||||
# pmixdatadir, pmixlibdir, and pmixinclude are essentially the same as
|
||||
# pkg*dir, but will always be */pmix.
|
||||
pmixdatadir='${datadir}/pmix'
|
||||
@ -891,8 +892,15 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/run_tests11.pl], [chmod +x test/run_tests11.pl])
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/run_tests12.pl], [chmod +x test/run_tests12.pl])
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/run_tests13.pl], [chmod +x test/run_tests13.pl])
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/run_tests14.pl], [chmod +x test/run_tests14.pl])
|
||||
AC_CONFIG_FILES(pmix_config_prefix[test/run_tests15.pl], [chmod +x test/run_tests15.pl])
|
||||
# AC_CONFIG_FILES(pmix_config_prefix[test/run_tests14.pl], [chmod +x test/run_tests14.pl])
|
||||
# AC_CONFIG_FILES(pmix_config_prefix[test/run_tests15.pl], [chmod +x test/run_tests15.pl])
|
||||
|
||||
|
||||
############################################################################
|
||||
# Check for building man pages
|
||||
############################################################################
|
||||
pmix_show_subtitle "Man page setup"
|
||||
PMIX_SETUP_MAN_PAGES
|
||||
|
||||
############################################################################
|
||||
# final output
|
||||
@ -1194,7 +1202,6 @@ fi
|
||||
|
||||
AM_CONDITIONAL([PMIX_INSTALL_BINARIES], [test $WANT_PMIX_BINARIES -eq 1])
|
||||
|
||||
|
||||
# see if they want to disable non-RTLD_GLOBAL dlopen
|
||||
AC_MSG_CHECKING([if want to support dlopen of non-global namespaces])
|
||||
AC_ARG_ENABLE([nonglobal-dlopen],
|
||||
@ -1213,6 +1220,24 @@ fi
|
||||
AS_IF([test -z "$enable_nonglobal_dlopen" && test "x$pmix_mode" = "xembedded" && test $WANT_INSTALL_HEADERS -eq 0 && test $pmix_need_libpmix -eq 1],
|
||||
[pmix_need_libpmix=0])
|
||||
|
||||
#
|
||||
# Do we want PTY support?
|
||||
#
|
||||
|
||||
AC_MSG_CHECKING([if want pty support])
|
||||
AC_ARG_ENABLE(pty-support,
|
||||
AC_HELP_STRING([--enable-pty-support],
|
||||
[Enable/disable PTY support for STDIO forwarding. (default: enabled)]))
|
||||
if test "$enable_pty_support" = "no" ; then
|
||||
AC_MSG_RESULT([no])
|
||||
PMIX_ENABLE_PTY_SUPPORT=0
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
PMIX_ENABLE_PTY_SUPPORT=1
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED([PMIX_ENABLE_PTY_SUPPORT], [$PMIX_ENABLE_PTY_SUPPORT],
|
||||
[Whether user wants PTY support or not])
|
||||
|
||||
#
|
||||
# psec/dummy_handshake
|
||||
#
|
||||
|
@ -1,89 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2006 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006 QLogic Corp. All rights reserved.
|
||||
# Copyright (c) 2009-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2016-2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2016 Los Alamos National Security, LLC. All rights
|
||||
# reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# PMIX_CHECK_PSM2(prefix, [action-if-found], [action-if-not-found])
|
||||
# --------------------------------------------------------
|
||||
# check if PSM2 support can be found. sets prefix_{CPPFLAGS,
|
||||
# LDFLAGS, LIBS} as needed and runs action-if-found if there is
|
||||
# support, otherwise executes action-if-not-found
|
||||
AC_DEFUN([PMIX_CHECK_PSM2],[
|
||||
if test -z "$pmix_check_psm2_happy" ; then
|
||||
AC_ARG_WITH([psm2],
|
||||
[AC_HELP_STRING([--with-psm2(=DIR)],
|
||||
[Build PSM2 (Intel PSM2) support, optionally adding DIR/include, DIR/lib, and DIR/lib64 to the search path for headers and libraries])])
|
||||
PMIX_CHECK_WITHDIR([psm2], [$with_psm2], [include/psm2.h])
|
||||
AC_ARG_WITH([psm2-libdir],
|
||||
[AC_HELP_STRING([--with-psm2-libdir=DIR],
|
||||
[Search for PSM (Intel PSM2) libraries in DIR])])
|
||||
PMIX_CHECK_WITHDIR([psm2-libdir], [$with_psm2_libdir], [libpsm2.*])
|
||||
|
||||
pmix_check_psm2_$1_save_CPPFLAGS="$CPPFLAGS"
|
||||
pmix_check_psm2_$1_save_LDFLAGS="$LDFLAGS"
|
||||
pmix_check_psm2_$1_save_LIBS="$LIBS"
|
||||
|
||||
AS_IF([test "$with_psm2" != "no"],
|
||||
[AS_IF([test ! -z "$with_psm2" && test "$with_psm2" != "yes"],
|
||||
[pmix_check_psm2_dir="$with_psm2"])
|
||||
AS_IF([test ! -z "$with_psm2_libdir" && test "$with_psm2_libdir" != "yes"],
|
||||
[pmix_check_psm2_libdir="$with_psm2_libdir"])
|
||||
|
||||
PMIX_CHECK_PACKAGE([pmix_check_psm2],
|
||||
[psm2.h],
|
||||
[psm2],
|
||||
[psm2_mq_irecv2],
|
||||
[],
|
||||
[$pmix_check_psm2_dir],
|
||||
[$pmix_check_psm2_libdir],
|
||||
[pmix_check_psm2_happy="yes"],
|
||||
[pmix_check_psm2_happy="no"])],
|
||||
[pmix_check_psm2_happy="no"])
|
||||
|
||||
CPPFLAGS="$pmix_check_psm2_$1_save_CPPFLAGS"
|
||||
LDFLAGS="$pmix_check_psm2_$1_save_LDFLAGS"
|
||||
LIBS="$pmix_check_psm2_$1_save_LIBS"
|
||||
|
||||
AS_IF([test "$pmix_check_psm2_happy" = "yes" && test "$enable_progress_threads" = "yes"],
|
||||
[AC_MSG_WARN([PSM2 driver does not currently support progress threads. Disabling MTL.])
|
||||
pmix_check_psm2_happy="no"])
|
||||
|
||||
AS_IF([test "$pmix_check_psm2_happy" = "yes"],
|
||||
[AC_CHECK_HEADERS(
|
||||
glob.h,
|
||||
[],
|
||||
[AC_MSG_WARN([glob.h not found. Can not build component.])
|
||||
pmix_check_psm2_happy="no"])])
|
||||
|
||||
fi
|
||||
|
||||
AS_IF([test "$pmix_check_psm2_happy" = "yes"],
|
||||
[$1_LDFLAGS="[$]$1_LDFLAGS $pmix_check_psm2_LDFLAGS"
|
||||
$1_CPPFLAGS="[$]$1_CPPFLAGS $pmix_check_psm2_CPPFLAGS"
|
||||
$1_LIBS="[$]$1_LIBS $pmix_check_psm2_LIBS"
|
||||
$2],
|
||||
[AS_IF([test ! -z "$with_psm2" && test "$with_psm2" != "no"],
|
||||
[AC_MSG_ERROR([PSM2 support requested but not found. Aborting])])
|
||||
$3])
|
||||
])
|
@ -11,13 +11,14 @@ dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
dnl Copyright (c) 2015-2017 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2015-2018 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2014-2018 Los Alamos National Security, LLC. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2017 Amazon.com, Inc. or its affiliates. All Rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2020 Google, LLC. All rights reserved.
|
||||
dnl Copyright (c) 2020 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
@ -32,12 +33,10 @@ AC_DEFUN([PMIX_ATOMIC_COMPARE_EXCHANGE_N_TEST_SOURCE],[[
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef union {
|
||||
uint64_t fake@<:@2@:>@;
|
||||
__int128 real;
|
||||
} pmix128;
|
||||
|
||||
static void test1(void)
|
||||
{
|
||||
// As of Aug 2018, we could not figure out a way to assign 128-bit
|
||||
@ -53,7 +52,6 @@ static void test1(void)
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void test2(void)
|
||||
{
|
||||
pmix128 ptr = { .fake = { 0xFFEEDDCCBBAA0099, 0x8877665544332211 }};
|
||||
@ -66,7 +64,6 @@ static void test2(void)
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
test1();
|
||||
@ -84,12 +81,10 @@ AC_DEFUN([PMIX_SYNC_BOOL_COMPARE_AND_SWAP_TEST_SOURCE],[[
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef union {
|
||||
uint64_t fake@<:@2@:>@;
|
||||
__int128 real;
|
||||
} pmix128;
|
||||
|
||||
static void test1(void)
|
||||
{
|
||||
// As of Aug 2018, we could not figure out a way to assign 128-bit
|
||||
@ -103,7 +98,6 @@ static void test1(void)
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void test2(void)
|
||||
{
|
||||
pmix128 ptr = { .fake = { 0xFFEEDDCCBBAA0099, 0x8877665544332211 }};
|
||||
@ -114,7 +108,6 @@ static void test2(void)
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
test1();
|
||||
@ -131,12 +124,11 @@ AC_DEFUN([PMIX_ATOMIC_COMPARE_EXCHANGE_STRONG_TEST_SOURCE],[[
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdatomic.h>
|
||||
|
||||
typedef union {
|
||||
uint64_t fake@<:@2@:>@;
|
||||
_Atomic __int128 real;
|
||||
__int128 real2;
|
||||
} pmix128;
|
||||
|
||||
static void test1(void)
|
||||
{
|
||||
// As of Aug 2018, we could not figure out a way to assign 128-bit
|
||||
@ -145,27 +137,23 @@ static void test1(void)
|
||||
pmix128 ptr = { .fake = { 0xFFEEDDCCBBAA0099, 0x8877665544332211 }};
|
||||
pmix128 expected = { .fake = { 0x11EEDDCCBBAA0099, 0x88776655443322FF }};
|
||||
pmix128 desired = { .fake = { 0x1122DDCCBBAA0099, 0x887766554433EEFF }};
|
||||
bool r = atomic_compare_exchange_strong (&ptr.real, &expected.real,
|
||||
desired.real, true,
|
||||
atomic_relaxed, atomic_relaxed);
|
||||
bool r = atomic_compare_exchange_strong (&ptr.real, &expected.real2,
|
||||
desired.real);
|
||||
if ( !(r == false && ptr.real == expected.real)) {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void test2(void)
|
||||
{
|
||||
pmix128 ptr = { .fake = { 0xFFEEDDCCBBAA0099, 0x8877665544332211 }};
|
||||
pmix128 expected = ptr;
|
||||
pmix128 desired = { .fake = { 0x1122DDCCBBAA0099, 0x887766554433EEFF }};
|
||||
bool r = atomic_compare_exchange_strong (&ptr.real, &expected.real,
|
||||
desired.real, true,
|
||||
atomic_relaxed, atomic_relaxed);
|
||||
bool r = atomic_compare_exchange_strong (&ptr.real, &expected.real2,
|
||||
desired.real);
|
||||
if (!(r == true && ptr.real == desired.real)) {
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
test1();
|
||||
@ -206,10 +194,8 @@ dnl #4: action if all of 1, 2, and 3 fail
|
||||
dnl
|
||||
AC_DEFUN([PMIX_ASM_CHECK_ATOMIC_FUNC],[
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_asm_check_func_happy pmix_asm_check_func_CFLAGS_save pmix_asm_check_func_LIBS_save])
|
||||
|
||||
pmix_asm_check_func_CFLAGS_save=$CFLAGS
|
||||
pmix_asm_check_func_LIBS_save=$LIBS
|
||||
|
||||
dnl Check with no compiler/linker flags
|
||||
AC_MSG_CHECKING([for $1])
|
||||
AC_LINK_IFELSE([$2],
|
||||
@ -217,7 +203,6 @@ AC_DEFUN([PMIX_ASM_CHECK_ATOMIC_FUNC],[
|
||||
AC_MSG_RESULT([yes])],
|
||||
[pmix_asm_check_func_happy=0
|
||||
AC_MSG_RESULT([no])])
|
||||
|
||||
dnl If that didn't work, try again with CFLAGS+=mcx16
|
||||
AS_IF([test $pmix_asm_check_func_happy -eq 0],
|
||||
[AC_MSG_CHECKING([for $1 with -mcx16])
|
||||
@ -229,7 +214,6 @@ AC_DEFUN([PMIX_ASM_CHECK_ATOMIC_FUNC],[
|
||||
CFLAGS=$pmix_asm_check_func_CFLAGS_save
|
||||
AC_MSG_RESULT([no])])
|
||||
])
|
||||
|
||||
dnl If that didn't work, try again with LIBS+=-latomic
|
||||
AS_IF([test $pmix_asm_check_func_happy -eq 0],
|
||||
[AC_MSG_CHECKING([for $1 with -latomic])
|
||||
@ -241,7 +225,6 @@ AC_DEFUN([PMIX_ASM_CHECK_ATOMIC_FUNC],[
|
||||
LIBS=$pmix_asm_check_func_LIBS_save
|
||||
AC_MSG_RESULT([no])])
|
||||
])
|
||||
|
||||
dnl If we have it, try it and make sure it gives a correct result.
|
||||
dnl As of Aug 2018, we know that it links but does *not* work on clang
|
||||
dnl 6 on ARM64.
|
||||
@ -253,15 +236,12 @@ AC_DEFUN([PMIX_ASM_CHECK_ATOMIC_FUNC],[
|
||||
AC_MSG_RESULT([no])],
|
||||
[AC_MSG_RESULT([cannot test -- assume yes (cross compiling)])])
|
||||
])
|
||||
|
||||
dnl If we were unsuccessful, restore CFLAGS/LIBS
|
||||
AS_IF([test $pmix_asm_check_func_happy -eq 0],
|
||||
[CFLAGS=$pmix_asm_check_func_CFLAGS_save
|
||||
LIBS=$pmix_asm_check_func_LIBS_save])
|
||||
|
||||
dnl Run the user actions
|
||||
AS_IF([test $pmix_asm_check_func_happy -eq 1], [$3], [$4])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
@ -269,7 +249,6 @@ dnl ------------------------------------------------------------------
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_SYNC_BUILTIN_CSWAP_INT128], [
|
||||
PMIX_VAR_SCOPE_PUSH([sync_bool_compare_and_swap_128_result])
|
||||
|
||||
# Do we have __sync_bool_compare_and_swap?
|
||||
# Use a special macro because we need to check with a few different
|
||||
# CFLAGS/LIBS.
|
||||
@ -277,51 +256,16 @@ AC_DEFUN([PMIX_CHECK_SYNC_BUILTIN_CSWAP_INT128], [
|
||||
[AC_LANG_SOURCE(PMIX_SYNC_BOOL_COMPARE_AND_SWAP_TEST_SOURCE)],
|
||||
[sync_bool_compare_and_swap_128_result=1],
|
||||
[sync_bool_compare_and_swap_128_result=0])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_SYNC_BUILTIN_CSWAP_INT128],
|
||||
[$sync_bool_compare_and_swap_128_result],
|
||||
[Whether the __sync builtin atomic compare and swap supports 128-bit values])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_SYNC_BUILTINS], [
|
||||
AC_MSG_CHECKING([for __sync builtin atomics])
|
||||
|
||||
AC_TRY_LINK([long tmp;], [__sync_synchronize();
|
||||
__sync_bool_compare_and_swap(&tmp, 0, 1);
|
||||
__sync_add_and_fetch(&tmp, 1);],
|
||||
[AC_MSG_RESULT([yes])
|
||||
$1],
|
||||
[AC_MSG_RESULT([no])
|
||||
$2])
|
||||
|
||||
AC_MSG_CHECKING([for 64-bit __sync builtin atomics])
|
||||
|
||||
AC_TRY_LINK([
|
||||
#include <stdint.h>
|
||||
uint64_t tmp;], [
|
||||
__sync_bool_compare_and_swap(&tmp, 0, 1);
|
||||
__sync_add_and_fetch(&tmp, 1);],
|
||||
[AC_MSG_RESULT([yes])
|
||||
pmix_asm_sync_have_64bit=1],
|
||||
[AC_MSG_RESULT([no])
|
||||
pmix_asm_sync_have_64bit=0])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_SYNC_HAVE_64BIT],[$pmix_asm_sync_have_64bit],
|
||||
[Whether 64-bit is supported by the __sync builtin atomics])
|
||||
|
||||
# Check for 128-bit support
|
||||
PMIX_CHECK_SYNC_BUILTIN_CSWAP_INT128
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128], [
|
||||
PMIX_VAR_SCOPE_PUSH([atomic_compare_exchange_n_128_result atomic_compare_exchange_n_128_CFLAGS_save atomic_compare_exchange_n_128_LIBS_save])
|
||||
|
||||
atomic_compare_exchange_n_128_CFLAGS_save=$CFLAGS
|
||||
atomic_compare_exchange_n_128_LIBS_save=$LIBS
|
||||
|
||||
# Do we have __sync_bool_compare_and_swap?
|
||||
# Use a special macro because we need to check with a few different
|
||||
# CFLAGS/LIBS.
|
||||
@ -329,7 +273,6 @@ AC_DEFUN([PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128], [
|
||||
[AC_LANG_SOURCE(PMIX_ATOMIC_COMPARE_EXCHANGE_N_TEST_SOURCE)],
|
||||
[atomic_compare_exchange_n_128_result=1],
|
||||
[atomic_compare_exchange_n_128_result=0])
|
||||
|
||||
# If we have it and it works, check to make sure it is always lock
|
||||
# free.
|
||||
AS_IF([test $atomic_compare_exchange_n_128_result -eq 1],
|
||||
@ -347,23 +290,20 @@ AC_DEFUN([PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128], [
|
||||
AC_MSG_RESULT([no])],
|
||||
[AC_MSG_RESULT([cannot test -- assume yes (cross compiling)])])
|
||||
])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_GCC_BUILTIN_CSWAP_INT128],
|
||||
[$atomic_compare_exchange_n_128_result],
|
||||
[Whether the __atomic builtin atomic compare swap is both supported and lock-free on 128-bit values])
|
||||
|
||||
dnl If we could not find decent support for 128-bits __atomic let's
|
||||
dnl try the GCC _sync
|
||||
AS_IF([test $atomic_compare_exchange_n_128_result -eq 0],
|
||||
[PMIX_CHECK_SYNC_BUILTIN_CSWAP_INT128])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_GCC_ATOMIC_BUILTINS], [
|
||||
AC_MSG_CHECKING([for __atomic builtin atomics])
|
||||
|
||||
AC_TRY_LINK([
|
||||
if test -z "$pmix_cv_have___atomic" ; then
|
||||
AC_MSG_CHECKING([for 32-bit GCC built-in atomics])
|
||||
AC_TRY_LINK([
|
||||
#include <stdint.h>
|
||||
uint32_t tmp, old = 0;
|
||||
uint64_t tmp64, old64 = 0;], [
|
||||
@ -372,21 +312,39 @@ __atomic_compare_exchange_n(&tmp, &old, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED
|
||||
__atomic_add_fetch(&tmp, 1, __ATOMIC_RELAXED);
|
||||
__atomic_compare_exchange_n(&tmp64, &old64, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp64, 1, __ATOMIC_RELAXED);],
|
||||
[AC_MSG_RESULT([yes])
|
||||
$1],
|
||||
[AC_MSG_RESULT([no])
|
||||
$2])
|
||||
|
||||
# Check for 128-bit support
|
||||
PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128
|
||||
[pmix_cv_have___atomic=yes],
|
||||
[pmix_cv_have___atomic=no])
|
||||
AC_MSG_RESULT([$pmix_cv_have___atomic])
|
||||
if test $pmix_cv_have___atomic = "yes" ; then
|
||||
AC_MSG_CHECKING([for 64-bit GCC built-in atomics])
|
||||
AC_TRY_LINK([
|
||||
#include <stdint.h>
|
||||
uint64_t tmp64, old64 = 0;], [
|
||||
__atomic_compare_exchange_n(&tmp64, &old64, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp64, 1, __ATOMIC_RELAXED);],
|
||||
[pmix_cv_have___atomic_64=yes],
|
||||
[pmix_cv_have___atomic_64=no])
|
||||
AC_MSG_RESULT([$pmix_cv_have___atomic_64])
|
||||
if test $pmix_cv_have___atomic_64 = "yes" ; then
|
||||
AC_MSG_CHECKING([if 64-bit GCC built-in atomics are lock-free])
|
||||
AC_RUN_IFELSE([AC_LANG_PROGRAM([], [if (!__atomic_is_lock_free (8, 0)) { return 1; }])],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
pmix_cv_have___atomic_64=no],
|
||||
[AC_MSG_RESULT([cannot test -- assume yes (cross compiling)])])
|
||||
fi
|
||||
else
|
||||
pmix_cv_have___atomic_64=no
|
||||
fi
|
||||
# Check for 128-bit support
|
||||
PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_C11_CSWAP_INT128], [
|
||||
PMIX_VAR_SCOPE_PUSH([atomic_compare_exchange_result atomic_compare_exchange_CFLAGS_save atomic_compare_exchange_LIBS_save])
|
||||
|
||||
atomic_compare_exchange_CFLAGS_save=$CFLAGS
|
||||
atomic_compare_exchange_LIBS_save=$LIBS
|
||||
|
||||
# Do we have C11 atomics on 128-bit integers?
|
||||
# Use a special macro because we need to check with a few different
|
||||
# CFLAGS/LIBS.
|
||||
@ -394,7 +352,6 @@ AC_DEFUN([PMIX_CHECK_C11_CSWAP_INT128], [
|
||||
[AC_LANG_SOURCE(PMIX_ATOMIC_COMPARE_EXCHANGE_STRONG_TEST_SOURCE)],
|
||||
[atomic_compare_exchange_result=1],
|
||||
[atomic_compare_exchange_result=0])
|
||||
|
||||
# If we have it and it works, check to make sure it is always lock
|
||||
# free.
|
||||
AS_IF([test $atomic_compare_exchange_result -eq 1],
|
||||
@ -412,41 +369,16 @@ AC_DEFUN([PMIX_CHECK_C11_CSWAP_INT128], [
|
||||
AC_MSG_RESULT([no])],
|
||||
[AC_MSG_RESULT([cannot test -- assume yes (cross compiling)])])
|
||||
])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_C11_CSWAP_INT128],
|
||||
[$atomic_compare_exchange_result],
|
||||
[Whether C11 atomic compare swap is both supported and lock-free on 128-bit values])
|
||||
|
||||
dnl If we could not find decent support for 128-bits atomic let's
|
||||
dnl try the GCC _sync
|
||||
AS_IF([test $atomic_compare_exchange_result -eq 0],
|
||||
[PMIX_CHECK_SYNC_BUILTIN_CSWAP_INT128])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_GCC_ATOMIC_BUILTINS], [
|
||||
AC_MSG_CHECKING([for __atomic builtin atomics])
|
||||
|
||||
AC_TRY_LINK([
|
||||
#include <stdint.h>
|
||||
uint32_t tmp, old = 0;
|
||||
uint64_t tmp64, old64 = 0;], [
|
||||
__atomic_thread_fence(__ATOMIC_SEQ_CST);
|
||||
__atomic_compare_exchange_n(&tmp, &old, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp, 1, __ATOMIC_RELAXED);
|
||||
__atomic_compare_exchange_n(&tmp64, &old64, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp64, 1, __ATOMIC_RELAXED);],
|
||||
[AC_MSG_RESULT([yes])
|
||||
$1],
|
||||
[AC_MSG_RESULT([no])
|
||||
$2])
|
||||
|
||||
# Check for 128-bit support
|
||||
PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128
|
||||
])
|
||||
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CHECK_ASM_TEXT
|
||||
@ -526,9 +458,7 @@ dnl #################################################################
|
||||
# ---------------------------------------
|
||||
AC_DEFUN([_PMIX_CHECK_ASM_LSYM],[
|
||||
AC_REQUIRE([AC_PROG_GREP])
|
||||
|
||||
$1="L"
|
||||
|
||||
for sym in L .L $ L$ ; do
|
||||
asm_result=0
|
||||
echo "configure: trying $sym" >&AC_FD_CC
|
||||
@ -565,7 +495,6 @@ ${sym}mytestlabel$pmix_cv_asm_label_suffix],
|
||||
# ---------------------
|
||||
AC_DEFUN([PMIX_CHECK_ASM_LSYM],[
|
||||
AC_REQUIRE([AC_PROG_NM])
|
||||
|
||||
AC_CACHE_CHECK([prefix for lsym labels],
|
||||
[pmix_cv_asm_lsym],
|
||||
[_PMIX_CHECK_ASM_LSYM([pmix_cv_asm_lsym])])
|
||||
@ -593,7 +522,6 @@ mysym:
|
||||
.endp mysym],
|
||||
[pmix_cv_asm_need_proc="yes"])
|
||||
rm -f conftest.out])
|
||||
|
||||
if test "$pmix_cv_asm_need_proc" = "yes" ; then
|
||||
pmix_cv_asm_proc=".proc"
|
||||
pmix_cv_asm_endproc=".endp"
|
||||
@ -616,21 +544,17 @@ AC_DEFUN([PMIX_CHECK_ASM_GSYM],[
|
||||
AC_CACHE_CHECK([prefix for global symbol labels],
|
||||
[pmix_cv_asm_gsym],
|
||||
[_PMIX_CHECK_ASM_GSYM])
|
||||
|
||||
if test "$pmix_cv_asm_gsym" = "none" ; then
|
||||
AC_MSG_ERROR([Could not determine global symbol label prefix])
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_GSYM], ["$pmix_cv_asm_gsym"],
|
||||
[Assembly prefix for gsym labels])
|
||||
PMIX_ASM_GSYM="$pmix_cv_asm_gsym"
|
||||
AC_SUBST(PMIX_ASM_GSYM)
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN([_PMIX_CHECK_ASM_GSYM],[
|
||||
pmix_cv_asm_gsym="none"
|
||||
|
||||
for sym in "_" "" "." ; do
|
||||
asm_result=0
|
||||
echo "configure: trying $sym" >&AC_FD_CC
|
||||
@ -727,7 +651,6 @@ dnl #################################################################
|
||||
AC_DEFUN([PMIX_CHECK_ASM_ALIGN_LOG],[
|
||||
AC_REQUIRE([AC_PROG_NM])
|
||||
AC_REQUIRE([AC_PROG_GREP])
|
||||
|
||||
AC_CACHE_CHECK([if .align directive takes logarithmic value],
|
||||
[pmix_cv_asm_align_log],
|
||||
[ PMIX_TRY_ASSEMBLE([ $pmix_cv_asm_text
|
||||
@ -746,17 +669,14 @@ foo$pmix_cv_asm_label_suffix
|
||||
else
|
||||
pmix_cv_asm_align_log="no"
|
||||
fi])
|
||||
|
||||
if test "$pmix_cv_asm_align_log" = "yes" || test "$pmix_cv_asm_align_log" = "1" ; then
|
||||
pmix_asm_align_log_result=1
|
||||
else
|
||||
pmix_asm_align_log_result=0
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ALIGN_LOG],
|
||||
[$asm_align_log_result],
|
||||
[Assembly align directive expects logarithmic value])
|
||||
|
||||
unset omp_asm_addr asm_result
|
||||
])dnl
|
||||
|
||||
@ -777,7 +697,6 @@ AC_DEFUN([PMIX_CHECK_ASM_TYPE],[
|
||||
AC_CACHE_CHECK([prefix for function in .type],
|
||||
[pmix_cv_asm_type],
|
||||
[_PMIX_CHECK_ASM_TYPE])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_TYPE], ["$pmix_cv_asm_type"],
|
||||
[How to set function type in .type directive])
|
||||
PMIX_ASM_TYPE="$pmix_cv_asm_type"
|
||||
@ -786,7 +705,6 @@ AC_DEFUN([PMIX_CHECK_ASM_TYPE],[
|
||||
|
||||
AC_DEFUN([_PMIX_CHECK_ASM_TYPE],[
|
||||
pmix_cv_asm_type=""
|
||||
|
||||
case "${host}" in
|
||||
*-sun-solaris*)
|
||||
# GCC on solaris seems to accept just about anything, not
|
||||
@ -809,7 +727,6 @@ mysym:],
|
||||
;;
|
||||
esac
|
||||
rm -f conftest.out
|
||||
|
||||
unset asm_result type
|
||||
])dnl
|
||||
|
||||
@ -829,13 +746,11 @@ AC_DEFUN([PMIX_CHECK_ASM_SIZE],[
|
||||
PMIX_TRY_ASSEMBLE([ .size mysym, 1],
|
||||
[pmix_cv_asm_need_size="yes"])
|
||||
rm -f conftest.out])
|
||||
|
||||
if test "$pmix_cv_asm_need_size" = "yes" ; then
|
||||
pmix_asm_size=1
|
||||
else
|
||||
pmix_asm_size=0
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_SIZE], ["$pmix_asm_size"],
|
||||
[Do we need to give a .size directive])
|
||||
PMIX_ASM_SIZE="$pmix_asm_size"
|
||||
@ -850,7 +765,6 @@ AC_DEFUN([PMIX_CHECK_ASM_SIZE],[
|
||||
# disable execable stacks with GAS
|
||||
AC_DEFUN([PMIX_CHECK_ASM_GNU_STACKEXEC], [
|
||||
AC_REQUIRE([AC_PROG_GREP])
|
||||
|
||||
AC_CHECK_PROG([OBJDUMP], [objdump], [objdump])
|
||||
AC_CACHE_CHECK([if .note.GNU-stack is needed],
|
||||
[pmix_cv_asm_gnu_stack_result],
|
||||
@ -860,7 +774,7 @@ AC_DEFUN([PMIX_CHECK_ASM_GNU_STACKEXEC], [
|
||||
int testfunc() {return 0; }
|
||||
EOF
|
||||
PMIX_LOG_COMMAND([$CC $CFLAGS -c conftest.c -o conftest.$OBJEXT],
|
||||
[$OBJDUMP -x conftest.$OBJEXT | $GREP '\.note\.GNU-stack' > /dev/null && pmix_cv_asm_gnu_stack_result=yes],
|
||||
[$OBJDUMP -x conftest.$OBJEXT 2>&1 | $GREP '\.note\.GNU-stack' &> /dev/null && pmix_cv_asm_gnu_stack_result=yes],
|
||||
[PMIX_LOG_MSG([the failed program was:], 1)
|
||||
PMIX_LOG_FILE([conftest.c])
|
||||
pmix_cv_asm_gnu_stack_result=no])
|
||||
@ -899,7 +813,6 @@ AC_DEFUN([PMIX_CHECK_POWERPC_REG],[
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_POWERPC_R_REGISTERS],
|
||||
[$pmix_cv_asm_powerpc_r_reg],
|
||||
[Whether r notation is used for ppc registers])
|
||||
@ -939,7 +852,6 @@ AC_DEFUN([PMIX_CHECK_POWERPC_64BIT],[
|
||||
ppc64_result=0
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "$ppc64_result" = "1" ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
ifelse([$1],,:,[$1])
|
||||
@ -947,34 +859,10 @@ AC_DEFUN([PMIX_CHECK_POWERPC_64BIT],[
|
||||
AC_MSG_RESULT([no])
|
||||
ifelse([$2],,:,[$2])
|
||||
fi
|
||||
|
||||
unset ppc64_result ldarx_asm
|
||||
])dnl
|
||||
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CHECK_SPARCV8PLUS
|
||||
dnl
|
||||
dnl #################################################################
|
||||
AC_DEFUN([PMIX_CHECK_SPARCV8PLUS],[
|
||||
AC_MSG_CHECKING([if have Sparc v8+/v9 support])
|
||||
sparc_result=0
|
||||
PMIX_TRY_ASSEMBLE([$pmix_cv_asm_text
|
||||
casa [%o0] 0x80, %o1, %o2],
|
||||
[sparc_result=1],
|
||||
[sparc_result=0])
|
||||
if test "$sparc_result" = "1" ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
ifelse([$1],,:,[$1])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
ifelse([$2],,:,[$2])
|
||||
fi
|
||||
|
||||
unset sparc_result
|
||||
])dnl
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CHECK_CMPXCHG16B
|
||||
@ -983,7 +871,6 @@ dnl #################################################################
|
||||
AC_DEFUN([PMIX_CMPXCHG16B_TEST_SOURCE],[[
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
|
||||
union pmix_counted_pointer_t {
|
||||
struct {
|
||||
uint64_t counter;
|
||||
@ -996,17 +883,13 @@ union pmix_counted_pointer_t {
|
||||
#endif
|
||||
};
|
||||
typedef union pmix_counted_pointer_t pmix_counted_pointer_t;
|
||||
|
||||
int main(int argc, char* argv) {
|
||||
volatile pmix_counted_pointer_t a;
|
||||
pmix_counted_pointer_t b;
|
||||
|
||||
a.data.counter = 0;
|
||||
a.data.item = 0x1234567890ABCDEF;
|
||||
|
||||
b.data.counter = a.data.counter;
|
||||
b.data.item = a.data.item;
|
||||
|
||||
/* bozo checks */
|
||||
assert(16 == sizeof(pmix_counted_pointer_t));
|
||||
assert(a.data.counter == b.data.counter);
|
||||
@ -1029,7 +912,6 @@ int main(int argc, char* argv) {
|
||||
|
||||
AC_DEFUN([PMIX_CHECK_CMPXCHG16B],[
|
||||
PMIX_VAR_SCOPE_PUSH([cmpxchg16b_result])
|
||||
|
||||
PMIX_ASM_CHECK_ATOMIC_FUNC([cmpxchg16b],
|
||||
[AC_LANG_PROGRAM([[unsigned char tmp[16];]],
|
||||
[[__asm__ __volatile__ ("lock cmpxchg16b (%%rsi)" : : "S" (tmp) : "memory", "cc");]])],
|
||||
@ -1044,7 +926,6 @@ AC_DEFUN([PMIX_CHECK_CMPXCHG16B],[
|
||||
AC_MSG_RESULT([no])],
|
||||
[AC_MSG_RESULT([cannot test -- assume yes (cross compiling)])])
|
||||
])
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_CMPXCHG16B], [$cmpxchg16b_result],
|
||||
[Whether the processor supports the cmpxchg16b instruction])
|
||||
PMIX_VAR_SCOPE_POP
|
||||
@ -1079,9 +960,7 @@ dnl #################################################################
|
||||
AC_DEFUN([PMIX_CHECK_INLINE_C_GCC],[
|
||||
assembly="$1"
|
||||
asm_result="unknown"
|
||||
|
||||
AC_MSG_CHECKING([if $CC supports GCC inline assembly])
|
||||
|
||||
if test ! "$assembly" = "" ; then
|
||||
AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[
|
||||
int ret = 1;
|
||||
@ -1094,7 +973,6 @@ return ret;
|
||||
else
|
||||
assembly="test skipped - assuming no"
|
||||
fi
|
||||
|
||||
# if we're cross compiling, just try to compile and figure good enough
|
||||
if test "$asm_result" = "unknown" ; then
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[
|
||||
@ -1105,20 +983,16 @@ return ret;
|
||||
]])],
|
||||
[asm_result="yes"], [asm_result="no"])
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT([$asm_result])
|
||||
|
||||
if test "$asm_result" = "yes" ; then
|
||||
PMIX_C_GCC_INLINE_ASSEMBLY=1
|
||||
pmix_cv_asm_inline_supported="yes"
|
||||
else
|
||||
PMIX_C_GCC_INLINE_ASSEMBLY=0
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_C_GCC_INLINE_ASSEMBLY],
|
||||
[$PMIX_C_GCC_INLINE_ASSEMBLY],
|
||||
[Whether C compiler supports GCC style inline assembly])
|
||||
|
||||
unset PMIX_C_GCC_INLINE_ASSEMBLY assembly asm_result
|
||||
])dnl
|
||||
|
||||
@ -1136,32 +1010,28 @@ dnl #################################################################
|
||||
AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
AC_REQUIRE([PMIX_SETUP_CC])
|
||||
AC_REQUIRE([AM_PROG_AS])
|
||||
|
||||
AC_ARG_ENABLE([c11-atomics],[AC_HELP_STRING([--enable-c11-atomics],
|
||||
[Enable use of C11 atomics if available (default: enabled)])])
|
||||
|
||||
AC_ARG_ENABLE([builtin-atomics],
|
||||
[AC_HELP_STRING([--enable-builtin-atomics],
|
||||
[Enable use of __sync builtin atomics (default: disabled)])])
|
||||
|
||||
[Enable use of GCC built-in atomics (default: autodetect)])])
|
||||
PMIX_CHECK_C11_CSWAP_INT128
|
||||
|
||||
pmix_cv_asm_builtin="BUILTIN_NO"
|
||||
PMIX_CHECK_GCC_ATOMIC_BUILTINS
|
||||
if test "x$enable_c11_atomics" != "xno" && test "$pmix_cv_c11_supported" = "yes" ; then
|
||||
pmix_cv_asm_builtin="BUILTIN_C11"
|
||||
PMIX_CHECK_C11_CSWAP_INT128
|
||||
elif test "x$enable_c11_atomics" = "xyes"; then
|
||||
AC_MSG_WARN([C11 atomics were requested but are not supported])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
elif test "$enable_builtin_atomics" = "yes" ; then
|
||||
if test $pmix_cv_have___atomic = "yes" ; then
|
||||
pmix_cv_asm_builtin="BUILTIN_GCC"
|
||||
else
|
||||
pmix_cv_asm_builtin="BUILTIN_NO"
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes"],
|
||||
[PMIX_CHECK_GCC_ATOMIC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_GCC"], [])])
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes"],
|
||||
[PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"], [])])
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes"],
|
||||
[AC_MSG_ERROR([__sync builtin atomics requested but not found.])])
|
||||
AC_MSG_WARN([GCC built-in atomics requested but not found.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
fi
|
||||
|
||||
PMIX_CHECK_ASM_PROC
|
||||
PMIX_CHECK_ASM_TEXT
|
||||
PMIX_CHECK_ASM_GLOBAL
|
||||
@ -1172,11 +1042,14 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
PMIX_CHECK_ASM_TYPE
|
||||
PMIX_CHECK_ASM_SIZE
|
||||
PMIX_CHECK_ASM_ALIGN_LOG
|
||||
|
||||
# find our architecture for purposes of assembly stuff
|
||||
pmix_cv_asm_arch="UNSUPPORTED"
|
||||
PMIX_GCC_INLINE_ASSIGN=""
|
||||
if test "$pmix_cv_have___atomic_64" ; then
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
else
|
||||
PMIX_ASM_SUPPORT_64BIT=0
|
||||
fi
|
||||
case "${host}" in
|
||||
x86_64-*x32)
|
||||
pmix_cv_asm_arch="X86_64"
|
||||
@ -1193,60 +1066,29 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
PMIX_GCC_INLINE_ASSIGN='"xaddl %1,%0" : "=m"(ret), "+r"(negone) : "m"(ret)'
|
||||
PMIX_CHECK_CMPXCHG16B
|
||||
;;
|
||||
|
||||
ia64-*)
|
||||
pmix_cv_asm_arch="IA64"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
aarch64*)
|
||||
pmix_cv_asm_arch="ARM64"
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
PMIX_ASM_ARM_VERSION=8
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ARM_VERSION], [$PMIX_ASM_ARM_VERSION],
|
||||
[What ARM assembly version to use])
|
||||
PMIX_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
;;
|
||||
|
||||
armv7*|arm-*-linux-gnueabihf)
|
||||
pmix_cv_asm_arch="ARM"
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
PMIX_ASM_ARM_VERSION=7
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ARM_VERSION], [$PMIX_ASM_ARM_VERSION],
|
||||
[What ARM assembly version to use])
|
||||
PMIX_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
;;
|
||||
|
||||
armv6*)
|
||||
pmix_cv_asm_arch="ARM"
|
||||
PMIX_ASM_SUPPORT_64BIT=0
|
||||
PMIX_ASM_ARM_VERSION=6
|
||||
CCASFLAGS="$CCASFLAGS -march=armv7-a"
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ARM_VERSION], [$PMIX_ASM_ARM_VERSION],
|
||||
[What ARM assembly version to use])
|
||||
PMIX_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
||||
;;
|
||||
|
||||
armv5*linux*|armv4*linux*|arm-*-linux-gnueabi)
|
||||
# uses Linux kernel helpers for some atomic operations
|
||||
pmix_cv_asm_arch="ARM"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
|
||||
mips-*|mips64*)
|
||||
# Should really find some way to make sure that we are on
|
||||
# a MIPS III machine (r4000 and later)
|
||||
pmix_cv_asm_arch="MIPS"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
|
||||
powerpc-*|powerpc64-*|powerpcle-*|powerpc64le-*|rs6000-*|ppc-*)
|
||||
PMIX_CHECK_POWERPC_REG
|
||||
if test "$ac_cv_sizeof_long" = "4" ; then
|
||||
pmix_cv_asm_arch="POWERPC32"
|
||||
|
||||
# Note that on some platforms (Apple G5), even if we are
|
||||
# compiling in 32 bit mode (and therefore should assume
|
||||
# sizeof(long) == 4), we can use the 64 bit test and set
|
||||
@ -1260,87 +1102,32 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
fi
|
||||
PMIX_GCC_INLINE_ASSIGN='"1: li %0,0" : "=&r"(ret)'
|
||||
;;
|
||||
# There is no current difference between s390 and s390x
|
||||
# But use two different defines in case some come later
|
||||
# as s390 is 31bits while s390x is 64bits
|
||||
s390-*)
|
||||
pmix_cv_asm_arch="S390"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
s390x-*)
|
||||
pmix_cv_asm_arch="S390X"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
sparc*-*)
|
||||
# SPARC v9 (and above) are the only ones with 64bit support
|
||||
# if compiling 32 bit, see if we are v9 (aka v8plus) or
|
||||
# earlier (casa is v8+/v9).
|
||||
if test "$ac_cv_sizeof_long" = "4" ; then
|
||||
have_v8plus=0
|
||||
PMIX_CHECK_SPARCV8PLUS([have_v8plus=1])
|
||||
if test "$have_v8plus" = "0" ; then
|
||||
PMIX_ASM_SUPPORT_64BIT=0
|
||||
pmix_cv_asm_arch="SPARC"
|
||||
AC_MSG_WARN([Sparc v8 target is not supported in this release of Open MPI.])
|
||||
AC_MSG_WARN([You must specify the target architecture v8plus to compile])
|
||||
AC_MSG_WARN([Open MPI in 32 bit mode on Sparc processors (see the README).])
|
||||
AC_MSG_ERROR([Can not continue.])
|
||||
else
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
pmix_cv_asm_arch="SPARCV9_32"
|
||||
fi
|
||||
|
||||
elif test "$ac_cv_sizeof_long" = "8" ; then
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
pmix_cv_asm_arch="SPARCV9_64"
|
||||
else
|
||||
AC_MSG_ERROR([Could not determine Sparc word size: $ac_cv_sizeof_long])
|
||||
fi
|
||||
PMIX_GCC_INLINE_ASSIGN='"mov 0,%0" : "=&r"(ret)'
|
||||
;;
|
||||
|
||||
*)
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$PMIX_ASM_SUPPORT_64BIT" = "x1" && test "$pmix_cv_asm_builtin" = "BUILTIN_SYNC" &&
|
||||
test "$pmix_asm_sync_have_64bit" = "0" ; then
|
||||
# __sync builtins exist but do not implement 64-bit support. Fall back on inline asm.
|
||||
pmix_cv_asm_builtin="BUILTIN_NO"
|
||||
if test $pmix_cv_have___atomic = "yes" ; then
|
||||
pmix_cv_asm_builtin="BUILTIN_GCC"
|
||||
else
|
||||
AC_MSG_ERROR([No atomic primitives available for $host])
|
||||
fi
|
||||
|
||||
if test "$pmix_cv_asm_builtin" = "BUILTIN_SYNC" || test "$pmix_cv_asm_builtin" = "BUILTIN_GCC" ; then
|
||||
AC_DEFINE([PMIX_C_GCC_INLINE_ASSEMBLY], [1],
|
||||
[Whether C compiler supports GCC style inline assembly])
|
||||
else
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_SUPPORT_64BIT],
|
||||
[$PMIX_ASM_SUPPORT_64BIT],
|
||||
[Whether we can do 64bit assembly operations or not. Should not be used outside of the assembly header files])
|
||||
AC_SUBST([PMIX_ASM_SUPPORT_64BIT])
|
||||
|
||||
#
|
||||
# figure out if we need any special function start / stop code
|
||||
#
|
||||
case $host_os in
|
||||
aix*)
|
||||
pmix_asm_arch_config="aix"
|
||||
;;
|
||||
*)
|
||||
pmix_asm_arch_config="default"
|
||||
;;
|
||||
esac
|
||||
|
||||
;;
|
||||
esac
|
||||
if ! test -z "$PMIX_ASM_ARM_VERSION" ; then
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ARM_VERSION], [$PMIX_ASM_ARM_VERSION],
|
||||
[What ARM assembly version to use])
|
||||
fi
|
||||
if test "$pmix_cv_asm_builtin" = "BUILTIN_GCC" ; then
|
||||
AC_DEFINE([PMIX_C_GCC_INLINE_ASSEMBLY], [1],
|
||||
[Whether C compiler supports GCC style inline assembly])
|
||||
else
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASM_SUPPORT_64BIT],
|
||||
[$PMIX_ASM_SUPPORT_64BIT],
|
||||
[Whether we can do 64bit assembly operations or not. Should not be used outside of the assembly header files])
|
||||
AC_SUBST([PMIX_ASM_SUPPORT_64BIT])
|
||||
pmix_cv_asm_inline_supported="no"
|
||||
# now that we know our architecture, try to inline assemble
|
||||
PMIX_CHECK_INLINE_C_GCC([$PMIX_GCC_INLINE_ASSIGN])
|
||||
|
||||
# format:
|
||||
# config_file-text-global-label_suffix-gsym-lsym-type-size-align_log-ppc_r_reg-64_bit-gnu_stack
|
||||
asm_format="${pmix_asm_arch_config}"
|
||||
asm_format="default"
|
||||
asm_format="${asm_format}-${pmix_cv_asm_text}-${pmix_cv_asm_global}"
|
||||
asm_format="${asm_format}-${pmix_cv_asm_label_suffix}-${pmix_cv_asm_gsym}"
|
||||
asm_format="${asm_format}-${pmix_cv_asm_lsym}"
|
||||
@ -1357,14 +1144,12 @@ AC_MSG_ERROR([Can not continue.])
|
||||
# this version, but make sure the Makefile gives the right thing
|
||||
# when regenerating the files because the base has been touched.
|
||||
PMIX_ASSEMBLY_FORMAT=`echo "$pmix_cv_asm_format" | sed -e 's/\\\$/\\\$\\\$/'`
|
||||
|
||||
AC_MSG_CHECKING([for assembly format])
|
||||
AC_MSG_RESULT([$pmix_cv_asm_format])
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASSEMBLY_FORMAT], ["$PMIX_ASSEMBLY_FORMAT"],
|
||||
[Format of assembly file])
|
||||
AC_SUBST([PMIX_ASSEMBLY_FORMAT])
|
||||
fi # if pmix_cv_asm_builtin = BUILTIN_SYNC
|
||||
|
||||
fi # if pmix_cv_asm_builtin = BUILTIN_GCC
|
||||
result="PMIX_$pmix_cv_asm_arch"
|
||||
PMIX_ASSEMBLY_ARCH="$pmix_cv_asm_arch"
|
||||
AC_MSG_CHECKING([for assembly architecture])
|
||||
@ -1372,7 +1157,6 @@ AC_MSG_ERROR([Can not continue.])
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASSEMBLY_ARCH], [$result],
|
||||
[Architecture type of assembly to use for atomic operations and CMA])
|
||||
AC_SUBST([PMIX_ASSEMBLY_ARCH])
|
||||
|
||||
# Check for RDTSCP support
|
||||
result=0
|
||||
AS_IF([test "$pmix_cv_asm_arch" = "PMIX_X86_64" || test "$pmix_cv_asm_arch" = "PMIX_IA32"],
|
||||
@ -1394,7 +1178,6 @@ int main(int argc, char* argv[])
|
||||
AC_LANG_POP([C])])
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASSEMBLY_SUPPORTS_RDTSCP], [$result],
|
||||
[Whether we have support for RDTSCP instruction])
|
||||
|
||||
result="PMIX_$pmix_cv_asm_builtin"
|
||||
PMIX_ASSEMBLY_BUILTIN="$pmix_cv_asm_builtin"
|
||||
AC_MSG_CHECKING([for builtin atomics])
|
||||
@ -1402,9 +1185,7 @@ int main(int argc, char* argv[])
|
||||
AC_DEFINE_UNQUOTED([PMIX_ASSEMBLY_BUILTIN], [$result],
|
||||
[Whether to use builtin atomics])
|
||||
AC_SUBST([PMIX_ASSEMBLY_BUILTIN])
|
||||
|
||||
PMIX_ASM_FIND_FILE
|
||||
|
||||
unset result asm_format
|
||||
])dnl
|
||||
|
||||
@ -1420,8 +1201,7 @@ dnl #################################################################
|
||||
AC_DEFUN([PMIX_ASM_FIND_FILE], [
|
||||
AC_REQUIRE([AC_PROG_GREP])
|
||||
AC_REQUIRE([AC_PROG_FGREP])
|
||||
|
||||
if test "$pmix_cv_asm_arch" != "WINDOWS" && test "$pmix_cv_asm_builtin" != "BUILTIN_SYNC" && test "$pmix_cv_asm_builtin" != "BUILTIN_GCC" && test "$pmix_cv_asm_builtin" != "BUILTIN_OSX" && test "$pmix_cv_asm_inline_arch" = "no" ; then
|
||||
if test "$pmix_cv_asm_arch" != "WINDOWS" && test "$pmix_cv_asm_builtin" != "BUILTIN_GCC" && test "$pmix_cv_asm_builtin" != "BUILTIN_OSX" && test "$pmix_cv_asm_inline_arch" = "no" ; then
|
||||
AC_MSG_ERROR([no atomic support available. exiting])
|
||||
else
|
||||
# On windows with VC++, atomics are done with compiler primitives
|
||||
|
@ -12,7 +12,7 @@ dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
||||
dnl Copyright (c) 2009-2016 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2009-2020 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2017 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
@ -287,7 +287,7 @@ for val in ${$1}; do
|
||||
|
||||
# Check for special cases where we do want to allow repeated
|
||||
# arguments (per
|
||||
# http://www.open-mpi.org/community/lists/devel/2012/08/11362.php).
|
||||
# https://www.open-mpi.org/community/lists/devel/2012/08/11362.php).
|
||||
|
||||
case $val in
|
||||
-Xclang|-Xg)
|
||||
@ -373,7 +373,7 @@ AC_DEFUN([PMIX_FLAGS_UNIQ],[
|
||||
|
||||
# Check for special cases where we do want to allow repeated
|
||||
# arguments (per
|
||||
# http://www.open-mpi.org/community/lists/devel/2012/08/11362.php
|
||||
# https://www.open-mpi.org/community/lists/devel/2012/08/11362.php
|
||||
# and
|
||||
# https://github.com/open-mpi/ompi/issues/324).
|
||||
|
||||
|
@ -10,7 +10,7 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
@ -23,6 +23,9 @@ dnl
|
||||
# PMIX_LOAD_PLATFORM()
|
||||
# --------------------
|
||||
AC_DEFUN([PMIX_LOAD_PLATFORM], [
|
||||
AC_ARG_WITH([platform-patches-dir],
|
||||
[AC_HELP_STRING([--with-platform-patches-dir=DIR],
|
||||
[Location of the platform patches directory. If you use this option, you must also use --with-platform.])])
|
||||
|
||||
AC_ARG_WITH([platform],
|
||||
[AC_HELP_STRING([--with-platform=FILE],
|
||||
@ -30,7 +33,10 @@ AC_DEFUN([PMIX_LOAD_PLATFORM], [
|
||||
command line not in FILE are used. Options on the
|
||||
command line and in FILE are replaced by what is
|
||||
in FILE.])])
|
||||
|
||||
m4_ifval([autogen_platform_file], [
|
||||
if test "$with_platform" = "" ; then
|
||||
with_platform=autogen_platform_file
|
||||
fi])
|
||||
if test "$with_platform" = "yes" ; then
|
||||
AC_MSG_ERROR([--with-platform argument must include FILE option])
|
||||
elif test "$with_platform" = "no" ; then
|
||||
@ -77,5 +83,106 @@ AC_DEFUN([PMIX_LOAD_PLATFORM], [
|
||||
|
||||
# return to where we started
|
||||
cd "$platform_savedir"
|
||||
|
||||
# define an alternate default mca param filename
|
||||
platform_alt_mca_file="`basename $platform_loaded`.conf"
|
||||
|
||||
# look where platform file is located for platform.conf name
|
||||
if test -r "${platform_file_dir}/${platform_alt_mca_file}" ; then
|
||||
AC_SUBST(PMIX_DEFAULT_MCA_PARAM_CONF, [$platform_file_dir/$platform_alt_mca_file])
|
||||
AC_SUBST(PMIX_PARAM_FROM_PLATFORM, "yes")
|
||||
# if not, see if a file is there with the default name
|
||||
elif test -r "${platform_file_dir}/pmix-mca-params.conf" ; then
|
||||
AC_SUBST(PMIX_DEFAULT_MCA_PARAM_CONF, [$platform_file_dir/pmix-mca-params.conf])
|
||||
AC_SUBST(PMIX_PARAM_FROM_PLATFORM, "yes")
|
||||
# if not, then just use the default
|
||||
else
|
||||
AC_SUBST(PMIX_DEFAULT_MCA_PARAM_CONF, [pmix-mca-params.conf])
|
||||
AC_SUBST(PMIX_PARAM_FROM_PLATFORM, "no")
|
||||
fi
|
||||
|
||||
patch_dir="${with_platform}.patches"
|
||||
if test -n "$with_platform_patches_dir"; then
|
||||
if test "$with_platform_patches_dir" = "yes"; then
|
||||
patch_dir="${with_platform}.patches"
|
||||
elif test "$with_platform_patches_dir" = "no"; then
|
||||
AC_MSG_NOTICE([Disabling platform patches on user request])
|
||||
patch_dir=""
|
||||
elif test -d "$with_platform_patches_dir"; then
|
||||
patch_dir=$with_platform_patches_dir
|
||||
else
|
||||
AC_MSG_ERROR([User provided patches directory: $with_platform_patches_dir not found])
|
||||
fi
|
||||
fi
|
||||
|
||||
patch_done="${srcdir}/.platform_patches"
|
||||
patch_found=no
|
||||
|
||||
if test -d "${patch_dir}"; then
|
||||
if test ! -f "${patch_done}"; then
|
||||
|
||||
AC_MSG_NOTICE([Checking patches from ${patch_dir}/ directory ])
|
||||
for one_patch in $patch_dir/*.patch ; do
|
||||
|
||||
AC_MSG_CHECKING([patch: $one_patch for errors ])
|
||||
patch -d ${srcdir} -p1 -t -s --dry-run < ${one_patch}
|
||||
if test "$?" != "0"; then
|
||||
AC_MSG_RESULT([fail])
|
||||
AC_MSG_ERROR([Platform patches failed to apply])
|
||||
else
|
||||
AC_MSG_RESULT([ok])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([patch: $one_patch for unsupported configury changes ])
|
||||
has_configury_items=$(patch -d ${srcdir} -p1 -t --dry-run < ${one_patch} 2>&1 | egrep "^patching" | egrep '*\.(am|m4)$' | wc -l)
|
||||
|
||||
if test $has_configury_items -ne 0; then
|
||||
AC_MSG_RESULT([fail])
|
||||
AC_MSG_ERROR([Platform patches should not change configury files])
|
||||
else
|
||||
AC_MSG_RESULT([ok])
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
for one_patch in $patch_dir/*.patch ; do
|
||||
AC_MSG_NOTICE([Applying patch ${one_patch}])
|
||||
patch -d ${srcdir} -p1 -t -s < ${one_patch}
|
||||
if test "$?" != "0"; then
|
||||
AC_MSG_ERROR([Failed to apply patch ${one_patch}])
|
||||
fi
|
||||
patch_found=yes
|
||||
done
|
||||
|
||||
if test "$patch_found" = "yes"; then
|
||||
|
||||
platform_root_short="$(basename $platform_base)"
|
||||
|
||||
# If platform file resides under platform/ root folder - use filename as ident
|
||||
if [ test "$platform_root_short" = "platform" ]; then
|
||||
platform_ident="$platform_file"
|
||||
else
|
||||
platform_ident="$(basename $platform_base)"
|
||||
fi
|
||||
|
||||
# Set custom ident for platform patched PMIX
|
||||
if [ test -z "$with_ident_string" ]; then
|
||||
with_ident_string="Platform: $platform_ident"
|
||||
fi
|
||||
|
||||
AC_MSG_NOTICE([Platform patches applied, created stamp file ${patch_done}])
|
||||
touch ${patch_done}
|
||||
else
|
||||
AC_MSG_NOTICE([No platform patches in ${patch_dir}])
|
||||
fi
|
||||
|
||||
else
|
||||
AC_MSG_WARN([Platform patches already applied, skipping. ${patch_done} can be removed to re-apply ])
|
||||
fi
|
||||
elif test -n "${patch_dir}"; then
|
||||
AC_MSG_NOTICE([No platform patches in ${patch_dir}])
|
||||
fi
|
||||
else
|
||||
AC_SUBST(PMIX_DEFAULT_MCA_PARAM_CONF, [pmix-mca-params.conf])
|
||||
fi
|
||||
])
|
||||
|
@ -262,11 +262,6 @@ AC_DEFUN([PMIX_MCA],[
|
||||
[MCA_pmix_]mca_framework[_CONFIG](mca_framework),
|
||||
[MCA_CONFIGURE_FRAMEWORK(mca_framework, 1)])])])
|
||||
|
||||
# note that mca_wrapper_extra_* is a running list, and we take checkpoints at the end of our project
|
||||
pmix_mca_wrapper_extra_cppflags="$mca_wrapper_extra_cppflags"
|
||||
pmix_mca_wrapper_extra_ldflags="$mca_wrapper_extra_ldflags"
|
||||
pmix_mca_wrapper_extra_libs="$mca_wrapper_extra_libs"
|
||||
|
||||
AC_SUBST(MCA_pmix_FRAMEWORKS)
|
||||
AC_SUBST(MCA_pmix_FRAMEWORKS_SUBDIRS)
|
||||
AC_SUBST(MCA_pmix_FRAMEWORK_COMPONENT_ALL_SUBDIRS)
|
||||
@ -622,14 +617,6 @@ AC_DEFUN([MCA_CONFIGURE_ALL_CONFIG_COMPONENTS],[
|
||||
AC_MSG_WARN([MCA component configure script told me to abort])
|
||||
AC_MSG_ERROR([cannot continue])
|
||||
fi
|
||||
|
||||
m4_foreach(flags, [LDFLAGS, LIBS],
|
||||
[[line="`$GREP WRAPPER_EXTRA_]flags[= $infile | cut -d= -f2-`"]
|
||||
eval "line=$line"
|
||||
if test -n "$line"; then
|
||||
$2[_]$3[_WRAPPER_EXTRA_]flags[="$line"]
|
||||
fi
|
||||
])dnl
|
||||
fi
|
||||
|
||||
MCA_PROCESS_COMPONENT($1, $component, $2, $3, $4, $5, $compile_mode)
|
||||
@ -754,38 +741,6 @@ AC_MSG_ERROR([*** $1 component $2 was supposed to be direct-called, but
|
||||
*** Aborting])
|
||||
fi
|
||||
fi
|
||||
|
||||
# if the component is building, add it's WRAPPER_EXTRA_LDFLAGS and
|
||||
# WRAPPER_EXTRA_LIBS. If the component doesn't specify it's
|
||||
# WRAPPER_EXTRA_LIBS and WRAPPER_EXTRA_LDFLAGS, try using LDFLAGS and LIBS if
|
||||
# component didn't have it's own configure script (in which case,
|
||||
# we know it didn't set LDFLAGS and LIBS because it can't) Don't
|
||||
# have to do this if the component is building dynamically,
|
||||
# because it will link against these (without a dependency from
|
||||
# libmpi.so to these flags)
|
||||
if test "$7" = "static"; then
|
||||
AS_LITERAL_IF([$2],
|
||||
[m4_foreach(flags, [LDFLAGS, LIBS],
|
||||
[AS_IF([test "$$1_$2_WRAPPER_EXTRA_]flags[" = ""],
|
||||
[PMIX_FLAGS_APPEND_UNIQ([mca_wrapper_extra_]m4_tolower(flags), [$$1_$2_]flags)],
|
||||
[PMIX_FLAGS_APPEND_UNIQ([mca_wrapper_extra_]m4_tolower(flags), [$$1_$2_WRAPPER_EXTRA_]flags)])
|
||||
])],
|
||||
[m4_foreach(flags, [LDFLAGS, LIBS],
|
||||
[[str="line=\$$1_$2_WRAPPER_EXTRA_]flags["]
|
||||
eval "$str"
|
||||
PMIX_FLAGS_APPEND_UNIQ([mca_wrapper_extra_]m4_tolower(flags), [$line])])])
|
||||
fi
|
||||
|
||||
# if needed, copy over WRAPPER_EXTRA_CPPFLAGS. Since a configure script
|
||||
# component can never be used in a STOP_AT_FIRST framework, we
|
||||
# don't have to implement the else clause in the literal check...
|
||||
AS_LITERAL_IF([$2],
|
||||
[AS_IF([test "$$1_$2_WRAPPER_EXTRA_CPPFLAGS" != ""],
|
||||
[m4_if(PMIX_EVAL_ARG([MCA_pmix_$1_CONFIGURE_MODE]), [STOP_AT_FIRST], [stop_at_first=1], [stop_at_first=0])
|
||||
AS_IF([test "$7" = "static" && test "$stop_at_first" = "1"],
|
||||
[AS_IF([test "$with_devel_headers" = "yes"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ([mca_wrapper_extra_cppflags], [$$1_$2_WRAPPER_EXTRA_CPPFLAGS])])],
|
||||
[AC_MSG_WARN([ignoring $1_$2_WRAPPER_EXTRA_CPPFLAGS ($$1_$2_WRAPPER_EXTRA_CPPFLAGS): component conditions not met])])])])
|
||||
])
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@ dnl Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2015-2019 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2018-2020 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
@ -120,6 +120,28 @@ AC_DEFUN([PMIX_PROG_CC_C11],[
|
||||
])
|
||||
|
||||
|
||||
# PMIX_CHECK_CC_IQUOTE()
|
||||
# ----------------------
|
||||
# Check if the compiler supports the -iquote option. This options
|
||||
# removes the specified directory from the search path when using
|
||||
# #include <>. This check works around an issue caused by C++20
|
||||
# which added a <version> header. This conflicts with the
|
||||
# VERSION file at the base of our source directory on case-
|
||||
# insensitive filesystems.
|
||||
AC_DEFUN([PMIX_CHECK_CC_IQUOTE],[
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_check_cc_iquote_CFLAGS_save])
|
||||
pmix_check_cc_iquote_CFLAGS_save=${CFLAGS}
|
||||
CFLAGS="${CFLAGS} -iquote ."
|
||||
AC_MSG_CHECKING([for $CC option to add a directory only to the search path for the quote form of include])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[])],
|
||||
[pmix_cc_iquote="-iquote"],
|
||||
[pmix_cc_iquote="-I"])
|
||||
CFLAGS=${pmix_check_cc_iquote_CFLAGS_save}
|
||||
PMIX_VAR_SCOPE_POP
|
||||
AC_MSG_RESULT([$pmix_cc_iquote])
|
||||
])
|
||||
|
||||
|
||||
# PMIX_SETUP_CC()
|
||||
# ---------------
|
||||
# Do everything required to setup the C compiler. Safe to AC_REQUIRE
|
||||
@ -135,7 +157,13 @@ AC_DEFUN([PMIX_SETUP_CC],[
|
||||
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper__Thread_local_available pmix_prog_cc_c11_helper_atomic_var_available pmix_prog_cc_c11_helper__Atomic_available pmix_prog_cc_c11_helper__static_assert_available pmix_prog_cc_c11_helper__Generic_available pmix_prog_cc__thread_available pmix_prog_cc_c11_helper_atomic_fetch_xor_explicit_available])
|
||||
|
||||
# AC_PROG_CC_C99 changes CC (instead of CFLAGS) so save CC (without c99
|
||||
# flags) for use in our wrappers.
|
||||
WRAPPER_CC="$CC"
|
||||
AC_SUBST([WRAPPER_CC])
|
||||
|
||||
PMIX_PROG_CC_C11
|
||||
PMIX_CHECK_CC_IQUOTE
|
||||
|
||||
if test $pmix_cv_c11_supported = no ; then
|
||||
# It is not currently an error if C11 support is not available. Uncomment the
|
||||
|
@ -2,8 +2,8 @@ dnl -*- shell-script -*-
|
||||
dnl
|
||||
dnl Copyright (c) 2016 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2017-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2018 Cisco, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2017-2018 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2018-2020 Cisco, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
@ -24,7 +24,7 @@ AC_DEFUN([PMIX_CAPTURE_CONFIGURE_CLI],[
|
||||
PMIX_VAR_SCOPE_PUSH([sed_quote_subst arg quoted_arg])
|
||||
$1=
|
||||
for arg in "$[]@"; do
|
||||
sed_quote_subst='s/\(@<:@`"$\\@:>@\)/\\\1/g'
|
||||
sed_quote_subst='s/\(@<:@`"\\@:>@\)/\\\1/g'
|
||||
case "$arg" in
|
||||
*@<:@\\\`\"\$[]@:>@*)
|
||||
quoted_arg=\'`echo "$arg" | sed $sed_quote_subst`\' ;;
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2013 Los Alamos National Security, LLC. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -46,7 +46,7 @@ AC_DEFUN([_PMIX_HWLOC_EMBEDDED_MODE],[
|
||||
])
|
||||
|
||||
AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_hwloc_dir pmix_hwloc_libdir pmix_hwloc_standard_lib_location pmix_hwloc_standard_header_location])
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_hwloc_dir pmix_hwloc_libdir pmix_hwloc_standard_lib_location pmix_hwloc_standard_header_location pmix_check_hwloc_save_CPPFLAGS pmix_check_hwloc_save_LDFLAGS pmix_check_hwloc_save_LIBS])
|
||||
|
||||
AC_ARG_WITH([hwloc],
|
||||
[AC_HELP_STRING([--with-hwloc=DIR],
|
||||
@ -57,13 +57,19 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
|
||||
[Search for hwloc libraries in DIR ])])
|
||||
|
||||
pmix_hwloc_support=0
|
||||
pmix_check_hwloc_save_CPPFLAGS="$CPPFLAGS"
|
||||
pmix_check_hwloc_save_LDFLAGS="$LDFLAGS"
|
||||
pmix_check_hwloc_save_LIBS="$LIBS"
|
||||
pmix_hwloc_standard_header_location=yes
|
||||
pmix_hwloc_standard_lib_location=yes
|
||||
|
||||
AS_IF([test "$with_hwloc" = "internal" || test "$with_hwloc" = "external"],
|
||||
[with_hwloc=])
|
||||
|
||||
if test "$with_hwloc" != "no"; then
|
||||
AC_MSG_CHECKING([for hwloc in])
|
||||
if test ! -z "$with_hwloc" && test "$with_hwloc" != "yes"; then
|
||||
pmix_hwloc_dir=$with_hwloc
|
||||
pmix_hwloc_dir=$with_hwloc/include
|
||||
pmix_hwloc_standard_header_location=no
|
||||
pmix_hwloc_standard_lib_location=no
|
||||
AS_IF([test -z "$with_hwloc_libdir" || test "$with_hwloc_libdir" = "yes"],
|
||||
@ -134,6 +140,10 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
|
||||
AC_MSG_ERROR([Cannot continue])])
|
||||
fi
|
||||
|
||||
CPPFLAGS=$pmix_check_hwloc_save_CPPFLAGS
|
||||
LDFLAGS=$pmix_check_hwloc_save_LDFLAGS
|
||||
LIBS=$pmix_check_hwloc_save_LIBS
|
||||
|
||||
AC_MSG_CHECKING([will hwloc support be built])
|
||||
if test "$pmix_hwloc_support" != "1"; then
|
||||
AC_MSG_RESULT([no])
|
||||
@ -143,6 +153,12 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
|
||||
AC_MSG_RESULT([yes])
|
||||
pmix_hwloc_source=$pmix_hwloc_dir
|
||||
pmix_hwloc_support_will_build=yes
|
||||
AS_IF([test "$pmix_hwloc_standard_header_location" != "yes"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_CPPFLAGS, $pmix_hwloc_CPPFLAGS)])
|
||||
|
||||
AS_IF([test "$pmix_hwloc_standard_lib_location" != "yes"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LDFLAGS, $pmix_hwloc_LDFLAGS)])
|
||||
PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LIBS, $pmix_hwloc_LIBS)
|
||||
fi
|
||||
|
||||
# Set output variables
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2013 Los Alamos National Security, LLC. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2017-2019 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
@ -15,7 +15,7 @@
|
||||
# MCA_libev_CONFIG([action-if-found], [action-if-not-found])
|
||||
# --------------------------------------------------------------------
|
||||
AC_DEFUN([PMIX_LIBEV_CONFIG],[
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_libev_dir pmix_libev_libdir pmix_libev_standard_header_location pmix_libev_standard_lib_location])
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_libev_dir pmix_libev_libdir pmix_libev_standard_header_location pmix_libev_standard_lib_location pmix_check_libev_save_CPPFLAGS pmix_check_libev_save_LDFLAGS pmix_check_libev_save_LIBS])
|
||||
|
||||
AC_ARG_WITH([libev],
|
||||
[AC_HELP_STRING([--with-libev=DIR],
|
||||
@ -61,7 +61,7 @@ AC_DEFUN([PMIX_LIBEV_CONFIG],[
|
||||
PMIX_CHECK_PACKAGE([pmix_libev],
|
||||
[event.h],
|
||||
[ev],
|
||||
[event_base_new],
|
||||
[ev_async_send],
|
||||
[],
|
||||
[$pmix_libev_dir],
|
||||
[$pmix_libev_libdir],
|
||||
@ -72,12 +72,12 @@ AC_DEFUN([PMIX_LIBEV_CONFIG],[
|
||||
LIBS="$pmix_check_libev_save_LIBS"])
|
||||
|
||||
AS_IF([test $pmix_libev_support -eq 1],
|
||||
[LIBS="$LIBS $pmix_libev_LIBS"
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LIBS, $pmix_libev_LIBS)
|
||||
|
||||
AS_IF([test "$pmix_libev_standard_header_location" != "yes"],
|
||||
[CPPFLAGS="$CPPFLAGS $pmix_libev_CPPFLAGS"])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_CPPFLAGS, $pmix_libev_CPPFLAGS)])
|
||||
AS_IF([test "$pmix_libev_standard_lib_location" != "yes"],
|
||||
[LDFLAGS="$LDFLAGS $pmix_libev_LDFLAGS"])])
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LDFLAGS, $pmix_libev_LDFLAGS)])])
|
||||
|
||||
AC_MSG_CHECKING([will libev support be built])
|
||||
if test $pmix_libev_support -eq 1; then
|
||||
@ -88,6 +88,10 @@ AC_DEFUN([PMIX_LIBEV_CONFIG],[
|
||||
PMIX_SUMMARY_ADD([[External Packages]],[[libev]],[libev],[$pmix_libev_dir])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
# if they asked us to use it, then this is an error
|
||||
AS_IF([test -n "$with_libev" && test "$with_libev" != "no"],
|
||||
[AC_MSG_WARN([LIBEV SUPPORT REQUESTED AND NOT FOUND])
|
||||
AC_MSG_ERROR([CANNOT CONTINUE])])
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_LIBEV], [$pmix_libev_support], [Whether we are building against libev])
|
||||
|
@ -2,9 +2,10 @@
|
||||
#
|
||||
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2013 Los Alamos National Security, LLC. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2017-2019 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -55,7 +56,7 @@ AC_DEFUN([_PMIX_LIBEVENT_EMBEDDED_MODE],[
|
||||
])
|
||||
|
||||
AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_event_dir pmix_event_libdir pmix_event_defaults])
|
||||
PMIX_VAR_SCOPE_PUSH([pmix_event_dir pmix_event_libdir pmix_event_defaults pmix_check_libevent_save_CPPFLAGS pmix_check_libevent_save_LDFLAGS pmix_check_libevent_save_LIBS])
|
||||
|
||||
AC_ARG_WITH([libevent],
|
||||
[AC_HELP_STRING([--with-libevent=DIR],
|
||||
@ -68,6 +69,7 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
pmix_check_libevent_save_CPPFLAGS="$CPPFLAGS"
|
||||
pmix_check_libevent_save_LDFLAGS="$LDFLAGS"
|
||||
pmix_check_libevent_save_LIBS="$LIBS"
|
||||
pmix_event_defaults=yes
|
||||
|
||||
# get rid of the trailing slash(es)
|
||||
libevent_prefix=$(echo $with_libevent | sed -e 'sX/*$XXg')
|
||||
@ -108,14 +110,36 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
|
||||
PMIX_CHECK_PACKAGE([pmix_libevent],
|
||||
[event.h],
|
||||
[event],
|
||||
[event_core],
|
||||
[event_config_new],
|
||||
[-levent -levent_pthreads],
|
||||
[-levent_pthreads],
|
||||
[$pmix_event_dir],
|
||||
[$pmix_event_libdir],
|
||||
[pmix_libevent_support=1],
|
||||
[pmix_libevent_support=0])
|
||||
|
||||
# Check to see if the above check failed because it conflicted with LSF's libevent.so
|
||||
# This can happen if LSF's library is in the LDFLAGS envar or default search
|
||||
# path. The 'event_getcode4name' function is only defined in LSF's libevent.so and not
|
||||
# in Libevent's libevent.so
|
||||
if test $pmix_libevent_support -eq 0; then
|
||||
AC_CHECK_LIB([event], [event_getcode4name],
|
||||
[AC_MSG_WARN([===================================================================])
|
||||
AC_MSG_WARN([Possible conflicting libevent.so libraries detected on the system.])
|
||||
AC_MSG_WARN([])
|
||||
AC_MSG_WARN([LSF provides a libevent.so that is not from Libevent in its])
|
||||
AC_MSG_WARN([library path. It is possible that you have installed Libevent])
|
||||
AC_MSG_WARN([on the system, but the linker is picking up the wrong version.])
|
||||
AC_MSG_WARN([])
|
||||
AC_MSG_WARN([You will need to address this linker path issue. One way to do so is])
|
||||
AC_MSG_WARN([to make sure the libevent system library path occurs before the])
|
||||
AC_MSG_WARN([LSF library path.])
|
||||
AC_MSG_WARN([===================================================================])
|
||||
])
|
||||
fi
|
||||
|
||||
# need to add resulting flags to global ones so we can
|
||||
# test for thread support
|
||||
AS_IF([test "$pmix_event_defaults" = "no"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libevent_CPPFLAGS)
|
||||
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)])
|
||||
@ -125,7 +149,7 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
# Ensure that this libevent has the symbol
|
||||
# "evthread_set_lock_callbacks", which will only exist if
|
||||
# libevent was configured with thread support.
|
||||
AC_CHECK_LIB([event], [evthread_set_lock_callbacks],
|
||||
AC_CHECK_LIB([event_core], [evthread_set_lock_callbacks],
|
||||
[],
|
||||
[AC_MSG_WARN([External libevent does not have thread support])
|
||||
AC_MSG_WARN([PMIx requires libevent to be compiled with])
|
||||
@ -156,9 +180,9 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
|
||||
[Location of event.h])
|
||||
pmix_libevent_source=$pmix_event_dir
|
||||
AS_IF([test "$pmix_event_defaults" = "no"],
|
||||
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libevent_CPPFLAGS)
|
||||
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)])
|
||||
PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_libevent_LIBS)
|
||||
[PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_CPPFLAGS, $pmix_libevent_CPPFLAGS)
|
||||
PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LDFLAGS, $pmix_libevent_LDFLAGS)])
|
||||
PMIX_FLAGS_APPEND_UNIQ(PMIX_FINAL_LIBS, $pmix_libevent_LIBS)
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
91
opal/mca/pmix/pmix3x/pmix/config/pmix_setup_man_pages.m4
Обычный файл
91
opal/mca/pmix/pmix3x/pmix/config/pmix_setup_man_pages.m4
Обычный файл
@ -0,0 +1,91 @@
|
||||
dnl -*- shell-script -*-
|
||||
dnl
|
||||
dnl Copyright (c) 2020 Cisco Systems, Inc. All rights reserved.
|
||||
dnl
|
||||
dnl Copyright (c) 2020 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
dnl
|
||||
dnl $HEADER$
|
||||
dnl
|
||||
|
||||
dnl
|
||||
dnl Just in case someone looks for it here someday, here is a
|
||||
dnl conveninent reference for what Markdown pandoc supports:
|
||||
dnl
|
||||
dnl https://rmarkdown.rstudio.com/authoring_pandoc_markdown.html
|
||||
dnl
|
||||
|
||||
AC_DEFUN([PMIX_SETUP_MAN_PAGES],[
|
||||
AC_ARG_ENABLE(man-pages,
|
||||
[AC_HELP_STRING([--disable-man-pages],
|
||||
[Do not generate/install man pages (default: enabled)])])
|
||||
|
||||
PANDOC=
|
||||
PMIX_ENABLE_MAN_PAGES=0
|
||||
AC_MSG_CHECKING([if want man pages])
|
||||
AS_IF([test -z "$enable_man_pages" || test "$enable_man_pages" = "yes"],
|
||||
[AC_MSG_RESULT([yes])
|
||||
PMIX_ENABLE_MAN_PAGES=1
|
||||
_PMIX_SETUP_PANDOC],
|
||||
[AC_MSG_RESULT([no])])
|
||||
|
||||
AC_SUBST(PANDOC)
|
||||
AM_CONDITIONAL([PMIX_ENABLE_MAN_PAGES], [test $PMIX_ENABLE_MAN_PAGES -eq 1])
|
||||
AC_DEFINE_UNQUOTED([PMIX_ENABLE_MAN_PAGES], [$PMIX_ENABLE_MAN_PAGES],
|
||||
[Whether or not we will build manpages])
|
||||
|
||||
AS_IF([test $PMIX_ENABLE_MAN_PAGES -eq 1],
|
||||
[PMIX_SUMMARY_ADD([[Options]],[[Manpages built]], [pmix_manpages], [yes])],
|
||||
[PMIX_SUMMARY_ADD([[Options]],[[Manpages built]], [pmix_manpages], [yes])])
|
||||
|
||||
])
|
||||
|
||||
dnl Back-end pandoc setup
|
||||
AC_DEFUN([_PMIX_SETUP_PANDOC],[
|
||||
PMIX_VAR_SCOPE_PUSH([min_major_version min_minor_version pandoc_version pandoc_major pandoc_minor])
|
||||
|
||||
# If we need to generate man pages, we need pandoc >v1.12.
|
||||
AC_PATH_PROG([PANDOC], [pandoc])
|
||||
|
||||
# If we found Pandoc, check its version. We need >=v1.12.
|
||||
# To be clear: I know that v1.12 works, and I know that v1.9 does not
|
||||
# work. I did not test the versions in between to know exactly what
|
||||
# the lowest version is that works. Someone is free to update this
|
||||
# check someday to be more accurate if they wish.
|
||||
min_major_version=1
|
||||
min_minor_version=12
|
||||
AS_IF([test -n "$PANDOC"],
|
||||
[pandoc_version=`pandoc --version | head -n 1 | awk '{ print $[2] }'`
|
||||
pandoc_major=`echo $pandoc_version | cut -d\. -f1`
|
||||
pandoc_minor=`echo $pandoc_version | cut -d\. -f2`
|
||||
AC_MSG_CHECKING([pandoc version])
|
||||
AC_MSG_RESULT([major: $pandoc_major, minor: $pandoc_minor])
|
||||
|
||||
AC_MSG_CHECKING([if pandoc version is >=v$min_major_version.$min_minor_version])
|
||||
AS_IF([test $pandoc_major -lt $min_major_version], [PANDOC=])
|
||||
AS_IF([test $pandoc_major -eq $min_major_version && test $pandoc_minor -lt $min_minor_version],
|
||||
[PANDOC=])
|
||||
AS_IF([test -n "$PANDOC"],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])])
|
||||
])
|
||||
|
||||
AS_IF([test -z "$PANDOC" || test -n "`echo $PANDOC | $GREP missing`"],
|
||||
[AS_IF([test "$PMIX_DEVEL" = "1" && test -z "$enable_man_pages"],
|
||||
[AC_MSG_CHECKING([man pages will be built])
|
||||
AC_MSG_RESULT([no - adequate pandoc installation not found])
|
||||
PANDOC=
|
||||
PMIX_ENABLE_MAN_PAGES=0],
|
||||
[AS_IF([test ! -f "$srcdir/tools/wrapper/pmix_wrapper.1"],
|
||||
[AC_MSG_WARN([*** Could not find a suitable pandoc on your system.])
|
||||
AC_MSG_WARN([*** You need pandoc >=$min_major_version.$min_minor_version to build OpenPMIx man pages.])
|
||||
AC_MSG_WARN([*** See pandoc.org.])
|
||||
AC_MSG_WARN([*** NOTE: If you are building from a tarball downloaded from the OpenPMIx GitHub repository, you do not need Pandoc])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
])])
|
||||
])
|
||||
|
||||
PMIX_VAR_SCOPE_POP
|
||||
])
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2013 Los Alamos National Security, LLC. All rights reserved.
|
||||
# Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
|
@ -5,7 +5,7 @@ dnl reserved.
|
||||
dnl Copyright (c) 2016-2018 Cisco Systems, Inc. All rights reserved
|
||||
dnl Copyright (c) 2016 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
dnl $COPYRIGHT$
|
||||
dnl
|
||||
dnl Additional copyrights may follow
|
||||
|
@ -10,7 +10,7 @@
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2006-2020 Cisco Systems, Inc. All rights reserved
|
||||
# Copyright (c) 2006-2008 Sun Microsystems, Inc. All rights reserved.
|
||||
# Copyright (c) 2006-2017 Los Alamos National Security, LLC. All rights
|
||||
# reserved.
|
||||
@ -19,7 +19,7 @@
|
||||
# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013 Mellanox Technologies, Inc.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
# Copyright (c) 2016-2018 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
@ -44,7 +44,7 @@ m4_include([config/autogen_found_items.m4])
|
||||
|
||||
AC_INIT([pmix],
|
||||
[m4_normalize(esyscmd([config/pmix_get_version.sh VERSION --tarball]))],
|
||||
[http://pmix.github.io/master], [pmix])
|
||||
[https://github.com/pmix/pmix/issues], [pmix])
|
||||
AC_PREREQ(2.69)
|
||||
AC_CONFIG_AUX_DIR(./config)
|
||||
# Note that this directory must *exactly* match what was specified via
|
||||
@ -94,7 +94,7 @@ pmix_show_title "Configuring PMIx"
|
||||
AC_CANONICAL_TARGET
|
||||
|
||||
# Init automake
|
||||
AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects no-define 1.13.4 -Wall -Werror])
|
||||
AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects no-define 1.13.4])
|
||||
|
||||
# SILENT_RULES is new in AM 1.11, but we require 1.13.4 or higher via
|
||||
# autogen. Limited testing shows that calling SILENT_RULES directly
|
||||
@ -143,11 +143,11 @@ AH_TOP([/* -*- c -*-
|
||||
#ifndef PMIX_CONFIG_H
|
||||
#define PMIX_CONFIG_H
|
||||
|
||||
#include <src/include/pmix_config_top.h>
|
||||
#include "src/include/pmix_config_top.h"
|
||||
|
||||
])
|
||||
AH_BOTTOM([
|
||||
#include <src/include/pmix_config_bottom.h>
|
||||
#include "src/include/pmix_config_bottom.h"
|
||||
#endif /* PMIX_CONFIG_H */
|
||||
])
|
||||
|
||||
@ -231,6 +231,7 @@ AS_IF([test ! -z "$PMIX_CFLAGS_cache"], [CFLAGS="$CFLAGS $PMIX_CFLAGS_cache"])
|
||||
#fi
|
||||
|
||||
# Cleanup duplicate flags
|
||||
PMIX_FLAGS_UNIQ(CFLAGS)
|
||||
PMIX_FLAGS_UNIQ(CPPFLAGS)
|
||||
PMIX_FLAGS_UNIQ(LDFLAGS)
|
||||
PMIX_FLAGS_UNIQ(LIBS)
|
||||
@ -257,6 +258,43 @@ AC_MSG_RESULT([$LDFLAGS])
|
||||
AC_MSG_CHECKING([final LIBS])
|
||||
AC_MSG_RESULT([$LIBS])
|
||||
|
||||
####################################################################
|
||||
# Setup variables for pkg-config file (maint/pmix.pc.in)
|
||||
####################################################################
|
||||
|
||||
#
|
||||
# Dependencies that themselves have a pkg-config file available.
|
||||
#
|
||||
PC_REQUIRES=""
|
||||
AS_IF([test "$pmix_hwloc_support_will_build" = "yes"],
|
||||
[PC_REQUIRES="$PC_REQUIRES hwloc"])
|
||||
AS_IF([test $pmix_libevent_support -eq 1],
|
||||
[PC_REQUIRES="$PC_REQUIRES libevent"])
|
||||
AS_IF([test "$pmix_zlib_support" = "1"],
|
||||
[PC_REQUIRES="$PC_REQUIRES zlib"])
|
||||
AC_SUBST([PC_REQUIRES], ["$PC_REQUIRES"])
|
||||
|
||||
#
|
||||
# Dependencies that don't have a pkg-config file available.
|
||||
# In this case we need to manually add -L<path> and -l<lib>
|
||||
# to the PC_PRIVATE_LIBS variable.
|
||||
#
|
||||
PC_PRIVATE_LIBS=""
|
||||
AS_IF([test $pmix_libev_support -eq 1],
|
||||
[PC_PRIVATE_LIBS="$PC_PRIVATE_LIBS $pmix_libev_LDFLAGS $pmix_libev_LIBS"])
|
||||
AC_SUBST([PC_PRIVATE_LIBS], ["$PC_PRIVATE_LIBS"])
|
||||
|
||||
####################################################################
|
||||
# -Werror for CI scripts
|
||||
####################################################################
|
||||
|
||||
AC_ARG_ENABLE(werror,
|
||||
AC_HELP_STRING([--enable-werror],
|
||||
[Treat compiler warnings as errors]),
|
||||
[
|
||||
CFLAGS="$CFLAGS -Werror"
|
||||
])
|
||||
|
||||
####################################################################
|
||||
# Version information
|
||||
####################################################################
|
||||
@ -275,7 +313,8 @@ AC_SUBST([libmca_common_dstore_so_version])
|
||||
AC_CONFIG_FILES(pmix_config_prefix[contrib/Makefile]
|
||||
pmix_config_prefix[examples/Makefile]
|
||||
pmix_config_prefix[test/Makefile]
|
||||
pmix_config_prefix[test/simple/Makefile])
|
||||
pmix_config_prefix[test/simple/Makefile]
|
||||
pmix_config_prefix[maint/pmix.pc])
|
||||
|
||||
pmix_show_title "Configuration complete"
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
# Copyright (c) 2010-2011 Oak Ridge National Labs. All rights reserved.
|
||||
# Copyright (c) 2013-2016 Los Alamos National Security, Inc. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2013-2016 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -25,12 +25,13 @@
|
||||
EXTRA_DIST = \
|
||||
make_dist_tarball \
|
||||
buildrpm.sh \
|
||||
platform/optimized \
|
||||
pmix_jenkins.sh \
|
||||
pmix-release.sh \
|
||||
pmix.spec \
|
||||
update-my-copyright.pl \
|
||||
whitespace-purge.sh
|
||||
pmix_jenkins.sh \
|
||||
pmix-release.sh \
|
||||
pmix.spec \
|
||||
update-my-copyright.pl \
|
||||
whitespace-purge.sh \
|
||||
make_manpage.pl \
|
||||
platform/optimized
|
||||
|
||||
include perf_tools/Makefile.include
|
||||
|
||||
|
@ -264,7 +264,7 @@ make_tarball() {
|
||||
#
|
||||
echo "*** Running autogen $autogen_args..."
|
||||
rm -f success
|
||||
(./autogen.sh $autogen_args 2>&1 && touch success) | tee auto.out
|
||||
(./autogen.pl $autogen_args 2>&1 && touch success) | tee auto.out
|
||||
if test ! -f success; then
|
||||
echo "Autogen failed. Aborting"
|
||||
exit 1
|
||||
|
56
opal/mca/pmix/pmix3x/pmix/contrib/make_manpage.pl
Исполняемый файл
56
opal/mca/pmix/pmix3x/pmix/contrib/make_manpage.pl
Исполняемый файл
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2016-2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Subroutine to generate a bunch of Fortran declarations and symbols
|
||||
#
|
||||
|
||||
use strict;
|
||||
|
||||
use Getopt::Long;
|
||||
|
||||
my $package_name;
|
||||
my $package_version;
|
||||
my $pmix_date;
|
||||
my $input;
|
||||
my $output;
|
||||
my $help_arg = 0;
|
||||
|
||||
&Getopt::Long::Configure("bundling");
|
||||
my $ok = Getopt::Long::GetOptions("package-name=s" => \$package_name,
|
||||
"package-version=s" => \$package_version,
|
||||
"pmix-date=s" => \$pmix_date,
|
||||
"input=s" => \$input,
|
||||
"output=s" => \$output);
|
||||
|
||||
if ($help_arg || !$ok ||
|
||||
!defined($input) ||
|
||||
!defined($output) ||
|
||||
!defined($package_name) ||
|
||||
!defined($package_version) ||
|
||||
!defined($pmix_date)) {
|
||||
print "Usage: $0 --package-name=<package name> --package-version=<package version> --pmix-date=<pmix date> --input=<input file> --output=<output file>\n";
|
||||
exit(1 - $ok);
|
||||
}
|
||||
|
||||
open(FILE, $input) ||
|
||||
die "Can't open $input";
|
||||
my $file;
|
||||
$file .= $_
|
||||
while(<FILE>);
|
||||
close(FILE);
|
||||
|
||||
$file =~ s/#PACKAGE_NAME#/$package_name/g;
|
||||
$file =~ s/#PACKAGE_VERSION#/$package_version/g;
|
||||
$file =~ s/#PMIX_DATE#/$pmix_date/g;
|
||||
|
||||
open(FILE, ">$output") ||
|
||||
die "Can't open $output";
|
||||
print FILE $file;
|
||||
close(FILE);
|
||||
|
||||
exit(0);
|
@ -192,7 +192,7 @@
|
||||
|
||||
Summary: An extended/exascale implementation of PMI
|
||||
Name: %{?_name:%{_name}}%{!?_name:pmix}
|
||||
Version: 3.1.5
|
||||
Version: 3.2.1rc1
|
||||
Release: 1%{?dist}
|
||||
License: BSD
|
||||
Group: Development/Libraries
|
||||
@ -493,7 +493,7 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
|
||||
%if !%{sysconfdir_in_prefix}
|
||||
%{_sysconfdir}/*
|
||||
%endif
|
||||
# If %{install_in_opt}, then we're installing PMIx to
|
||||
# If %%{install_in_opt}, then we're installing PMIx to
|
||||
# /opt/pmix<version>. But be sure to also explicitly mention
|
||||
# /opt/pmix so that it can be removed by RPM when everything under
|
||||
# there is also removed.
|
||||
|
14
opal/mca/pmix/pmix3x/pmix/contrib/pmix_jenkins.sh
Исполняемый файл → Обычный файл
14
opal/mca/pmix/pmix3x/pmix/contrib/pmix_jenkins.sh
Исполняемый файл → Обычный файл
@ -195,19 +195,13 @@ if [ "$jenkins_test_build" = "yes" ]; then
|
||||
tar zxf libevent-2.0.22-stable.tar.gz
|
||||
cd libevent-2.0.22-stable
|
||||
libevent_dir=$PWD/install
|
||||
./autogen.sh && ./configure --prefix=$libevent_dir && make && make install
|
||||
./autogen.pl && ./configure --prefix=$libevent_dir && make && make install
|
||||
|
||||
cd $WORKSPACE
|
||||
if [ -x "autogen.sh" ]; then
|
||||
autogen_script=./autogen.sh
|
||||
else
|
||||
autogen_script=./autogen.pl
|
||||
fi
|
||||
|
||||
configure_args="--with-libevent=$libevent_dir"
|
||||
|
||||
# build pmix
|
||||
$autogen_script
|
||||
./autogen.pl
|
||||
echo ./configure --prefix=$pmix_dir $configure_args | bash -xeE
|
||||
make $make_opt install
|
||||
jenkins_build_passed=1
|
||||
@ -270,7 +264,7 @@ if [ "$jenkins_test_src_rpm" = "yes" ]; then
|
||||
|
||||
# check distclean
|
||||
make $make_opt distclean
|
||||
$autogen_script
|
||||
./autogen.pl
|
||||
echo ./configure --prefix=$pmix_dir $configure_args | bash -xeE || exit 11
|
||||
|
||||
if [ -x /usr/bin/dpkg-buildpackage ]; then
|
||||
@ -316,7 +310,7 @@ if [ -n "$JENKINS_RUN_TESTS" -a "$JENKINS_RUN_TESTS" -ne "0" ]; then
|
||||
rm -rf $run_tap
|
||||
|
||||
# build pmix
|
||||
$autogen_script
|
||||
./autogen.pl
|
||||
echo ./configure --prefix=$pmix_dir $configure_args --disable-visibility | bash -xeE
|
||||
make $make_opt install
|
||||
|
||||
|
@ -9,8 +9,8 @@
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2008-2020 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2019-2020 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -18,39 +18,39 @@
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
pmix_config_files = pmix-mca-params.conf
|
||||
pmix_file_from_platform = no
|
||||
pmix_config_files = @PMIX_DEFAULT_MCA_PARAM_CONF@
|
||||
pmix_file_from_platform = @PMIX_PARAM_FROM_PLATFORM@
|
||||
|
||||
EXTRA_DIST = $(pmix_config_files)
|
||||
|
||||
# Steal a little trickery from a generated Makefile to only install
|
||||
# files if they do not already exist at the target. Be sure to read
|
||||
# thread starting here
|
||||
# (http://www.open-mpi.org/community/lists/devel/2008/06/4080.php) for
|
||||
# (https://www.open-mpi.org/community/lists/devel/2008/06/4080.php) for
|
||||
# details why the mkdir is in install-data-local.
|
||||
|
||||
install-data-local:
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)
|
||||
@ p="$(pmix_config_files)"; \
|
||||
if test "$(pmix_file_from_platform)" = "yes"; then \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf; \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf; \
|
||||
else \
|
||||
for file in $$p; do \
|
||||
if test -f $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf; then \
|
||||
echo "******************************* WARNING ************************************"; \
|
||||
echo "*** Not installing new $$file over existing file in:"; \
|
||||
echo "*** $(DESTDIR)$(sysconfdir)/$$file"; \
|
||||
echo "******************************* WARNING ************************************"; \
|
||||
else \
|
||||
if test -f "$$file"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$file | sed -e 's|^.*/||'`"; \
|
||||
echo " $(INSTALL_DATA) $$d$$file $(DESTDIR)$(sysconfdir)/$$f"; \
|
||||
$(INSTALL_DATA) $$d$$file $(DESTDIR)$(sysconfdir)/$$f; \
|
||||
fi; \
|
||||
done \
|
||||
fi;
|
||||
if test -f $(DESTDIR)$(sysconfdir)/pmix-mca-params.conf; then \
|
||||
echo "******************************* WARNING ************************************"; \
|
||||
echo "*** Not installing new $$file over existing file in:"; \
|
||||
echo "*** $(DESTDIR)$(sysconfdir)/$$file"; \
|
||||
echo "******************************* WARNING ************************************"; \
|
||||
else \
|
||||
if test -f "$$file"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$file | sed -e 's|^.*/||'`"; \
|
||||
echo " $(INSTALL_DATA) $$d$$file $(DESTDIR)$(sysconfdir)/$$f"; \
|
||||
$(INSTALL_DATA) $$d$$file $(DESTDIR)$(sysconfdir)/$$f; \
|
||||
fi; \
|
||||
done \
|
||||
fi;
|
||||
|
||||
|
||||
# Only remove if exactly the same as what in our tree
|
||||
@ -61,7 +61,7 @@ uninstall-local:
|
||||
@ p="$(pmix_config_files)"; \
|
||||
for file in $$p; do \
|
||||
if test -f "$(DESTDIR)$(sysconfdir)/$$file"; then \
|
||||
if test -f "$$file"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if test -f "$$file"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if diff "$(DESTDIR)$(sysconfdir)/$$file" "$$d$$file" > /dev/null 2>&1 ; then \
|
||||
echo "rm -f $(DESTDIR)$(sysconfdir)/$$file" ; \
|
||||
rm -f "$(DESTDIR)$(sysconfdir)/$$file" ; \
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -153,8 +154,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
pmix_proc_t myproc;
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs;
|
||||
pmix_info_t *info;
|
||||
@ -175,8 +175,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* get our universe size */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get universe size failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -124,7 +125,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
pmix_status_t rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
char *tmp;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs, n;
|
||||
@ -168,8 +169,7 @@ int main(int argc, char **argv)
|
||||
* wildcard rank as it doesn't relate to a specific rank. Setup
|
||||
* a name to retrieve such values */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
|
||||
/* check to see if we have been instructed to wait for a debugger
|
||||
* to attach to us. We won't get both a stop-in-init AND a
|
||||
@ -197,6 +197,8 @@ int main(int argc, char **argv)
|
||||
/* wait for debugger release */
|
||||
DEBUG_WAIT_THREAD(&myrel.lock);
|
||||
DEBUG_DESTRUCT_MYREL(&myrel);
|
||||
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
|
||||
/* get our universe size */
|
||||
@ -205,6 +207,8 @@ int main(int argc, char **argv)
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "Client %s:%d universe size %d\n", myproc.nspace, myproc.rank, val->data.uint32);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
|
||||
/* get the number of procs in our job - univ size is the total number of allocated
|
||||
* slots, not the number of procs in the job */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
|
||||
@ -219,6 +223,7 @@ int main(int argc, char **argv)
|
||||
if (0 > asprintf(&tmp, "%s-%d-internal", myproc.nspace, myproc.rank)) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
value.type = PMIX_UINT32;
|
||||
value.data.uint32 = 1234;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Store_internal(&myproc, tmp, &value))) {
|
||||
@ -277,6 +282,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&myproc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, myproc.rank, tmp, rc);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_UINT64 != val->type) {
|
||||
@ -299,6 +305,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&myproc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, myproc.rank, tmp, rc);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_STRING != val->type) {
|
||||
|
@ -13,7 +13,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -116,8 +116,7 @@ int main(int argc, char **argv)
|
||||
* wildcard rank as it doesn't relate to a specific rank. Setup
|
||||
* a name to retrieve such values */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
|
||||
/* get our job size */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
|
||||
|
@ -41,7 +41,6 @@ typedef struct {
|
||||
} myquery_data_t;
|
||||
|
||||
|
||||
static volatile bool waiting_for_debugger = true;
|
||||
static pmix_proc_t myproc;
|
||||
|
||||
/* this is a callback function for the PMIx_Query
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -23,8 +24,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "../include/pmix.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -38,13 +39,13 @@ int main(int argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
char *tmp;
|
||||
pmix_proc_t proc;
|
||||
uint32_t n, k, nlocal;
|
||||
bool local, all_local;
|
||||
bool local, all_local = false;
|
||||
char **peers;
|
||||
pmix_rank_t *locals;
|
||||
pmix_rank_t *locals = NULL;
|
||||
uint8_t j;
|
||||
|
||||
/* init us */
|
||||
@ -55,8 +56,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
|
||||
|
||||
/* get our job size */
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get job size failed: %s\n",
|
||||
myproc.nspace, myproc.rank, PMIx_Error_string(rc));
|
||||
@ -146,36 +146,54 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
if (local) {
|
||||
(void)asprintf(&tmp, "%s-%d-local", myproc.nspace, n);
|
||||
if( 0 > asprintf(&tmp, "%s-%d-local", myproc.nspace, n)) {
|
||||
exit(1);
|
||||
}
|
||||
proc.rank = n;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_UINT64 != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (1234 != val->data.uint64) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %d\n", myproc.nspace, myproc.rank, tmp, (int)val->data.uint64);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Local value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
} else {
|
||||
(void)asprintf(&tmp, "%s-%d-remote", myproc.nspace, n);
|
||||
if( 0 > asprintf(&tmp, "%s-%d-remote", myproc.nspace, n)) {
|
||||
exit(1);
|
||||
}
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (PMIX_STRING != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
if (0 != strcmp(val->data.string, "1234")) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %s\n", myproc.nspace, myproc.rank, tmp, val->data.string);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Remote value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
free(tmp);
|
||||
}
|
||||
/* if this isn't us, then get the ghex key */
|
||||
if (n != myproc.rank) {
|
||||
@ -185,13 +203,16 @@ int main(int argc, char **argv)
|
||||
}
|
||||
if (PMIX_BYTE_OBJECT != val->type) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong type: %d\n", myproc.nspace, myproc.rank, val->type);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
goto done;
|
||||
}
|
||||
if (128 != val->data.bo.size) {
|
||||
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong size: %d\n", myproc.nspace, myproc.rank, (int)val->data.bo.size);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
goto done;
|
||||
}
|
||||
fprintf(stderr, "%s:%d Ghex for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
|
||||
PMIX_VALUE_RELEASE(val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,10 +13,11 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -42,8 +43,7 @@ static pmix_proc_t myproc;
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs;
|
||||
char nsp2[PMIX_MAX_NSLEN+1];
|
||||
@ -66,8 +66,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
|
||||
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
|
||||
/* get our job size */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
|
||||
@ -79,8 +78,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Client %s:%d job size %d\n", myproc.nspace, myproc.rank, nprocs);
|
||||
|
||||
/* call fence to sync */
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
@ -111,8 +109,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* get their universe size */
|
||||
val = NULL;
|
||||
(void)strncpy(proc.nspace, nsp2, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, nsp2, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val)) ||
|
||||
NULL == val) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get job size failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
@ -124,7 +121,6 @@ int main(int argc, char **argv)
|
||||
|
||||
/* get a proc-specific value */
|
||||
val = NULL;
|
||||
(void)strncpy(proc.nspace, nsp2, PMIX_MAX_NSLEN);
|
||||
proc.rank = 1;
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_LOCAL_RANK, NULL, 0, &val)) ||
|
||||
NULL == val) {
|
||||
@ -138,8 +134,7 @@ int main(int argc, char **argv)
|
||||
|
||||
done:
|
||||
/* call fence to sync */
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
|
@ -13,8 +13,11 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 Triad National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -45,7 +48,7 @@ static void notification_fn(size_t evhdlr_registration_id,
|
||||
{
|
||||
myrel_t *lock;
|
||||
bool found;
|
||||
int exit_code;
|
||||
int exit_code = 0;
|
||||
size_t n;
|
||||
pmix_proc_t *affected = NULL;
|
||||
|
||||
@ -109,8 +112,7 @@ static void evhandler_reg_callbk(pmix_status_t status,
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs;
|
||||
pmix_info_t *info;
|
||||
@ -126,8 +128,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
|
||||
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
|
||||
/* get our universe size */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
|
||||
@ -161,8 +162,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* call fence to sync */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -95,8 +96,7 @@ static void infocbfunc(pmix_status_t status,
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
pmix_status_t rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs, n;
|
||||
pmix_info_t *info, *iptr;
|
||||
@ -131,8 +131,7 @@ int main(int argc, char **argv)
|
||||
* wildcard rank as it doesn't relate to a specific rank. Setup
|
||||
* a name to retrieve such values */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
|
||||
/* get our universe size */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -35,8 +36,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
pmix_proc_t myproc;
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs;
|
||||
pmix_info_t *info;
|
||||
@ -51,8 +51,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* get our universe size */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get universe size failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
|
@ -13,8 +13,9 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -35,8 +36,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
pmix_proc_t myproc;
|
||||
int rc;
|
||||
pmix_value_t value;
|
||||
pmix_value_t *val = &value;
|
||||
pmix_value_t *val = NULL;
|
||||
pmix_proc_t proc;
|
||||
uint32_t nprocs;
|
||||
pmix_info_t *info;
|
||||
@ -52,8 +52,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* get our universe size */
|
||||
PMIX_PROC_CONSTRUCT(&proc);
|
||||
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
PMIX_LOAD_PROCID(&proc, myproc.nspace, PMIX_RANK_WILDCARD);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
|
||||
fprintf(stderr, "Client ns %s rank %d: PMIx_Get universe size failed: %d\n", myproc.nspace, myproc.rank, rc);
|
||||
goto done;
|
||||
|
@ -13,7 +13,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
@ -25,10 +25,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix_server.h>
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_globals.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "../include/pmix_server.h"
|
||||
#include "src/include/types.h"
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -42,8 +42,6 @@
|
||||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include "src/class/pmix_list.h"
|
||||
#include "src/util/pmix_environ.h"
|
||||
#include "src/util/output.h"
|
||||
@ -266,9 +264,9 @@ int main(int argc, char **argv)
|
||||
|
||||
/* setup to see sigchld on the forked tests */
|
||||
PMIX_CONSTRUCT(&children, pmix_list_t);
|
||||
event_assign(&handler, pmix_globals.evbase, SIGCHLD,
|
||||
EV_SIGNAL|EV_PERSIST,wait_signal_callback, &handler);
|
||||
event_add(&handler, NULL);
|
||||
pmix_event_assign(&handler, pmix_globals.evbase, SIGCHLD,
|
||||
EV_SIGNAL|EV_PERSIST,wait_signal_callback, &handler);
|
||||
pmix_event_add(&handler, NULL);
|
||||
|
||||
/* see if we were passed the number of procs to run or
|
||||
* the executable to use */
|
||||
@ -424,7 +422,7 @@ static void set_namespace(int nprocs, char *ranks, char *nspace,
|
||||
char hostname[PMIX_MAXHOSTNAMELEN];
|
||||
pmix_status_t rc;
|
||||
myxfer_t myxfer;
|
||||
size_t i;
|
||||
size_t i = 0;
|
||||
|
||||
gethostname(hostname, sizeof(hostname));
|
||||
|
||||
@ -486,6 +484,7 @@ static void set_namespace(int nprocs, char *ranks, char *nspace,
|
||||
|
||||
PMIx_server_register_nspace(nspace, nprocs, x->info, x->ninfo,
|
||||
cbfunc, x);
|
||||
|
||||
}
|
||||
|
||||
static void errhandler(size_t evhdlr_registration_id,
|
||||
@ -871,7 +870,7 @@ static void wait_signal_callback(int fd, short event, void *arg)
|
||||
pid_t pid;
|
||||
wait_tracker_t *t2;
|
||||
|
||||
if (SIGCHLD != event_get_signal(sig)) {
|
||||
if (SIGCHLD != pmix_event_get_signal(sig)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
#
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
@ -15,7 +15,7 @@ include_HEADERS = \
|
||||
pmix.h \
|
||||
pmix_server.h \
|
||||
pmix_tool.h \
|
||||
pmix_extend.h
|
||||
pmix_extend.h
|
||||
|
||||
if WANT_PMI_BACKWARD
|
||||
include_HEADERS += \
|
||||
@ -25,7 +25,6 @@ endif
|
||||
|
||||
nodist_include_HEADERS = \
|
||||
pmix_common.h \
|
||||
pmix_version.h \
|
||||
pmix_rename.h
|
||||
pmix_version.h
|
||||
|
||||
endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
*
|
||||
@ -394,7 +394,8 @@ PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t ranges[], size_t
|
||||
* for releasing the array when done with it - the PMIX_PROC_FREE macro is
|
||||
* provided for this purpose.
|
||||
*/
|
||||
PMIX_EXPORT pmix_status_t PMIx_Resolve_peers(const char *nodename, const pmix_nspace_t nspace,
|
||||
PMIX_EXPORT pmix_status_t PMIx_Resolve_peers(const char *nodename,
|
||||
const pmix_nspace_t nspace,
|
||||
pmix_proc_t **procs, size_t *nprocs);
|
||||
|
||||
|
||||
@ -575,7 +576,6 @@ PMIX_EXPORT pmix_status_t PMIx_Process_monitor_nb(const pmix_info_t *monitor, pm
|
||||
PMIX_EXPORT pmix_status_t PMIx_Get_credential(const pmix_info_t info[], size_t ninfo,
|
||||
pmix_credential_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Request validation of a credential by the PMIx server/SMS
|
||||
* Input values include:
|
||||
*
|
||||
@ -696,7 +696,7 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Push data collected locally (typically from stdin) to
|
||||
* target recipients.
|
||||
* stdin of target recipients.
|
||||
*
|
||||
* targets - array of process identifiers to which the data is to be delivered. Note
|
||||
* that a WILDCARD rank indicates that all procs in the given nspace are
|
||||
@ -714,7 +714,7 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
*
|
||||
* bo - pointer to a byte object containing the stdin data
|
||||
*
|
||||
* cbfunc - callback function when the data has been forwarded
|
||||
* cbfunc - callback function when the data has been forwarded.
|
||||
*
|
||||
* cbdata - object to be returned in cbfunc
|
||||
*/
|
||||
@ -723,6 +723,10 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntar
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/****************************************/
|
||||
/**** COMMON SUPPORT FUNCTIONS ****/
|
||||
/* Found in pmix_common.h.in in the v3.x and earlier series */
|
||||
/****************************************/
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2018 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2016-2018 Mellanox Technologies, Inc.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016-2020 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2016-2019 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -71,7 +71,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
#include <pmix_rename.h>
|
||||
#include <pmix_version.h>
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
@ -139,17 +138,20 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_ATTR_UNDEF NULL
|
||||
|
||||
/* initialization attributes */
|
||||
#define PMIX_EVENT_BASE "pmix.evbase" // (struct event_base *) pointer to libevent event_base to use in place
|
||||
// of the internal progress thread
|
||||
#define PMIX_SERVER_TOOL_SUPPORT "pmix.srvr.tool" // (bool) The host RM wants to declare itself as willing to
|
||||
// accept tool connection requests
|
||||
#define PMIX_SERVER_REMOTE_CONNECTIONS "pmix.srvr.remote" // (bool) Allow connections from remote tools (do not use loopback device)
|
||||
#define PMIX_SERVER_SYSTEM_SUPPORT "pmix.srvr.sys" // (bool) The host RM wants to declare itself as being the local
|
||||
// system server for PMIx connection requests
|
||||
#define PMIX_EVENT_BASE "pmix.evbase" // (struct event_base *) pointer to libevent event_base
|
||||
// to use in place of the internal progress thread
|
||||
#define PMIX_SERVER_TOOL_SUPPORT "pmix.srvr.tool" // (bool) The host RM wants to declare itself as willing
|
||||
// to accept tool connection requests
|
||||
#define PMIX_SERVER_REMOTE_CONNECTIONS "pmix.srvr.remote" // (bool) Allow connections from remote tools (do not use
|
||||
// loopback device)
|
||||
#define PMIX_SERVER_SYSTEM_SUPPORT "pmix.srvr.sys" // (bool) The host RM wants to declare itself as being
|
||||
// the local system server for PMIx connection
|
||||
// requests
|
||||
#define PMIX_SERVER_TMPDIR "pmix.srvr.tmpdir" // (char*) temp directory where PMIx server will place
|
||||
// client rendezvous points and contact info
|
||||
#define PMIX_SYSTEM_TMPDIR "pmix.sys.tmpdir" // (char*) temp directory for this system, where PMIx
|
||||
// server will place tool rendezvous points and contact info
|
||||
// server will place tool rendezvous points and
|
||||
// contact info
|
||||
#define PMIX_SERVER_ENABLE_MONITORING "pmix.srv.monitor" // (bool) Enable PMIx internal monitoring by server
|
||||
#define PMIX_SERVER_NSPACE "pmix.srv.nspace" // (char*) Name of the nspace to use for this server
|
||||
#define PMIX_SERVER_RANK "pmix.srv.rank" // (pmix_rank_t) Rank of this server
|
||||
@ -253,9 +255,11 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_ALLOCATED_NODELIST "pmix.alist" // (char*) comma-delimited list of all nodes in this allocation regardless of
|
||||
// whether or not they currently host procs.
|
||||
#define PMIX_HOSTNAME "pmix.hname" // (char*) name of the host the specified proc is on
|
||||
#define PMIX_HOSTNAME_ALIASES "pmix.alias" // (char*) comma-delimited list of names by which this node is known
|
||||
#define PMIX_HOSTNAME_KEEP_FQDN "pmix.fqdn" // (bool) FQDN hostnames are being retained
|
||||
#define PMIX_NODEID "pmix.nodeid" // (uint32_t) node identifier where the specified proc is located
|
||||
#define PMIX_LOCAL_PEERS "pmix.lpeers" // (char*) comma-delimited string of ranks on this node within the specified nspace
|
||||
#define PMIX_LOCAL_PROCS "pmix.lprocs" // (pmix_proc_t array) array of pmix_proc_t of procs on the specified node
|
||||
#define PMIX_LOCAL_PROCS "pmix.lprocs" // (pmix_data_array_t*) array of pmix_proc_t of procs on the specified node
|
||||
#define PMIX_LOCAL_CPUSETS "pmix.lcpus" // (char*) colon-delimited cpusets of local peers within the specified nspace
|
||||
#define PMIX_PROC_URI "pmix.puri" // (char*) URI containing contact info for proc
|
||||
#define PMIX_LOCALITY "pmix.loc" // (uint16_t) relative locality of two procs
|
||||
@ -263,7 +267,6 @@ typedef uint32_t pmix_rank_t;
|
||||
// to launch this proc's application
|
||||
#define PMIX_EXIT_CODE "pmix.exit.code" // (int) exit code returned when proc terminated
|
||||
|
||||
|
||||
/* size info */
|
||||
#define PMIX_UNIV_SIZE "pmix.univ.size" // (uint32_t) #procs in this nspace
|
||||
#define PMIX_JOB_SIZE "pmix.job.size" // (uint32_t) #procs in this job
|
||||
@ -320,10 +323,12 @@ typedef uint32_t pmix_rank_t;
|
||||
// specified operation
|
||||
#define PMIX_JOB_TERM_STATUS "pmix.job.term.status" // (pmix_status_t) status returned upon job termination
|
||||
#define PMIX_PROC_STATE_STATUS "pmix.proc.state" // (pmix_proc_state_t) process state
|
||||
#define PMIX_GET_REFRESH_CACHE "pmix.get.refresh" // (bool) when retrieving data for a remote process, refresh the existing
|
||||
// local data cache for the process in case new values have been
|
||||
// put and committed by it since the last refresh
|
||||
|
||||
|
||||
/* attributes used by host server to pass data to the server convenience library - the
|
||||
* data will then be parsed and provided to the local clients */
|
||||
/* attributes used by host server to pass data to/from the server convenience library - the
|
||||
* data will then be parsed and provided to the local clients. Not generally accessible by users */
|
||||
#define PMIX_REGISTER_NODATA "pmix.reg.nodata" // (bool) Registration is for nspace only, do not copy job data
|
||||
#define PMIX_PROC_DATA "pmix.pdata" // (pmix_data_array_t*) starts with rank, then contains more data
|
||||
#define PMIX_NODE_MAP "pmix.nmap" // (char*) regex of nodes containing procs for this job
|
||||
@ -331,6 +336,7 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_ANL_MAP "pmix.anlmap" // (char*) process mapping in ANL notation (used in PMI-1/PMI-2)
|
||||
#define PMIX_APP_MAP_TYPE "pmix.apmap.type" // (char*) type of mapping used to layout the application (e.g., cyclic)
|
||||
#define PMIX_APP_MAP_REGEX "pmix.apmap.regex" // (char*) regex describing the result of the mapping
|
||||
#define PMIX_REQUIRED_KEY "pmix.req.key" // (char*) key the user needs prior to responding from a dmodex request
|
||||
|
||||
|
||||
/* attributes used internally to communicate data from the server to the client */
|
||||
@ -400,7 +406,8 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_TAG_OUTPUT "pmix.tagout" // (bool) tag application output with the ID of the source
|
||||
#define PMIX_TIMESTAMP_OUTPUT "pmix.tsout" // (bool) timestamp output from applications
|
||||
#define PMIX_MERGE_STDERR_STDOUT "pmix.mergeerrout" // (bool) merge stdout and stderr streams from application procs
|
||||
#define PMIX_OUTPUT_TO_FILE "pmix.outfile" // (char*) output application output to given file
|
||||
#define PMIX_OUTPUT_TO_FILE "pmix.outfile" // (char*) direct application output into files of form
|
||||
// "<filename>.rank" with both stdout and stderr redirected into it
|
||||
#define PMIX_INDEX_ARGV "pmix.indxargv" // (bool) mark the argv with the rank of the proc
|
||||
#define PMIX_CPUS_PER_PROC "pmix.cpuperproc" // (uint32_t) #cpus to assign to each rank
|
||||
#define PMIX_NO_PROCS_ON_HEAD "pmix.nolocal" // (bool) do not place procs on the head node
|
||||
@ -426,27 +433,36 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_QUERY_NAMESPACE_INFO "pmix.qry.nsinfo" // (pmix_data_array_t) request an array of active nspace information - each
|
||||
// element will contain an array including the namespace plus the
|
||||
// command line of the application executing within it
|
||||
#define PMIX_QUERY_JOB_STATUS "pmix.qry.jst" // (pmix_status_t) status of a specified currently executing job
|
||||
#define PMIX_QUERY_QUEUE_LIST "pmix.qry.qlst" // (char*) request a comma-delimited list of scheduler queues
|
||||
#define PMIX_QUERY_QUEUE_STATUS "pmix.qry.qst" // (TBD) status of a specified scheduler queue
|
||||
#define PMIX_QUERY_PROC_TABLE "pmix.qry.ptable" // (char*) input nspace of job whose info is being requested
|
||||
// returns (pmix_data_array_t*) an array of pmix_proc_info_t
|
||||
#define PMIX_QUERY_LOCAL_PROC_TABLE "pmix.qry.lptable" // (char*) input nspace of job whose info is being requested
|
||||
// returns (pmix_data_array_t*) an array of pmix_proc_info_t for
|
||||
// procs in job on same node
|
||||
#define PMIX_QUERY_AUTHORIZATIONS "pmix.qry.auths" // (bool) return operations tool is authorized to perform
|
||||
#define PMIX_QUERY_SPAWN_SUPPORT "pmix.qry.spawn" // (bool) return a comma-delimited list of supported spawn attributes
|
||||
#define PMIX_QUERY_DEBUG_SUPPORT "pmix.qry.debug" // (bool) return a comma-delimited list of supported debug attributes
|
||||
#define PMIX_QUERY_MEMORY_USAGE "pmix.qry.mem" // (bool) return info on memory usage for the procs indicated in the qualifiers
|
||||
#define PMIX_QUERY_JOB_STATUS "pmix.qry.jst" // (pmix_status_t) returns status of a specified currently executing job
|
||||
// REQUIRES a PMIX_NSPACE qualifier indicating the nspace being queried
|
||||
#define PMIX_QUERY_QUEUE_LIST "pmix.qry.qlst" // (char*) request a comma-delimited list of scheduler queues. NO QUALIFIERS
|
||||
#define PMIX_QUERY_QUEUE_STATUS "pmix.qry.qst" // (pmix_data_array_t*) returns array where each element contains the name and
|
||||
// status of a scheduler queue
|
||||
// SUPPORTED QUALIFIERS: PMIX_ALLOC_QUEUE naming specific queue whose status
|
||||
// is being requested
|
||||
#define PMIX_QUERY_PROC_TABLE "pmix.qry.ptable" // (pmix_data_array_t*) returns (pmix_data_array_t*) an array of pmix_proc_info_t
|
||||
// REQUIRES a PMIX_NSPACE qualifier indicating the nspace being queried
|
||||
#define PMIX_QUERY_LOCAL_PROC_TABLE "pmix.qry.lptable" // (pmix_data_array_t*) returns (pmix_data_array_t*) an array of pmix_proc_info_t
|
||||
// of pmix_proc_info_t for procs in job on same node
|
||||
// REQUIRES a PMIX_NSPACE qualifier indicating the nspace being queried
|
||||
#define PMIX_QUERY_AUTHORIZATIONS "pmix.qry.auths" // (pmix_data_array_t*) return operations tool is authorized to perform. The contents
|
||||
// of the array elements have not yet been standardized. NO QUALIFIERS
|
||||
#define PMIX_QUERY_SPAWN_SUPPORT "pmix.qry.spawn" // (char*) return a comma-delimited list of supported spawn attributes. NO QUALIFIERS
|
||||
#define PMIX_QUERY_DEBUG_SUPPORT "pmix.qry.debug" // (char*) return a comma-delimited list of supported debug attributes. NO QUALIFIERS
|
||||
#define PMIX_QUERY_MEMORY_USAGE "pmix.qry.mem" // (pmix_data_array_t*) return info on memory usage for the procs indicated in the qualifiers
|
||||
// SUPPORTED QUALIFIERS: PMIX_NSPACE/PMIX_RANK, or PMIX_PROCID of specific proc(s)
|
||||
// whose info is being requested
|
||||
#define PMIX_QUERY_LOCAL_ONLY "pmix.qry.local" // (bool) constrain the query to local information only
|
||||
#define PMIX_QUERY_REPORT_AVG "pmix.qry.avg" // (bool) report average values
|
||||
#define PMIX_QUERY_REPORT_MINMAX "pmix.qry.minmax" // (bool) report minimum and maximum value
|
||||
#define PMIX_QUERY_ALLOC_STATUS "pmix.query.alloc" // (char*) string identifier of the allocation whose status
|
||||
// is being requested
|
||||
#define PMIX_TIME_REMAINING "pmix.time.remaining" // (char*) query number of seconds (uint32_t) remaining in allocation
|
||||
// for the specified nspace
|
||||
#define PMIX_QUERY_ALLOC_STATUS "pmix.query.alloc" // (char*) return a string reporting status of an allocation request
|
||||
// REQUIRES a PMIX_ALLOC_ID qualifier indicating the allocation request being queried
|
||||
#define PMIX_TIME_REMAINING "pmix.time.remaining" // (uint32_t) returns number of seconds remaining in allocation
|
||||
// for the specified nspace (defaults to allocation containing the caller)
|
||||
// SUPPORTED QUALIFIERS: PMIX_NSPACE of the nspace whose info is being requested
|
||||
|
||||
/* information retrieval attributes */
|
||||
|
||||
/* PMIx_Get information retrieval attributes */
|
||||
#define PMIX_SESSION_INFO "pmix.ssn.info" // (bool) Return information about the specified session. If information
|
||||
// about a session other than the one containing the requesting
|
||||
// process is desired, then the attribute array must contain a
|
||||
@ -471,24 +487,26 @@ typedef uint32_t pmix_rank_t;
|
||||
// then the attribute array must contain either the PMIX_NODEID or
|
||||
// PMIX_HOSTNAME attribute identifying the desired target.
|
||||
|
||||
|
||||
/* information storage attributes */
|
||||
#define PMIX_SESSION_INFO_ARRAY "pmix.ssn.arr" // (pmix_data_array_t) Provide an array of pmix_info_t containing
|
||||
#define PMIX_SESSION_INFO_ARRAY "pmix.ssn.arr" // (pmix_data_array_t*) Provide an array of pmix_info_t containing
|
||||
// session-level information. The PMIX_SESSION_ID attribute is required
|
||||
// to be included in the array.
|
||||
#define PMIX_JOB_INFO_ARRAY "pmix.job.arr" // (pmix_data_array_t) Provide an array of pmix_info_t containing job-level
|
||||
#define PMIX_JOB_INFO_ARRAY "pmix.job.arr" // (pmix_data_array_t*) Provide an array of pmix_info_t containing job-level
|
||||
// information. Information is registered one job (aka namespace) at a time
|
||||
// via the PMIx_server_register_nspace API. Thus, there is no requirement that
|
||||
// the array contain either the PMIX_NSPACE or PMIX_JOBID attributes, though
|
||||
// either or both of them may be included.
|
||||
#define PMIX_APP_INFO_ARRAY "pmix.app.arr" // (pmix_data_array_t) Provide an array of pmix_info_t containing app-level
|
||||
#define PMIX_APP_INFO_ARRAY "pmix.app.arr" // (pmix_data_array_t*) Provide an array of pmix_info_t containing app-level
|
||||
// information. The PMIX_NSPACE or PMIX_JOBID attributes of the job containing
|
||||
// the appplication, plus its PMIX_APPNUM attribute, are required to be
|
||||
// included in the array.
|
||||
#define PMIX_NODE_INFO_ARRAY "pmix.node.arr" // (pmix_data_array_t) Provide an array of pmix_info_t containing node-level
|
||||
#define PMIX_NODE_INFO_ARRAY "pmix.node.arr" // (pmix_data_array_t*) Provide an array of pmix_info_t containing node-level
|
||||
// information. At a minimum, either the PMIX_NODEID or PMIX_HOSTNAME
|
||||
// attribute is required to be included in the array, though both may be
|
||||
// included.
|
||||
|
||||
|
||||
/* log attributes */
|
||||
#define PMIX_LOG_SOURCE "pmix.log.source" // (pmix_proc_t*) ID of source of the log request
|
||||
#define PMIX_LOG_STDERR "pmix.log.stderr" // (char*) log string to stderr
|
||||
@ -516,7 +534,7 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_LOG_EMAIL_SERVER "pmix.log.esrvr" // (char*) hostname (or IP addr) of estmp server
|
||||
#define PMIX_LOG_EMAIL_SRVR_PORT "pmix.log.esrvrprt" // (int32_t) port the email server is listening to
|
||||
|
||||
#define PMIX_LOG_GLOBAL_DATASTORE "pmix.log.gstore" // (bool)
|
||||
#define PMIX_LOG_GLOBAL_DATASTORE "pmix.log.gstore" // (bool) log the provided data to a global datastore
|
||||
#define PMIX_LOG_JOB_RECORD "pmix.log.jrec" // (bool) log the provided information to the RM's job record
|
||||
|
||||
|
||||
@ -531,7 +549,6 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_DEBUG_JOB_DIRECTIVES "pmix.dbg.jdirs" // (pmix_data_array_t*) array of job-level directives
|
||||
#define PMIX_DEBUG_APP_DIRECTIVES "pmix.dbg.adirs" // (pmix_data_array_t*) array of app-level directives
|
||||
|
||||
|
||||
/* Resource Manager identification */
|
||||
#define PMIX_RM_NAME "pmix.rm.name" // (char*) string name of the resource manager
|
||||
#define PMIX_RM_VERSION "pmix.rm.version" // (char*) RM version string
|
||||
@ -549,8 +566,9 @@ typedef uint32_t pmix_rank_t;
|
||||
// creating the envar if it doesn't already exist
|
||||
|
||||
/* attributes relating to allocations */
|
||||
#define PMIX_ALLOC_ID "pmix.alloc.id" // (char*) provide a string identifier for this allocation request
|
||||
// which can later be used to query status of the request
|
||||
#define PMIX_ALLOC_ID "pmix.alloc.id" // (char*) A string identifier (provided by the host environment) for
|
||||
// the resulting allocation which can later be used to reference
|
||||
// the allocated resources in, for example, a call to PMIx_Spawn
|
||||
#define PMIX_ALLOC_NUM_NODES "pmix.alloc.nnodes" // (uint64_t) number of nodes
|
||||
#define PMIX_ALLOC_NODE_LIST "pmix.alloc.nlist" // (char*) regex of specific nodes
|
||||
#define PMIX_ALLOC_NUM_CPUS "pmix.alloc.ncpus" // (uint64_t) number of cpus
|
||||
@ -605,7 +623,7 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_JOB_CTRL_CHECKPOINT_EVENT "pmix.jctrl.ckptev" // (bool) use event notification to trigger process checkpoint
|
||||
#define PMIX_JOB_CTRL_CHECKPOINT_SIGNAL "pmix.jctrl.ckptsig" // (int) use the given signal to trigger process checkpoint
|
||||
#define PMIX_JOB_CTRL_CHECKPOINT_TIMEOUT "pmix.jctrl.ckptsig" // (int) time in seconds to wait for checkpoint to complete
|
||||
#define PMIX_JOB_CTRL_CHECKPOINT_METHOD "pmix.jctrl.ckmethod" // (pmix_data_array_t) array of pmix_info_t declaring each
|
||||
#define PMIX_JOB_CTRL_CHECKPOINT_METHOD "pmix.jctrl.ckmethod" // (pmix_data_array_t*) array of pmix_info_t declaring each
|
||||
// method and value supported by this application
|
||||
#define PMIX_JOB_CTRL_SIGNAL "pmix.jctrl.sig" // (int) send given signal to specified processes
|
||||
#define PMIX_JOB_CTRL_PROVISION "pmix.jctrl.pvn" // (char*) regex identifying nodes that are to be provisioned
|
||||
@ -631,8 +649,8 @@ typedef uint32_t pmix_rank_t;
|
||||
// monitoring for this process)
|
||||
#define PMIX_MONITOR_APP_CONTROL "pmix.monitor.appctrl" // (bool) the application desires to control the response to
|
||||
// a monitoring event
|
||||
#define PMIX_MONITOR_HEARTBEAT "pmix.monitor.mbeat" // (void) register to have the server monitor the requestor for heartbeats
|
||||
#define PMIX_SEND_HEARTBEAT "pmix.monitor.beat" // (void) send heartbeat to local server
|
||||
#define PMIX_MONITOR_HEARTBEAT "pmix.monitor.mbeat" // (bool) register to have the server monitor the requestor for heartbeats
|
||||
#define PMIX_SEND_HEARTBEAT "pmix.monitor.beat" // (bool) send heartbeat to local server
|
||||
#define PMIX_MONITOR_HEARTBEAT_TIME "pmix.monitor.btime" // (uint32_t) time in seconds before declaring heartbeat missed
|
||||
#define PMIX_MONITOR_HEARTBEAT_DROPS "pmix.monitor.bdrop" // (uint32_t) number of heartbeats that can be missed before
|
||||
// generating the event
|
||||
@ -907,6 +925,7 @@ typedef uint16_t pmix_data_type_t;
|
||||
// Hole left by deprecation/removal of PMIX_INFO_ARRAY
|
||||
#define PMIX_IOF_CHANNEL 45
|
||||
#define PMIX_ENVAR 46
|
||||
#define PMIX_REGEX 49 // numerical ID matches v4
|
||||
/********************/
|
||||
|
||||
/* define a boundary for implementers so they can add their own data types */
|
||||
@ -1477,6 +1496,8 @@ typedef struct pmix_value {
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#if 0
|
||||
// This macro is no longer supported in the v3.2 and later series
|
||||
#define PMIX_VALUE_COMPRESSED_STRING_UNPACK(s) \
|
||||
do { \
|
||||
char *tmp; \
|
||||
@ -1496,6 +1517,7 @@ typedef struct pmix_value {
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#endif
|
||||
|
||||
/**** PMIX INFO STRUCT ****/
|
||||
typedef struct pmix_info {
|
||||
@ -1830,7 +1852,6 @@ typedef struct pmix_query {
|
||||
*
|
||||
* @param argv Pointer to an argv array.
|
||||
* @param str Pointer to the string to append.
|
||||
* @param bool Whether or not to overwrite a matching value if found
|
||||
*
|
||||
* @retval PMIX_SUCCESS On success
|
||||
* @retval PMIX_ERROR On failure
|
||||
@ -1866,7 +1887,7 @@ typedef struct pmix_query {
|
||||
* @retval argv pointer to new argv array on success
|
||||
* @retval NULL on error
|
||||
*
|
||||
* All strings are insertted into the argv array by value; the
|
||||
* All strings are inserted into the argv array by value; the
|
||||
* newly-allocated array makes no references to the src_string
|
||||
* argument (i.e., it can be freed after calling this function
|
||||
* without invalidating the output argv).
|
||||
@ -2160,8 +2181,9 @@ typedef void (*pmix_validation_cbfunc_t)(pmix_status_t status,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
void *cbdata);
|
||||
|
||||
|
||||
/**** COMMON SUPPORT FUNCTIONS ****/
|
||||
/* Note that these are moved to pmix.h in the v4.x series and later */
|
||||
/****** EVENT NOTIFICATION SUPPORT ******/
|
||||
/* Register an event handler to report events. Three types of events
|
||||
* can be reported:
|
||||
*
|
||||
@ -2194,6 +2216,10 @@ typedef void (*pmix_validation_cbfunc_t)(pmix_status_t status,
|
||||
* deregistering the current evhdlr, and then registering it
|
||||
* using a new set of info values.
|
||||
*
|
||||
* If cbfunc is NULL, then this is treated as a BLOCKING call - a positive
|
||||
* return value represents the reference ID for the request, while
|
||||
* negative values indicate the corresponding error
|
||||
*
|
||||
* See pmix_common.h for a description of the notification function */
|
||||
PMIX_EXPORT void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncodes,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
@ -2246,6 +2272,9 @@ PMIX_EXPORT void PMIx_Deregister_event_handler(size_t evhdlr_ref,
|
||||
* will have been queued, but may not have been transmitted
|
||||
* by this time. Note that the caller is required to maintain
|
||||
* the input data until the callback function has been executed!
|
||||
* If cbfunc is NULL, then this is treated as a BLOCKING call and
|
||||
* the result of the operation is provided in the returned
|
||||
* status
|
||||
*
|
||||
* cbdata - the caller's provided void* object
|
||||
*/
|
||||
@ -2255,6 +2284,8 @@ PMIX_EXPORT pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/****** PRETTY-PRINT DEFINED VALUE TYPES ******/
|
||||
/* Provide a string representation for several types of value. Note
|
||||
* that the provided string is statically defined and must NOT be
|
||||
* free'd. Supported value types:
|
||||
@ -2288,6 +2319,8 @@ PMIX_EXPORT const char* PMIx_Get_version(void);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Store_internal(const pmix_proc_t *proc,
|
||||
const pmix_key_t key, pmix_value_t *val);
|
||||
|
||||
|
||||
/****** DATA BUFFER PACK/UNPACK SUPPORT ******/
|
||||
/**
|
||||
* Top-level interface function to pack one or more values into a
|
||||
* buffer.
|
||||
@ -2516,6 +2549,7 @@ PMIX_EXPORT pmix_status_t PMIx_Data_copy_payload(pmix_data_buffer_t *dest,
|
||||
pmix_data_buffer_t *src);
|
||||
|
||||
|
||||
/******** STANDARD MACROS FOR DARRAY AND VALUE SUPPORT ********/
|
||||
static inline void pmix_darray_destruct(pmix_data_array_t *m);
|
||||
|
||||
static inline void pmix_value_destruct(pmix_value_t * m)
|
||||
@ -2690,7 +2724,9 @@ static inline void pmix_darray_destruct(pmix_data_array_t *m)
|
||||
* @param len Size of the dest array - 1
|
||||
*
|
||||
*/
|
||||
static inline void pmix_strncpy(char *dest, const char *src, size_t len)
|
||||
static inline void pmix_strncpy(char *dest,
|
||||
const char *src,
|
||||
size_t len)
|
||||
{
|
||||
size_t i, k;
|
||||
char *new_dest = dest;
|
||||
|
@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2015-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -1,618 +0,0 @@
|
||||
#define PMI2_Abort @PMIX_RENAME@PMI2_Abort
|
||||
#define PMI2_Finalize @PMIX_RENAME@PMI2_Finalize
|
||||
#define PMI2_Info_GetJobAttr @PMIX_RENAME@PMI2_Info_GetJobAttr
|
||||
#define PMI2_Info_GetJobAttrIntArray @PMIX_RENAME@PMI2_Info_GetJobAttrIntArray
|
||||
#define PMI2_Info_GetNodeAttr @PMIX_RENAME@PMI2_Info_GetNodeAttr
|
||||
#define PMI2_Info_GetNodeAttrIntArray @PMIX_RENAME@PMI2_Info_GetNodeAttrIntArray
|
||||
#define PMI2_Info_GetSize @PMIX_RENAME@PMI2_Info_GetSize
|
||||
#define PMI2_Info_PutNodeAttr @PMIX_RENAME@PMI2_Info_PutNodeAttr
|
||||
#define PMI2_Init @PMIX_RENAME@PMI2_Init
|
||||
#define PMI2_Initialized @PMIX_RENAME@PMI2_Initialized
|
||||
#define PMI2_Job_Connect @PMIX_RENAME@PMI2_Job_Connect
|
||||
#define PMI2_Job_Disconnect @PMIX_RENAME@PMI2_Job_Disconnect
|
||||
#define PMI2_Job_GetId @PMIX_RENAME@PMI2_Job_GetId
|
||||
#define PMI2_Job_GetRank @PMIX_RENAME@PMI2_Job_GetRank
|
||||
#define PMI2_Job_Spawn @PMIX_RENAME@PMI2_Job_Spawn
|
||||
#define PMI2_KVS_Fence @PMIX_RENAME@PMI2_KVS_Fence
|
||||
#define PMI2_KVS_Get @PMIX_RENAME@PMI2_KVS_Get
|
||||
#define PMI2_KVS_Put @PMIX_RENAME@PMI2_KVS_Put
|
||||
#define PMI2_Nameserv_lookup @PMIX_RENAME@PMI2_Nameserv_lookup
|
||||
#define PMI2_Nameserv_publish @PMIX_RENAME@PMI2_Nameserv_publish
|
||||
#define PMI2_Nameserv_unpublish @PMIX_RENAME@PMI2_Nameserv_unpublish
|
||||
#define PMI_Abort @PMIX_RENAME@PMI_Abort
|
||||
#define PMI_Args_to_keyval @PMIX_RENAME@PMI_Args_to_keyval
|
||||
#define PMI_Barrier @PMIX_RENAME@PMI_Barrier
|
||||
#define PMI_Finalize @PMIX_RENAME@PMI_Finalize
|
||||
#define PMI_Free_keyvals @PMIX_RENAME@PMI_Free_keyvals
|
||||
#define PMI_Get_appnum @PMIX_RENAME@PMI_Get_appnum
|
||||
#define PMI_Get_clique_ranks @PMIX_RENAME@PMI_Get_clique_ranks
|
||||
#define PMI_Get_clique_size @PMIX_RENAME@PMI_Get_clique_size
|
||||
#define PMI_Get_id @PMIX_RENAME@PMI_Get_id
|
||||
#define PMI_Get_id_length_max @PMIX_RENAME@PMI_Get_id_length_max
|
||||
#define PMI_Get_kvs_domain_id @PMIX_RENAME@PMI_Get_kvs_domain_id
|
||||
#define PMI_Get_options @PMIX_RENAME@PMI_Get_options
|
||||
#define PMI_Get_rank @PMIX_RENAME@PMI_Get_rank
|
||||
#define PMI_Get_size @PMIX_RENAME@PMI_Get_size
|
||||
#define PMI_Get_universe_size @PMIX_RENAME@PMI_Get_universe_size
|
||||
#define PMI_Init @PMIX_RENAME@PMI_Init
|
||||
#define PMI_Initialized @PMIX_RENAME@PMI_Initialized
|
||||
#define PMI_KVS_Commit @PMIX_RENAME@PMI_KVS_Commit
|
||||
#define PMI_KVS_Create @PMIX_RENAME@PMI_KVS_Create
|
||||
#define PMI_KVS_Destroy @PMIX_RENAME@PMI_KVS_Destroy
|
||||
#define PMI_KVS_Get @PMIX_RENAME@PMI_KVS_Get
|
||||
#define PMI_KVS_Get_key_length_max @PMIX_RENAME@PMI_KVS_Get_key_length_max
|
||||
#define PMI_KVS_Get_my_name @PMIX_RENAME@PMI_KVS_Get_my_name
|
||||
#define PMI_KVS_Get_name_length_max @PMIX_RENAME@PMI_KVS_Get_name_length_max
|
||||
#define PMI_KVS_Get_value_length_max @PMIX_RENAME@PMI_KVS_Get_value_length_max
|
||||
#define PMI_KVS_Iter_first @PMIX_RENAME@PMI_KVS_Iter_first
|
||||
#define PMI_KVS_Iter_next @PMIX_RENAME@PMI_KVS_Iter_next
|
||||
#define PMI_KVS_Put @PMIX_RENAME@PMI_KVS_Put
|
||||
#define PMI_Lookup_name @PMIX_RENAME@PMI_Lookup_name
|
||||
#define PMI_Parse_option @PMIX_RENAME@PMI_Parse_option
|
||||
#define PMI_Publish_name @PMIX_RENAME@PMI_Publish_name
|
||||
#define PMI_Spawn_multiple @PMIX_RENAME@PMI_Spawn_multiple
|
||||
#define PMI_Unpublish_name @PMIX_RENAME@PMI_Unpublish_name
|
||||
#define PMIx_Abort @PMIX_RENAME@PMIx_Abort
|
||||
#define PMIx_Allocation_request_nb @PMIX_RENAME@PMIx_Allocation_request_nb
|
||||
#define PMIx_Alloc_directive_string @PMIX_RENAME@PMIx_Alloc_directive_string
|
||||
#define pmix_argv_append @PMIX_RENAME@pmix_argv_append
|
||||
#define pmix_argv_append_nosize @PMIX_RENAME@pmix_argv_append_nosize
|
||||
#define pmix_argv_append_unique_nosize @PMIX_RENAME@pmix_argv_append_unique_nosize
|
||||
#define pmix_argv_copy @PMIX_RENAME@pmix_argv_copy
|
||||
#define pmix_argv_count @PMIX_RENAME@pmix_argv_count
|
||||
#define pmix_argv_delete @PMIX_RENAME@pmix_argv_delete
|
||||
#define pmix_argv_free @PMIX_RENAME@pmix_argv_free
|
||||
#define pmix_argv_insert @PMIX_RENAME@pmix_argv_insert
|
||||
#define pmix_argv_insert_element @PMIX_RENAME@pmix_argv_insert_element
|
||||
#define pmix_argv_join @PMIX_RENAME@pmix_argv_join
|
||||
#define pmix_argv_join_range @PMIX_RENAME@pmix_argv_join_range
|
||||
#define pmix_argv_len @PMIX_RENAME@pmix_argv_len
|
||||
#define pmix_argv_prepend_nosize @PMIX_RENAME@pmix_argv_prepend_nosize
|
||||
#define pmix_argv_split @PMIX_RENAME@pmix_argv_split
|
||||
#define pmix_argv_split_with_empty @PMIX_RENAME@pmix_argv_split_with_empty
|
||||
#define pmix_asprintf @PMIX_RENAME@pmix_asprintf
|
||||
#define pmix_basename @PMIX_RENAME@pmix_basename
|
||||
#define pmix_bfrop_base_copy_persist @PMIX_RENAME@pmix_bfrop_base_copy_persist
|
||||
#define pmix_bfrop_base_select @PMIX_RENAME@pmix_bfrop_base_select
|
||||
#define pmix_bfrop_buffer_extend @PMIX_RENAME@pmix_bfrop_buffer_extend
|
||||
#define pmix_bfrop_get_data_type @PMIX_RENAME@pmix_bfrop_get_data_type
|
||||
#define pmix_bfrops_base_assign_module @PMIX_RENAME@pmix_bfrops_base_assign_module
|
||||
#define pmix_bfrops_base_copy @PMIX_RENAME@pmix_bfrops_base_copy
|
||||
#define pmix_bfrops_base_copy_app @PMIX_RENAME@pmix_bfrops_base_copy_app
|
||||
#define pmix_bfrops_base_copy_array @PMIX_RENAME@pmix_bfrops_base_copy_array
|
||||
#define pmix_bfrops_base_copy_bo @PMIX_RENAME@pmix_bfrops_base_copy_bo
|
||||
#define pmix_bfrops_base_copy_buf @PMIX_RENAME@pmix_bfrops_base_copy_buf
|
||||
#define pmix_bfrops_base_copy_darray @PMIX_RENAME@pmix_bfrops_base_copy_darray
|
||||
#define pmix_bfrops_base_copy_info @PMIX_RENAME@pmix_bfrops_base_copy_info
|
||||
#define pmix_bfrops_base_copy_kval @PMIX_RENAME@pmix_bfrops_base_copy_kval
|
||||
#define pmix_bfrops_base_copy_modex @PMIX_RENAME@pmix_bfrops_base_copy_modex
|
||||
#define pmix_bfrops_base_copy_payload @PMIX_RENAME@pmix_bfrops_base_copy_payload
|
||||
#define pmix_bfrops_base_copy_pdata @PMIX_RENAME@pmix_bfrops_base_copy_pdata
|
||||
#define pmix_bfrops_base_copy_pinfo @PMIX_RENAME@pmix_bfrops_base_copy_pinfo
|
||||
#define pmix_bfrops_base_copy_proc @PMIX_RENAME@pmix_bfrops_base_copy_proc
|
||||
#define pmix_bfrops_base_copy_query @PMIX_RENAME@pmix_bfrops_base_copy_query
|
||||
#define pmix_bfrops_base_copy_string @PMIX_RENAME@pmix_bfrops_base_copy_string
|
||||
#define pmix_bfrops_base_copy_value @PMIX_RENAME@pmix_bfrops_base_copy_value
|
||||
#define pmix_bfrops_base_data_type_string @PMIX_RENAME@pmix_bfrops_base_data_type_string
|
||||
#define pmix_bfrops_base_framework @PMIX_RENAME@pmix_bfrops_base_framework
|
||||
#define pmix_bfrops_base_get_available_modules @PMIX_RENAME@pmix_bfrops_base_get_available_modules
|
||||
#define pmix_bfrops_base_output @PMIX_RENAME@pmix_bfrops_base_output
|
||||
#define pmix_bfrops_base_pack @PMIX_RENAME@pmix_bfrops_base_pack
|
||||
#define pmix_bfrops_base_pack_alloc_directive @PMIX_RENAME@pmix_bfrops_base_pack_alloc_directive
|
||||
#define pmix_bfrops_base_pack_app @PMIX_RENAME@pmix_bfrops_base_pack_app
|
||||
#define pmix_bfrops_base_pack_array @PMIX_RENAME@pmix_bfrops_base_pack_array
|
||||
#define pmix_bfrops_base_pack_bo @PMIX_RENAME@pmix_bfrops_base_pack_bo
|
||||
#define pmix_bfrops_base_pack_bool @PMIX_RENAME@pmix_bfrops_base_pack_bool
|
||||
#define pmix_bfrops_base_pack_buf @PMIX_RENAME@pmix_bfrops_base_pack_buf
|
||||
#define pmix_bfrops_base_pack_buffer @PMIX_RENAME@pmix_bfrops_base_pack_buffer
|
||||
#define pmix_bfrops_base_pack_byte @PMIX_RENAME@pmix_bfrops_base_pack_byte
|
||||
#define pmix_bfrops_base_pack_cmd @PMIX_RENAME@pmix_bfrops_base_pack_cmd
|
||||
#define pmix_bfrops_base_pack_darray @PMIX_RENAME@pmix_bfrops_base_pack_darray
|
||||
#define pmix_bfrops_base_pack_datatype @PMIX_RENAME@pmix_bfrops_base_pack_datatype
|
||||
#define pmix_bfrops_base_pack_double @PMIX_RENAME@pmix_bfrops_base_pack_double
|
||||
#define pmix_bfrops_base_pack_float @PMIX_RENAME@pmix_bfrops_base_pack_float
|
||||
#define pmix_bfrops_base_pack_info @PMIX_RENAME@pmix_bfrops_base_pack_info
|
||||
#define pmix_bfrops_base_pack_info_directives @PMIX_RENAME@pmix_bfrops_base_pack_info_directives
|
||||
#define pmix_bfrops_base_pack_int @PMIX_RENAME@pmix_bfrops_base_pack_int
|
||||
#define pmix_bfrops_base_pack_int16 @PMIX_RENAME@pmix_bfrops_base_pack_int16
|
||||
#define pmix_bfrops_base_pack_int32 @PMIX_RENAME@pmix_bfrops_base_pack_int32
|
||||
#define pmix_bfrops_base_pack_int64 @PMIX_RENAME@pmix_bfrops_base_pack_int64
|
||||
#define pmix_bfrops_base_pack_kval @PMIX_RENAME@pmix_bfrops_base_pack_kval
|
||||
#define pmix_bfrops_base_pack_modex @PMIX_RENAME@pmix_bfrops_base_pack_modex
|
||||
#define pmix_bfrops_base_pack_pdata @PMIX_RENAME@pmix_bfrops_base_pack_pdata
|
||||
#define pmix_bfrops_base_pack_persist @PMIX_RENAME@pmix_bfrops_base_pack_persist
|
||||
#define pmix_bfrops_base_pack_pid @PMIX_RENAME@pmix_bfrops_base_pack_pid
|
||||
#define pmix_bfrops_base_pack_pinfo @PMIX_RENAME@pmix_bfrops_base_pack_pinfo
|
||||
#define pmix_bfrops_base_pack_proc @PMIX_RENAME@pmix_bfrops_base_pack_proc
|
||||
#define pmix_bfrops_base_pack_pstate @PMIX_RENAME@pmix_bfrops_base_pack_pstate
|
||||
#define pmix_bfrops_base_pack_ptr @PMIX_RENAME@pmix_bfrops_base_pack_ptr
|
||||
#define pmix_bfrops_base_pack_query @PMIX_RENAME@pmix_bfrops_base_pack_query
|
||||
#define pmix_bfrops_base_pack_range @PMIX_RENAME@pmix_bfrops_base_pack_range
|
||||
#define pmix_bfrops_base_pack_rank @PMIX_RENAME@pmix_bfrops_base_pack_rank
|
||||
#define pmix_bfrops_base_pack_scope @PMIX_RENAME@pmix_bfrops_base_pack_scope
|
||||
#define pmix_bfrops_base_pack_sizet @PMIX_RENAME@pmix_bfrops_base_pack_sizet
|
||||
#define pmix_bfrops_base_pack_status @PMIX_RENAME@pmix_bfrops_base_pack_status
|
||||
#define pmix_bfrops_base_pack_string @PMIX_RENAME@pmix_bfrops_base_pack_string
|
||||
#define pmix_bfrops_base_pack_time @PMIX_RENAME@pmix_bfrops_base_pack_time
|
||||
#define pmix_bfrops_base_pack_timeval @PMIX_RENAME@pmix_bfrops_base_pack_timeval
|
||||
#define pmix_bfrops_base_pack_val @PMIX_RENAME@pmix_bfrops_base_pack_val
|
||||
#define pmix_bfrops_base_pack_value @PMIX_RENAME@pmix_bfrops_base_pack_value
|
||||
#define pmix_bfrops_base_print @PMIX_RENAME@pmix_bfrops_base_print
|
||||
#define pmix_bfrops_base_print_alloc_directive @PMIX_RENAME@pmix_bfrops_base_print_alloc_directive
|
||||
#define pmix_bfrops_base_print_app @PMIX_RENAME@pmix_bfrops_base_print_app
|
||||
#define pmix_bfrops_base_print_array @PMIX_RENAME@pmix_bfrops_base_print_array
|
||||
#define pmix_bfrops_base_print_bo @PMIX_RENAME@pmix_bfrops_base_print_bo
|
||||
#define pmix_bfrops_base_print_bool @PMIX_RENAME@pmix_bfrops_base_print_bool
|
||||
#define pmix_bfrops_base_print_buf @PMIX_RENAME@pmix_bfrops_base_print_buf
|
||||
#define pmix_bfrops_base_print_byte @PMIX_RENAME@pmix_bfrops_base_print_byte
|
||||
#define pmix_bfrops_base_print_cmd @PMIX_RENAME@pmix_bfrops_base_print_cmd
|
||||
#define pmix_bfrops_base_print_darray @PMIX_RENAME@pmix_bfrops_base_print_darray
|
||||
#define pmix_bfrops_base_print_datatype @PMIX_RENAME@pmix_bfrops_base_print_datatype
|
||||
#define pmix_bfrops_base_print_double @PMIX_RENAME@pmix_bfrops_base_print_double
|
||||
#define pmix_bfrops_base_print_float @PMIX_RENAME@pmix_bfrops_base_print_float
|
||||
#define pmix_bfrops_base_print_info @PMIX_RENAME@pmix_bfrops_base_print_info
|
||||
#define pmix_bfrops_base_print_info_directives @PMIX_RENAME@pmix_bfrops_base_print_info_directives
|
||||
#define pmix_bfrops_base_print_int @PMIX_RENAME@pmix_bfrops_base_print_int
|
||||
#define pmix_bfrops_base_print_int16 @PMIX_RENAME@pmix_bfrops_base_print_int16
|
||||
#define pmix_bfrops_base_print_int32 @PMIX_RENAME@pmix_bfrops_base_print_int32
|
||||
#define pmix_bfrops_base_print_int64 @PMIX_RENAME@pmix_bfrops_base_print_int64
|
||||
#define pmix_bfrops_base_print_int8 @PMIX_RENAME@pmix_bfrops_base_print_int8
|
||||
#define pmix_bfrops_base_print_kval @PMIX_RENAME@pmix_bfrops_base_print_kval
|
||||
#define pmix_bfrops_base_print_modex @PMIX_RENAME@pmix_bfrops_base_print_modex
|
||||
#define pmix_bfrops_base_print_pdata @PMIX_RENAME@pmix_bfrops_base_print_pdata
|
||||
#define pmix_bfrops_base_print_persist @PMIX_RENAME@pmix_bfrops_base_print_persist
|
||||
#define pmix_bfrops_base_print_pid @PMIX_RENAME@pmix_bfrops_base_print_pid
|
||||
#define pmix_bfrops_base_print_pinfo @PMIX_RENAME@pmix_bfrops_base_print_pinfo
|
||||
#define pmix_bfrops_base_print_proc @PMIX_RENAME@pmix_bfrops_base_print_proc
|
||||
#define pmix_bfrops_base_print_pstate @PMIX_RENAME@pmix_bfrops_base_print_pstate
|
||||
#define pmix_bfrops_base_print_ptr @PMIX_RENAME@pmix_bfrops_base_print_ptr
|
||||
#define pmix_bfrops_base_print_query @PMIX_RENAME@pmix_bfrops_base_print_query
|
||||
#define pmix_bfrops_base_print_range @PMIX_RENAME@pmix_bfrops_base_print_range
|
||||
#define pmix_bfrops_base_print_rank @PMIX_RENAME@pmix_bfrops_base_print_rank
|
||||
#define pmix_bfrops_base_print_scope @PMIX_RENAME@pmix_bfrops_base_print_scope
|
||||
#define pmix_bfrops_base_print_size @PMIX_RENAME@pmix_bfrops_base_print_size
|
||||
#define pmix_bfrops_base_print_status @PMIX_RENAME@pmix_bfrops_base_print_status
|
||||
#define pmix_bfrops_base_print_string @PMIX_RENAME@pmix_bfrops_base_print_string
|
||||
#define pmix_bfrops_base_print_time @PMIX_RENAME@pmix_bfrops_base_print_time
|
||||
#define pmix_bfrops_base_print_timeval @PMIX_RENAME@pmix_bfrops_base_print_timeval
|
||||
#define pmix_bfrops_base_print_uint @PMIX_RENAME@pmix_bfrops_base_print_uint
|
||||
#define pmix_bfrops_base_print_uint16 @PMIX_RENAME@pmix_bfrops_base_print_uint16
|
||||
#define pmix_bfrops_base_print_uint32 @PMIX_RENAME@pmix_bfrops_base_print_uint32
|
||||
#define pmix_bfrops_base_print_uint64 @PMIX_RENAME@pmix_bfrops_base_print_uint64
|
||||
#define pmix_bfrops_base_print_uint8 @PMIX_RENAME@pmix_bfrops_base_print_uint8
|
||||
#define pmix_bfrops_base_print_value @PMIX_RENAME@pmix_bfrops_base_print_value
|
||||
#define pmix_bfrops_base_std_copy @PMIX_RENAME@pmix_bfrops_base_std_copy
|
||||
#define pmix_bfrops_base_unpack @PMIX_RENAME@pmix_bfrops_base_unpack
|
||||
#define pmix_bfrops_base_unpack_alloc_directive @PMIX_RENAME@pmix_bfrops_base_unpack_alloc_directive
|
||||
#define pmix_bfrops_base_unpack_app @PMIX_RENAME@pmix_bfrops_base_unpack_app
|
||||
#define pmix_bfrops_base_unpack_array @PMIX_RENAME@pmix_bfrops_base_unpack_array
|
||||
#define pmix_bfrops_base_unpack_bo @PMIX_RENAME@pmix_bfrops_base_unpack_bo
|
||||
#define pmix_bfrops_base_unpack_bool @PMIX_RENAME@pmix_bfrops_base_unpack_bool
|
||||
#define pmix_bfrops_base_unpack_buf @PMIX_RENAME@pmix_bfrops_base_unpack_buf
|
||||
#define pmix_bfrops_base_unpack_byte @PMIX_RENAME@pmix_bfrops_base_unpack_byte
|
||||
#define pmix_bfrops_base_unpack_cmd @PMIX_RENAME@pmix_bfrops_base_unpack_cmd
|
||||
#define pmix_bfrops_base_unpack_darray @PMIX_RENAME@pmix_bfrops_base_unpack_darray
|
||||
#define pmix_bfrops_base_unpack_datatype @PMIX_RENAME@pmix_bfrops_base_unpack_datatype
|
||||
#define pmix_bfrops_base_unpack_double @PMIX_RENAME@pmix_bfrops_base_unpack_double
|
||||
#define pmix_bfrops_base_unpack_float @PMIX_RENAME@pmix_bfrops_base_unpack_float
|
||||
#define pmix_bfrops_base_unpack_info @PMIX_RENAME@pmix_bfrops_base_unpack_info
|
||||
#define pmix_bfrops_base_unpack_info_directives @PMIX_RENAME@pmix_bfrops_base_unpack_info_directives
|
||||
#define pmix_bfrops_base_unpack_int @PMIX_RENAME@pmix_bfrops_base_unpack_int
|
||||
#define pmix_bfrops_base_unpack_int16 @PMIX_RENAME@pmix_bfrops_base_unpack_int16
|
||||
#define pmix_bfrops_base_unpack_int32 @PMIX_RENAME@pmix_bfrops_base_unpack_int32
|
||||
#define pmix_bfrops_base_unpack_int64 @PMIX_RENAME@pmix_bfrops_base_unpack_int64
|
||||
#define pmix_bfrops_base_unpack_kval @PMIX_RENAME@pmix_bfrops_base_unpack_kval
|
||||
#define pmix_bfrops_base_unpack_modex @PMIX_RENAME@pmix_bfrops_base_unpack_modex
|
||||
#define pmix_bfrops_base_unpack_pdata @PMIX_RENAME@pmix_bfrops_base_unpack_pdata
|
||||
#define pmix_bfrops_base_unpack_persist @PMIX_RENAME@pmix_bfrops_base_unpack_persist
|
||||
#define pmix_bfrops_base_unpack_pid @PMIX_RENAME@pmix_bfrops_base_unpack_pid
|
||||
#define pmix_bfrops_base_unpack_pinfo @PMIX_RENAME@pmix_bfrops_base_unpack_pinfo
|
||||
#define pmix_bfrops_base_unpack_proc @PMIX_RENAME@pmix_bfrops_base_unpack_proc
|
||||
#define pmix_bfrops_base_unpack_pstate @PMIX_RENAME@pmix_bfrops_base_unpack_pstate
|
||||
#define pmix_bfrops_base_unpack_ptr @PMIX_RENAME@pmix_bfrops_base_unpack_ptr
|
||||
#define pmix_bfrops_base_unpack_query @PMIX_RENAME@pmix_bfrops_base_unpack_query
|
||||
#define pmix_bfrops_base_unpack_range @PMIX_RENAME@pmix_bfrops_base_unpack_range
|
||||
#define pmix_bfrops_base_unpack_rank @PMIX_RENAME@pmix_bfrops_base_unpack_rank
|
||||
#define pmix_bfrops_base_unpack_scope @PMIX_RENAME@pmix_bfrops_base_unpack_scope
|
||||
#define pmix_bfrops_base_unpack_sizet @PMIX_RENAME@pmix_bfrops_base_unpack_sizet
|
||||
#define pmix_bfrops_base_unpack_status @PMIX_RENAME@pmix_bfrops_base_unpack_status
|
||||
#define pmix_bfrops_base_unpack_string @PMIX_RENAME@pmix_bfrops_base_unpack_string
|
||||
#define pmix_bfrops_base_unpack_time @PMIX_RENAME@pmix_bfrops_base_unpack_time
|
||||
#define pmix_bfrops_base_unpack_timeval @PMIX_RENAME@pmix_bfrops_base_unpack_timeval
|
||||
#define pmix_bfrops_base_unpack_val @PMIX_RENAME@pmix_bfrops_base_unpack_val
|
||||
#define pmix_bfrops_base_unpack_value @PMIX_RENAME@pmix_bfrops_base_unpack_value
|
||||
#define pmix_bfrops_base_value_cmp @PMIX_RENAME@pmix_bfrops_base_value_cmp
|
||||
#define pmix_bfrops_base_value_load @PMIX_RENAME@pmix_bfrops_base_value_load
|
||||
#define pmix_bfrops_base_value_unload @PMIX_RENAME@pmix_bfrops_base_value_unload
|
||||
#define pmix_bfrops_base_value_xfer @PMIX_RENAME@pmix_bfrops_base_value_xfer
|
||||
#define pmix_bfrops_globals @PMIX_RENAME@pmix_bfrops_globals
|
||||
#define pmix_bfrop_store_data_type @PMIX_RENAME@pmix_bfrop_store_data_type
|
||||
#define pmix_bfrop_too_small @PMIX_RENAME@pmix_bfrop_too_small
|
||||
#define pmix_bfrop_type_info_t_class @PMIX_RENAME@pmix_bfrop_type_info_t_class
|
||||
#define pmix_buffer_t_class @PMIX_RENAME@pmix_buffer_t_class
|
||||
#define pmix_cb_t_class @PMIX_RENAME@pmix_cb_t_class
|
||||
#define pmix_class_finalize @PMIX_RENAME@pmix_class_finalize
|
||||
#define pmix_class_init_epoch @PMIX_RENAME@pmix_class_init_epoch
|
||||
#define pmix_class_initialize @PMIX_RENAME@pmix_class_initialize
|
||||
#define pmix_client_globals @PMIX_RENAME@pmix_client_globals
|
||||
#define pmix_cmd_line_add @PMIX_RENAME@pmix_cmd_line_add
|
||||
#define pmix_cmd_line_create @PMIX_RENAME@pmix_cmd_line_create
|
||||
#define pmix_cmd_line_get_argc @PMIX_RENAME@pmix_cmd_line_get_argc
|
||||
#define pmix_cmd_line_get_argv @PMIX_RENAME@pmix_cmd_line_get_argv
|
||||
#define pmix_cmd_line_get_ninsts @PMIX_RENAME@pmix_cmd_line_get_ninsts
|
||||
#define pmix_cmd_line_get_param @PMIX_RENAME@pmix_cmd_line_get_param
|
||||
#define pmix_cmd_line_get_tail @PMIX_RENAME@pmix_cmd_line_get_tail
|
||||
#define pmix_cmd_line_get_usage_msg @PMIX_RENAME@pmix_cmd_line_get_usage_msg
|
||||
#define pmix_cmd_line_is_taken @PMIX_RENAME@pmix_cmd_line_is_taken
|
||||
#define pmix_cmd_line_make_opt3 @PMIX_RENAME@pmix_cmd_line_make_opt3
|
||||
#define pmix_cmd_line_make_opt_mca @PMIX_RENAME@pmix_cmd_line_make_opt_mca
|
||||
#define pmix_cmd_line_parse @PMIX_RENAME@pmix_cmd_line_parse
|
||||
#define pmix_cmd_line_t_class @PMIX_RENAME@pmix_cmd_line_t_class
|
||||
#define pmix_command_string @PMIX_RENAME@pmix_command_string
|
||||
#define PMIx_Commit @PMIX_RENAME@PMIx_Commit
|
||||
#define PMIx_Connect @PMIX_RENAME@PMIx_Connect
|
||||
#define PMIx_Connect_nb @PMIX_RENAME@PMIx_Connect_nb
|
||||
#define PMIx_Data_copy @PMIX_RENAME@PMIx_Data_copy
|
||||
#define PMIx_Data_copy_payload @PMIX_RENAME@PMIx_Data_copy_payload
|
||||
#define PMIx_Data_pack @PMIX_RENAME@PMIx_Data_pack
|
||||
#define PMIx_Data_print @PMIX_RENAME@PMIx_Data_print
|
||||
#define PMIx_Data_range_string @PMIX_RENAME@PMIx_Data_range_string
|
||||
#define PMIx_Data_type_string @PMIX_RENAME@PMIx_Data_type_string
|
||||
#define PMIx_Data_unpack @PMIX_RENAME@PMIx_Data_unpack
|
||||
#define pmix_debug_threads @PMIX_RENAME@pmix_debug_threads
|
||||
#define PMIx_Deregister_event_handler @PMIX_RENAME@PMIx_Deregister_event_handler
|
||||
#define pmix_deregister_params @PMIX_RENAME@pmix_deregister_params
|
||||
#define pmix_dirname @PMIX_RENAME@pmix_dirname
|
||||
#define PMIx_Disconnect @PMIX_RENAME@PMIx_Disconnect
|
||||
#define PMIx_Disconnect_nb @PMIX_RENAME@PMIx_Disconnect_nb
|
||||
#define pmix_environ_merge @PMIX_RENAME@pmix_environ_merge
|
||||
#define PMIx_Error_string @PMIX_RENAME@PMIx_Error_string
|
||||
#define pmix_fd_read @PMIX_RENAME@pmix_fd_read
|
||||
#define pmix_fd_set_cloexec @PMIX_RENAME@pmix_fd_set_cloexec
|
||||
#define pmix_fd_write @PMIX_RENAME@pmix_fd_write
|
||||
#define PMIx_Fence @PMIX_RENAME@PMIx_Fence
|
||||
#define PMIx_Fence_nb @PMIX_RENAME@PMIx_Fence_nb
|
||||
#define PMIx_Finalize @PMIX_RENAME@PMIx_Finalize
|
||||
#define pmix_find_absolute_path @PMIX_RENAME@pmix_find_absolute_path
|
||||
#define pmix_gds_base_assign_module @PMIX_RENAME@pmix_gds_base_assign_module
|
||||
#define pmix_gds_base_framework @PMIX_RENAME@pmix_gds_base_framework
|
||||
#define pmix_gds_base_get_available_modules @PMIX_RENAME@pmix_gds_base_get_available_modules
|
||||
#define pmix_gds_base_output @PMIX_RENAME@pmix_gds_base_output
|
||||
#define pmix_gds_base_select @PMIX_RENAME@pmix_gds_base_select
|
||||
#define pmix_gds_base_setup_fork @PMIX_RENAME@pmix_gds_base_setup_fork
|
||||
#define pmix_gds_globals @PMIX_RENAME@pmix_gds_globals
|
||||
#define PMIx_generate_ppn @PMIX_RENAME@PMIx_generate_ppn
|
||||
#define PMIx_generate_regex @PMIX_RENAME@PMIx_generate_regex
|
||||
#define PMIx_Get @PMIX_RENAME@PMIx_Get
|
||||
#define PMIx_Get_nb @PMIX_RENAME@PMIx_Get_nb
|
||||
#define PMIx_Get_version @PMIX_RENAME@PMIx_Get_version
|
||||
#define pmix_global_lock @PMIX_RENAME@pmix_global_lock
|
||||
#define pmix_globals @PMIX_RENAME@pmix_globals
|
||||
#define pmix_hash_fetch @PMIX_RENAME@pmix_hash_fetch
|
||||
#define pmix_hash_fetch_by_key @PMIX_RENAME@pmix_hash_fetch_by_key
|
||||
#define pmix_hash_remove_data @PMIX_RENAME@pmix_hash_remove_data
|
||||
#define pmix_hash_store @PMIX_RENAME@pmix_hash_store
|
||||
#define pmix_hash_table_get_first_key_ptr @PMIX_RENAME@pmix_hash_table_get_first_key_ptr
|
||||
#define pmix_hash_table_get_first_key_uint32 @PMIX_RENAME@pmix_hash_table_get_first_key_uint32
|
||||
#define pmix_hash_table_get_first_key_uint64 @PMIX_RENAME@pmix_hash_table_get_first_key_uint64
|
||||
#define pmix_hash_table_get_next_key_ptr @PMIX_RENAME@pmix_hash_table_get_next_key_ptr
|
||||
#define pmix_hash_table_get_next_key_uint32 @PMIX_RENAME@pmix_hash_table_get_next_key_uint32
|
||||
#define pmix_hash_table_get_next_key_uint64 @PMIX_RENAME@pmix_hash_table_get_next_key_uint64
|
||||
#define pmix_hash_table_get_value_ptr @PMIX_RENAME@pmix_hash_table_get_value_ptr
|
||||
#define pmix_hash_table_get_value_uint32 @PMIX_RENAME@pmix_hash_table_get_value_uint32
|
||||
#define pmix_hash_table_get_value_uint64 @PMIX_RENAME@pmix_hash_table_get_value_uint64
|
||||
#define pmix_hash_table_init @PMIX_RENAME@pmix_hash_table_init
|
||||
#define pmix_hash_table_init2 @PMIX_RENAME@pmix_hash_table_init2
|
||||
#define pmix_hash_table_remove_all @PMIX_RENAME@pmix_hash_table_remove_all
|
||||
#define pmix_hash_table_remove_value_ptr @PMIX_RENAME@pmix_hash_table_remove_value_ptr
|
||||
#define pmix_hash_table_remove_value_uint32 @PMIX_RENAME@pmix_hash_table_remove_value_uint32
|
||||
#define pmix_hash_table_remove_value_uint64 @PMIX_RENAME@pmix_hash_table_remove_value_uint64
|
||||
#define pmix_hash_table_set_value_ptr @PMIX_RENAME@pmix_hash_table_set_value_ptr
|
||||
#define pmix_hash_table_set_value_uint32 @PMIX_RENAME@pmix_hash_table_set_value_uint32
|
||||
#define pmix_hash_table_set_value_uint64 @PMIX_RENAME@pmix_hash_table_set_value_uint64
|
||||
#define pmix_hash_table_t_class @PMIX_RENAME@pmix_hash_table_t_class
|
||||
#define pmix_home_directory @PMIX_RENAME@pmix_home_directory
|
||||
#define pmix_host_server @PMIX_RENAME@pmix_host_server
|
||||
#define pmix_hotel_init @PMIX_RENAME@pmix_hotel_init
|
||||
#define pmix_ifaddrtokindex @PMIX_RENAME@pmix_ifaddrtokindex
|
||||
#define pmix_ifaddrtoname @PMIX_RENAME@pmix_ifaddrtoname
|
||||
#define pmix_ifbegin @PMIX_RENAME@pmix_ifbegin
|
||||
#define pmix_ifcount @PMIX_RENAME@pmix_ifcount
|
||||
#define pmix_ifgetaliases @PMIX_RENAME@pmix_ifgetaliases
|
||||
#define pmix_ifindextoaddr @PMIX_RENAME@pmix_ifindextoaddr
|
||||
#define pmix_ifindextoflags @PMIX_RENAME@pmix_ifindextoflags
|
||||
#define pmix_ifindextokindex @PMIX_RENAME@pmix_ifindextokindex
|
||||
#define pmix_ifindextomac @PMIX_RENAME@pmix_ifindextomac
|
||||
#define pmix_ifindextomask @PMIX_RENAME@pmix_ifindextomask
|
||||
#define pmix_ifindextomtu @PMIX_RENAME@pmix_ifindextomtu
|
||||
#define pmix_ifindextoname @PMIX_RENAME@pmix_ifindextoname
|
||||
#define pmix_ifislocal @PMIX_RENAME@pmix_ifislocal
|
||||
#define pmix_ifisloopback @PMIX_RENAME@pmix_ifisloopback
|
||||
#define pmix_ifkindextoaddr @PMIX_RENAME@pmix_ifkindextoaddr
|
||||
#define pmix_ifkindextoname @PMIX_RENAME@pmix_ifkindextoname
|
||||
#define pmix_ifmatches @PMIX_RENAME@pmix_ifmatches
|
||||
#define pmix_ifnametoaddr @PMIX_RENAME@pmix_ifnametoaddr
|
||||
#define pmix_ifnametoindex @PMIX_RENAME@pmix_ifnametoindex
|
||||
#define pmix_ifnametokindex @PMIX_RENAME@pmix_ifnametokindex
|
||||
#define pmix_ifnext @PMIX_RENAME@pmix_ifnext
|
||||
#define pmix_iftupletoaddr @PMIX_RENAME@pmix_iftupletoaddr
|
||||
#define pmix_info_caddy_t_class @PMIX_RENAME@pmix_info_caddy_t_class
|
||||
#define PMIx_Info_directives_string @PMIX_RENAME@PMIx_Info_directives_string
|
||||
#define PMIx_Init @PMIX_RENAME@PMIx_Init
|
||||
#define pmix_init_called @PMIX_RENAME@pmix_init_called
|
||||
#define pmix_initialized @PMIX_RENAME@pmix_initialized
|
||||
#define PMIx_Initialized @PMIX_RENAME@PMIx_Initialized
|
||||
#define PMIx_Job_control_nb @PMIX_RENAME@PMIx_Job_control_nb
|
||||
#define pmix_kval_t_class @PMIX_RENAME@pmix_kval_t_class
|
||||
#define pmix_listener_t_class @PMIX_RENAME@pmix_listener_t_class
|
||||
#define pmix_list_item_t_class @PMIX_RENAME@pmix_list_item_t_class
|
||||
#define pmix_list_t_class @PMIX_RENAME@pmix_list_t_class
|
||||
#define PMIx_Log_nb @PMIX_RENAME@PMIx_Log_nb
|
||||
#define PMIx_Lookup @PMIX_RENAME@PMIx_Lookup
|
||||
#define PMIx_Lookup_nb @PMIX_RENAME@PMIx_Lookup_nb
|
||||
#define pmix_mca_base_close @PMIX_RENAME@pmix_mca_base_close
|
||||
#define pmix_mca_base_cmd_line_process_args @PMIX_RENAME@pmix_mca_base_cmd_line_process_args
|
||||
#define pmix_mca_base_cmd_line_setup @PMIX_RENAME@pmix_mca_base_cmd_line_setup
|
||||
#define pmix_mca_base_cmd_line_wrap_args @PMIX_RENAME@pmix_mca_base_cmd_line_wrap_args
|
||||
#define pmix_mca_base_component_close @PMIX_RENAME@pmix_mca_base_component_close
|
||||
#define pmix_mca_base_component_compare @PMIX_RENAME@pmix_mca_base_component_compare
|
||||
#define pmix_mca_base_component_compare_priority @PMIX_RENAME@pmix_mca_base_component_compare_priority
|
||||
#define pmix_mca_base_component_compatible @PMIX_RENAME@pmix_mca_base_component_compatible
|
||||
#define pmix_mca_base_component_disable_dlopen @PMIX_RENAME@pmix_mca_base_component_disable_dlopen
|
||||
#define pmix_mca_base_component_find @PMIX_RENAME@pmix_mca_base_component_find
|
||||
#define pmix_mca_base_component_find_finalize @PMIX_RENAME@pmix_mca_base_component_find_finalize
|
||||
#define pmix_mca_base_component_list_item_t_class @PMIX_RENAME@pmix_mca_base_component_list_item_t_class
|
||||
#define pmix_mca_base_component_parse_requested @PMIX_RENAME@pmix_mca_base_component_parse_requested
|
||||
#define pmix_mca_base_component_path @PMIX_RENAME@pmix_mca_base_component_path
|
||||
#define pmix_mca_base_component_priority_list_item_t_class @PMIX_RENAME@pmix_mca_base_component_priority_list_item_t_class
|
||||
#define pmix_mca_base_component_repository_add @PMIX_RENAME@pmix_mca_base_component_repository_add
|
||||
#define pmix_mca_base_component_repository_finalize @PMIX_RENAME@pmix_mca_base_component_repository_finalize
|
||||
#define pmix_mca_base_component_repository_get_components @PMIX_RENAME@pmix_mca_base_component_repository_get_components
|
||||
#define pmix_mca_base_component_repository_init @PMIX_RENAME@pmix_mca_base_component_repository_init
|
||||
#define pmix_mca_base_component_repository_item_t_class @PMIX_RENAME@pmix_mca_base_component_repository_item_t_class
|
||||
#define pmix_mca_base_component_repository_open @PMIX_RENAME@pmix_mca_base_component_repository_open
|
||||
#define pmix_mca_base_component_repository_release @PMIX_RENAME@pmix_mca_base_component_repository_release
|
||||
#define pmix_mca_base_component_repository_retain_component @PMIX_RENAME@pmix_mca_base_component_repository_retain_component
|
||||
#define pmix_mca_base_components_close @PMIX_RENAME@pmix_mca_base_components_close
|
||||
#define pmix_mca_base_components_filter @PMIX_RENAME@pmix_mca_base_components_filter
|
||||
#define pmix_mca_base_component_show_load_errors @PMIX_RENAME@pmix_mca_base_component_show_load_errors
|
||||
#define pmix_mca_base_component_to_string @PMIX_RENAME@pmix_mca_base_component_to_string
|
||||
#define pmix_mca_base_component_track_load_errors @PMIX_RENAME@pmix_mca_base_component_track_load_errors
|
||||
#define pmix_mca_base_component_unload @PMIX_RENAME@pmix_mca_base_component_unload
|
||||
#define pmix_mca_base_component_var_register @PMIX_RENAME@pmix_mca_base_component_var_register
|
||||
#define pmix_mca_base_failed_component_t_class @PMIX_RENAME@pmix_mca_base_failed_component_t_class
|
||||
#define pmix_mca_base_framework_close @PMIX_RENAME@pmix_mca_base_framework_close
|
||||
#define pmix_mca_base_framework_components_close @PMIX_RENAME@pmix_mca_base_framework_components_close
|
||||
#define pmix_mca_base_framework_components_open @PMIX_RENAME@pmix_mca_base_framework_components_open
|
||||
#define pmix_mca_base_framework_components_register @PMIX_RENAME@pmix_mca_base_framework_components_register
|
||||
#define pmix_mca_base_framework_is_open @PMIX_RENAME@pmix_mca_base_framework_is_open
|
||||
#define pmix_mca_base_framework_is_registered @PMIX_RENAME@pmix_mca_base_framework_is_registered
|
||||
#define pmix_mca_base_framework_open @PMIX_RENAME@pmix_mca_base_framework_open
|
||||
#define pmix_mca_base_framework_register @PMIX_RENAME@pmix_mca_base_framework_register
|
||||
#define pmix_mca_base_framework_var_register @PMIX_RENAME@pmix_mca_base_framework_var_register
|
||||
#define pmix_mca_base_open @PMIX_RENAME@pmix_mca_base_open
|
||||
#define pmix_mca_base_select @PMIX_RENAME@pmix_mca_base_select
|
||||
#define pmix_mca_base_system_default_path @PMIX_RENAME@pmix_mca_base_system_default_path
|
||||
#define pmix_mca_base_user_default_path @PMIX_RENAME@pmix_mca_base_user_default_path
|
||||
#define pmix_mca_base_var_build_env @PMIX_RENAME@pmix_mca_base_var_build_env
|
||||
#define pmix_mca_base_var_cache_files @PMIX_RENAME@pmix_mca_base_var_cache_files
|
||||
#define pmix_mca_base_var_check_exclusive @PMIX_RENAME@pmix_mca_base_var_check_exclusive
|
||||
#define pmix_mca_base_var_deregister @PMIX_RENAME@pmix_mca_base_var_deregister
|
||||
#define pmix_mca_base_var_dump @PMIX_RENAME@pmix_mca_base_var_dump
|
||||
#define pmix_mca_base_var_env_name @PMIX_RENAME@pmix_mca_base_var_env_name
|
||||
#define pmix_mca_base_var_finalize @PMIX_RENAME@pmix_mca_base_var_finalize
|
||||
#define pmix_mca_base_var_find @PMIX_RENAME@pmix_mca_base_var_find
|
||||
#define pmix_mca_base_var_find_by_name @PMIX_RENAME@pmix_mca_base_var_find_by_name
|
||||
#define pmix_mca_base_var_get @PMIX_RENAME@pmix_mca_base_var_get
|
||||
#define pmix_mca_base_var_get_count @PMIX_RENAME@pmix_mca_base_var_get_count
|
||||
#define pmix_mca_base_var_get_value @PMIX_RENAME@pmix_mca_base_var_get_value
|
||||
#define pmix_mca_base_var_group_component_register @PMIX_RENAME@pmix_mca_base_var_group_component_register
|
||||
#define pmix_mca_base_var_group_deregister @PMIX_RENAME@pmix_mca_base_var_group_deregister
|
||||
#define pmix_mca_base_var_group_find @PMIX_RENAME@pmix_mca_base_var_group_find
|
||||
#define pmix_mca_base_var_group_find_by_name @PMIX_RENAME@pmix_mca_base_var_group_find_by_name
|
||||
#define pmix_mca_base_var_group_get @PMIX_RENAME@pmix_mca_base_var_group_get
|
||||
#define pmix_mca_base_var_group_get_count @PMIX_RENAME@pmix_mca_base_var_group_get_count
|
||||
#define pmix_mca_base_var_group_get_stamp @PMIX_RENAME@pmix_mca_base_var_group_get_stamp
|
||||
#define pmix_mca_base_var_group_register @PMIX_RENAME@pmix_mca_base_var_group_register
|
||||
#define pmix_mca_base_var_group_set_var_flag @PMIX_RENAME@pmix_mca_base_var_group_set_var_flag
|
||||
#define pmix_mca_base_var_group_t_class @PMIX_RENAME@pmix_mca_base_var_group_t_class
|
||||
#define pmix_mca_base_var_init @PMIX_RENAME@pmix_mca_base_var_init
|
||||
#define pmix_mca_base_var_process_env_list @PMIX_RENAME@pmix_mca_base_var_process_env_list
|
||||
#define pmix_mca_base_var_process_env_list_from_file @PMIX_RENAME@pmix_mca_base_var_process_env_list_from_file
|
||||
#define pmix_mca_base_var_register @PMIX_RENAME@pmix_mca_base_var_register
|
||||
#define pmix_mca_base_var_register_synonym @PMIX_RENAME@pmix_mca_base_var_register_synonym
|
||||
#define pmix_mca_base_var_set_flag @PMIX_RENAME@pmix_mca_base_var_set_flag
|
||||
#define pmix_mca_base_var_set_value @PMIX_RENAME@pmix_mca_base_var_set_value
|
||||
#define pmix_mca_base_var_t_class @PMIX_RENAME@pmix_mca_base_var_t_class
|
||||
#define pmix_mutex_t_class @PMIX_RENAME@pmix_mutex_t_class
|
||||
#define pmix_namelist_t_class @PMIX_RENAME@pmix_namelist_t_class
|
||||
#define pmix_net_addr_isipv4public @PMIX_RENAME@pmix_net_addr_isipv4public
|
||||
#define pmix_net_finalize @PMIX_RENAME@pmix_net_finalize
|
||||
#define pmix_net_get_hostname @PMIX_RENAME@pmix_net_get_hostname
|
||||
#define pmix_net_get_port @PMIX_RENAME@pmix_net_get_port
|
||||
#define pmix_net_init @PMIX_RENAME@pmix_net_init
|
||||
#define pmix_net_isaddr @PMIX_RENAME@pmix_net_isaddr
|
||||
#define pmix_net_islocalhost @PMIX_RENAME@pmix_net_islocalhost
|
||||
#define pmix_net_prefix2netmask @PMIX_RENAME@pmix_net_prefix2netmask
|
||||
#define pmix_net_samenetwork @PMIX_RENAME@pmix_net_samenetwork
|
||||
#define PMIx_Notify_event @PMIX_RENAME@PMIx_Notify_event
|
||||
#define pmix_nspace_caddy_t_class @PMIX_RENAME@pmix_nspace_caddy_t_class
|
||||
#define pmix_nspace_t_class @PMIX_RENAME@pmix_nspace_t_class
|
||||
#define pmix_object_t_class @PMIX_RENAME@pmix_object_t_class
|
||||
#define pmix_os_path @PMIX_RENAME@pmix_os_path
|
||||
#define pmix_output @PMIX_RENAME@pmix_output
|
||||
#define pmix_output_close @PMIX_RENAME@pmix_output_close
|
||||
#define pmix_output_finalize @PMIX_RENAME@pmix_output_finalize
|
||||
#define pmix_output_get_verbosity @PMIX_RENAME@pmix_output_get_verbosity
|
||||
#define pmix_output_check_verbosity @PMIX_RENAME@pmix_output_check_verbosity
|
||||
#define pmix_output_hexdump @PMIX_RENAME@pmix_output_hexdump
|
||||
#define pmix_output_init @PMIX_RENAME@pmix_output_init
|
||||
#define pmix_output_open @PMIX_RENAME@pmix_output_open
|
||||
#define pmix_output_reopen @PMIX_RENAME@pmix_output_reopen
|
||||
#define pmix_output_reopen_all @PMIX_RENAME@pmix_output_reopen_all
|
||||
#define pmix_output_set_output_file_info @PMIX_RENAME@pmix_output_set_output_file_info
|
||||
#define pmix_output_set_verbosity @PMIX_RENAME@pmix_output_set_verbosity
|
||||
#define pmix_output_switch @PMIX_RENAME@pmix_output_switch
|
||||
#define pmix_output_vverbose @PMIX_RENAME@pmix_output_vverbose
|
||||
#define pmix_path_access @PMIX_RENAME@pmix_path_access
|
||||
#define pmix_path_df @PMIX_RENAME@pmix_path_df
|
||||
#define pmix_path_find @PMIX_RENAME@pmix_path_find
|
||||
#define pmix_path_findv @PMIX_RENAME@pmix_path_findv
|
||||
#define pmix_path_is_absolute @PMIX_RENAME@pmix_path_is_absolute
|
||||
#define pmix_path_nfs @PMIX_RENAME@pmix_path_nfs
|
||||
#define pmix_pdl_base_framework @PMIX_RENAME@pmix_pdl_base_framework
|
||||
#define pmix_peer_t_class @PMIX_RENAME@pmix_peer_t_class
|
||||
#define pmix_pending_connection_t_class @PMIX_RENAME@pmix_pending_connection_t_class
|
||||
#define PMIx_Persistence_string @PMIX_RENAME@PMIx_Persistence_string
|
||||
#define pmix_pif_base_framework @PMIX_RENAME@pmix_pif_base_framework
|
||||
#define pmix_pinstall_dirs @PMIX_RENAME@pmix_pinstall_dirs
|
||||
#define pmix_pinstalldirs_base_framework @PMIX_RENAME@pmix_pinstalldirs_base_framework
|
||||
#define pmix_pnet @PMIX_RENAME@pmix_pnet
|
||||
#define pmix_pnet_base_child_finalized @PMIX_RENAME@pmix_pnet_base_child_finalized
|
||||
#define pmix_pnet_base_framework @PMIX_RENAME@pmix_pnet_base_framework
|
||||
#define pmix_pnet_base_local_app_finalized @PMIX_RENAME@pmix_pnet_base_local_app_finalized
|
||||
#define pmix_pnet_base_select @PMIX_RENAME@pmix_pnet_base_select
|
||||
#define pmix_pnet_base_setup_app @PMIX_RENAME@pmix_pnet_base_setup_app
|
||||
#define pmix_pnet_base_setup_fork @PMIX_RENAME@pmix_pnet_base_setup_fork
|
||||
#define pmix_pnet_base_setup_local_network @PMIX_RENAME@pmix_pnet_base_setup_local_network
|
||||
#define pmix_pnet_globals @PMIX_RENAME@pmix_pnet_globals
|
||||
#define pmix_pointer_array_add @PMIX_RENAME@pmix_pointer_array_add
|
||||
#define pmix_pointer_array_init @PMIX_RENAME@pmix_pointer_array_init
|
||||
#define pmix_pointer_array_set_item @PMIX_RENAME@pmix_pointer_array_set_item
|
||||
#define pmix_pointer_array_set_size @PMIX_RENAME@pmix_pointer_array_set_size
|
||||
#define pmix_pointer_array_t_class @PMIX_RENAME@pmix_pointer_array_t_class
|
||||
#define pmix_pointer_array_test_and_set_item @PMIX_RENAME@pmix_pointer_array_test_and_set_item
|
||||
#define pmix_preg @PMIX_RENAME@pmix_preg
|
||||
#define pmix_preg_base_framework @PMIX_RENAME@pmix_preg_base_framework
|
||||
#define pmix_preg_base_generate_node_regex @PMIX_RENAME@pmix_preg_base_generate_node_regex
|
||||
#define pmix_preg_base_generate_ppn @PMIX_RENAME@pmix_preg_base_generate_ppn
|
||||
#define pmix_preg_base_parse_nodes @PMIX_RENAME@pmix_preg_base_parse_nodes
|
||||
#define pmix_preg_base_parse_procs @PMIX_RENAME@pmix_preg_base_parse_procs
|
||||
#define pmix_preg_base_resolve_nodes @PMIX_RENAME@pmix_preg_base_resolve_nodes
|
||||
#define pmix_preg_base_resolve_peers @PMIX_RENAME@pmix_preg_base_resolve_peers
|
||||
#define pmix_preg_base_select @PMIX_RENAME@pmix_preg_base_select
|
||||
#define pmix_preg_globals @PMIX_RENAME@pmix_preg_globals
|
||||
#define PMIx_Process_monitor_nb @PMIX_RENAME@PMIx_Process_monitor_nb
|
||||
#define PMIx_Proc_state_string @PMIX_RENAME@PMIx_Proc_state_string
|
||||
#define pmix_psec_base_assign_module @PMIX_RENAME@pmix_psec_base_assign_module
|
||||
#define pmix_psec_base_framework @PMIX_RENAME@pmix_psec_base_framework
|
||||
#define pmix_psec_base_get_available_modules @PMIX_RENAME@pmix_psec_base_get_available_modules
|
||||
#define pmix_psec_base_select @PMIX_RENAME@pmix_psec_base_select
|
||||
#define pmix_psensor @PMIX_RENAME@pmix_psensor
|
||||
#define pmix_psensor_base @PMIX_RENAME@pmix_psensor_base
|
||||
#define pmix_psensor_base_framework @PMIX_RENAME@pmix_psensor_base_framework
|
||||
#define pmix_psensor_base_select @PMIX_RENAME@pmix_psensor_base_select
|
||||
#define pmix_psensor_base_start @PMIX_RENAME@pmix_psensor_base_start
|
||||
#define pmix_psensor_base_stop @PMIX_RENAME@pmix_psensor_base_stop
|
||||
#define pmix_pshmem @PMIX_RENAME@pmix_pshmem
|
||||
#define pmix_pshmem_base_framework @PMIX_RENAME@pmix_pshmem_base_framework
|
||||
#define pmix_pshmem_base_select @PMIX_RENAME@pmix_pshmem_base_select
|
||||
#define pmix_ptl_base_assign_module @PMIX_RENAME@pmix_ptl_base_assign_module
|
||||
#define pmix_ptl_base_cancel_recv @PMIX_RENAME@pmix_ptl_base_cancel_recv
|
||||
#define pmix_ptl_base_connect @PMIX_RENAME@pmix_ptl_base_connect
|
||||
#define pmix_ptl_base_connect_to_peer @PMIX_RENAME@pmix_ptl_base_connect_to_peer
|
||||
#define pmix_ptl_base_framework @PMIX_RENAME@pmix_ptl_base_framework
|
||||
#define pmix_ptl_base_get_available_modules @PMIX_RENAME@pmix_ptl_base_get_available_modules
|
||||
#define pmix_ptl_base_lost_connection @PMIX_RENAME@pmix_ptl_base_lost_connection
|
||||
#define pmix_ptl_base_output @PMIX_RENAME@pmix_ptl_base_output
|
||||
#define pmix_ptl_base_process_msg @PMIX_RENAME@pmix_ptl_base_process_msg
|
||||
#define pmix_ptl_base_recv_blocking @PMIX_RENAME@pmix_ptl_base_recv_blocking
|
||||
#define pmix_ptl_base_recv_handler @PMIX_RENAME@pmix_ptl_base_recv_handler
|
||||
#define pmix_ptl_base_register_recv @PMIX_RENAME@pmix_ptl_base_register_recv
|
||||
#define pmix_ptl_base_select @PMIX_RENAME@pmix_ptl_base_select
|
||||
#define pmix_ptl_base_send @PMIX_RENAME@pmix_ptl_base_send
|
||||
#define pmix_ptl_base_send_blocking @PMIX_RENAME@pmix_ptl_base_send_blocking
|
||||
#define pmix_ptl_base_send_handler @PMIX_RENAME@pmix_ptl_base_send_handler
|
||||
#define pmix_ptl_base_send_recv @PMIX_RENAME@pmix_ptl_base_send_recv
|
||||
#define pmix_ptl_base_set_blocking @PMIX_RENAME@pmix_ptl_base_set_blocking
|
||||
#define pmix_ptl_base_set_nonblocking @PMIX_RENAME@pmix_ptl_base_set_nonblocking
|
||||
#define pmix_ptl_base_set_notification_cbfunc @PMIX_RENAME@pmix_ptl_base_set_notification_cbfunc
|
||||
#define pmix_ptl_base_start_listening @PMIX_RENAME@pmix_ptl_base_start_listening
|
||||
#define pmix_ptl_base_stop_listening @PMIX_RENAME@pmix_ptl_base_stop_listening
|
||||
#define pmix_ptl_globals @PMIX_RENAME@pmix_ptl_globals
|
||||
#define pmix_ptl_posted_recv_t_class @PMIX_RENAME@pmix_ptl_posted_recv_t_class
|
||||
#define pmix_ptl_queue_t_class @PMIX_RENAME@pmix_ptl_queue_t_class
|
||||
#define pmix_ptl_recv_t_class @PMIX_RENAME@pmix_ptl_recv_t_class
|
||||
#define pmix_ptl_send_t_class @PMIX_RENAME@pmix_ptl_send_t_class
|
||||
#define pmix_ptl_sr_t_class @PMIX_RENAME@pmix_ptl_sr_t_class
|
||||
#define PMIx_Publish @PMIX_RENAME@PMIx_Publish
|
||||
#define PMIx_Publish_nb @PMIX_RENAME@PMIx_Publish_nb
|
||||
#define PMIx_Put @PMIX_RENAME@PMIx_Put
|
||||
#define pmix_query_caddy_t_class @PMIX_RENAME@pmix_query_caddy_t_class
|
||||
#define PMIx_Query_info_nb @PMIX_RENAME@PMIx_Query_info_nb
|
||||
#define pmix_rand @PMIX_RENAME@pmix_rand
|
||||
#define pmix_random @PMIX_RENAME@pmix_random
|
||||
#define pmix_rank_info_t_class @PMIX_RENAME@pmix_rank_info_t_class
|
||||
#define pmix_recursive_mutex_t_class @PMIX_RENAME@pmix_recursive_mutex_t_class
|
||||
#define pmix_regex_range_t_class @PMIX_RENAME@pmix_regex_range_t_class
|
||||
#define pmix_regex_value_t_class @PMIX_RENAME@pmix_regex_value_t_class
|
||||
#define PMIx_Register_event_handler @PMIX_RENAME@PMIx_Register_event_handler
|
||||
#define pmix_register_params @PMIX_RENAME@pmix_register_params
|
||||
#define PMIx_Resolve_nodes @PMIX_RENAME@PMIx_Resolve_nodes
|
||||
#define PMIx_Resolve_peers @PMIX_RENAME@PMIx_Resolve_peers
|
||||
#define pmix_ring_buffer_init @PMIX_RENAME@pmix_ring_buffer_init
|
||||
#define pmix_ring_buffer_poke @PMIX_RENAME@pmix_ring_buffer_poke
|
||||
#define pmix_ring_buffer_pop @PMIX_RENAME@pmix_ring_buffer_pop
|
||||
#define pmix_ring_buffer_push @PMIX_RENAME@pmix_ring_buffer_push
|
||||
#define pmix_rte_finalize @PMIX_RENAME@pmix_rte_finalize
|
||||
#define pmix_rte_init @PMIX_RENAME@pmix_rte_init
|
||||
#define PMIx_Scope_string @PMIX_RENAME@PMIx_Scope_string
|
||||
#define PMIx_server_deregister_client @PMIX_RENAME@PMIx_server_deregister_client
|
||||
#define PMIx_server_deregister_nspace @PMIX_RENAME@PMIx_server_deregister_nspace
|
||||
#define PMIx_server_dmodex_request @PMIX_RENAME@PMIx_server_dmodex_request
|
||||
#define PMIx_server_finalize @PMIX_RENAME@PMIx_server_finalize
|
||||
#define pmix_server_globals @PMIX_RENAME@pmix_server_globals
|
||||
#define PMIx_server_init @PMIX_RENAME@PMIx_server_init
|
||||
#define PMIx_server_register_client @PMIX_RENAME@PMIx_server_register_client
|
||||
#define PMIx_server_register_nspace @PMIX_RENAME@PMIx_server_register_nspace
|
||||
#define PMIx_server_setup_application @PMIX_RENAME@PMIx_server_setup_application
|
||||
#define PMIx_server_setup_fork @PMIX_RENAME@PMIx_server_setup_fork
|
||||
#define PMIx_server_setup_local_support @PMIX_RENAME@PMIx_server_setup_local_support
|
||||
#define pmix_setenv @PMIX_RENAME@pmix_setenv
|
||||
#define pmix_setup_caddy_t_class @PMIX_RENAME@pmix_setup_caddy_t_class
|
||||
#define pmix_shift_caddy_t_class @PMIX_RENAME@pmix_shift_caddy_t_class
|
||||
#define pmix_show_help @PMIX_RENAME@pmix_show_help
|
||||
#define pmix_show_help_add_dir @PMIX_RENAME@pmix_show_help_add_dir
|
||||
#define pmix_show_help_finalize @PMIX_RENAME@pmix_show_help_finalize
|
||||
#define pmix_show_help_init @PMIX_RENAME@pmix_show_help_init
|
||||
#define pmix_show_help_string @PMIX_RENAME@pmix_show_help_string
|
||||
#define pmix_show_help_vstring @PMIX_RENAME@pmix_show_help_vstring
|
||||
#define pmix_show_vhelp @PMIX_RENAME@pmix_show_vhelp
|
||||
#define pmix_snprintf @PMIX_RENAME@pmix_snprintf
|
||||
#define PMIx_Spawn @PMIX_RENAME@PMIx_Spawn
|
||||
#define PMIx_Spawn_nb @PMIX_RENAME@PMIx_Spawn_nb
|
||||
#define pmix_srand @PMIX_RENAME@pmix_srand
|
||||
#define PMIx_Store_internal @PMIX_RENAME@PMIx_Store_internal
|
||||
#define pmix_sync_wait_mt @PMIX_RENAME@pmix_sync_wait_mt
|
||||
#define pmix_thread_get_self @PMIX_RENAME@pmix_thread_get_self
|
||||
#define pmix_thread_join @PMIX_RENAME@pmix_thread_join
|
||||
#define pmix_thread_kill @PMIX_RENAME@pmix_thread_kill
|
||||
#define pmix_thread_self_compare @PMIX_RENAME@pmix_thread_self_compare
|
||||
#define pmix_thread_set_main @PMIX_RENAME@pmix_thread_set_main
|
||||
#define pmix_thread_start @PMIX_RENAME@pmix_thread_start
|
||||
#define pmix_thread_t_class @PMIX_RENAME@pmix_thread_t_class
|
||||
#define pmix_tmp_directory @PMIX_RENAME@pmix_tmp_directory
|
||||
#define PMIx_tool_finalize @PMIX_RENAME@PMIx_tool_finalize
|
||||
#define PMIx_tool_init @PMIX_RENAME@PMIx_tool_init
|
||||
#define pmix_tsd_key_create @PMIX_RENAME@pmix_tsd_key_create
|
||||
#define pmix_tsd_keys_destruct @PMIX_RENAME@pmix_tsd_keys_destruct
|
||||
#define PMIx_Unpublish @PMIX_RENAME@PMIx_Unpublish
|
||||
#define PMIx_Unpublish_nb @PMIX_RENAME@PMIx_Unpublish_nb
|
||||
#define pmix_unsetenv @PMIX_RENAME@pmix_unsetenv
|
||||
#define pmix_util_compress_string @PMIX_RENAME@pmix_util_compress_string
|
||||
#define pmix_util_getid @PMIX_RENAME@pmix_util_getid
|
||||
#define pmix_util_get_ranges @PMIX_RENAME@pmix_util_get_ranges
|
||||
#define pmix_util_keyval_parse @PMIX_RENAME@pmix_util_keyval_parse
|
||||
#define pmix_util_keyval_parse_finalize @PMIX_RENAME@pmix_util_keyval_parse_finalize
|
||||
#define pmix_util_keyval_parse_init @PMIX_RENAME@pmix_util_keyval_parse_init
|
||||
#define pmix_util_keyval_parse_lineno @PMIX_RENAME@pmix_util_keyval_parse_lineno
|
||||
#define pmix_util_keyval_save_internal_envars @PMIX_RENAME@pmix_util_keyval_save_internal_envars
|
||||
#define pmix_util_parse_range_options @PMIX_RENAME@pmix_util_parse_range_options
|
||||
#define pmix_util_uncompress_string @PMIX_RENAME@pmix_util_uncompress_string
|
||||
#define pmix_value_array_set_size @PMIX_RENAME@pmix_value_array_set_size
|
||||
#define pmix_value_array_t_class @PMIX_RENAME@pmix_value_array_t_class
|
||||
#define pmix_value_load @PMIX_RENAME@pmix_value_load
|
||||
#define pmix_value_xfer @PMIX_RENAME@pmix_value_xfer
|
||||
#define pmix_var_type_names @PMIX_RENAME@pmix_var_type_names
|
||||
#define pmix_vasprintf @PMIX_RENAME@pmix_vasprintf
|
||||
#define pmix_vsnprintf @PMIX_RENAME@pmix_vsnprintf
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
@ -543,34 +543,41 @@ PMIX_EXPORT pmix_status_t PMIx_server_init(pmix_server_module_t *module,
|
||||
* memory usage is released */
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_finalize(void);
|
||||
|
||||
/* given a semicolon-separated list of input values, generate
|
||||
* a regex that can be passed down to the client for parsing.
|
||||
* The caller is responsible for free'ing the resulting
|
||||
* string
|
||||
/* Given a comma-separated list of \refarg{input} values, generate
|
||||
* a reduced size representation of the input that can be passed
|
||||
* down to PMIx_server_register_nspace for parsing. The order of
|
||||
* the individual values in the \refarg{input} string is preserved
|
||||
* across the operation. The caller is responsible for releasing
|
||||
* the returned data.
|
||||
*
|
||||
* If values have leading zero's, then that is preserved. You
|
||||
* have to add back any prefix/suffix for node names
|
||||
* odin[009-015,017-023,076-086]
|
||||
*
|
||||
* "pmix:odin[009-015,017-023,076-086]"
|
||||
*
|
||||
* Note that the "pmix" at the beginning of each regex indicates
|
||||
* that the PMIx native parser is to be used by the client for
|
||||
* parsing the provided regex. Other parsers may be supported - see
|
||||
* the pmix_client.h header for a list.
|
||||
* The returned representation may be an arbitrary array of bytes
|
||||
* as opposed to a valid NULL-terminated string. However, the
|
||||
* method used to generate the representation shall be identified
|
||||
* with a colon-delimited string at the beginning of the output.
|
||||
* For example, an output starting with "pmix:" indicates that
|
||||
* the representation is a PMIx-defined regular expression.
|
||||
* In contrast, an output starting with "blob:" is a compressed
|
||||
* binary array.
|
||||
*/
|
||||
PMIX_EXPORT pmix_status_t PMIx_generate_regex(const char *input, char **regex);
|
||||
|
||||
/* The input is expected to consist of a comma-separated list
|
||||
* of ranges. Thus, an input of:
|
||||
* "1-4;2-5;8,10,11,12;6,7,9"
|
||||
* would generate a regex of
|
||||
* "[pmix:2x(3);8,10-12;6-7,9]"
|
||||
/* The input shall consist of a semicolon-separated list of ranges
|
||||
* representing the ranks of processes on each node of the job -
|
||||
* e.g., "1-4;2-5;8,10,11,12;6,7,9". Each field of the input must
|
||||
* correspond to the node name provided at that position in the
|
||||
* input to PMIx_generate_regex. Thus, in the example, ranks 1-4
|
||||
* would be located on the first node of the comma-separated list
|
||||
* of names provided to PMIx_generate_regex, and ranks 2-5 would
|
||||
* be on the second name in the list.
|
||||
*
|
||||
* Note that the "pmix" at the beginning of each regex indicates
|
||||
* that the PMIx native parser is to be used by the client for
|
||||
* parsing the provided regex. Other parsers may be supported - see
|
||||
* the pmix_client.h header for a list.
|
||||
* The returned representation may be an arbitrary array of bytes
|
||||
* as opposed to a valid NULL-terminated string. However, the
|
||||
* method used to generate the representation shall be identified
|
||||
* with a colon-delimited string at the beginning of the output.
|
||||
* For example, an output starting with "pmix:" indicates that
|
||||
* the representation is a PMIx-defined regular expression.
|
||||
* In contrast, an output starting with "blob:" is a compressed
|
||||
* binary array.
|
||||
*/
|
||||
PMIX_EXPORT pmix_status_t PMIx_generate_ppn(const char *input, char **ppn);
|
||||
|
||||
@ -751,6 +758,7 @@ PMIX_EXPORT pmix_status_t PMIx_server_deliver_inventory(pmix_info_t info[], size
|
||||
pmix_info_t directives[], size_t ndirs,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2018 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
|
12
opal/mca/pmix/pmix3x/pmix/maint/pmix.pc.in
Обычный файл
12
opal/mca/pmix/pmix3x/pmix/maint/pmix.pc.in
Обычный файл
@ -0,0 +1,12 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: pmix
|
||||
Description: Process Management Interface for Exascale (PMIx)
|
||||
Version: @PACKAGE_VERSION@
|
||||
URL: https://pmix.org/
|
||||
Requires: @PC_REQUIRES@
|
||||
Libs: -L${libdir} -lpmix @PC_PRIVATE_LIBS@
|
||||
Cflags: -I${includedir}
|
@ -11,7 +11,7 @@
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -42,6 +42,8 @@ sources =
|
||||
nodist_headers =
|
||||
EXTRA_DIST =
|
||||
dist_pmixdata_DATA =
|
||||
nobase_pmix_HEADERS =
|
||||
pmixdir = $(pmixincludedir)/$(subdir)
|
||||
|
||||
# place to capture sources for backward compatibility libs
|
||||
pmi1_sources =
|
||||
@ -105,6 +107,11 @@ include tools/Makefile.include
|
||||
include common/Makefile.include
|
||||
include hwloc/Makefile.include
|
||||
|
||||
if WANT_INSTALL_HEADERS
|
||||
nobase_pmix_HEADERS += $(headers)
|
||||
endif
|
||||
|
||||
|
||||
MAINTAINERCLEANFILES = Makefile.in config.h config.h.in
|
||||
DISTCLEANFILES = Makefile
|
||||
CLEANFILES = core.* *~
|
||||
|
@ -15,7 +15,7 @@
|
||||
# reserved.
|
||||
# Copyright (c) 2017 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2017-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2017-2020 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -38,6 +38,4 @@ include atomics/sys/arm/Makefile.include
|
||||
include atomics/sys/arm64/Makefile.include
|
||||
include atomics/sys/ia32/Makefile.include
|
||||
include atomics/sys/powerpc/Makefile.include
|
||||
include atomics/sys/sparcv9/Makefile.include
|
||||
include atomics/sys/sync_builtin/Makefile.include
|
||||
include atomics/sys/gcc_builtin/Makefile.include
|
||||
|
@ -10,7 +10,7 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2017 Research Organization for Information Science
|
||||
@ -32,27 +32,16 @@
|
||||
/* Architectures */
|
||||
#define PMIX_UNSUPPORTED 0000
|
||||
#define PMIX_IA32 0010
|
||||
#define PMIX_IA64 0020
|
||||
#define PMIX_X86_64 0030
|
||||
#define PMIX_POWERPC32 0050
|
||||
#define PMIX_POWERPC64 0051
|
||||
#define PMIX_SPARC 0060
|
||||
#define PMIX_SPARCV9_32 0061
|
||||
#define PMIX_SPARCV9_64 0062
|
||||
#define PMIX_MIPS 0070
|
||||
#define PMIX_ARM 0100
|
||||
#define PMIX_ARM64 0101
|
||||
#define PMIX_S390 0110
|
||||
#define PMIX_S390X 0111
|
||||
#define PMIX_BUILTIN_SYNC 0200
|
||||
#define PMIX_BUILTIN_GCC 0202
|
||||
#define PMIX_BUILTIN_NO 0203
|
||||
#define PMIX_BUILTIN_C11 0204
|
||||
|
||||
/* Formats */
|
||||
#define PMIX_DEFAULT 1000 /* standard for given architecture */
|
||||
#define PMIX_DARWIN 1001 /* Darwin / OS X on PowerPC */
|
||||
#define PMIX_PPC_LINUX 1002 /* Linux on PowerPC */
|
||||
#define PMIX_AIX 1003 /* AIX on Power / PowerPC */
|
||||
|
||||
#endif /* #ifndef PMIX_SYS_ARCHITECTURE_H */
|
||||
|
@ -16,7 +16,7 @@
|
||||
* reserved.
|
||||
* Copyright (c) 2017 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -52,7 +52,7 @@
|
||||
#ifndef PMIX_SYS_ATOMIC_H
|
||||
#define PMIX_SYS_ATOMIC_H 1
|
||||
|
||||
#include "pmix_config.h"
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
@ -164,8 +164,6 @@ enum {
|
||||
*********************************************************************/
|
||||
#if defined(DOXYGEN)
|
||||
/* don't include system-level gorp when generating doxygen files */
|
||||
#elif PMIX_ASSEMBLY_BUILTIN == PMIX_BUILTIN_SYNC
|
||||
#include "src/atomics/sys/sync_builtin/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_BUILTIN == PMIX_BUILTIN_GCC
|
||||
#include "src/atomics/sys/gcc_builtin/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_X86_64
|
||||
@ -176,20 +174,10 @@ enum {
|
||||
#include "src/atomics/sys/arm64/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA32
|
||||
#include "src/atomics/sys/ia32/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA64
|
||||
#include "src/atomics/sys/ia64/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_MIPS
|
||||
#include "src/atomics/sys/mips/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC32
|
||||
#include "src/atomics/sys/powerpc/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC64
|
||||
#include "src/atomics/sys/powerpc/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_SPARC
|
||||
#include "src/atomics/sys/sparc/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_32
|
||||
#include "src/atomics/sys/sparcv9/atomic.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64
|
||||
#include "src/atomics/sys/sparcv9/atomic.h"
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
@ -215,6 +215,7 @@ typedef atomic_flag pmix_atomic_lock_t;
|
||||
*/
|
||||
static inline void pmix_atomic_lock_init (pmix_atomic_lock_t *lock, bool value)
|
||||
{
|
||||
(void)value;
|
||||
atomic_flag_clear (lock);
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* reserved.
|
||||
* Copyright (c) 2017 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*/
|
||||
|
||||
@ -44,9 +44,6 @@
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA32
|
||||
#define __NR_process_vm_readv 347
|
||||
#define __NR_process_vm_writev 348
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA64
|
||||
#define __NR_process_vm_readv 1332
|
||||
#define __NR_process_vm_writev 1333
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC32
|
||||
#define __NR_process_vm_readv 351
|
||||
#define __NR_process_vm_writev 352
|
||||
@ -65,33 +62,6 @@
|
||||
#define __NR_process_vm_readv 270
|
||||
#define __NR_process_vm_writev 271
|
||||
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_MIPS
|
||||
|
||||
#if _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
|
||||
#define __NR_process_vm_readv 5304
|
||||
#define __NR_process_vm_writev 5305
|
||||
|
||||
#elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
|
||||
#define __NR_process_vm_readv 6309
|
||||
#define __NR_process_vm_writev 6310
|
||||
|
||||
#else
|
||||
|
||||
#error "Unsupported MIPS architecture for process_vm_readv and process_vm_writev syscalls"
|
||||
|
||||
#endif
|
||||
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_S390
|
||||
|
||||
#define __NR_process_vm_readv 340
|
||||
#define __NR_process_vm_writev 341
|
||||
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_S390X
|
||||
|
||||
#define __NR_process_vm_readv 340
|
||||
#define __NR_process_vm_writev 341
|
||||
|
||||
#else
|
||||
#error "Unsupported architecture for process_vm_readv and process_vm_writev syscalls"
|
||||
|
@ -1,24 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# This makefile.am does not stand on its own - it is included from pmix/include/Makefile.am
|
||||
|
||||
headers += \
|
||||
atomics/sys/sparcv9/atomic.h \
|
||||
atomics/sys/sparcv9/timer.h
|
@ -1,203 +0,0 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
|
||||
* Copyright (c) 2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2017-2018 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#ifndef PMIX_SYS_ARCH_ATOMIC_H
|
||||
#define PMIX_SYS_ARCH_ATOMIC_H 1
|
||||
|
||||
/*
|
||||
* On sparc v9, use casa and casxa (compare and swap) instructions.
|
||||
*/
|
||||
|
||||
#define ASI_P "0x80"
|
||||
|
||||
#define MEPMIXMBAR(type) __asm__ __volatile__ ("membar " type : : : "memory")
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* Define constants for Sparc v9 (Ultra Sparc)
|
||||
*
|
||||
*********************************************************************/
|
||||
#define PMIX_HAVE_ATOMIC_MEM_BARRIER 1
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 1
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64 1
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* Memory Barriers
|
||||
*
|
||||
*********************************************************************/
|
||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
||||
|
||||
static inline void pmix_atomic_mb(void)
|
||||
{
|
||||
MEPMIXMBAR("#LoadLoad | #LoadStore | #StoreStore | #StoreLoad");
|
||||
}
|
||||
|
||||
|
||||
static inline void pmix_atomic_rmb(void)
|
||||
{
|
||||
MEPMIXMBAR("#LoadLoad");
|
||||
}
|
||||
|
||||
|
||||
static inline void pmix_atomic_wmb(void)
|
||||
{
|
||||
MEPMIXMBAR("#StoreStore");
|
||||
}
|
||||
|
||||
static inline void pmix_atomic_isync(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* Atomic math operations
|
||||
*
|
||||
*********************************************************************/
|
||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_32 (pmix_atomic_int32_t *addr, int32_t *oldval, int32_t newval)
|
||||
{
|
||||
/* casa [reg(rs1)] %asi, reg(rs2), reg(rd)
|
||||
*
|
||||
* if (*(reg(rs1)) == reg(rs2) )
|
||||
* swap reg(rd), *(reg(rs1))
|
||||
* else
|
||||
* reg(rd) = *(reg(rs1))
|
||||
*/
|
||||
|
||||
int32_t prev = newval;
|
||||
bool ret;
|
||||
|
||||
__asm__ __volatile__("casa [%1] " ASI_P ", %2, %0"
|
||||
: "+r" (prev)
|
||||
: "r" (addr), "r" (*oldval));
|
||||
ret = (prev == *oldval);
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_acq_32 (pmix_atomic_int32_t *addr, int32_t *oldval, int32_t newval)
|
||||
{
|
||||
bool rc;
|
||||
|
||||
rc = pmix_atomic_compare_exchange_strong_32 (addr, oldval, newval);
|
||||
pmix_atomic_rmb();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_rel_32 (pmix_atomic_int32_t *addr, int32_t *oldval, int32_t newval)
|
||||
{
|
||||
pmix_atomic_wmb();
|
||||
return pmix_atomic_compare_exchange_strong_32 (addr, oldval, newval);
|
||||
}
|
||||
|
||||
|
||||
#if PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
|
||||
{
|
||||
/* casa [reg(rs1)] %asi, reg(rs2), reg(rd)
|
||||
*
|
||||
* if (*(reg(rs1)) == reg(rs1) )
|
||||
* swap reg(rd), *(reg(rs1))
|
||||
* else
|
||||
* reg(rd) = *(reg(rs1))
|
||||
*/
|
||||
int64_t prev = newval;
|
||||
bool ret;
|
||||
|
||||
__asm__ __volatile__("casxa [%1] " ASI_P ", %2, %0"
|
||||
: "+r" (prev)
|
||||
: "r" (addr), "r" (*oldval));
|
||||
ret = (prev == *oldval);
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64 */
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
|
||||
{
|
||||
/* casa [reg(rs1)] %asi, reg(rs2), reg(rd)
|
||||
*
|
||||
* if (*(reg(rs1)) == reg(rs1) )
|
||||
* swap reg(rd), *(reg(rs1))
|
||||
* else
|
||||
* reg(rd) = *(reg(rs1))
|
||||
*
|
||||
*/
|
||||
int64_t prev = newval;
|
||||
bool ret;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"ldx %0, %%g1 \n\t" /* g1 = ret */
|
||||
"ldx %2, %%g2 \n\t" /* g2 = oldval */
|
||||
"casxa [%1] " ASI_P ", %%g2, %%g1 \n\t"
|
||||
"stx %%g1, %0 \n"
|
||||
: "+m"(prev)
|
||||
: "r"(addr), "m"(*oldval)
|
||||
: "%g1", "%g2"
|
||||
);
|
||||
|
||||
ret = (prev == *oldval);
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64 */
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_acq_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
|
||||
{
|
||||
bool rc;
|
||||
|
||||
rc = pmix_atomic_compare_exchange_strong_64 (addr, oldval, newval);
|
||||
pmix_atomic_rmb();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_rel_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
|
||||
{
|
||||
pmix_atomic_wmb();
|
||||
return pmix_atomic_compare_exchange_strong_64 (addr, oldval, newval);
|
||||
}
|
||||
|
||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
||||
|
||||
|
||||
#endif /* ! PMIX_SYS_ARCH_ATOMIC_H */
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#ifndef PMIX_SYS_ARCH_TIMER_H
|
||||
#define PMIX_SYS_ARCH_TIMER_H 1
|
||||
|
||||
typedef uint64_t pmix_timer_t;
|
||||
|
||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
||||
|
||||
|
||||
#if PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64
|
||||
|
||||
static inline pmix_timer_t
|
||||
pmix_sys_timer_get_cycles(void)
|
||||
{
|
||||
pmix_timer_t ret;
|
||||
|
||||
__asm__ __volatile__("rd %%tick, %0" : "=r"(ret));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* PMIX_SPARCV9_32 */
|
||||
|
||||
static inline pmix_timer_t
|
||||
pmix_sys_timer_get_cycles(void)
|
||||
{
|
||||
pmix_timer_t ret;
|
||||
int a, b;
|
||||
|
||||
__asm__ __volatile__("rd %%tick, %0 \n"
|
||||
"srlx %0, 32, %1 " :
|
||||
"=r"(a), "=r"(b)
|
||||
);
|
||||
|
||||
ret = (0x00000000FFFFFFFF & a) | (((pmix_timer_t) b) << 32);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#define PMIX_HAVE_SYS_TIMER_GET_CYCLES 1
|
||||
|
||||
#else
|
||||
|
||||
#define PMIX_HAVE_SYS_TIMER_GET_CYCLES 0
|
||||
|
||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
||||
|
||||
#endif /* ! PMIX_SYS_ARCH_TIMER_H */
|
@ -1,24 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2009 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# This makefile.am does not stand on its own - it is included from pmix/include/Makefile.am
|
||||
|
||||
headers += \
|
||||
atomics/sys/sync_builtin/atomic.h
|
@ -1,166 +0,0 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2013 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
|
||||
* Copyright (c) 2014-2018 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2017 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#ifndef PMIX_SYS_ARCH_ATOMIC_H
|
||||
#define PMIX_SYS_ARCH_ATOMIC_H 1
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* Memory Barriers
|
||||
*
|
||||
*********************************************************************/
|
||||
#define PMIX_HAVE_ATOMIC_MEM_BARRIER 1
|
||||
|
||||
static inline void pmix_atomic_mb(void)
|
||||
{
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
||||
static inline void pmix_atomic_rmb(void)
|
||||
{
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
||||
static inline void pmix_atomic_wmb(void)
|
||||
{
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
||||
#define PMIXMB() pmix_atomic_mb()
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* Atomic math operations
|
||||
*
|
||||
*********************************************************************/
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 1
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_32 (pmix_atomic_int32_t *addr, int32_t *oldval, int32_t newval)
|
||||
{
|
||||
int32_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
|
||||
bool ret = prev == *oldval;
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define pmix_atomic_compare_exchange_strong_acq_32 pmix_atomic_compare_exchange_strong_32
|
||||
#define pmix_atomic_compare_exchange_strong_rel_32 pmix_atomic_compare_exchange_strong_32
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_MATH_32 1
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_ADD_32 1
|
||||
static inline int32_t pmix_atomic_fetch_add_32(pmix_atomic_int32_t *addr, int32_t delta)
|
||||
{
|
||||
return __sync_fetch_and_add(addr, delta);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_AND_32 1
|
||||
static inline int32_t pmix_atomic_fetch_and_32(pmix_atomic_int32_t *addr, int32_t value)
|
||||
{
|
||||
return __sync_fetch_and_and(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_OR_32 1
|
||||
static inline int32_t pmix_atomic_fetch_or_32(pmix_atomic_int32_t *addr, int32_t value)
|
||||
{
|
||||
return __sync_fetch_and_or(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_XOR_32 1
|
||||
static inline int32_t pmix_atomic_fetch_xor_32(pmix_atomic_int32_t *addr, int32_t value)
|
||||
{
|
||||
return __sync_fetch_and_xor(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_SUB_32 1
|
||||
static inline int32_t pmix_atomic_fetch_sub_32(pmix_atomic_int32_t *addr, int32_t delta)
|
||||
{
|
||||
return __sync_fetch_and_sub(addr, delta);
|
||||
}
|
||||
|
||||
#if PMIX_ASM_SYNC_HAVE_64BIT
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64 1
|
||||
|
||||
static inline bool pmix_atomic_compare_exchange_strong_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
|
||||
{
|
||||
int64_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
|
||||
bool ret = prev == *oldval;
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define pmix_atomic_compare_exchange_strong_acq_64 pmix_atomic_compare_exchange_strong_64
|
||||
#define pmix_atomic_compare_exchange_strong_rel_64 pmix_atomic_compare_exchange_strong_64
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_MATH_64 1
|
||||
#define PMIX_HAVE_ATOMIC_ADD_64 1
|
||||
static inline int64_t pmix_atomic_fetch_add_64(pmix_atomic_int64_t *addr, int64_t delta)
|
||||
{
|
||||
return __sync_fetch_and_add(addr, delta);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_AND_64 1
|
||||
static inline int64_t pmix_atomic_fetch_and_64(pmix_atomic_int64_t *addr, int64_t value)
|
||||
{
|
||||
return __sync_fetch_and_and(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_OR_64 1
|
||||
static inline int64_t pmix_atomic_fetch_or_64(pmix_atomic_int64_t *addr, int64_t value)
|
||||
{
|
||||
return __sync_fetch_and_or(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_XOR_64 1
|
||||
static inline int64_t pmix_atomic_fetch_xor_64(pmix_atomic_int64_t *addr, int64_t value)
|
||||
{
|
||||
return __sync_fetch_and_xor(addr, value);
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_SUB_64 1
|
||||
static inline int64_t pmix_atomic_fetch_sub_64(pmix_atomic_int64_t *addr, int64_t delta)
|
||||
{
|
||||
return __sync_fetch_and_sub(addr, delta);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if PMIX_HAVE_SYNC_BUILTIN_CSWAP_INT128
|
||||
static inline bool pmix_atomic_compare_exchange_strong_128 (pmix_atomic_int128_t *addr,
|
||||
pmix_int128_t *oldval, pmix_int128_t newval)
|
||||
{
|
||||
pmix_int128_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
|
||||
bool ret = prev == *oldval;
|
||||
*oldval = prev;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_128 1
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* ! PMIX_SYS_ARCH_ATOMIC_H */
|
@ -13,7 +13,7 @@
|
||||
* Copyright (c) 2016 Broadcom Limited. All rights reserved.
|
||||
* Copyright (c) 2016-2017 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -79,18 +79,10 @@ BEGIN_C_DECLS
|
||||
#include "src/atomics/sys/arm64/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA32
|
||||
#include "src/atomics/sys/ia32/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_IA64
|
||||
#include "src/atomics/sys/ia64/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC32
|
||||
#include "src/atomics/sys/powerpc/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC64
|
||||
#include "src/atomics/sys/powerpc/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_32
|
||||
#include "src/atomics/sys/sparcv9/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64
|
||||
#include "src/atomics/sys/sparcv9/timer.h"
|
||||
#elif PMIX_ASSEMBLY_ARCH == PMIX_MIPS
|
||||
#include "src/atomics/sys/mips/timer.h"
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
|
@ -11,7 +11,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2010-2012 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -21,12 +21,12 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "pmix_common.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "src/class/pmix_bitmap.h"
|
||||
|
||||
/* The number of bits in the underlying type of the bitmap field
|
||||
|
@ -12,7 +12,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2010-2012 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -41,7 +41,7 @@
|
||||
#ifndef PMIX_BITMAP_H
|
||||
#define PMIX_BITMAP_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2014-2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -19,7 +19,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -9,7 +9,7 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
@ -34,8 +34,8 @@
|
||||
#ifndef PMIX_HASH_TABLE_H
|
||||
#define PMIX_HASH_TABLE_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <src/include/prefetch.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "src/include/prefetch.h"
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
@ -43,7 +43,7 @@
|
||||
|
||||
#include "src/class/pmix_list.h"
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include "include/pmix_common.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2016 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved
|
||||
* Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -11,7 +11,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
@ -22,6 +22,8 @@
|
||||
|
||||
static void local_eviction_callback(int fd, short flags, void *arg)
|
||||
{
|
||||
(void)fd;
|
||||
(void)flags;
|
||||
pmix_hotel_room_eviction_callback_arg_t *eargs =
|
||||
(pmix_hotel_room_eviction_callback_arg_t*) arg;
|
||||
void *occupant = eargs->hotel->rooms[eargs->room_num].occupant;
|
||||
|
@ -2,7 +2,9 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2016 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved
|
||||
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -53,10 +55,10 @@
|
||||
#ifndef PMIX_HOTEL_H
|
||||
#define PMIX_HOTEL_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/types.h"
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "src/include/prefetch.h"
|
||||
#include "pmix_common.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "src/include/types.h"
|
||||
#include "src/class/pmix_object.h"
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
@ -307,7 +309,7 @@ static inline void pmix_hotel_checkout_and_return_occupant(pmix_hotel_t *hotel,
|
||||
*occupant = room->occupant;
|
||||
room->occupant = NULL;
|
||||
if (NULL != hotel->evbase) {
|
||||
event_del(&(room->eviction_timer_event));
|
||||
pmix_event_del(&(room->eviction_timer_event));
|
||||
}
|
||||
hotel->last_unoccupied_room++;
|
||||
assert(hotel->last_unoccupied_room < hotel->num_rooms);
|
||||
|
@ -11,7 +11,7 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Voltaire All rights reserved.
|
||||
* Copyright (c) 2013-2015 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -19,7 +19,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "src/class/pmix_list.h"
|
||||
|
||||
@ -143,7 +143,7 @@ bool pmix_list_insert(pmix_list_t *list, pmix_list_item_t *item, long long idx)
|
||||
|
||||
#if PMIX_ENABLE_DEBUG
|
||||
/* Spot check: ensure this item is only on the list that we
|
||||
just insertted it into */
|
||||
just inserted it into */
|
||||
|
||||
item->pmix_list_item_refcount += 1;
|
||||
assert(1 == item->pmix_list_item_refcount);
|
||||
|
@ -13,7 +13,7 @@
|
||||
* Copyright (c) 2007 Voltaire All rights reserved.
|
||||
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -67,7 +67,7 @@
|
||||
#ifndef PMIX_LIST_H
|
||||
#define PMIX_LIST_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#if HAVE_STDBOOL_H
|
||||
@ -119,6 +119,14 @@ struct pmix_list_item_t
|
||||
*/
|
||||
typedef struct pmix_list_item_t pmix_list_item_t;
|
||||
|
||||
/* static initializer for pmix_list_t */
|
||||
#define PMIX_LIST_ITEM_STATIC_INIT \
|
||||
{ \
|
||||
.super = PMIX_OBJ_STATIC_INIT(pmix_object_t), \
|
||||
.pmix_list_next = NULL, \
|
||||
.pmix_list_prev = NULL, \
|
||||
.item_free = 0 \
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the next item in a list.
|
||||
@ -160,6 +168,15 @@ struct pmix_list_t
|
||||
*/
|
||||
typedef struct pmix_list_t pmix_list_t;
|
||||
|
||||
/* static initializer for pmix_list_t */
|
||||
#define PMIX_LIST_STATIC_INIT \
|
||||
{ \
|
||||
.super = PMIX_OBJ_STATIC_INIT(pmix_object_t), \
|
||||
.pmix_list_sentinel = PMIX_LIST_ITEM_STATIC_INIT, \
|
||||
.pmix_list_length = 0 \
|
||||
}
|
||||
|
||||
|
||||
/** Cleanly destruct a list
|
||||
*
|
||||
* The pmix_list_t destructor doesn't release the items on the
|
||||
|
@ -9,7 +9,7 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -25,7 +25,7 @@
|
||||
* Implementation of pmix_object_t, the base pmix foundation class
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
/* Symbol transforms */
|
||||
|
||||
|
||||
|
@ -11,7 +11,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) 2013-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -120,8 +120,8 @@
|
||||
#ifndef PMIX_OBJECT_H
|
||||
#define PMIX_OBJECT_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix_common.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "include/pmix_common.h"
|
||||
|
||||
#include <assert.h>
|
||||
#ifdef HAVE_STDLIB_H
|
||||
@ -175,9 +175,20 @@ PMIX_EXPORT extern int pmix_class_init_epoch;
|
||||
* @param NAME Name of the class to initialize
|
||||
*/
|
||||
#if PMIX_ENABLE_DEBUG
|
||||
#define PMIX_OBJ_STATIC_INIT(BASE_CLASS) { PMIX_OBJ_MAGIC_ID, PMIX_CLASS(BASE_CLASS), 1, __FILE__, __LINE__ }
|
||||
#define PMIX_OBJ_STATIC_INIT(BASE_CLASS) \
|
||||
{ \
|
||||
.obj_magic_id = PMIX_OBJ_MAGIC_ID, \
|
||||
.obj_class = PMIX_CLASS(BASE_CLASS), \
|
||||
.obj_reference_count = 1, \
|
||||
.cls_init_file_name = __FILE__, \
|
||||
.cls_init_lineno = __LINE__, \
|
||||
}
|
||||
#else
|
||||
#define PMIX_OBJ_STATIC_INIT(BASE_CLASS) { PMIX_CLASS(BASE_CLASS), 1 }
|
||||
#define PMIX_OBJ_STATIC_INIT(BASE_CLASS) \
|
||||
{ \
|
||||
.obj_class = PMIX_CLASS(BASE_CLASS), \
|
||||
.obj_reference_count = 1, \
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -10,7 +10,7 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2017-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "pmix_config.h"
|
||||
#include "pmix_common.h"
|
||||
#include "include/pmix_common.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -11,7 +11,7 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2016-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -19,13 +19,13 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "pmix_common.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "src/class/pmix_ring_buffer.h"
|
||||
#include "src/util/output.h"
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -25,7 +25,7 @@
|
||||
#ifndef PMIX_RING_BUFFER_H
|
||||
#define PMIX_RING_BUFFER_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include "src/class/pmix_object.h"
|
||||
#include "src/util/output.h"
|
||||
|
@ -9,7 +9,7 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016-2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -17,7 +17,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include "src/class/pmix_value_array.h"
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016-2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -20,7 +20,7 @@
|
||||
#ifndef PMIX_VALUE_ARRAY_H
|
||||
#define PMIX_VALUE_ARRAY_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <string.h>
|
||||
#ifdef HAVE_STRINGS_H
|
||||
@ -31,7 +31,7 @@
|
||||
#if PMIX_ENABLE_DEBUG
|
||||
#include "src/util/output.h"
|
||||
#endif
|
||||
#include "pmix_common.h"
|
||||
#include "include/pmix_common.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
# -*- makefile -*-
|
||||
#
|
||||
# Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2016 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2016 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
@ -12,12 +12,10 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmi.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmi.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -12,9 +12,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
@ -27,8 +25,8 @@
|
||||
#endif
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include <pmi2.h>
|
||||
#include <pmix.h>
|
||||
#include "include/pmi2.h"
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/mca/bfrops/bfrops.h"
|
||||
#include "src/util/argv.h"
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2018 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016-2017 Mellanox Technologies, Inc.
|
||||
@ -15,14 +15,12 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
@ -46,11 +44,8 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if PMIX_HAVE_ZLIB
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
#include PMIX_EVENT_HEADER
|
||||
#if ! PMIX_HAVE_LIBEV
|
||||
#ifdef PMIX_EVENT2_THREAD_HEADER
|
||||
#include PMIX_EVENT2_THREAD_HEADER
|
||||
#endif
|
||||
|
||||
@ -60,7 +55,6 @@ static pmix_status_t pmix_init_result = PMIX_ERR_INIT;
|
||||
#include "src/class/pmix_list.h"
|
||||
#include "src/event/pmix_event.h"
|
||||
#include "src/util/argv.h"
|
||||
#include "src/util/compress.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/hash.h"
|
||||
#include "src/util/name_fns.h"
|
||||
@ -69,6 +63,7 @@ static pmix_status_t pmix_init_result = PMIX_ERR_INIT;
|
||||
#include "src/runtime/pmix_rte.h"
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/mca/bfrops/base/base.h"
|
||||
#include "src/mca/pcompress/base/base.h"
|
||||
#include "src/mca/gds/base/base.h"
|
||||
#include "src/mca/preg/preg.h"
|
||||
#include "src/mca/ptl/base/base.h"
|
||||
@ -82,7 +77,56 @@ static pmix_status_t pmix_init_result = PMIX_ERR_INIT;
|
||||
static void _notify_complete(pmix_status_t status, void *cbdata)
|
||||
{
|
||||
pmix_event_chain_t *chain = (pmix_event_chain_t*)cbdata;
|
||||
pmix_notify_caddy_t *cd;
|
||||
size_t n;
|
||||
pmix_status_t rc;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(chain);
|
||||
|
||||
/* if the event wasn't found, then cache it as it might
|
||||
* be registered later */
|
||||
if (PMIX_ERR_NOT_FOUND == status && !chain->cached) {
|
||||
cd = PMIX_NEW(pmix_notify_caddy_t);
|
||||
cd->status = chain->status;
|
||||
PMIX_LOAD_PROCID(&cd->source, chain->source.nspace, chain->source.rank);
|
||||
cd->range = chain->range;
|
||||
if (0 < chain->ninfo) {
|
||||
cd->ninfo = chain->ninfo;
|
||||
PMIX_INFO_CREATE(cd->info, cd->ninfo);
|
||||
cd->nondefault = chain->nondefault;
|
||||
/* need to copy the info */
|
||||
for (n=0; n < cd->ninfo; n++) {
|
||||
PMIX_INFO_XFER(&cd->info[n], &chain->info[n]);
|
||||
}
|
||||
}
|
||||
if (NULL != chain->targets) {
|
||||
cd->ntargets = chain->ntargets;
|
||||
PMIX_PROC_CREATE(cd->targets, cd->ntargets);
|
||||
memcpy(cd->targets, chain->targets, cd->ntargets * sizeof(pmix_proc_t));
|
||||
}
|
||||
if (NULL != chain->affected) {
|
||||
cd->naffected = chain->naffected;
|
||||
PMIX_PROC_CREATE(cd->affected, cd->naffected);
|
||||
if (NULL == cd->affected) {
|
||||
cd->naffected = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
memcpy(cd->affected, chain->affected, cd->naffected * sizeof(pmix_proc_t));
|
||||
}
|
||||
/* cache it */
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s pmix:client_notify - processing complete, caching",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid));
|
||||
rc = pmix_notify_event_cache(cd);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(cd);
|
||||
goto cleanup;
|
||||
}
|
||||
chain->cached = true;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
PMIX_RELEASE(chain);
|
||||
}
|
||||
|
||||
@ -96,8 +140,9 @@ static void pmix_client_notify_recv(struct pmix_peer_t *peer,
|
||||
pmix_event_chain_t *chain;
|
||||
size_t ninfo;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.base_output,
|
||||
"pmix:client_notify_recv - processing event");
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s pmix:client_notify_recv - processing event",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid));
|
||||
|
||||
/* a zero-byte buffer indicates that this recv is being
|
||||
* completed due to a lost connection */
|
||||
@ -175,17 +220,18 @@ static void pmix_client_notify_recv(struct pmix_peer_t *peer,
|
||||
/* prep the chain for processing */
|
||||
pmix_prep_event_chain(chain, chain->info, ninfo, false);
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.base_output,
|
||||
"[%s:%d] pmix:client_notify_recv - processing event %s, calling errhandler",
|
||||
pmix_globals.myid.nspace, pmix_globals.myid.rank, PMIx_Error_string(chain->status));
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s pmix:client_notify_recv - processing event %s, calling errhandler",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid), PMIx_Error_string(chain->status));
|
||||
|
||||
pmix_invoke_local_event_hdlr(chain);
|
||||
return;
|
||||
|
||||
error:
|
||||
/* we always need to return */
|
||||
pmix_output_verbose(2, pmix_client_globals.base_output,
|
||||
"pmix:client_notify_recv - unpack error status =%d, calling def errhandler", rc);
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s pmix:client_notify_recv - unpack error status =%s, calling def errhandler",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid), PMIx_Error_string(rc));
|
||||
chain = PMIX_NEW(pmix_event_chain_t);
|
||||
if (NULL == chain) {
|
||||
PMIX_ERROR_LOG(PMIX_ERR_NOMEM);
|
||||
@ -471,7 +517,7 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
pmix_info_t info[], size_t ninfo)
|
||||
{
|
||||
char *evar;
|
||||
pmix_status_t rc;
|
||||
pmix_status_t rc = PMIX_SUCCESS;
|
||||
pmix_cb_t cb;
|
||||
pmix_buffer_t *req;
|
||||
pmix_cmd_t cmd = PMIX_REQ_CMD;
|
||||
@ -484,6 +530,7 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
bool found;
|
||||
pmix_ptl_posted_recv_t *rcv;
|
||||
pid_t pid;
|
||||
pmix_kval_t *kptr;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
@ -657,7 +704,7 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
found = false;
|
||||
if (info != NULL) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (0 == strncmp(info[n].key, PMIX_GDS_MODULE, PMIX_MAX_KEYLEN)) {
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_GDS_MODULE)) {
|
||||
PMIX_INFO_LOAD(&ginfo, PMIX_GDS_MODULE, info[n].value.data.string, PMIX_STRING);
|
||||
found = true;
|
||||
break;
|
||||
@ -687,6 +734,7 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return rc;
|
||||
}
|
||||
rc = PMIX_ERR_UNREACH;
|
||||
} else {
|
||||
/* connect to the server */
|
||||
rc = pmix_ptl_base_connect_to_peer((struct pmix_peer_t*)pmix_client_globals.myserver, info, ninfo);
|
||||
@ -747,7 +795,7 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
PMIX_CONSTRUCT_LOCK(&releaselock);
|
||||
PMIX_INFO_LOAD(&evinfo[0], PMIX_EVENT_RETURN_OBJECT, &releaselock, PMIX_POINTER);
|
||||
PMIX_INFO_LOAD(&evinfo[1], PMIX_EVENT_HDLR_NAME, "WAIT-FOR-DEBUGGER", PMIX_STRING);
|
||||
pmix_output_verbose(2, pmix_client_globals.base_output,
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"[%s:%d] WAITING IN INIT FOR DEBUGGER",
|
||||
pmix_globals.myid.nspace, pmix_globals.myid.rank);
|
||||
PMIx_Register_event_handler(&code, 1, evinfo, 2,
|
||||
@ -767,7 +815,39 @@ PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
if (NULL != info) {
|
||||
_check_for_notify(info, ninfo);
|
||||
}
|
||||
return PMIX_SUCCESS;
|
||||
|
||||
/* store our server's ID */
|
||||
if (NULL != pmix_client_globals.myserver &&
|
||||
NULL != pmix_client_globals.myserver->info) {
|
||||
kptr = PMIX_NEW(pmix_kval_t);
|
||||
kptr->key = strdup(PMIX_SERVER_NSPACE);
|
||||
PMIX_VALUE_CREATE(kptr->value, 1);
|
||||
kptr->value->type = PMIX_STRING;
|
||||
kptr->value->data.string = strdup(pmix_client_globals.myserver->info->pname.nspace);
|
||||
PMIX_GDS_STORE_KV(rc, pmix_globals.mypeer,
|
||||
&pmix_globals.myid,
|
||||
PMIX_INTERNAL, kptr);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
PMIX_RELEASE(kptr); // maintain accounting
|
||||
kptr = PMIX_NEW(pmix_kval_t);
|
||||
kptr->key = strdup(PMIX_SERVER_RANK);
|
||||
PMIX_VALUE_CREATE(kptr->value, 1);
|
||||
kptr->value->type = PMIX_PROC_RANK;
|
||||
kptr->value->data.rank = pmix_client_globals.myserver->info->pname.rank;
|
||||
PMIX_GDS_STORE_KV(rc, pmix_globals.mypeer,
|
||||
&pmix_globals.myid,
|
||||
PMIX_INTERNAL, kptr);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
PMIX_RELEASE(kptr); // maintain accounting
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
PMIX_EXPORT int PMIx_Initialized(void)
|
||||
@ -1051,7 +1131,7 @@ static void _putfn(int sd, short args, void *cbdata)
|
||||
kv->value = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
||||
if (PMIX_STRING_SIZE_CHECK(cb->value)) {
|
||||
/* compress large strings */
|
||||
if (pmix_util_compress_string(cb->value->data.string, &tmp, &len)) {
|
||||
if (pmix_compress.compress_string(cb->value->data.string, &tmp, &len)) {
|
||||
if (NULL == tmp) {
|
||||
PMIX_ERROR_LOG(PMIX_ERR_NOMEM);
|
||||
rc = PMIX_ERR_NOMEM;
|
||||
@ -1398,12 +1478,22 @@ PMIX_EXPORT pmix_status_t PMIx_Resolve_peers(const char *nodename,
|
||||
for (n=0; NULL != tmp[n]; n++) {
|
||||
/* find the nspace delimiter */
|
||||
prs = strchr(tmp[n], ':');
|
||||
if (NULL == prs) {
|
||||
/* should never happen, but silence a Coverity warning */
|
||||
rc = PMIX_ERR_BAD_PARAM;
|
||||
pmix_argv_free(tmp);
|
||||
PMIX_PROC_FREE(pa, np);
|
||||
*procs = NULL;
|
||||
*nprocs = 0;
|
||||
goto done;
|
||||
}
|
||||
*prs = '\0';
|
||||
++prs;
|
||||
p = pmix_argv_split(prs, ',');
|
||||
for (m=0; NULL != p[m]; m++) {
|
||||
PMIX_LOAD_NSPACE(&pa[np].nspace, tmp[n]);
|
||||
pa[n].rank = strtoul(p[m], NULL, 10);
|
||||
pa[np].rank = strtoul(p[m], NULL, 10);
|
||||
++np;
|
||||
}
|
||||
pmix_argv_free(p);
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2017 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
@ -15,13 +15,11 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
#include "src/mca/gds/base/base.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
@ -15,13 +15,11 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016-2018 Mellanox Technologies, Inc.
|
||||
@ -15,13 +15,11 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
@ -45,17 +43,14 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if PMIX_HAVE_ZLIB
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include "src/class/pmix_list.h"
|
||||
#include "src/mca/bfrops/bfrops.h"
|
||||
#include "src/mca/pcompress/base/base.h"
|
||||
#include "src/mca/ptl/base/base.h"
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
#include "src/util/compress.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/hash.h"
|
||||
#include "src/util/name_fns.h"
|
||||
@ -65,7 +60,7 @@
|
||||
|
||||
#include "pmix_client_ops.h"
|
||||
|
||||
static pmix_buffer_t* _pack_get(char *nspace, pmix_rank_t rank,
|
||||
static pmix_buffer_t* _pack_get(char *nspace, pmix_rank_t rank, char *key,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_cmd_t cmd);
|
||||
|
||||
@ -136,11 +131,13 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
pmix_status_t rc;
|
||||
size_t n, nfo;
|
||||
bool wantinfo = false;
|
||||
bool haveid = false;
|
||||
char *hostname = NULL;
|
||||
uint32_t nodeid = UINT32_MAX;
|
||||
uint32_t appnum = UINT32_MAX;
|
||||
uint32_t app;
|
||||
pmix_proc_t p;
|
||||
pmix_info_t *iptr;
|
||||
bool copy = false;
|
||||
uint32_t appnum;
|
||||
pmix_value_t *ival = NULL;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
@ -151,6 +148,11 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
}
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
if (NULL == cbfunc) {
|
||||
/* no way to return the result! */
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* if the proc is NULL, then the caller is assuming
|
||||
* that the key is universally unique within the caller's
|
||||
* own nspace. This most likely indicates that the code
|
||||
@ -200,15 +202,29 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
PMIX_NAME_PRINT(&p), (NULL == key) ? "NULL" : key);
|
||||
|
||||
if (!PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 1, 5)) {
|
||||
/* ]don't consider the fastpath option
|
||||
/* don't consider the fastpath option
|
||||
* for undefined rank or NULL keys */
|
||||
if (PMIX_RANK_UNDEF == p.rank || NULL == key) {
|
||||
goto doget;
|
||||
}
|
||||
/* if they are asking about a node-level piece of info,
|
||||
* then the rank must be UNDEF */
|
||||
/* if they passed our nspace and an INVALID rank, and are asking
|
||||
* for PMIX_RANK, then they are asking for our process rank */
|
||||
if (PMIX_RANK_INVALID == p.rank &&
|
||||
PMIX_CHECK_NSPACE(p.nspace, pmix_globals.myid.nspace) &&
|
||||
NULL != key && 0 == strcmp(key, PMIX_RANK)) {
|
||||
PMIX_VALUE_CREATE(ival, 1);
|
||||
if (NULL == ival) {
|
||||
return PMIX_ERR_NOMEM;
|
||||
}
|
||||
ival->type = PMIX_PROC_RANK;
|
||||
ival->data.rank = pmix_globals.myid.rank;
|
||||
cbfunc(PMIX_SUCCESS, ival, cbdata);
|
||||
/* ownership of the memory in ival is passed to the
|
||||
* user in the cbfunc, so don't release it here */
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
/* see if they are asking about a node-level piece of info */
|
||||
if (pmix_check_node_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* the key is node-related - see if the target node is in the
|
||||
* info array and if they tagged the request accordingly */
|
||||
if (NULL != info) {
|
||||
@ -216,26 +232,55 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_NODE_INFO)) {
|
||||
wantinfo = true;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_HOSTNAME)) {
|
||||
haveid = true;
|
||||
hostname = info[n].value.data.string;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_NODEID)) {
|
||||
haveid = true;
|
||||
PMIX_VALUE_GET_NUMBER(rc, &info[n].value, nodeid, uint32_t);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wantinfo && haveid) {
|
||||
if (PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 2, PMIX_RELEASE_WILDCARD)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* see if they told us to get node info */
|
||||
if (!wantinfo) {
|
||||
/* guess not - better do it */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
}
|
||||
goto doget;
|
||||
}
|
||||
if (wantinfo && (NULL != hostname || UINT32_MAX != nodeid)) {
|
||||
/* they provided the "node-info" attribute. if they also
|
||||
* specified the target node and it is NOT us, then dstore cannot
|
||||
* resolve it and we need the rank to be undefined */
|
||||
if ((NULL != hostname && 0 == strcmp(hostname, pmix_globals.hostname)) ||
|
||||
nodeid == pmix_globals.nodeid) {
|
||||
goto fastpath;
|
||||
}
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
} else if (wantinfo) {
|
||||
/* missing the nodeid/hostname - add our hostname */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
/* they provided "node-info" but are missing the nodeid/hostname - assume
|
||||
* they are asking for info about our node. The dstore would have that */
|
||||
goto fastpath;
|
||||
} else if (NULL != hostname) {
|
||||
/* they did not provide the "node-info" attribute but did specify
|
||||
* a hostname - if the ID is other than us, then we just need to
|
||||
* flag it as "node-info" and mark it for the undefined rank so
|
||||
* the GDS will know where to look */
|
||||
if (0 == strcmp(hostname, pmix_globals.hostname)) {
|
||||
goto fastpath;
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else if (haveid) {
|
||||
/* flag that we want node info */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
@ -243,26 +288,35 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
} else if (UINT32_MAX != nodeid) {
|
||||
/* they did not provide the "node-info" attribute but did specify
|
||||
* the nodeid - if the ID is other than us, then we just need to
|
||||
* flag it as "node-info" and mark it for the undefined rank so
|
||||
* the GDS will know where to look */
|
||||
if (nodeid == pmix_globals.nodeid) {
|
||||
goto fastpath;
|
||||
}
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
} else {
|
||||
/* missing both */
|
||||
nfo = ninfo + 2;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
PMIX_INFO_LOAD(&iptr[ninfo+1], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||
copy = true;
|
||||
goto doget;
|
||||
/* nothing was given, so assume this is about our node and
|
||||
* pass it along */
|
||||
goto fastpath;
|
||||
}
|
||||
}
|
||||
|
||||
/* see if they are asking about an app-level piece of info */
|
||||
wantinfo = false;
|
||||
haveid = false;
|
||||
if (pmix_check_app_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* the key is app-related - see if the target appnum is in the
|
||||
* info array and if they tagged the request accordingly */
|
||||
if (NULL != info) {
|
||||
@ -271,32 +325,68 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
wantinfo = true;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_APPNUM) &&
|
||||
0 != info[n].value.data.uint32) {
|
||||
haveid = true;
|
||||
PMIX_VALUE_GET_NUMBER(rc, &info[n].value, appnum, uint32_t);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wantinfo && haveid) {
|
||||
if (PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 2, PMIX_RELEASE_WILDCARD)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* see if they told us to get app info */
|
||||
if (!wantinfo) {
|
||||
/* guess not - better do it */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
}
|
||||
goto doget;
|
||||
}
|
||||
if (wantinfo && UINT32_MAX != appnum) {
|
||||
/* asked for app-level info and provided an appnum - if it
|
||||
* isn't our appnum, then we need to redirect */
|
||||
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
PMIX_VALUE_GET_NUMBER(rc, ival, app, uint32_t);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
PMIX_VALUE_RELEASE(ival);
|
||||
if (app == appnum) {
|
||||
goto fastpath;
|
||||
}
|
||||
}
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
} else if (wantinfo) {
|
||||
/* missing the appnum - add ours */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
/* try to retrieve it */
|
||||
/* missing the appnum - assume it is ours */
|
||||
goto fastpath;
|
||||
} else if (UINT32_MAX != appnum) {
|
||||
/* they did not provide the "app-info" attribute but did specify
|
||||
* the appnum - if the ID is other than us, then we just need to
|
||||
* flag it as "app-info" and mark it for the undefined rank so
|
||||
* the GDS will know where to look */
|
||||
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
appnum = ival->data.uint32;
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
PMIX_VALUE_GET_NUMBER(rc, ival, app, uint32_t);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
PMIX_VALUE_RELEASE(ival);
|
||||
} else {
|
||||
appnum = 0;
|
||||
if (app == appnum) {
|
||||
goto fastpath;
|
||||
}
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else if (haveid) {
|
||||
/* flag that we want app info */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
@ -304,44 +394,29 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
goto doget;
|
||||
} else {
|
||||
/* missing both */
|
||||
nfo = ninfo + 2;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
/* try to retrieve it */
|
||||
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
appnum = ival->data.uint32;
|
||||
PMIX_VALUE_RELEASE(ival);
|
||||
} else {
|
||||
appnum = 0;
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||
copy = true;
|
||||
goto doget;
|
||||
/* missing both - all we can do is assume they want our info */
|
||||
goto fastpath;
|
||||
}
|
||||
}
|
||||
|
||||
/* see if they are requesting session info or requesting cache refresh */
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(info, PMIX_SESSION_INFO)) {
|
||||
if (PMIX_CHECK_KEY(info, PMIX_SESSION_INFO) ||
|
||||
PMIX_CHECK_KEY(info, PMIX_GET_REFRESH_CACHE)) {
|
||||
goto doget;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fastpath:
|
||||
/* try to get data directly, without threadshift */
|
||||
if (PMIX_SUCCESS == (rc = _getfn_fastpath(&p, key, iptr, nfo, &ival))) {
|
||||
if (NULL != cbfunc) {
|
||||
cbfunc(rc, ival, cbdata);
|
||||
/* ownership of the memory in ival is passed to the
|
||||
* user in the cbfunc, so don't release it here */
|
||||
}
|
||||
cbfunc(rc, ival, cbdata);
|
||||
/* ownership of the memory in ival is passed to the
|
||||
* user in the cbfunc, so don't release it here */
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -379,7 +454,7 @@ static void _value_cbfunc(pmix_status_t status, pmix_value_t *kv, void *cbdata)
|
||||
PMIX_WAKEUP_THREAD(&cb->lock);
|
||||
}
|
||||
|
||||
static pmix_buffer_t* _pack_get(char *nspace, pmix_rank_t rank,
|
||||
static pmix_buffer_t* _pack_get(char *nspace, pmix_rank_t rank, char *key,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_cmd_t cmd)
|
||||
{
|
||||
@ -429,6 +504,17 @@ static pmix_buffer_t* _pack_get(char *nspace, pmix_rank_t rank,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if (NULL != key) {
|
||||
/* pack the key */
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, &key, 1, PMIX_STRING);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
@ -541,19 +627,6 @@ static void _getnb_cbfunc(struct pmix_peer_t *pr,
|
||||
}
|
||||
}
|
||||
|
||||
static void timeout(int fd, short flags, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
|
||||
/* let them know that we timed out */
|
||||
cb->cbfunc.valuefn(PMIX_ERR_TIMEOUT, NULL, cb->cbdata);
|
||||
cb->timer_running = false;
|
||||
|
||||
/* remove this request */
|
||||
pmix_list_remove_item(&pmix_client_globals.pending_requests, &cb->super);
|
||||
PMIX_RELEASE(cb);
|
||||
}
|
||||
|
||||
static pmix_status_t process_values(pmix_value_t **v, pmix_cb_t *cb)
|
||||
{
|
||||
pmix_list_t *kvs = &cb->kvs;
|
||||
@ -602,113 +675,43 @@ static pmix_status_t process_values(pmix_value_t **v, pmix_cb_t *cb)
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
static void infocb(pmix_status_t status,
|
||||
pmix_info_t *info, size_t ninfo,
|
||||
void *cbdata,
|
||||
pmix_release_cbfunc_t release_fn,
|
||||
void *release_cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd = (pmix_query_caddy_t*)cbdata;
|
||||
pmix_value_t *kv = NULL;
|
||||
pmix_status_t rc;
|
||||
|
||||
if (PMIX_SUCCESS == status) {
|
||||
if (NULL != info) {
|
||||
/* there should be only one returned value */
|
||||
if (1 != ninfo) {
|
||||
rc = PMIX_ERR_INVALID_VAL;
|
||||
} else {
|
||||
PMIX_VALUE_CREATE(kv, 1);
|
||||
if (NULL == kv) {
|
||||
rc = PMIX_ERR_NOMEM;
|
||||
} else {
|
||||
/* if this is a compressed string, then uncompress it */
|
||||
if (PMIX_COMPRESSED_STRING == info[0].value.type) {
|
||||
kv->type = PMIX_STRING;
|
||||
pmix_util_uncompress_string(&kv->data.string, (uint8_t*)info[0].value.data.bo.bytes, info[0].value.data.bo.size);
|
||||
if (NULL == kv->data.string) {
|
||||
PMIX_ERROR_LOG(PMIX_ERR_NOMEM);
|
||||
rc = PMIX_ERR_NOMEM;
|
||||
PMIX_VALUE_FREE(kv, 1);
|
||||
kv = NULL;
|
||||
} else {
|
||||
rc = PMIX_SUCCESS;
|
||||
}
|
||||
} else {
|
||||
rc = pmix_value_xfer(kv, &info[0].value);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rc = PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
} else {
|
||||
rc = status;
|
||||
}
|
||||
if (NULL != cd->valcbfunc) {
|
||||
cd->valcbfunc(rc, kv, cd->cbdata);
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
if (NULL != kv) {
|
||||
PMIX_VALUE_FREE(kv, 1);
|
||||
}
|
||||
if (NULL != release_fn) {
|
||||
release_fn(release_cbdata);
|
||||
}
|
||||
}
|
||||
|
||||
static pmix_status_t _getfn_fastpath(const pmix_proc_t *proc, const pmix_key_t key,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_t **val)
|
||||
{
|
||||
pmix_cb_t *cb = PMIX_NEW(pmix_cb_t);
|
||||
pmix_cb_t cb;
|
||||
pmix_status_t rc = PMIX_SUCCESS;
|
||||
size_t n;
|
||||
|
||||
/* scan the incoming directives */
|
||||
if (NULL != info) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_DATA_SCOPE)) {
|
||||
cb->scope = info[n].value.data.scope;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_OPTIONAL) ||
|
||||
PMIX_CHECK_KEY(&info[n], PMIX_IMMEDIATE)) {
|
||||
continue;
|
||||
} else {
|
||||
/* we cannot handle any other directives via this path */
|
||||
PMIX_RELEASE(cb);
|
||||
return PMIX_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
cb->proc = (pmix_proc_t*)proc;
|
||||
cb->copy = true;
|
||||
cb->key = (char*)key;
|
||||
cb->info = (pmix_info_t*)info;
|
||||
cb->ninfo = ninfo;
|
||||
PMIX_CONSTRUCT(&cb, pmix_cb_t);
|
||||
cb.proc = (pmix_proc_t*)proc;
|
||||
cb.copy = true;
|
||||
cb.key = (char*)key;
|
||||
cb.info = (pmix_info_t*)info;
|
||||
cb.ninfo = ninfo;
|
||||
|
||||
PMIX_GDS_FETCH_IS_TSAFE(rc, pmix_client_globals.myserver);
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_client_globals.myserver, cb);
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_client_globals.myserver, &cb);
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
PMIX_GDS_FETCH_IS_TSAFE(rc, pmix_globals.mypeer);
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_globals.mypeer, cb);
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_globals.mypeer, &cb);
|
||||
if (PMIX_SUCCESS == rc) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
return rc;
|
||||
|
||||
done:
|
||||
rc = process_values(val, cb);
|
||||
rc = process_values(val, &cb);
|
||||
if (NULL != *val) {
|
||||
PMIX_VALUE_COMPRESSED_STRING_UNPACK(*val);
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -722,17 +725,14 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
size_t n;
|
||||
pmix_proc_t proc;
|
||||
bool optional = false;
|
||||
bool immediate = false;
|
||||
bool internal_only = false;
|
||||
struct timeval tv;
|
||||
pmix_query_caddy_t *cd;
|
||||
|
||||
/* cb was passed to us from another thread - acquire it */
|
||||
PMIX_ACQUIRE_OBJECT(cb);
|
||||
|
||||
/* set the proc object identifier */
|
||||
pmix_strncpy(proc.nspace, cb->pname.nspace, PMIX_MAX_NSLEN);
|
||||
proc.rank = cb->pname.rank;
|
||||
PMIX_LOAD_PROCID(&proc, cb->pname.nspace, cb->pname.rank);
|
||||
cb->proc = &proc;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.get_output,
|
||||
"pmix: getnbfn value for proc %s key %s",
|
||||
@ -744,25 +744,15 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
for (n=0; n < cb->ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&cb->info[n], PMIX_OPTIONAL)) {
|
||||
optional = PMIX_INFO_TRUE(&cb->info[n]);
|
||||
} else if (PMIX_CHECK_KEY(&cb->info[n], PMIX_IMMEDIATE)) {
|
||||
immediate = PMIX_INFO_TRUE(&cb->info[n]);
|
||||
} else if (PMIX_CHECK_KEY(&cb->info[n], PMIX_TIMEOUT)) {
|
||||
/* set a timer to kick us out if we don't
|
||||
* have an answer within their window */
|
||||
if (0 < cb->info[n].value.data.integer) {
|
||||
tv.tv_sec = cb->info[n].value.data.integer;
|
||||
tv.tv_usec = 0;
|
||||
pmix_event_evtimer_set(pmix_globals.evbase, &cb->ev,
|
||||
timeout, cb);
|
||||
pmix_event_evtimer_add(&cb->ev, &tv);
|
||||
cb->timer_running = true;
|
||||
}
|
||||
} else if (PMIX_CHECK_KEY(&cb->info[n], PMIX_DATA_SCOPE)) {
|
||||
cb->scope = cb->info[n].value.data.scope;
|
||||
} else if (PMIX_CHECK_KEY(&cb->info[n], PMIX_NODE_INFO) ||
|
||||
PMIX_CHECK_KEY(&cb->info[n], PMIX_APP_INFO) ||
|
||||
PMIX_CHECK_KEY(&cb->info[n], PMIX_SESSION_INFO)) {
|
||||
internal_only = true;
|
||||
} else if (PMIX_CHECK_KEY(&cb->info[n], PMIX_GET_REFRESH_CACHE)) {
|
||||
/* immediately query the server */
|
||||
goto request;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -792,7 +782,7 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
if (0 != strcmp(pmix_globals.mypeer->nptr->compat.gds->name, pmix_client_globals.myserver->nptr->compat.gds->name)) {
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_client_globals.myserver, cb);
|
||||
} else {
|
||||
rc = PMIX_ERR_TAKE_NEXT_OPTION;
|
||||
rc = PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
pmix_output_verbose(5, pmix_client_globals.get_output,
|
||||
@ -806,31 +796,10 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
goto request;
|
||||
} else if (NULL != cb->key) {
|
||||
/* if immediate was given, then we are being directed to
|
||||
* check with the server even though the caller is looking for
|
||||
* job-level info. In some cases, a server may elect not
|
||||
* to provide info at init to save memory */
|
||||
if (immediate) {
|
||||
pmix_output_verbose(5, pmix_client_globals.get_output,
|
||||
"pmix:client IMMEDIATE given - querying data");
|
||||
/* the direct modex request doesn't pass a key as it
|
||||
* was intended to support non-job-level information.
|
||||
* So instead, we will use the PMIx_Query function
|
||||
* to request the information */
|
||||
cd = PMIX_NEW(pmix_query_caddy_t);
|
||||
cd->cbdata = cb->cbdata;
|
||||
cd->valcbfunc = cb->cbfunc.valuefn;
|
||||
PMIX_QUERY_CREATE(cd->queries, 1);
|
||||
cd->nqueries = 1;
|
||||
pmix_argv_append_nosize(&cd->queries[0].keys, cb->key);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Query_info_nb(cd->queries, 1, infocb, cd))) {
|
||||
PMIX_RELEASE(cd);
|
||||
goto respond;
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
return;
|
||||
}
|
||||
/* we should have had this info, so respond with the error */
|
||||
/* => cb->key starts with pmix
|
||||
* we should have had this info, so respond with the error - if
|
||||
* they want us to check with the server, they should ask us to
|
||||
* refresh the cache */
|
||||
pmix_output_verbose(5, pmix_client_globals.get_output,
|
||||
"pmix:client returning NOT FOUND error");
|
||||
goto respond;
|
||||
@ -841,7 +810,7 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
}
|
||||
}
|
||||
pmix_output_verbose(5, pmix_client_globals.get_output,
|
||||
"pmix:client job-level data NOT found");
|
||||
"pmix:client job-level data found");
|
||||
rc = process_values(&val, cb);
|
||||
goto respond;
|
||||
} else if (PMIX_RANK_UNDEF == proc.rank) {
|
||||
@ -864,6 +833,9 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
}
|
||||
/* return whatever we found */
|
||||
rc = process_values(&val, cb);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
goto request;
|
||||
}
|
||||
}
|
||||
|
||||
respond:
|
||||
@ -913,11 +885,11 @@ static void _getnbfn(int fd, short flags, void *cbdata)
|
||||
}
|
||||
}
|
||||
|
||||
/* we don't have a pending request, so let's create one - don't worry
|
||||
* about packing the key as we return everything from that proc */
|
||||
msg = _pack_get(cb->pname.nspace, proc.rank, cb->info, cb->ninfo, PMIX_GETNB_CMD);
|
||||
/* we don't have a pending request, so let's create one */
|
||||
msg = _pack_get(cb->proc->nspace, proc.rank, cb->key, cb->info, cb->ninfo, PMIX_GETNB_CMD);
|
||||
if (NULL == msg) {
|
||||
rc = PMIX_ERROR;
|
||||
PMIX_ERROR_LOG(rc);
|
||||
goto respond;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -10,7 +10,7 @@
|
||||
#ifndef PMIX_CLIENT_OPS_H
|
||||
#define PMIX_CLIENT_OPS_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
@ -15,13 +15,11 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2017 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
@ -15,13 +15,11 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
@ -52,7 +50,9 @@
|
||||
#include "src/mca/pnet/base/base.h"
|
||||
#include "src/util/argv.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/name_fns.h"
|
||||
#include "src/util/output.h"
|
||||
#include "src/util/pmix_environ.h"
|
||||
#include "src/mca/gds/gds.h"
|
||||
#include "src/mca/ptl/ptl.h"
|
||||
|
||||
@ -64,16 +64,17 @@ static void wait_cbfunc(struct pmix_peer_t *pr,
|
||||
static void spawn_cbfunc(pmix_status_t status, char nspace[], void *cbdata);
|
||||
|
||||
PMIX_EXPORT pmix_status_t PMIx_Spawn(const pmix_info_t job_info[], size_t ninfo,
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
pmix_nspace_t nspace)
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
pmix_nspace_t nspace)
|
||||
{
|
||||
pmix_status_t rc;
|
||||
pmix_cb_t *cb;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: spawn called");
|
||||
pmix_output_verbose(2, pmix_client_globals.spawn_output,
|
||||
"%s pmix: spawn called",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid));
|
||||
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
@ -97,6 +98,12 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn(const pmix_info_t job_info[], size_t ninfo,
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Spawn_nb(job_info, ninfo, apps, napps, spawn_cbfunc, cb))) {
|
||||
/* note: the call may have returned PMIX_OPERATION_SUCCEEDED thus indicating
|
||||
* that the spawn was atomically completed */
|
||||
if (PMIX_OPERATION_SUCCEEDED == rc) {
|
||||
PMIX_LOAD_NSPACE(nspace, cb->pname.nspace);
|
||||
rc = PMIX_SUCCESS;
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
return rc;
|
||||
}
|
||||
@ -122,15 +129,12 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
|
||||
pmix_cb_t *cb;
|
||||
size_t n, m;
|
||||
pmix_app_t *aptr;
|
||||
bool jobenvars = false;
|
||||
char *harvest[2] = {"PMIX_MCA_", NULL};
|
||||
pmix_kval_t *kv;
|
||||
pmix_list_t ilist;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix: spawn called");
|
||||
pmix_output_verbose(2, pmix_client_globals.spawn_output,
|
||||
"%s pmix: spawn_nb called",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid));
|
||||
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
@ -144,32 +148,6 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
|
||||
}
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
/* check job info for directives */
|
||||
if (NULL != job_info) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&job_info[n], PMIX_SETUP_APP_ENVARS)) {
|
||||
PMIX_CONSTRUCT(&ilist, pmix_list_t);
|
||||
rc = pmix_pnet_base_harvest_envars(harvest, NULL, &ilist);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_LIST_DESTRUCT(&ilist);
|
||||
return rc;
|
||||
}
|
||||
PMIX_LIST_FOREACH(kv, &ilist, pmix_kval_t) {
|
||||
/* cycle across all the apps and set this envar */
|
||||
for (m=0; m < napps; m++) {
|
||||
aptr = (pmix_app_t*)&apps[m];
|
||||
pmix_setenv(kv->value->data.envar.envar,
|
||||
kv->value->data.envar.value,
|
||||
true, &aptr->env);
|
||||
}
|
||||
}
|
||||
jobenvars = true;
|
||||
PMIX_LIST_DESTRUCT(&ilist);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (n=0; n < napps; n++) {
|
||||
/* do a quick check of the apps directive array to ensure
|
||||
* the ninfo field has been set */
|
||||
@ -186,26 +164,6 @@ PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t nin
|
||||
}
|
||||
aptr->ninfo = m;
|
||||
}
|
||||
if (!jobenvars) {
|
||||
for (m=0; m < aptr->ninfo; m++) {
|
||||
if (PMIX_CHECK_KEY(&aptr->info[m], PMIX_SETUP_APP_ENVARS)) {
|
||||
PMIX_CONSTRUCT(&ilist, pmix_list_t);
|
||||
rc = pmix_pnet_base_harvest_envars(harvest, NULL, &ilist);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_LIST_DESTRUCT(&ilist);
|
||||
return rc;
|
||||
}
|
||||
PMIX_LIST_FOREACH(kv, &ilist, pmix_kval_t) {
|
||||
pmix_setenv(kv->value->data.envar.envar,
|
||||
kv->value->data.envar.value,
|
||||
true, &aptr->env);
|
||||
}
|
||||
jobenvars = true;
|
||||
PMIX_LIST_DESTRUCT(&ilist);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
msg = PMIX_NEW(pmix_buffer_t);
|
||||
@ -330,6 +288,7 @@ static void wait_cbfunc(struct pmix_peer_t *pr,
|
||||
/* extract and process any job-related info for this nspace */
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
ret = rc;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# -*- makefile -*-
|
||||
#
|
||||
# Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2016 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
@ -12,16 +12,14 @@
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
@ -120,7 +118,16 @@ static void acb(pmix_status_t status,
|
||||
void *release_cbdata)
|
||||
{
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
size_t n;
|
||||
|
||||
cb->status = status;
|
||||
if (0 < ninfo) {
|
||||
PMIX_INFO_CREATE(cb->info, ninfo);
|
||||
cb->ninfo = ninfo;
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&cb->info[n], &info[n]);
|
||||
}
|
||||
}
|
||||
if (NULL != release_fn) {
|
||||
release_fn(release_cbdata);
|
||||
}
|
||||
@ -366,7 +373,7 @@ PMIX_EXPORT pmix_status_t PMIx_Process_monitor_nb(const pmix_info_t *monitor, pm
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
/* if the monitor is PMIX_SEND_HEARTBEAT, then send it */
|
||||
if (0 == strncmp(monitor->key, PMIX_SEND_HEARTBEAT, PMIX_MAX_KEYLEN)) {
|
||||
if (PMIX_CHECK_KEY(monitor, PMIX_SEND_HEARTBEAT)) {
|
||||
msg = PMIX_NEW(pmix_buffer_t);
|
||||
if (NULL == msg) {
|
||||
return PMIX_ERR_NOMEM;
|
||||
|
@ -11,7 +11,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007-2012 Los Alamos National Security, LLC.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -19,7 +19,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
@ -31,8 +31,7 @@
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
|
||||
#include "src/mca/bfrops/bfrops.h"
|
||||
#include "src/include/pmix_globals.h"
|
||||
@ -88,7 +87,7 @@ static pmix_peer_t* find_peer(const pmix_proc_t *proc)
|
||||
if (PMIX_PEER_IS_SERVER(pmix_globals.mypeer)) {
|
||||
/* see if we know this proc */
|
||||
for (i=0; i < pmix_server_globals.clients.size; i++) {
|
||||
if (NULL != (peer = (pmix_peer_t*)pmix_pointer_array_get_item(&pmix_server_globals.clients, i))) {
|
||||
if (NULL == (peer = (pmix_peer_t*)pmix_pointer_array_get_item(&pmix_server_globals.clients, i))) {
|
||||
continue;
|
||||
}
|
||||
if (0 == strncmp(proc->nspace, peer->nptr->nspace, PMIX_MAX_NSLEN)) {
|
||||
@ -180,7 +179,7 @@ PMIX_EXPORT pmix_status_t PMIx_Data_pack(const pmix_proc_t *target,
|
||||
pmix_peer_t *peer;
|
||||
|
||||
if (NULL == (peer = find_peer(target))) {
|
||||
return PMIX_ERR_NOT_SUPPORTED;
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* setup the host */
|
||||
@ -211,7 +210,7 @@ PMIX_EXPORT pmix_status_t PMIx_Data_unpack(const pmix_proc_t *source,
|
||||
pmix_peer_t *peer;
|
||||
|
||||
if (NULL == (peer = find_peer(source))) {
|
||||
return PMIX_ERR_NOT_SUPPORTED;
|
||||
return PMIX_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* setup the host */
|
||||
|
@ -1,25 +1,33 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#else
|
||||
#ifdef HAVE_SYS_FCNTL_H
|
||||
#include <sys/fcntl.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
@ -51,13 +59,10 @@ static void msgcbfunc(struct pmix_peer_t *peer,
|
||||
/* get the reference ID */
|
||||
m=1;
|
||||
PMIX_BFROPS_UNPACK(rc, peer, buf, &refid, &m, PMIX_SIZE);
|
||||
/* store the request - we are in an event, and
|
||||
* so this is safe */
|
||||
if (NULL == pmix_pointer_array_get_item(&pmix_globals.iof_requests, refid)) {
|
||||
pmix_pointer_array_set_item(&pmix_globals.iof_requests, refid, cd->iofreq);
|
||||
}
|
||||
/* store the remote reference id */
|
||||
cd->iofreq->remote_id = refid;
|
||||
if (NULL != cd->cbfunc.hdlrregcbfn) {
|
||||
cd->cbfunc.hdlrregcbfn(PMIX_SUCCESS, refid, cd->cbdata);
|
||||
cd->cbfunc.hdlrregcbfn(PMIX_SUCCESS, cd->iofreq->local_id, cd->cbdata);
|
||||
}
|
||||
} else if (PMIX_SUCCESS != rc) {
|
||||
status = rc;
|
||||
@ -74,19 +79,37 @@ static void msgcbfunc(struct pmix_peer_t *peer,
|
||||
} else {
|
||||
cd->cbfunc.opcbfn(status, cd->cbdata);
|
||||
}
|
||||
} else if (PMIX_SUCCESS != status) {
|
||||
pmix_pointer_array_set_item(&pmix_globals.iof_requests, cd->iofreq->local_id, NULL);
|
||||
PMIX_RELEASE(cd->iofreq);
|
||||
} else if (NULL == cd->cbfunc.hdlrregcbfn) {
|
||||
cd->status = status;
|
||||
cd->ncodes = refid;
|
||||
cd->iofreq->remote_id = refid;
|
||||
PMIX_WAKEUP_THREAD(&cd->lock);
|
||||
} else {
|
||||
cd->cbfunc.hdlrregcbfn(PMIX_SUCCESS, refid, cd->cbdata);
|
||||
}
|
||||
if (PMIX_SUCCESS != rc && NULL != cd->iofreq) {
|
||||
PMIX_RELEASE(cd->iofreq);
|
||||
cd->iofreq->remote_id = refid;
|
||||
cd->cbfunc.hdlrregcbfn(PMIX_SUCCESS, cd->iofreq->local_id, cd->cbdata);
|
||||
}
|
||||
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
static void mycbfn(pmix_status_t status,
|
||||
size_t refid,
|
||||
void *cbdata)
|
||||
{
|
||||
pmix_shift_caddy_t *cd = (pmix_shift_caddy_t*)cbdata;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(cd);
|
||||
if (PMIX_SUCCESS == status) {
|
||||
cd->status = refid;
|
||||
} else {
|
||||
cd->status = status;
|
||||
}
|
||||
|
||||
PMIX_WAKEUP_THREAD(&cd->lock);
|
||||
}
|
||||
|
||||
PMIX_EXPORT pmix_status_t PMIx_IOF_pull(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_iof_channel_t channel, pmix_iof_cbfunc_t cbfunc,
|
||||
@ -94,8 +117,9 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_pull(const pmix_proc_t procs[], size_t nprocs
|
||||
{
|
||||
pmix_shift_caddy_t *cd;
|
||||
pmix_cmd_t cmd = PMIX_IOF_PULL_CMD;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_buffer_t *msg = NULL;
|
||||
pmix_status_t rc;
|
||||
pmix_iof_req_t *req;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
@ -132,24 +156,33 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_pull(const pmix_proc_t procs[], size_t nprocs
|
||||
if (NULL == cd) {
|
||||
return PMIX_ERR_NOMEM;
|
||||
}
|
||||
cd->cbfunc.hdlrregcbfn = regcbfunc;
|
||||
cd->cbdata = regcbdata;
|
||||
if (NULL == regcbfunc) {
|
||||
cd->cbfunc.hdlrregcbfn = mycbfn;
|
||||
PMIX_RETAIN(cd);
|
||||
cd->cbdata = cd;
|
||||
} else {
|
||||
cd->cbfunc.hdlrregcbfn = regcbfunc;
|
||||
cd->cbdata = regcbdata;
|
||||
}
|
||||
|
||||
/* setup the request item */
|
||||
cd->iofreq = PMIX_NEW(pmix_iof_req_t);
|
||||
if (NULL == cd->iofreq) {
|
||||
PMIX_RELEASE(cd);
|
||||
return PMIX_ERR_NOMEM;
|
||||
req = PMIX_NEW(pmix_iof_req_t);
|
||||
if (NULL == req) {
|
||||
rc = PMIX_ERR_NOMEM;
|
||||
goto cleanup;
|
||||
}
|
||||
/* retain the channels and cbfunc */
|
||||
cd->iofreq->channels = channel;
|
||||
cd->iofreq->cbfunc = cbfunc;
|
||||
req->channels = channel;
|
||||
req->cbfunc = cbfunc;
|
||||
req->local_id = pmix_pointer_array_add(&pmix_globals.iof_requests, req);
|
||||
cd->iofreq = req;
|
||||
/* we don't need the source specifications - only the
|
||||
* server cares as it will filter against them */
|
||||
|
||||
/* setup the registration cmd */
|
||||
msg = PMIX_NEW(pmix_buffer_t);
|
||||
if (NULL == msg) {
|
||||
PMIX_RELEASE(cd->iofreq);
|
||||
PMIX_RELEASE(req);
|
||||
PMIX_RELEASE(cd);
|
||||
return PMIX_ERR_NOMEM;
|
||||
}
|
||||
@ -200,8 +233,19 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_pull(const pmix_proc_t procs[], size_t nprocs
|
||||
cleanup:
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
PMIX_RELEASE(cd->iofreq);
|
||||
if (NULL != msg) {
|
||||
PMIX_RELEASE(msg);
|
||||
}
|
||||
PMIX_RELEASE(req);
|
||||
PMIX_RELEASE(cd);
|
||||
} else if (NULL == regcbfunc) {
|
||||
PMIX_WAIT_THREAD(&cd->lock);
|
||||
rc = cd->status;
|
||||
if (0 > rc) {
|
||||
/* the request failed */
|
||||
pmix_pointer_array_set_item(&pmix_globals.iof_requests, req->local_id, NULL);
|
||||
PMIX_RELEASE(req);
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
return rc;
|
||||
@ -215,6 +259,8 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
pmix_cmd_t cmd = PMIX_IOF_DEREG_CMD;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_status_t rc;
|
||||
pmix_iof_req_t *req;
|
||||
size_t remote_id;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
@ -240,6 +286,15 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
}
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
req = (pmix_iof_req_t*)pmix_pointer_array_get_item(&pmix_globals.iof_requests, iofhdlr);
|
||||
if (NULL == req) {
|
||||
/* bad value */
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
remote_id = req->remote_id;
|
||||
pmix_pointer_array_set_item(&pmix_globals.iof_requests, iofhdlr, NULL);
|
||||
PMIX_RELEASE(req);
|
||||
|
||||
/* send this request to the server */
|
||||
cd = PMIX_NEW(pmix_shift_caddy_t);
|
||||
if (NULL == cd) {
|
||||
@ -276,9 +331,9 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
}
|
||||
}
|
||||
|
||||
/* pack the handler ID */
|
||||
/* pack the remote handler ID */
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, &iofhdlr, 1, PMIX_SIZE);
|
||||
msg, &remote_id, 1, PMIX_SIZE);
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.iof_output,
|
||||
"pmix:iof_dereg sending to server");
|
||||
@ -299,10 +354,29 @@ PMIX_EXPORT pmix_status_t PMIx_IOF_deregister(size_t iofhdlr,
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
pmix_object_t super;
|
||||
pmix_event_t ev;
|
||||
pmix_lock_t lock;
|
||||
pmix_status_t status;
|
||||
pmix_op_cbfunc_t cbfunc;
|
||||
void *cbdata;
|
||||
} pmix_ltcaddy_t;
|
||||
|
||||
static void ltcon(pmix_ltcaddy_t *p)
|
||||
{
|
||||
PMIX_CONSTRUCT_LOCK(&p->lock);
|
||||
}
|
||||
static void ltdes(pmix_ltcaddy_t *p)
|
||||
{
|
||||
PMIX_DESTRUCT_LOCK(&p->lock);
|
||||
}
|
||||
static PMIX_CLASS_INSTANCE(pmix_ltcaddy_t,
|
||||
pmix_object_t,
|
||||
ltcon, ltdes);
|
||||
|
||||
static pmix_event_t stdinsig_ev;
|
||||
static pmix_iof_read_event_t *stdinev = NULL;
|
||||
|
||||
static void stdincbfunc(struct pmix_peer_t *peer,
|
||||
pmix_ptl_hdr_t *hdr,
|
||||
pmix_buffer_t *buf, void *cbdata)
|
||||
@ -334,6 +408,14 @@ static void stdincbfunc(struct pmix_peer_t *peer,
|
||||
free(cd);
|
||||
}
|
||||
|
||||
static void myopcb(pmix_status_t status, void *cbdata)
|
||||
{
|
||||
pmix_ltcaddy_t *cd = (pmix_ltcaddy_t*)cbdata;
|
||||
|
||||
cd->status = status;
|
||||
PMIX_WAKEUP_THREAD(&cd->lock);
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets,
|
||||
pmix_byte_object_t *bo,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
@ -341,8 +423,11 @@ pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets,
|
||||
{
|
||||
pmix_buffer_t *msg;
|
||||
pmix_cmd_t cmd = PMIX_IOF_PUSH_CMD;
|
||||
pmix_status_t rc;
|
||||
pmix_status_t rc = PMIX_SUCCESS;
|
||||
pmix_ltcaddy_t *cd;
|
||||
size_t n;
|
||||
bool begincollecting, stopcollecting;
|
||||
int flags, fd = fileno(stdin);
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
@ -351,6 +436,104 @@ pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets,
|
||||
}
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
if (NULL == bo) {
|
||||
/* check the directives */
|
||||
for (n=0; n < ndirs; n++) {
|
||||
if (PMIX_CHECK_KEY(&directives[n], PMIX_IOF_PUSH_STDIN)) {
|
||||
/* we are to start collecting our stdin and pushing
|
||||
* it to the specified targets */
|
||||
begincollecting = PMIX_INFO_TRUE(&directives[n]);
|
||||
if (begincollecting) {
|
||||
/* add these targets to our list */
|
||||
if (!pmix_globals.pushstdin) {
|
||||
/* not already collecting, so start */
|
||||
pmix_globals.pushstdin = true;
|
||||
/* We don't want to set nonblocking on our
|
||||
* stdio stream. If we do so, we set the file descriptor to
|
||||
* non-blocking for everyone that has that file descriptor, which
|
||||
* includes everyone else in our shell pipeline chain. (See
|
||||
* http://lists.freebsd.org/pipermail/freebsd-hackers/2005-January/009742.html).
|
||||
* This causes things like "prun -np 1 big_app | cat" to lose
|
||||
* output, because cat's stdout is then ALSO non-blocking and cat
|
||||
* isn't built to deal with that case (same with almost all other
|
||||
* unix text utils).
|
||||
*/
|
||||
if (0 != fd) {
|
||||
if((flags = fcntl(fd, F_GETFL, 0)) < 0) {
|
||||
pmix_output(pmix_client_globals.iof_output,
|
||||
"[%s:%d]: fcntl(F_GETFL) failed with errno=%d\n",
|
||||
__FILE__, __LINE__, errno);
|
||||
} else {
|
||||
flags |= O_NONBLOCK;
|
||||
fcntl(fd, F_SETFL, flags);
|
||||
}
|
||||
}
|
||||
if (isatty(fd)) {
|
||||
/* We should avoid trying to read from stdin if we
|
||||
* have a terminal, but are backgrounded. Catch the
|
||||
* signals that are commonly used when we switch
|
||||
* between being backgrounded and not. If the
|
||||
* filedescriptor is not a tty, don't worry about it
|
||||
* and always stay connected.
|
||||
*/
|
||||
pmix_event_signal_set(pmix_globals.evbase, &stdinsig_ev,
|
||||
SIGCONT, pmix_iof_stdin_cb,
|
||||
NULL);
|
||||
|
||||
/* setup a read event to read stdin, but don't activate it yet. The
|
||||
* dst_name indicates who should receive the stdin. If that recipient
|
||||
* doesn't do a corresponding pull, however, then the stdin will
|
||||
* be dropped upon receipt at the local daemon
|
||||
*/
|
||||
PMIX_IOF_READ_EVENT(&stdinev,
|
||||
targets, ntargets,
|
||||
directives, ndirs, fd,
|
||||
pmix_iof_read_local_handler, false);
|
||||
|
||||
/* check to see if we want the stdin read event to be
|
||||
* active - we will always at least define the event,
|
||||
* but may delay its activation
|
||||
*/
|
||||
if (pmix_iof_stdin_check(fd)) {
|
||||
PMIX_IOF_READ_ACTIVATE(stdinev);
|
||||
}
|
||||
} else {
|
||||
/* if we are not looking at a tty, just setup a read event
|
||||
* and activate it
|
||||
*/
|
||||
PMIX_IOF_READ_EVENT(&stdinev, targets, ntargets,
|
||||
directives, ndirs, fd,
|
||||
pmix_iof_read_local_handler, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pmix_globals.pushstdin) {
|
||||
/* remove these targets from the list of
|
||||
* recipients - if the list is then empty,
|
||||
* stop collecting. If the targets param
|
||||
* is NULL, then remove all targets and stop.
|
||||
* Flush any cached input before calling
|
||||
* the cbfunc */
|
||||
}
|
||||
}
|
||||
} else if (PMIX_CHECK_KEY(&directives[n], PMIX_IOF_COMPLETE)) {
|
||||
/* if we are collecting our stdin for the specified
|
||||
* targets, then stop - a NULL for targets indicates
|
||||
* stop for everyone. Flush any remaining cached input
|
||||
* before calling the cbfunc */
|
||||
stopcollecting = PMIX_INFO_TRUE(&directives[n]);
|
||||
if (stopcollecting) {
|
||||
if (pmix_globals.pushstdin) {
|
||||
/* remove these targets from the list of
|
||||
* recipients - if the list is then empty,
|
||||
* stop collecting */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return PMIX_OPERATION_SUCCEEDED;
|
||||
}
|
||||
|
||||
/* if we are not a server, then we send the provided
|
||||
* data to our server for processing */
|
||||
if (!PMIX_PEER_IS_SERVER(pmix_globals.mypeer) ||
|
||||
@ -398,26 +581,40 @@ pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets,
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, bo, 1, PMIX_BYTE_OBJECT);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return rc;
|
||||
if (NULL != bo) {
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, bo, 1, PMIX_BYTE_OBJECT);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
cd = (pmix_ltcaddy_t*)malloc(sizeof(pmix_ltcaddy_t));
|
||||
cd = PMIX_NEW(pmix_ltcaddy_t);
|
||||
if (NULL == cd) {
|
||||
PMIX_RELEASE(msg);
|
||||
rc = PMIX_ERR_NOMEM;
|
||||
return rc;
|
||||
}
|
||||
if (NULL == cbfunc) {
|
||||
cd->cbfunc = myopcb;
|
||||
PMIX_RETAIN(cd);
|
||||
cd->cbdata = cd;
|
||||
} else {
|
||||
cd->cbfunc = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
}
|
||||
PMIX_PTL_SEND_RECV(rc, pmix_client_globals.myserver,
|
||||
msg, stdincbfunc, cd);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
free(cd);
|
||||
} else if (NULL == cbfunc) {
|
||||
PMIX_WAIT_THREAD(&cd->lock);
|
||||
rc = cd->status;
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@ -430,7 +627,7 @@ pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets,
|
||||
targets, ntargets,
|
||||
directives, ndirs,
|
||||
bo, cbfunc, cbdata);
|
||||
return PMIX_SUCCESS;
|
||||
return rc;
|
||||
}
|
||||
|
||||
pmix_status_t pmix_iof_process_iof(pmix_iof_channel_t channels,
|
||||
@ -487,8 +684,8 @@ pmix_status_t pmix_iof_process_iof(pmix_iof_channel_t channels,
|
||||
PMIX_RELEASE(msg);
|
||||
return rc;
|
||||
}
|
||||
/* provide the handler ID so they know which cbfunc to use */
|
||||
PMIX_BFROPS_PACK(rc, req->requestor, msg, &req->refid, 1, PMIX_SIZE);
|
||||
/* provide their local handler ID so they know which cbfunc to use */
|
||||
PMIX_BFROPS_PACK(rc, req->requestor, msg, &req->remote_id, 1, PMIX_SIZE);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
@ -705,6 +902,11 @@ pmix_status_t pmix_iof_write_output(const pmix_proc_t *name,
|
||||
for (j=0; j < endtaglen && k < PMIX_IOF_BASE_TAGGED_OUT_MAX-1; j++) {
|
||||
output->data[k++] = endtag[j];
|
||||
}
|
||||
if (k == PMIX_IOF_BASE_TAGGED_OUT_MAX) {
|
||||
/* out of space */
|
||||
PMIX_ERROR_LOG(PMIX_ERR_OUT_OF_RESOURCE);
|
||||
goto process;
|
||||
}
|
||||
/* move the <cr> over */
|
||||
output->data[k++] = '\n';
|
||||
/* if this isn't the end of the data buffer, add a new start tag */
|
||||
@ -781,7 +983,7 @@ void pmix_iof_static_dump_output(pmix_iof_sink_t *sink)
|
||||
dump = false;
|
||||
/* make one last attempt to write this out */
|
||||
while (NULL != (output = (pmix_iof_write_output_t*)pmix_list_remove_first(&wev->outputs))) {
|
||||
if (!dump) {
|
||||
if (!dump && 0 < output->numbytes) {
|
||||
num_written = write(wev->fd, output->data, output->numbytes);
|
||||
if (num_written < output->numbytes) {
|
||||
/* don't retry - just cleanout the list and dump it */
|
||||
@ -812,7 +1014,7 @@ void pmix_iof_write_handler(int _fd, short event, void *cbdata)
|
||||
output = (pmix_iof_write_output_t*)item;
|
||||
if (0 == output->numbytes) {
|
||||
/* indicates we are to close this stream */
|
||||
PMIX_RELEASE(sink);
|
||||
PMIX_DESTRUCT(sink);
|
||||
return;
|
||||
}
|
||||
num_written = write(wev->fd, output->data, output->numbytes);
|
||||
@ -900,15 +1102,34 @@ void pmix_iof_stdin_cb(int fd, short event, void *cbdata)
|
||||
}
|
||||
}
|
||||
|
||||
static void restart_stdin(int fd, short event, void *cbdata)
|
||||
static void iof_stdin_cbfunc(struct pmix_peer_t *peer,
|
||||
pmix_ptl_hdr_t *hdr,
|
||||
pmix_buffer_t *buf, void *cbdata)
|
||||
{
|
||||
pmix_iof_read_event_t *tm = (pmix_iof_read_event_t*)cbdata;
|
||||
pmix_iof_read_event_t *stdinev = (pmix_iof_read_event_t*)cbdata;
|
||||
int cnt;
|
||||
pmix_status_t rc, ret;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(tm);
|
||||
PMIX_ACQUIRE_OBJECT(stdinev);
|
||||
|
||||
if (!tm->active) {
|
||||
PMIX_IOF_READ_ACTIVATE(tm);
|
||||
/* check the return status */
|
||||
cnt = 1;
|
||||
PMIX_BFROPS_UNPACK(rc, peer, buf, &ret, &cnt, PMIX_STATUS);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
pmix_event_del(&stdinev->ev);
|
||||
stdinev->active = false;
|
||||
PMIX_POST_OBJECT(stdinev);
|
||||
return;
|
||||
}
|
||||
/* if the status wasn't success, then terminate the forward */
|
||||
if (PMIX_SUCCESS != ret) {
|
||||
pmix_event_del(&stdinev->ev);
|
||||
stdinev->active = false;
|
||||
PMIX_POST_OBJECT(stdinev);
|
||||
return;
|
||||
}
|
||||
|
||||
pmix_iof_stdin_cb(0, 0, stdinev);
|
||||
}
|
||||
|
||||
/* this is the read handler for stdin */
|
||||
@ -917,18 +1138,19 @@ void pmix_iof_read_local_handler(int unusedfd, short event, void *cbdata)
|
||||
pmix_iof_read_event_t *rev = (pmix_iof_read_event_t*)cbdata;
|
||||
unsigned char data[PMIX_IOF_BASE_MSG_MAX];
|
||||
int32_t numbytes;
|
||||
int fd;
|
||||
pmix_status_t rc;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_cmd_t cmd = PMIX_IOF_PUSH_CMD;
|
||||
pmix_byte_object_t bo;
|
||||
int fd;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(rev);
|
||||
|
||||
/* As we may use timer events, fd can be bogus (-1)
|
||||
* use the right one here
|
||||
*/
|
||||
fd = fileno(stdin);
|
||||
|
||||
if (0 > rev->fd) {
|
||||
fd = fileno(stdin);
|
||||
} else {
|
||||
fd = rev->fd;
|
||||
}
|
||||
/* read up to the fragment size */
|
||||
memset(data, 0, PMIX_IOF_BASE_MSG_MAX);
|
||||
numbytes = read(fd, data, sizeof(data));
|
||||
@ -968,50 +1190,68 @@ void pmix_iof_read_local_handler(int unusedfd, short event, void *cbdata)
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
goto restart;
|
||||
return;
|
||||
}
|
||||
/* pack the number of targets */
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, &numbytes, 1, PMIX_INT32);
|
||||
msg, &rev->ntargets, 1, PMIX_SIZE);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
goto restart;
|
||||
return;
|
||||
}
|
||||
/* and the targets */
|
||||
if (0 < rev->ntargets) {
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, rev->targets, rev->ntargets, PMIX_PROC);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* pack the number of directives */
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, data, numbytes, PMIX_BYTE);
|
||||
msg, &rev->ndirs, 1, PMIX_SIZE);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
goto restart;
|
||||
return;
|
||||
}
|
||||
/* and the directives */
|
||||
if (0 < rev->ndirs) {
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, rev->directives, rev->ndirs, PMIX_INFO);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* pack the data */
|
||||
bo.bytes = (char*)data;
|
||||
bo.size = numbytes;
|
||||
PMIX_BFROPS_PACK(rc, pmix_client_globals.myserver,
|
||||
msg, &bo, 1, PMIX_BYTE_OBJECT);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* send it to the server */
|
||||
PMIX_PTL_SEND_RECV(rc, pmix_client_globals.myserver,
|
||||
msg, stdincbfunc, NULL);
|
||||
msg, iof_stdin_cbfunc, rev);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(msg);
|
||||
}
|
||||
|
||||
restart:
|
||||
/* if num_bytes was zero, or we read the last piece of the file, then we need to terminate the event */
|
||||
if (0 == numbytes) {
|
||||
/* this will also close our stdin file descriptor */
|
||||
PMIX_RELEASE(rev);
|
||||
} else {
|
||||
/* if we are looking at a tty, then we just go ahead and restart the
|
||||
* read event assuming we are not backgrounded
|
||||
*/
|
||||
if (pmix_iof_stdin_check(fd)) {
|
||||
restart_stdin(fd, 0, rev);
|
||||
} else {
|
||||
/* delay for awhile and then restart */
|
||||
pmix_event_evtimer_set(pmix_globals.evbase,
|
||||
&rev->ev, restart_stdin, rev);
|
||||
rev->tv.tv_sec = 0;
|
||||
rev->tv.tv_usec = 10000;
|
||||
PMIX_POST_OBJECT(rev);
|
||||
pmix_event_evtimer_add(&rev->ev, &rev->tv);
|
||||
}
|
||||
if (0 < numbytes) {
|
||||
PMIX_IOF_READ_ACTIVATE(rev);
|
||||
}
|
||||
|
||||
/* nothing more to do */
|
||||
return;
|
||||
}
|
||||
@ -1044,12 +1284,19 @@ static void iof_read_event_construct(pmix_iof_read_event_t* rev)
|
||||
{
|
||||
rev->fd = -1;
|
||||
rev->active = false;
|
||||
rev->childproc = NULL;
|
||||
rev->tv.tv_sec = 0;
|
||||
rev->tv.tv_usec = 0;
|
||||
rev->targets = NULL;
|
||||
rev->ntargets = 0;
|
||||
rev->directives = NULL;
|
||||
rev->ndirs = 0;
|
||||
}
|
||||
static void iof_read_event_destruct(pmix_iof_read_event_t* rev)
|
||||
{
|
||||
pmix_event_del(&rev->ev);
|
||||
if (rev->active) {
|
||||
pmix_event_del(&rev->ev);
|
||||
}
|
||||
if (0 <= rev->fd) {
|
||||
PMIX_OUTPUT_VERBOSE((20, pmix_client_globals.iof_output,
|
||||
"%s iof: closing fd %d",
|
||||
@ -1057,6 +1304,12 @@ static void iof_read_event_destruct(pmix_iof_read_event_t* rev)
|
||||
close(rev->fd);
|
||||
rev->fd = -1;
|
||||
}
|
||||
if (NULL != rev->targets) {
|
||||
PMIX_PROC_FREE(rev->targets, rev->ntargets);
|
||||
}
|
||||
if (NULL != rev->directives) {
|
||||
PMIX_INFO_FREE(rev->directives, rev->ndirs);
|
||||
}
|
||||
}
|
||||
PMIX_CLASS_INSTANCE(pmix_iof_read_event_t,
|
||||
pmix_object_t,
|
||||
@ -1074,14 +1327,16 @@ static void iof_write_event_construct(pmix_iof_write_event_t* wev)
|
||||
}
|
||||
static void iof_write_event_destruct(pmix_iof_write_event_t* wev)
|
||||
{
|
||||
pmix_event_del(&wev->ev);
|
||||
if (wev->pending) {
|
||||
pmix_event_del(&wev->ev);
|
||||
}
|
||||
if (2 < wev->fd) {
|
||||
PMIX_OUTPUT_VERBOSE((20, pmix_client_globals.iof_output,
|
||||
"%s iof: closing fd %d for write event",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid), wev->fd));
|
||||
close(wev->fd);
|
||||
}
|
||||
PMIX_DESTRUCT(&wev->outputs);
|
||||
PMIX_LIST_DESTRUCT(&wev->outputs);
|
||||
}
|
||||
PMIX_CLASS_INSTANCE(pmix_iof_write_event_t,
|
||||
pmix_list_item_t,
|
||||
|
@ -12,7 +12,7 @@
|
||||
* Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2017 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2017 Mellanox Technologies. All rights reserved.
|
||||
* Copyright (c) 2018 Research Organization for Information Science
|
||||
@ -32,7 +32,7 @@
|
||||
#ifndef PMIX_IOF_H
|
||||
#define PMIX_IOF_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
@ -52,8 +52,6 @@
|
||||
#include "src/include/pmix_globals.h"
|
||||
#include "src/util/fd.h"
|
||||
|
||||
#include "src/common/pmix_iof.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/*
|
||||
@ -99,7 +97,14 @@ typedef struct {
|
||||
struct timeval tv;
|
||||
int fd;
|
||||
bool active;
|
||||
void *childproc;
|
||||
bool always_readable;
|
||||
pmix_proc_t name;
|
||||
pmix_iof_channel_t channel;
|
||||
pmix_proc_t *targets;
|
||||
size_t ntargets;
|
||||
pmix_info_t *directives;
|
||||
size_t ndirs;
|
||||
} pmix_iof_read_event_t;
|
||||
PMIX_EXPORT PMIX_CLASS_DECLARATION(pmix_iof_read_event_t);
|
||||
|
||||
@ -132,7 +137,7 @@ pmix_iof_fd_always_ready(int fd)
|
||||
PMIX_POST_OBJECT(wev); \
|
||||
if (wev->always_writable) { \
|
||||
/* Regular is always write ready. Use timer to activate */ \
|
||||
tv = &wev->tv; \
|
||||
tv = &wev->tv; \
|
||||
} \
|
||||
if (pmix_event_add(&wev->ev, tv)) { \
|
||||
PMIX_ERROR_LOG(PMIX_ERR_BAD_PARAM); \
|
||||
@ -188,6 +193,44 @@ pmix_iof_fd_always_ready(int fd)
|
||||
} while(0);
|
||||
|
||||
|
||||
#define PMIX_IOF_READ_EVENT(rv, p, np, d, nd, fid, cbfunc, actv) \
|
||||
do { \
|
||||
size_t _ii; \
|
||||
pmix_iof_read_event_t *rev; \
|
||||
PMIX_OUTPUT_VERBOSE((1, pmix_client_globals.iof_output, \
|
||||
"defining read event at: %s %d", \
|
||||
__FILE__, __LINE__)); \
|
||||
rev = PMIX_NEW(pmix_iof_read_event_t); \
|
||||
if (NULL != (p)) { \
|
||||
(rev)->ntargets = (np); \
|
||||
PMIX_PROC_CREATE((rev)->targets, (rev)->ntargets); \
|
||||
memcpy((rev)->targets, (p), (np) * sizeof(pmix_proc_t)); \
|
||||
} \
|
||||
if (NULL != (d) && 0 < (nd)) { \
|
||||
PMIX_INFO_CREATE((rev)->directives, (nd)); \
|
||||
(rev)->ndirs = (nd); \
|
||||
for (_ii=0; _ii < (size_t)nd; _ii++) { \
|
||||
PMIX_INFO_XFER(&((rev)->directives[_ii]), &((d)[_ii])); \
|
||||
} \
|
||||
} \
|
||||
rev->fd = (fid); \
|
||||
rev->always_readable = pmix_iof_fd_always_ready(fid); \
|
||||
*(rv) = rev; \
|
||||
if(rev->always_readable) { \
|
||||
pmix_event_evtimer_set(pmix_globals.evbase, \
|
||||
&rev->ev, (cbfunc), rev); \
|
||||
} else { \
|
||||
pmix_event_set(pmix_globals.evbase, \
|
||||
&rev->ev, (fid), \
|
||||
PMIX_EV_READ, \
|
||||
(cbfunc), rev); \
|
||||
} \
|
||||
if ((actv)) { \
|
||||
PMIX_IOF_READ_ACTIVATE(rev) \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
|
||||
PMIX_EXPORT pmix_status_t pmix_iof_flush(void);
|
||||
|
||||
PMIX_EXPORT pmix_status_t pmix_iof_write_output(const pmix_proc_t *name,
|
||||
@ -196,10 +239,9 @@ PMIX_EXPORT pmix_status_t pmix_iof_write_output(const pmix_proc_t *name,
|
||||
pmix_iof_flags_t *flags);
|
||||
PMIX_EXPORT void pmix_iof_static_dump_output(pmix_iof_sink_t *sink);
|
||||
PMIX_EXPORT void pmix_iof_write_handler(int fd, short event, void *cbdata);
|
||||
PMIX_EXPORT void pmix_iof_stdin_write_handler(int fd, short event, void *cbdata);
|
||||
PMIX_EXPORT bool pmix_iof_stdin_check(int fd);
|
||||
PMIX_EXPORT void pmix_iof_read_local_handler(int unusedfd, short event, void *cbdata);
|
||||
PMIX_EXPORT void pmix_iof_stdin_cb(int fd, short event, void *cbdata);
|
||||
PMIX_EXPORT void pmix_iof_read_local_handler(int fd, short event, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t pmix_iof_process_iof(pmix_iof_channel_t channels,
|
||||
const pmix_proc_t *source,
|
||||
const pmix_byte_object_t *bo,
|
||||
|
@ -1,25 +1,25 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
@ -255,7 +255,7 @@ PMIX_EXPORT pmix_status_t PMIx_Log_nb(const pmix_info_t data[], size_t ndata,
|
||||
for (n=0; n < ndirs; n++) {
|
||||
PMIX_INFO_XFER(&cd->directives[n], (pmix_info_t*)&directives[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&cd->directives[ndirs], PMIX_LOG_SOURCE, &source, PMIX_PROC);
|
||||
PMIX_INFO_LOAD(&cd->directives[ndirs], PMIX_LOG_SOURCE, source, PMIX_PROC);
|
||||
/* call down to process the request - the various components
|
||||
* will thread shift as required */
|
||||
rc = pmix_plog.log(source, data, ndata, cd->directives, cd->ndirs, localcbfunc, cd);
|
||||
@ -263,8 +263,7 @@ PMIX_EXPORT pmix_status_t PMIx_Log_nb(const pmix_info_t data[], size_t ndata,
|
||||
PMIX_INFO_FREE(cd->directives, cd->ndirs);
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
} else if (0 == strncmp(source->nspace, pmix_globals.myid.nspace, PMIX_MAX_NSLEN) &&
|
||||
source->rank == pmix_globals.myid.rank) {
|
||||
} else if (PMIX_CHECK_PROCID(source, &pmix_globals.myid)) {
|
||||
/* if I am the recorded source, then this is a re-submission of
|
||||
* something that got "upcalled" by a prior call. In this case,
|
||||
* we return a "not supported" error as clearly we couldn't
|
||||
|
@ -1,25 +1,25 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
@ -27,7 +27,7 @@
|
||||
#include "src/util/name_fns.h"
|
||||
#include "src/util/output.h"
|
||||
#include "src/mca/bfrops/bfrops.h"
|
||||
#include "src/mca/ptl/ptl.h"
|
||||
#include "src/mca/ptl/base/base.h"
|
||||
|
||||
#include "src/client/pmix_client_ops.h"
|
||||
#include "src/server/pmix_server_ops.h"
|
||||
@ -107,7 +107,7 @@ static void query_cbfunc(struct pmix_peer_t *peer,
|
||||
|
||||
complete:
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:query cback from server releasing");
|
||||
"pmix:query cback from server releasing with status %s", PMIx_Error_string(results->status));
|
||||
/* release the caller */
|
||||
if (NULL != cd->cbfunc) {
|
||||
cd->cbfunc(results->status, results->info, results->ninfo, cd->cbdata, relcbfunc, results);
|
||||
@ -115,179 +115,14 @@ static void query_cbfunc(struct pmix_peer_t *peer,
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
static void _local_relcb(void *cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd = (pmix_query_caddy_t*)cbdata;
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
static void _local_cbfunc(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd = (pmix_query_caddy_t*)cbdata;
|
||||
if (NULL != cd->cbfunc) {
|
||||
cd->cbfunc(cd->status, cd->info, cd->ninfo, cd->cbdata, _local_relcb, cd);
|
||||
return;
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
PMIX_EXPORT pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata)
|
||||
|
||||
static pmix_status_t request_help(pmix_query_t queries[], size_t nqueries,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd;
|
||||
pmix_cmd_t cmd = PMIX_QUERY_CMD;
|
||||
pmix_buffer_t *msg;
|
||||
pmix_status_t rc;
|
||||
pmix_cb_t cb;
|
||||
size_t n, p;
|
||||
pmix_list_t results;
|
||||
pmix_kval_t *kv, *kvnxt;
|
||||
pmix_proc_t proc;
|
||||
bool rank_given;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:query non-blocking");
|
||||
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_ERR_INIT;
|
||||
}
|
||||
|
||||
if (0 == nqueries || NULL == queries) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* do a quick check of the qualifiers array to ensure
|
||||
* the nqual field has been set */
|
||||
for (n=0; n < nqueries; n++) {
|
||||
if (NULL != queries[n].qualifiers && 0 == queries[n].nqual) {
|
||||
/* look for the info marked as "end" */
|
||||
p = 0;
|
||||
while (!(PMIX_INFO_IS_END(&queries[n].qualifiers[p])) && p < SIZE_MAX) {
|
||||
++p;
|
||||
}
|
||||
if (SIZE_MAX == p) {
|
||||
/* nothing we can do */
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
queries[n].nqual = p;
|
||||
}
|
||||
}
|
||||
|
||||
/* setup the list of local results */
|
||||
PMIX_CONSTRUCT(&results, pmix_list_t);
|
||||
|
||||
/* check the directives to see if they want us to refresh
|
||||
* the local cached results - if we wanted to optimize this
|
||||
* more, we would check each query and allow those that don't
|
||||
* want to be refreshed to be executed locally, and those that
|
||||
* did would be sent to the host. However, for now we simply
|
||||
* */
|
||||
memset(proc.nspace, 0, PMIX_MAX_NSLEN+1);
|
||||
proc.rank = PMIX_RANK_INVALID;
|
||||
for (n=0; n < nqueries; n++) {
|
||||
rank_given = false;
|
||||
for (p=0; p < queries[n].nqual; p++) {
|
||||
if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_QUERY_REFRESH_CACHE)) {
|
||||
if (PMIX_INFO_TRUE(&queries[n].qualifiers[p])) {
|
||||
PMIX_LIST_DESTRUCT(&results);
|
||||
goto query;
|
||||
}
|
||||
} else if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_PROCID)) {
|
||||
PMIX_LOAD_NSPACE(proc.nspace, queries[n].qualifiers[p].value.data.proc->nspace);
|
||||
proc.rank = queries[n].qualifiers[p].value.data.proc->rank;
|
||||
rank_given = true;
|
||||
} else if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_NSPACE)) {
|
||||
PMIX_LOAD_NSPACE(proc.nspace, queries[n].qualifiers[p].value.data.string);
|
||||
} else if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_RANK)) {
|
||||
proc.rank = queries[n].qualifiers[p].value.data.rank;
|
||||
rank_given = true;
|
||||
}
|
||||
}
|
||||
/* we get here if a refresh isn't required - first try a local
|
||||
* "get" on the data to see if we already have it */
|
||||
PMIX_CONSTRUCT(&cb, pmix_cb_t);
|
||||
cb.copy = false;
|
||||
/* if they are querying about node or app values not directly
|
||||
* associated with a proc (i.e., they didn't specify the proc),
|
||||
* then we obtain those by leaving the proc info as undefined */
|
||||
if (!rank_given) {
|
||||
proc.rank = PMIX_RANK_UNDEF;
|
||||
cb.proc = &proc;
|
||||
} else {
|
||||
/* set the proc */
|
||||
if (PMIX_RANK_INVALID == proc.rank &&
|
||||
0 == strlen(proc.nspace)) {
|
||||
/* use our id */
|
||||
cb.proc = &pmix_globals.myid;
|
||||
} else {
|
||||
if (0 == strlen(proc.nspace)) {
|
||||
/* use our nspace */
|
||||
PMIX_LOAD_NSPACE(cb.proc->nspace, pmix_globals.myid.nspace);
|
||||
}
|
||||
if (PMIX_RANK_INVALID == proc.rank) {
|
||||
/* user the wildcard rank */
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
}
|
||||
cb.proc = &proc;
|
||||
}
|
||||
}
|
||||
for (p=0; NULL != queries[n].keys[p]; p++) {
|
||||
cb.key = queries[n].keys[p];
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_globals.mypeer, &cb);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
/* needs to be passed to the host */
|
||||
PMIX_LIST_DESTRUCT(&results);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
goto query;
|
||||
}
|
||||
/* need to retain this result */
|
||||
PMIX_LIST_FOREACH_SAFE(kv, kvnxt, &cb.kvs, pmix_kval_t) {
|
||||
pmix_list_remove_item(&cb.kvs, &kv->super);
|
||||
pmix_list_append(&results, &kv->super);
|
||||
}
|
||||
PMIX_DESTRUCT(&cb);
|
||||
}
|
||||
}
|
||||
|
||||
/* if we get here, then all queries were completely locally
|
||||
* resolved, so construct the results for return */
|
||||
cd = PMIX_NEW(pmix_query_caddy_t);
|
||||
cd->cbfunc = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
cd->status = PMIX_SUCCESS;
|
||||
cd->ninfo = pmix_list_get_size(&results);
|
||||
PMIX_INFO_CREATE(cd->info, cd->ninfo);
|
||||
n = 0;
|
||||
PMIX_LIST_FOREACH_SAFE(kv, kvnxt, &results, pmix_kval_t) {
|
||||
PMIX_LOAD_KEY(cd->info[n].key, kv->key);
|
||||
rc = pmix_value_xfer(&cd->info[n].value, kv->value);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
cd->status = rc;
|
||||
PMIX_INFO_FREE(cd->info, cd->ninfo);
|
||||
break;
|
||||
}
|
||||
++n;
|
||||
}
|
||||
/* done with the list of results */
|
||||
PMIX_LIST_DESTRUCT(&results);
|
||||
/* we need to thread-shift as we are not allowed to
|
||||
* execute the callback function prior to returning
|
||||
* from the API */
|
||||
PMIX_THREADSHIFT(cd, _local_cbfunc);
|
||||
/* regardless of the result of the query, we return
|
||||
* PMIX_SUCCESS here to indicate that the operation
|
||||
* was accepted for processing */
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_SUCCESS;
|
||||
|
||||
|
||||
query:
|
||||
/* if we are the server, then we just issue the query and
|
||||
* return the response */
|
||||
if (PMIX_PEER_IS_SERVER(pmix_globals.mypeer) &&
|
||||
@ -350,6 +185,212 @@ PMIX_EXPORT pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nque
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
static void _local_relcb(void *cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd = (pmix_query_caddy_t*)cbdata;
|
||||
|
||||
if (NULL != cd->info) {
|
||||
PMIX_INFO_FREE(cd->info, cd->ninfo);
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
static void localquery(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_query_caddy_t *cd = (pmix_query_caddy_t*)cbdata;
|
||||
pmix_query_t *queries = cd->queries;
|
||||
size_t nqueries = cd->nqueries;
|
||||
pmix_status_t rc;
|
||||
pmix_cb_t cb;
|
||||
size_t n, p;
|
||||
pmix_list_t results;
|
||||
pmix_kval_t *kv, *kvnxt;
|
||||
pmix_proc_t proc;
|
||||
bool rank_given = false;
|
||||
|
||||
/* setup the list of local results */
|
||||
PMIX_CONSTRUCT(&results, pmix_list_t);
|
||||
|
||||
for (n=0; n < nqueries; n++) {
|
||||
PMIX_LOAD_PROCID(&proc, NULL, PMIX_RANK_INVALID);
|
||||
for (p=0; p < queries[n].nqual; p++) {
|
||||
if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_PROCID)) {
|
||||
PMIX_LOAD_NSPACE(proc.nspace, queries[n].qualifiers[p].value.data.proc->nspace);
|
||||
proc.rank = queries[n].qualifiers[p].value.data.proc->rank;
|
||||
rank_given = true;
|
||||
} else if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_NSPACE)) {
|
||||
PMIX_LOAD_NSPACE(proc.nspace, queries[n].qualifiers[p].value.data.string);
|
||||
} else if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_RANK)) {
|
||||
proc.rank = queries[n].qualifiers[p].value.data.rank;
|
||||
rank_given = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* first try a local "get" on the data to see if we already have it */
|
||||
PMIX_CONSTRUCT(&cb, pmix_cb_t);
|
||||
cb.copy = false;
|
||||
/* if they are querying about node or app values not directly
|
||||
* associated with a proc (i.e., they didn't specify the proc),
|
||||
* then we obtain those by leaving the proc info as undefined */
|
||||
if (!rank_given) {
|
||||
proc.rank = PMIX_RANK_UNDEF;
|
||||
cb.proc = &proc;
|
||||
} else {
|
||||
/* set the proc */
|
||||
if (PMIX_RANK_INVALID == proc.rank &&
|
||||
0 == strlen(proc.nspace)) {
|
||||
/* use our id */
|
||||
cb.proc = &pmix_globals.myid;
|
||||
} else {
|
||||
if (0 == strlen(proc.nspace)) {
|
||||
/* use our nspace */
|
||||
PMIX_LOAD_NSPACE(cb.proc->nspace, pmix_globals.myid.nspace);
|
||||
}
|
||||
if (PMIX_RANK_INVALID == proc.rank) {
|
||||
/* user the wildcard rank */
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
}
|
||||
cb.proc = &proc;
|
||||
}
|
||||
}
|
||||
|
||||
/* first see if we already have this info */
|
||||
for (p=0; NULL != queries[n].keys[p]; p++) {
|
||||
cb.key = queries[n].keys[p];
|
||||
PMIX_GDS_FETCH_KV(rc, pmix_globals.mypeer, &cb);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
/* not in our gds */
|
||||
PMIX_DESTRUCT(&cb);
|
||||
goto nextstep;
|
||||
}
|
||||
/* need to retain this result */
|
||||
PMIX_LIST_FOREACH_SAFE(kv, kvnxt, &cb.kvs, pmix_kval_t) {
|
||||
pmix_list_remove_item(&cb.kvs, &kv->super);
|
||||
pmix_list_append(&results, &kv->super);
|
||||
}
|
||||
PMIX_DESTRUCT(&cb);
|
||||
}
|
||||
}
|
||||
|
||||
nextstep:
|
||||
if (PMIX_OPERATION_SUCCEEDED == rc) {
|
||||
/* if we get here, then all queries were locally
|
||||
* resolved, so construct the results for return */
|
||||
cd->status = PMIX_SUCCESS;
|
||||
cd->ninfo = pmix_list_get_size(&results);
|
||||
if (0 < cd->ninfo) {
|
||||
PMIX_INFO_CREATE(cd->info, cd->ninfo);
|
||||
n = 0;
|
||||
PMIX_LIST_FOREACH_SAFE(kv, kvnxt, &results, pmix_kval_t) {
|
||||
PMIX_LOAD_KEY(cd->info[n].key, kv->key);
|
||||
rc = pmix_value_xfer(&cd->info[n].value, kv->value);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
cd->status = rc;
|
||||
PMIX_INFO_FREE(cd->info, cd->ninfo);
|
||||
break;
|
||||
}
|
||||
++n;
|
||||
}
|
||||
}
|
||||
/* done with the list of results */
|
||||
PMIX_LIST_DESTRUCT(&results);
|
||||
|
||||
if (NULL != cd->cbfunc) {
|
||||
cd->cbfunc(cd->status, cd->info, cd->ninfo, cd->cbdata, _local_relcb, cd);
|
||||
}
|
||||
} else if (PMIX_SUCCESS != rc) {
|
||||
/* need to ask our host */
|
||||
rc = request_help(cd->queries, cd->nqueries, cd->cbfunc, cd->cbdata);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
/* we have to return the error to the caller */
|
||||
if (NULL != cd->cbfunc) {
|
||||
cd->cbfunc(rc, NULL, 0, cd->cbdata, NULL, NULL);
|
||||
}
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
return;
|
||||
}
|
||||
|
||||
/* get here if the query returned PMIX_SUCCESS, which means
|
||||
* that the query is being processed and will call the cbfunc
|
||||
* when complete */
|
||||
}
|
||||
|
||||
PMIX_EXPORT pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata)
|
||||
|
||||
{
|
||||
pmix_query_caddy_t *cd;
|
||||
pmix_status_t rc;
|
||||
size_t n, p;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:query non-blocking");
|
||||
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_ERR_INIT;
|
||||
}
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
|
||||
if (0 == nqueries || NULL == queries) {
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* do a quick check of the qualifiers arrays to ensure
|
||||
* the nqual field has been set */
|
||||
for (n=0; n < nqueries; n++) {
|
||||
if (NULL != queries[n].qualifiers && 0 == queries[n].nqual) {
|
||||
/* look for the info marked as "end" */
|
||||
p = 0;
|
||||
while (!(PMIX_INFO_IS_END(&queries[n].qualifiers[p])) && p < SIZE_MAX) {
|
||||
++p;
|
||||
}
|
||||
if (SIZE_MAX == p) {
|
||||
/* nothing we can do */
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
queries[n].nqual = p;
|
||||
}
|
||||
}
|
||||
|
||||
/* check the directives to see if they want us to refresh
|
||||
* the local cached results - if we wanted to optimize this
|
||||
* more, we would check each query and allow those that don't
|
||||
* want to be refreshed to be executed locally, and those that
|
||||
* did would be sent to the host. However, for now we simply
|
||||
* assume that any requirement to refresh will force all to
|
||||
* do so */
|
||||
for (n=0; n < nqueries; n++) {
|
||||
for (p=0; p < queries[n].nqual; p++) {
|
||||
if (PMIX_CHECK_KEY(&queries[n].qualifiers[p], PMIX_QUERY_REFRESH_CACHE)) {
|
||||
if (PMIX_INFO_TRUE(&queries[n].qualifiers[p])) {
|
||||
/* need to refresh the cache from our host */
|
||||
rc = request_help(queries, nqueries, cbfunc, cbdata);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* we get here if a refresh isn't required - need to
|
||||
* threadshift this to access our internal data */
|
||||
cd = PMIX_NEW(pmix_query_caddy_t);
|
||||
cd->queries = queries;
|
||||
cd->nqueries = nqueries;
|
||||
cd->cbfunc = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
PMIX_THREADSHIFT(cd, localquery);
|
||||
/* regardless of the result of the query, we return
|
||||
* PMIX_SUCCESS here to indicate that the operation
|
||||
* was accepted for processing */
|
||||
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
static void acb(pmix_status_t status,
|
||||
|
@ -1,25 +1,25 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2016 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <src/include/types.h>
|
||||
#include <src/include/pmix_stdint.h>
|
||||
#include <src/include/pmix_socket_errno.h>
|
||||
#include "src/include/pmix_stdint.h"
|
||||
#include "src/include/pmix_socket_errno.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/argv.h"
|
||||
|
@ -11,7 +11,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007-2012 Los Alamos National Security, LLC.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2018 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -21,7 +21,7 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
@ -33,8 +33,7 @@
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix_common.h"
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
@ -230,6 +229,16 @@ PMIX_EXPORT const char* pmix_command_string(pmix_cmd_t cmd)
|
||||
return "IOF PUSH";
|
||||
case PMIX_IOF_PULL_CMD:
|
||||
return "IOF PULL";
|
||||
case PMIX_GROUP_CONSTRUCT_CMD:
|
||||
return "GROUP CONSTRUCT";
|
||||
case PMIX_GROUP_JOIN_CMD:
|
||||
return "GROUP JOIN";
|
||||
case PMIX_GROUP_INVITE_CMD:
|
||||
return "GROUP INVITE";
|
||||
case PMIX_GROUP_LEAVE_CMD:
|
||||
return "GROUP LEAVE";
|
||||
case PMIX_GROUP_DESTRUCT_CMD:
|
||||
return "GROUP DESTRUCT";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
@ -10,7 +10,8 @@
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2020 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -21,11 +22,11 @@
|
||||
#ifndef PMIX_EVENT_H
|
||||
#define PMIX_EVENT_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
#include "src/include/types.h"
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include "include/pmix_common.h"
|
||||
#include "src/class/pmix_list.h"
|
||||
#include "src/util/output.h"
|
||||
|
||||
@ -122,6 +123,7 @@ typedef struct pmix_event_chain_t {
|
||||
bool timer_active;
|
||||
bool nondefault;
|
||||
bool endchain;
|
||||
bool cached;
|
||||
pmix_proc_t source;
|
||||
pmix_data_range_t range;
|
||||
/* When generating events, callers can specify
|
||||
@ -147,30 +149,30 @@ PMIX_CLASS_DECLARATION(pmix_event_chain_t);
|
||||
/* prepare a chain for processing by cycling across provided
|
||||
* info structs and translating those supported by the event
|
||||
* system into the chain object*/
|
||||
pmix_status_t pmix_prep_event_chain(pmix_event_chain_t *chain,
|
||||
const pmix_info_t *info, size_t ninfo,
|
||||
bool xfer);
|
||||
PMIX_EXPORT pmix_status_t pmix_prep_event_chain(pmix_event_chain_t *chain,
|
||||
const pmix_info_t *info, size_t ninfo,
|
||||
bool xfer);
|
||||
|
||||
/* invoke the error handler that is registered against the given
|
||||
* status, passing it the provided info on the procs that were
|
||||
* affected, plus any additional info provided by the server */
|
||||
void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain);
|
||||
PMIX_EXPORT void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain);
|
||||
|
||||
bool pmix_notify_check_range(pmix_range_trkr_t *rng,
|
||||
const pmix_proc_t *proc);
|
||||
PMIX_EXPORT bool pmix_notify_check_range(pmix_range_trkr_t *rng,
|
||||
const pmix_proc_t *proc);
|
||||
|
||||
bool pmix_notify_check_affected(pmix_proc_t *interested, size_t ninterested,
|
||||
pmix_proc_t *affected, size_t naffected);
|
||||
PMIX_EXPORT bool pmix_notify_check_affected(pmix_proc_t *interested, size_t ninterested,
|
||||
pmix_proc_t *affected, size_t naffected);
|
||||
|
||||
|
||||
/* invoke the server event notification handler */
|
||||
pmix_status_t pmix_server_notify_client_of_event(pmix_status_t status,
|
||||
const pmix_proc_t *source,
|
||||
pmix_data_range_t range,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t pmix_server_notify_client_of_event(pmix_status_t status,
|
||||
const pmix_proc_t *source,
|
||||
pmix_data_range_t range,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
void pmix_event_timeout_cb(int fd, short flags, void *arg);
|
||||
PMIX_EXPORT void pmix_event_timeout_cb(int fd, short flags, void *arg);
|
||||
|
||||
#define PMIX_REPORT_EVENT(e, p, r, f) \
|
||||
do { \
|
||||
@ -246,8 +248,11 @@ void pmix_event_timeout_cb(int fd, short flags, void *arg);
|
||||
ch->info = info; \
|
||||
ch->ninfo = ninfo - 2; \
|
||||
/* reset the timer */ \
|
||||
pmix_event_del(&ch->ev); \
|
||||
if (ch->timer_active) { \
|
||||
pmix_event_del(&ch->ev); \
|
||||
} \
|
||||
PMIX_POST_OBJECT(ch); \
|
||||
ch->timer_active = true; \
|
||||
pmix_event_add(&ch->ev, &pmix_globals.event_window); \
|
||||
} \
|
||||
} while(0)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2017-2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2017 IBM Corporation. All rights reserved.
|
||||
@ -11,15 +11,15 @@
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/name_fns.h"
|
||||
#include "src/util/output.h"
|
||||
|
||||
#include "src/mca/bfrops/bfrops.h"
|
||||
@ -71,7 +71,7 @@ PMIX_EXPORT pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
}
|
||||
|
||||
/* if we aren't connected, don't attempt to send */
|
||||
if (!pmix_globals.connected) {
|
||||
if (!pmix_globals.connected && PMIX_RANGE_PROC_LOCAL != range) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
return PMIX_ERR_UNREACH;
|
||||
}
|
||||
@ -93,6 +93,7 @@ PMIX_EXPORT pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
static void notify_event_cbfunc(struct pmix_peer_t *pr, pmix_ptl_hdr_t *hdr,
|
||||
pmix_buffer_t *buf, void *cbdata)
|
||||
{
|
||||
(void)hdr;
|
||||
pmix_status_t rc, ret;
|
||||
int32_t cnt = 1;
|
||||
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
|
||||
@ -110,7 +111,7 @@ static void notify_event_cbfunc(struct pmix_peer_t *pr, pmix_ptl_hdr_t *hdr,
|
||||
PMIX_RELEASE(cb);
|
||||
}
|
||||
|
||||
static pmix_status_t notify_event_cache(pmix_notify_caddy_t *cd)
|
||||
pmix_status_t pmix_notify_event_cache(pmix_notify_caddy_t *cd)
|
||||
{
|
||||
pmix_status_t rc;
|
||||
int j;
|
||||
@ -219,8 +220,12 @@ static pmix_status_t notify_server_of_event(pmix_status_t status,
|
||||
/* setup for our own local callbacks */
|
||||
chain = PMIX_NEW(pmix_event_chain_t);
|
||||
chain->status = status;
|
||||
pmix_strncpy(chain->source.nspace, pmix_globals.myid.nspace, PMIX_MAX_NSLEN);
|
||||
chain->source.rank = pmix_globals.myid.rank;
|
||||
chain->range = range;
|
||||
if (NULL == source) {
|
||||
PMIX_LOAD_PROCID(&chain->source, pmix_globals.myid.nspace, pmix_globals.myid.rank);
|
||||
} else {
|
||||
PMIX_LOAD_PROCID(&chain->source, source->nspace, source->rank);
|
||||
}
|
||||
/* we always leave space for event hdlr name and a callback object */
|
||||
chain->nallocated = ninfo + 2;
|
||||
PMIX_INFO_CREATE(chain->info, chain->nallocated);
|
||||
@ -231,14 +236,8 @@ static pmix_status_t notify_server_of_event(pmix_status_t status,
|
||||
* ourselves should someone later register for it */
|
||||
cd = PMIX_NEW(pmix_notify_caddy_t);
|
||||
cd->status = status;
|
||||
if (NULL == source) {
|
||||
pmix_strncpy(cd->source.nspace, "UNDEF", PMIX_MAX_NSLEN);
|
||||
cd->source.rank = PMIX_RANK_UNDEF;
|
||||
} else {
|
||||
pmix_strncpy(cd->source.nspace, source->nspace, PMIX_MAX_NSLEN);
|
||||
cd->source.rank = source->rank;
|
||||
}
|
||||
cd->range = range;
|
||||
PMIX_LOAD_PROCID(&cd->source, chain->source.nspace, chain->source.rank);
|
||||
cd->range = chain->range;
|
||||
if (0 < chain->ninfo) {
|
||||
cd->ninfo = chain->ninfo;
|
||||
PMIX_INFO_CREATE(cd->info, cd->ninfo);
|
||||
@ -264,12 +263,13 @@ static pmix_status_t notify_server_of_event(pmix_status_t status,
|
||||
memcpy(cd->affected, chain->affected, cd->naffected * sizeof(pmix_proc_t));
|
||||
}
|
||||
/* cache it */
|
||||
rc = notify_event_cache(cd);
|
||||
rc = pmix_notify_event_cache(cd);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(cd);
|
||||
goto cleanup;
|
||||
}
|
||||
chain->cached = true;
|
||||
|
||||
if (PMIX_RANGE_PROC_LOCAL != range && NULL != msg) {
|
||||
/* create a callback object as we need to pass it to the
|
||||
@ -327,6 +327,10 @@ static void progress_local_event_hdlr(pmix_status_t status,
|
||||
pmix_list_item_t *item;
|
||||
pmix_event_hdlr_t *nxt;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s progressing local event",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid));
|
||||
|
||||
/* aggregate the results per RFC0018 - first search the
|
||||
* prior chained results to see if any keys have been NULL'd
|
||||
* as this indicates that info struct should be removed */
|
||||
@ -620,8 +624,8 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
bool found;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"%s:%d invoke_local_event_hdlr for status %s",
|
||||
pmix_globals.myid.nspace, pmix_globals.myid.rank,
|
||||
"%s invoke_local_event_hdlr for status %s",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
PMIx_Error_string(chain->status));
|
||||
|
||||
/* sanity check */
|
||||
@ -629,6 +633,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
/* should never happen as space must always be
|
||||
* reserved for handler name and callback object*/
|
||||
rc = PMIX_ERR_BAD_PARAM;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto complete;
|
||||
}
|
||||
|
||||
@ -636,15 +643,25 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
if (NULL != chain->targets) {
|
||||
found = false;
|
||||
for (i=0; i < chain->ntargets; i++) {
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s CHECKING TARGET %s",
|
||||
PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
PMIX_NAME_PRINT(&chain->targets[i]));
|
||||
if (PMIX_CHECK_PROCID(&chain->targets[i], &pmix_globals.myid)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto complete;
|
||||
}
|
||||
}
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
|
||||
/* if we registered a "first" handler, and it fits the given range,
|
||||
* then invoke it first */
|
||||
@ -656,6 +673,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
chain->affected, chain->naffected)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = pmix_globals.events.first;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
} else if (NULL != pmix_globals.events.first->codes) {
|
||||
/* need to check if this code is included in the array */
|
||||
@ -671,6 +691,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
if (found && pmix_notify_check_range(&pmix_globals.events.first->rng, &chain->source)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = pmix_globals.events.first;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
} else {
|
||||
@ -678,11 +701,17 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
if (pmix_notify_check_range(&pmix_globals.events.first->rng, &chain->source)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = pmix_globals.events.first;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
/* get here if there is no match, so fall thru */
|
||||
}
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
|
||||
/* cycle thru the single-event registrations first */
|
||||
PMIX_LIST_FOREACH(evhdlr, &pmix_globals.events.single_events, pmix_event_hdlr_t) {
|
||||
@ -692,6 +721,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
chain->affected, chain->naffected)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = evhdlr;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
@ -707,11 +739,17 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
chain->affected, chain->naffected)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = evhdlr;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
|
||||
/* if they didn't want it to go to a default handler, then ignore them */
|
||||
if (!chain->nondefault) {
|
||||
@ -722,6 +760,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
chain->affected, chain->naffected)) {
|
||||
/* invoke the handler */
|
||||
chain->evhdlr = evhdlr;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
@ -737,23 +778,37 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
if (1 == pmix_globals.events.last->ncodes &&
|
||||
pmix_globals.events.last->codes[0] == chain->status) {
|
||||
chain->evhdlr = pmix_globals.events.last;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
} else if (NULL != pmix_globals.events.last->codes) {
|
||||
/* need to check if this code is included in the array */
|
||||
for (i=0; i < pmix_globals.events.last->ncodes; i++) {
|
||||
if (pmix_globals.events.last->codes[i] == chain->status) {
|
||||
chain->evhdlr = pmix_globals.events.last;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* gets run for all codes */
|
||||
chain->evhdlr = pmix_globals.events.last;
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
goto invk;
|
||||
}
|
||||
}
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
|
||||
__FILE__, __LINE__);
|
||||
|
||||
/* if we got here, then nothing was found */
|
||||
rc = PMIX_ERR_NOT_FOUND;
|
||||
|
||||
complete:
|
||||
/* we still have to call their final callback */
|
||||
@ -766,6 +821,9 @@ void pmix_invoke_local_event_hdlr(pmix_event_chain_t *chain)
|
||||
|
||||
|
||||
invk:
|
||||
pmix_output_verbose(8, pmix_client_globals.event_output,
|
||||
"%s %s:%d", PMIX_NAME_PRINT(&pmix_globals.myid),
|
||||
__FILE__, __LINE__);
|
||||
/* start with the chain holding only the given info */
|
||||
chain->ninfo = chain->nallocated - 2;
|
||||
|
||||
@ -806,6 +864,8 @@ static void local_cbfunc(pmix_status_t status, void *cbdata)
|
||||
|
||||
static void _notify_client_event(int sd, short args, void *cbdata)
|
||||
{
|
||||
(void)sd;
|
||||
(void)args;
|
||||
pmix_notify_caddy_t *cd = (pmix_notify_caddy_t*)cbdata;
|
||||
pmix_regevents_info_t *reginfoptr;
|
||||
pmix_peer_events_info_t *pr;
|
||||
@ -849,7 +909,7 @@ static void _notify_client_event(int sd, short args, void *cbdata)
|
||||
* the message until all local procs have received it, or it ages to
|
||||
* the point where it gets pushed out by more recent events */
|
||||
PMIX_RETAIN(cd);
|
||||
rc = notify_event_cache(cd);
|
||||
rc = pmix_notify_event_cache(cd);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
}
|
||||
@ -859,8 +919,10 @@ static void _notify_client_event(int sd, short args, void *cbdata)
|
||||
* against our registrations */
|
||||
chain = PMIX_NEW(pmix_event_chain_t);
|
||||
chain->status = cd->status;
|
||||
pmix_strncpy(chain->source.nspace, cd->source.nspace, PMIX_MAX_NSLEN);
|
||||
chain->source.rank = cd->source.rank;
|
||||
if (holdcd) {
|
||||
chain->cached = true;
|
||||
}
|
||||
PMIX_LOAD_PROCID(&chain->source, cd->source.nspace, cd->source.rank);
|
||||
/* we always leave space for a callback object and
|
||||
* the evhandler name. */
|
||||
chain->nallocated = cd->ninfo + 2;
|
||||
@ -1095,15 +1157,6 @@ pmix_status_t pmix_server_notify_client_of_event(pmix_status_t status,
|
||||
"pmix_server: notify client of event %s",
|
||||
PMIx_Error_string(status));
|
||||
|
||||
if (NULL != info) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_EVENT_PROXY) &&
|
||||
PMIX_CHECK_PROCID(info[n].value.data.proc, &pmix_globals.myid)) {
|
||||
return PMIX_OPERATION_SUCCEEDED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cd = PMIX_NEW(pmix_notify_caddy_t);
|
||||
cd->status = status;
|
||||
if (NULL == source) {
|
||||
@ -1212,6 +1265,8 @@ bool pmix_notify_check_affected(pmix_proc_t *interested, size_t ninterested,
|
||||
|
||||
void pmix_event_timeout_cb(int fd, short flags, void *arg)
|
||||
{
|
||||
(void)fd;
|
||||
(void)flags;
|
||||
pmix_event_chain_t *ch = (pmix_event_chain_t*)arg;
|
||||
|
||||
/* need to acquire the object from its originating thread */
|
||||
@ -1374,6 +1429,7 @@ static void chcon(pmix_event_chain_t *p)
|
||||
p->source.rank = PMIX_RANK_UNDEF;
|
||||
p->nondefault = false;
|
||||
p->endchain = false;
|
||||
p->cached = false;
|
||||
p->targets = NULL;
|
||||
p->ntargets = 0;
|
||||
p->range = PMIX_RANGE_UNDEF;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2017-2018 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -9,12 +9,11 @@
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include <src/include/pmix_config.h>
|
||||
#include "src/include/pmix_config.h"
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_rename.h>
|
||||
#include "include/pmix.h"
|
||||
#include "include/pmix_common.h"
|
||||
#include "include/pmix_server.h"
|
||||
|
||||
#include "src/threads/threads.h"
|
||||
#include "src/util/error.h"
|
||||
@ -30,6 +29,8 @@
|
||||
pmix_object_t super;
|
||||
volatile bool active;
|
||||
pmix_event_t ev;
|
||||
pmix_lock_t lock;
|
||||
pmix_status_t status;
|
||||
size_t index;
|
||||
bool firstoverall;
|
||||
bool enviro;
|
||||
@ -48,6 +49,7 @@
|
||||
} pmix_rshift_caddy_t;
|
||||
static void rscon(pmix_rshift_caddy_t *p)
|
||||
{
|
||||
PMIX_CONSTRUCT_LOCK(&p->lock);
|
||||
p->firstoverall = false;
|
||||
p->enviro = false;
|
||||
p->list = NULL;
|
||||
@ -65,6 +67,7 @@ static void rscon(pmix_rshift_caddy_t *p)
|
||||
}
|
||||
static void rsdes(pmix_rshift_caddy_t *p)
|
||||
{
|
||||
PMIX_DESTRUCT_LOCK(&p->lock);
|
||||
if (0 < p->ncodes) {
|
||||
free(p->codes);
|
||||
}
|
||||
@ -118,12 +121,12 @@ static void regevents_cbfunc(struct pmix_peer_t *peer, pmix_ptl_hdr_t *hdr,
|
||||
}
|
||||
|
||||
/* call the callback */
|
||||
if (NULL != cd && NULL != cd->evregcbfn) {
|
||||
cd->evregcbfn(ret, index, cd->cbdata);
|
||||
}
|
||||
if (NULL != cd) {
|
||||
/* check this event against anything in our cache */
|
||||
check_cached_events(cd);
|
||||
if (NULL != cd->evregcbfn) {
|
||||
cd->evregcbfn(ret, index, cd->cbdata);
|
||||
}
|
||||
}
|
||||
|
||||
/* release any info we brought along as they are
|
||||
@ -516,8 +519,22 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
} else if (0 == strncmp(cd->info[n].key, PMIX_RANGE, PMIX_MAX_KEYLEN)) {
|
||||
range = cd->info[n].value.data.range;
|
||||
} else if (0 == strncmp(cd->info[n].key, PMIX_EVENT_CUSTOM_RANGE, PMIX_MAX_KEYLEN)) {
|
||||
parray = (pmix_proc_t*)cd->info[n].value.data.darray->array;
|
||||
nprocs = cd->info[n].value.data.darray->size;
|
||||
/* provides an array of pmix_proc_t identifying the procs
|
||||
* that are to receive this notification, or a single pmix_proc_t */
|
||||
if (PMIX_DATA_ARRAY == cd->info[n].value.type &&
|
||||
NULL != cd->info[n].value.data.darray &&
|
||||
NULL != cd->info[n].value.data.darray->array) {
|
||||
parray = (pmix_proc_t*)cd->info[n].value.data.darray->array;
|
||||
nprocs = cd->info[n].value.data.darray->size;
|
||||
} else if (PMIX_PROC == cd->info[n].value.type &&
|
||||
NULL != cd->info[n].value.data.proc) {
|
||||
parray = cd->info[n].value.data.proc;
|
||||
nprocs = 1;
|
||||
} else {
|
||||
/* this is an error */
|
||||
rc = PMIX_ERR_BAD_PARAM;
|
||||
goto ack;
|
||||
}
|
||||
} else if (0 == strncmp(cd->info[n].key, PMIX_EVENT_AFFECTED_PROC, PMIX_MAX_KEYLEN)) {
|
||||
cd->affected = cd->info[n].value.data.proc;
|
||||
cd->naffected = 1;
|
||||
@ -617,28 +634,7 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
cd->list = NULL;
|
||||
cd->hdlr = evhdlr;
|
||||
cd->firstoverall = firstoverall;
|
||||
rc = _add_hdlr(cd, &xfer);
|
||||
PMIX_LIST_DESTRUCT(&xfer);
|
||||
if (PMIX_SUCCESS != rc &&
|
||||
PMIX_ERR_WOULD_BLOCK != rc) {
|
||||
/* unable to register */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
if (firstoverall) {
|
||||
pmix_globals.events.first = NULL;
|
||||
} else {
|
||||
pmix_globals.events.last = NULL;
|
||||
}
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
if (PMIX_ERR_WOULD_BLOCK == rc) {
|
||||
/* the callback will provide our response */
|
||||
PMIX_RELEASE(cd);
|
||||
return;
|
||||
}
|
||||
goto ack;
|
||||
goto addtolist;
|
||||
}
|
||||
|
||||
/* get here if this isn't an overall first or last event - start
|
||||
@ -705,6 +701,109 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
cd->index = index;
|
||||
cd->hdlr = evhdlr;
|
||||
cd->firstoverall = false;
|
||||
|
||||
addtolist:
|
||||
if (NULL != cd->list) {
|
||||
/* now add this event to the appropriate list - if the registration
|
||||
* subsequently fails, it will be removed */
|
||||
|
||||
/* if the list is empty, or no location was specified, just put this on it */
|
||||
if (0 == pmix_list_get_size(cd->list) ||
|
||||
PMIX_EVENT_ORDER_NONE == location) {
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_FIRST == location) {
|
||||
/* see if the first handler on the list was also declared as "first" */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_first(cd->list);
|
||||
if (PMIX_EVENT_ORDER_FIRST == ev->precedence) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
/* prepend it to the list */
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_LAST == location) {
|
||||
/* see if the last handler on the list was also declared as "last" */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_last(cd->list);
|
||||
if (PMIX_EVENT_ORDER_LAST == ev->precedence) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
/* append it to the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_PREPEND == location) {
|
||||
/* we know the list isn't empty - check the first element to see if
|
||||
* it is designated to be "first". If so, then we need to put this
|
||||
* right after it */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_first(cd->list);
|
||||
if (PMIX_EVENT_ORDER_FIRST == ev->precedence) {
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_next(&ev->super);
|
||||
if (NULL != ev) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* we are at the end of the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else {
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else if (PMIX_EVENT_ORDER_APPEND == location) {
|
||||
/* we know the list isn't empty - check the last element to see if
|
||||
* it is designated to be "last". If so, then we need to put this
|
||||
* right before it */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_last(cd->list);
|
||||
if (PMIX_EVENT_ORDER_LAST == ev->precedence) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else {
|
||||
/* find the named event */
|
||||
found = false;
|
||||
PMIX_LIST_FOREACH(ev, cd->list, pmix_event_hdlr_t) {
|
||||
if (NULL == ev->name) {
|
||||
continue;
|
||||
}
|
||||
if (0 == strcmp(ev->name, name)) {
|
||||
if (PMIX_EVENT_ORDER_BEFORE == location) {
|
||||
/* put it before this handler */
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* put it after this handler */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_next(&ev->super);
|
||||
if (NULL != ev) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* we are at the end of the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* if the handler wasn't found, then we return an error. At some
|
||||
* future time, we may change this behavior and cache this handler
|
||||
* until the reference one has been registered. However, this could
|
||||
* turn out to be a laborious search procedure as the reference
|
||||
* event handler may in turn be dependent on another handler, etc. */
|
||||
if (!found) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* tell the server about it, if necessary - any actions
|
||||
* will be deferred until after this event completes */
|
||||
if (PMIX_RANGE_PROC_LOCAL == range) {
|
||||
@ -719,106 +818,14 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
if (firstoverall) {
|
||||
pmix_globals.events.first = NULL;
|
||||
} else if (lastoverall) {
|
||||
pmix_globals.events.last = NULL;
|
||||
} else if (NULL != cd->list) {
|
||||
pmix_list_remove_item(cd->list, &evhdlr->super);
|
||||
}
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
/* now add this event to the appropriate list - if the registration
|
||||
* subsequently fails, it will be removed */
|
||||
|
||||
/* if the list is empty, or no location was specified, just put this on it */
|
||||
if (0 == pmix_list_get_size(cd->list) ||
|
||||
PMIX_EVENT_ORDER_NONE == location) {
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_FIRST == location) {
|
||||
/* see if the first handler on the list was also declared as "first" */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_first(cd->list);
|
||||
if (PMIX_EVENT_ORDER_FIRST == ev->precedence) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
/* prepend it to the list */
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_LAST == location) {
|
||||
/* see if the last handler on the list was also declared as "last" */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_last(cd->list);
|
||||
if (PMIX_EVENT_ORDER_LAST == ev->precedence) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
/* append it to the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
} else if (PMIX_EVENT_ORDER_PREPEND == location) {
|
||||
/* we know the list isn't empty - check the first element to see if
|
||||
* it is designated to be "first". If so, then we need to put this
|
||||
* right after it */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_first(cd->list);
|
||||
if (PMIX_EVENT_ORDER_FIRST == ev->precedence) {
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_next(&ev->super);
|
||||
if (NULL != ev) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* we are at the end of the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else {
|
||||
pmix_list_prepend(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else if (PMIX_EVENT_ORDER_APPEND == location) {
|
||||
/* we know the list isn't empty - check the last element to see if
|
||||
* it is designated to be "last". If so, then we need to put this
|
||||
* right before it */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_last(cd->list);
|
||||
if (PMIX_EVENT_ORDER_LAST == ev->precedence) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
} else {
|
||||
/* find the named event */
|
||||
found = false;
|
||||
PMIX_LIST_FOREACH(ev, cd->list, pmix_event_hdlr_t) {
|
||||
if (NULL == ev->name) {
|
||||
continue;
|
||||
}
|
||||
if (0 == strcmp(ev->name, name)) {
|
||||
if (PMIX_EVENT_ORDER_BEFORE == location) {
|
||||
/* put it before this handler */
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* put it after this handler */
|
||||
ev = (pmix_event_hdlr_t*)pmix_list_get_next(&ev->super);
|
||||
if (NULL != ev) {
|
||||
pmix_list_insert_pos(cd->list, &ev->super, &evhdlr->super);
|
||||
} else {
|
||||
/* we are at the end of the list */
|
||||
pmix_list_append(cd->list, &evhdlr->super);
|
||||
}
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* if the handler wasn't found, then we return an error. At some
|
||||
* future time, we may change this behavior and cache this handler
|
||||
* until the reference one has been registered. However, this could
|
||||
* turn out to be a laborious search procedure as the reference
|
||||
* event handler may in turn be dependent on another handler, etc. */
|
||||
if (!found) {
|
||||
/* this is an error */
|
||||
--pmix_globals.events.nhdlrs;
|
||||
rc = PMIX_ERR_EVENT_REGISTRATION;
|
||||
index = UINT_MAX;
|
||||
PMIX_RELEASE(evhdlr);
|
||||
goto ack;
|
||||
}
|
||||
}
|
||||
if (PMIX_ERR_WOULD_BLOCK == rc) {
|
||||
/* the callback will provide our response */
|
||||
@ -827,12 +834,6 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
}
|
||||
|
||||
ack:
|
||||
/* acknowledge the registration so the caller can release
|
||||
* their data AND record the event handler index */
|
||||
if (NULL != cd->evregcbfn) {
|
||||
cd->evregcbfn(rc, index, cd->cbdata);
|
||||
}
|
||||
|
||||
/* check if any matching notifications have been locally cached */
|
||||
check_cached_events(cd);
|
||||
if (NULL != cd->codes) {
|
||||
@ -840,8 +841,27 @@ static void reg_event_hdlr(int sd, short args, void *cbdata)
|
||||
cd->codes = NULL;
|
||||
}
|
||||
|
||||
/* all done */
|
||||
PMIX_RELEASE(cd);
|
||||
/* acknowledge the registration so the caller can release
|
||||
* their data AND record the event handler index */
|
||||
if (NULL != cd->evregcbfn) {
|
||||
cd->evregcbfn(rc, index, cd->cbdata);
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
}
|
||||
|
||||
static void mycbfn(pmix_status_t status,
|
||||
size_t refid,
|
||||
void *cbdata)
|
||||
{
|
||||
pmix_rshift_caddy_t *cd = (pmix_rshift_caddy_t*)cbdata;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(cd);
|
||||
if (PMIX_SUCCESS == status) {
|
||||
cd->status = refid;
|
||||
} else {
|
||||
cd->status = status;
|
||||
}
|
||||
PMIX_WAKEUP_THREAD(&cd->lock);
|
||||
}
|
||||
|
||||
PMIX_EXPORT void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncodes,
|
||||
@ -858,7 +878,7 @@ PMIX_EXPORT void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncode
|
||||
if (pmix_globals.init_cntr <= 0) {
|
||||
PMIX_RELEASE_THREAD(&pmix_global_lock);
|
||||
if (NULL != cbfunc) {
|
||||
cbfunc(PMIX_ERR_INIT, 0, cbdata);
|
||||
cbfunc(PMIX_ERR_INIT, SIZE_MAX, cbdata);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -888,13 +908,30 @@ PMIX_EXPORT void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncode
|
||||
cd->info = info;
|
||||
cd->ninfo = ninfo;
|
||||
cd->evhdlr = event_hdlr;
|
||||
cd->evregcbfn = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"pmix_register_event_hdlr shifting to progress thread");
|
||||
if (NULL != cbfunc) {
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"pmix_register_event_hdlr shifting to progress thread");
|
||||
|
||||
PMIX_THREADSHIFT(cd, reg_event_hdlr);
|
||||
cd->evregcbfn = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
PMIX_THREADSHIFT(cd, reg_event_hdlr);
|
||||
} else {
|
||||
cd->evregcbfn = mycbfn;
|
||||
cd->cbdata = cd;
|
||||
PMIX_RETAIN(cd);
|
||||
reg_event_hdlr(0, 0, (void*)cd);
|
||||
PMIX_WAIT_THREAD(&cd->lock);
|
||||
if (NULL != cbfunc) {
|
||||
if (0 > cd->status) {
|
||||
cbfunc(cd->status, SIZE_MAX, cbdata);
|
||||
} else {
|
||||
cbfunc(PMIX_SUCCESS, cd->status, cbdata);
|
||||
}
|
||||
}
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void dereg_event_hdlr(int sd, short args, void *cbdata)
|
||||
@ -1085,6 +1122,15 @@ static void dereg_event_hdlr(int sd, short args, void *cbdata)
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
static void myopcb(pmix_status_t status, void *cbdata)
|
||||
{
|
||||
pmix_shift_caddy_t *cd = (pmix_shift_caddy_t*)cbdata;
|
||||
|
||||
PMIX_ACQUIRE_OBJECT(cd);
|
||||
cd->status = status;
|
||||
PMIX_WAKEUP_THREAD(&cd->lock);
|
||||
}
|
||||
|
||||
PMIX_EXPORT void PMIx_Deregister_event_handler(size_t event_hdlr_ref,
|
||||
pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata)
|
||||
@ -1103,11 +1149,19 @@ PMIX_EXPORT void PMIx_Deregister_event_handler(size_t event_hdlr_ref,
|
||||
|
||||
/* need to thread shift this request */
|
||||
cd = PMIX_NEW(pmix_shift_caddy_t);
|
||||
cd->cbfunc.opcbfn = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
if (NULL == cbfunc) {
|
||||
cd->cbfunc.opcbfn = myopcb;
|
||||
PMIX_RETAIN(cd);
|
||||
cd->cbdata = cd;
|
||||
} else {
|
||||
cd->cbfunc.opcbfn = cbfunc;
|
||||
cd->cbdata = cbdata;
|
||||
}
|
||||
cd->ref = event_hdlr_ref;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.event_output,
|
||||
"pmix_deregister_event_hdlr shifting to progress thread");
|
||||
PMIX_THREADSHIFT(cd, dereg_event_hdlr);
|
||||
|
||||
return;
|
||||
}
|
||||
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
x
Ссылка в новой задаче
Block a user