Whamcloud - gitweb
Move portals into its own CVS module for HEAD.
authorjacob <jacob>
Sun, 19 Dec 2004 23:11:15 +0000 (23:11 +0000)
committerjacob <jacob>
Sun, 19 Dec 2004 23:11:15 +0000 (23:11 +0000)
220 files changed:
COPYING [new file with mode: 0644]
README
ldiskfs/ldiskfs/autoMakefile.am
lnet/autoMakefile.am
lnet/autoconf/.cvsignore [moved from lustre/portals/include/linux/.cvsignore with 100% similarity]
lnet/autoconf/Makefile.am [new file with mode: 0644]
lnet/autoconf/lustre-lnet.m4 [new file with mode: 0644]
lustre/Makefile.in
lustre/README [deleted file]
lustre/README.kernel-source [deleted file]
lustre/autoMakefile.am
lustre/autoconf/Makefile.am [new file with mode: 0644]
lustre/autoconf/lustre-core.m4 [new file with mode: 0644]
lustre/autoconf/lustre-version.ac [new file with mode: 0644]
lustre/autogen.sh [deleted file]
lustre/conf/Makefile.am
lustre/configure.in [deleted file]
lustre/include/Makefile.am
lustre/include/linux/Makefile.am
lustre/include/linux/lustre_compat25.h
lustre/ldiskfs/autoMakefile.am
lustre/liblustre/tests/Makefile.am
lustre/lvfs/autoMakefile.am
lustre/portals/.cvsignore [deleted file]
lustre/portals/AUTHORS [deleted file]
lustre/portals/ChangeLog [deleted file]
lustre/portals/Kernelenv.in [deleted file]
lustre/portals/Kernelenv.mk [deleted file]
lustre/portals/Makefile.in [deleted file]
lustre/portals/Makefile.mk [deleted file]
lustre/portals/NEWS [deleted file]
lustre/portals/README [deleted file]
lustre/portals/archdep.m4 [deleted file]
lustre/portals/autoMakefile.am [deleted file]
lustre/portals/autogen.sh [deleted file]
lustre/portals/build.m4 [deleted file]
lustre/portals/doc/.cvsignore [deleted file]
lustre/portals/doc/Data-structures [deleted file]
lustre/portals/doc/Makefile.am [deleted file]
lustre/portals/doc/Message-life-cycle [deleted file]
lustre/portals/doc/NAL-HOWTO [deleted file]
lustre/portals/doc/file.fig [deleted file]
lustre/portals/doc/flow_new.fig [deleted file]
lustre/portals/doc/get.fig [deleted file]
lustre/portals/doc/ieee.bst [deleted file]
lustre/portals/doc/mpi.fig [deleted file]
lustre/portals/doc/portals.fig [deleted file]
lustre/portals/doc/portals3.bib [deleted file]
lustre/portals/doc/portals3.lyx [deleted file]
lustre/portals/doc/put.fig [deleted file]
lustre/portals/include/.cvsignore [deleted file]
lustre/portals/include/Makefile.am [deleted file]
lustre/portals/include/cygwin-ioctl.h [deleted file]
lustre/portals/include/linux/Makefile.am [deleted file]
lustre/portals/include/linux/kp30.h [deleted file]
lustre/portals/include/linux/kpr.h [deleted file]
lustre/portals/include/linux/libcfs.h [deleted file]
lustre/portals/include/linux/lustre_list.h [deleted file]
lustre/portals/include/linux/portals_compat25.h [deleted file]
lustre/portals/include/linux/portals_lib.h [deleted file]
lustre/portals/include/portals/.cvsignore [deleted file]
lustre/portals/include/portals/Makefile.am [deleted file]
lustre/portals/include/portals/api-support.h [deleted file]
lustre/portals/include/portals/api.h [deleted file]
lustre/portals/include/portals/build_check.h [deleted file]
lustre/portals/include/portals/errno.h [deleted file]
lustre/portals/include/portals/internal.h [deleted file]
lustre/portals/include/portals/lib-p30.h [deleted file]
lustre/portals/include/portals/lib-types.h [deleted file]
lustre/portals/include/portals/list.h [deleted file]
lustre/portals/include/portals/lltrace.h [deleted file]
lustre/portals/include/portals/myrnal.h [deleted file]
lustre/portals/include/portals/nal.h [deleted file]
lustre/portals/include/portals/nalids.h [deleted file]
lustre/portals/include/portals/p30.h [deleted file]
lustre/portals/include/portals/ptlctl.h [deleted file]
lustre/portals/include/portals/socknal.h [deleted file]
lustre/portals/include/portals/stringtab.h [deleted file]
lustre/portals/include/portals/types.h [deleted file]
lustre/portals/knals/.cvsignore [deleted file]
lustre/portals/knals/Makefile.in [deleted file]
lustre/portals/knals/Makefile.mk [deleted file]
lustre/portals/knals/autoMakefile.am [deleted file]
lustre/portals/knals/gmnal/.cvsignore [deleted file]
lustre/portals/knals/gmnal/Makefile.in [deleted file]
lustre/portals/knals/gmnal/Makefile.mk [deleted file]
lustre/portals/knals/gmnal/autoMakefile.am [deleted file]
lustre/portals/knals/gmnal/gmnal.h [deleted file]
lustre/portals/knals/gmnal/gmnal_api.c [deleted file]
lustre/portals/knals/gmnal/gmnal_cb.c [deleted file]
lustre/portals/knals/gmnal/gmnal_comm.c [deleted file]
lustre/portals/knals/gmnal/gmnal_module.c [deleted file]
lustre/portals/knals/gmnal/gmnal_utils.c [deleted file]
lustre/portals/knals/iibnal/.cvsignore [deleted file]
lustre/portals/knals/iibnal/Makefile.in [deleted file]
lustre/portals/knals/iibnal/Makefile.mk [deleted file]
lustre/portals/knals/iibnal/autoMakefile.am [deleted file]
lustre/portals/knals/iibnal/iibnal.c [deleted file]
lustre/portals/knals/iibnal/iibnal.h [deleted file]
lustre/portals/knals/iibnal/iibnal_cb.c [deleted file]
lustre/portals/knals/lonal/.cvsignore [deleted file]
lustre/portals/knals/lonal/Makefile.in [deleted file]
lustre/portals/knals/lonal/autoMakefile.am [deleted file]
lustre/portals/knals/lonal/lonal.c [deleted file]
lustre/portals/knals/lonal/lonal.h [deleted file]
lustre/portals/knals/lonal/lonal_cb.c [deleted file]
lustre/portals/knals/openibnal/.cvsignore [deleted file]
lustre/portals/knals/openibnal/Makefile.in [deleted file]
lustre/portals/knals/openibnal/Makefile.mk [deleted file]
lustre/portals/knals/openibnal/autoMakefile.am [deleted file]
lustre/portals/knals/openibnal/openibnal.c [deleted file]
lustre/portals/knals/openibnal/openibnal.h [deleted file]
lustre/portals/knals/openibnal/openibnal_cb.c [deleted file]
lustre/portals/knals/qswnal/.cvsignore [deleted file]
lustre/portals/knals/qswnal/Makefile.in [deleted file]
lustre/portals/knals/qswnal/autoMakefile.am [deleted file]
lustre/portals/knals/qswnal/qswnal.c [deleted file]
lustre/portals/knals/qswnal/qswnal.h [deleted file]
lustre/portals/knals/qswnal/qswnal_cb.c [deleted file]
lustre/portals/knals/ranal/.cvsignore [deleted file]
lustre/portals/knals/ranal/Makefile.in [deleted file]
lustre/portals/knals/ranal/autoMakefile.am [deleted file]
lustre/portals/knals/ranal/ranal.c [deleted file]
lustre/portals/knals/ranal/ranal.h [deleted file]
lustre/portals/knals/ranal/ranal_cb.c [deleted file]
lustre/portals/knals/socknal/.cvsignore [deleted file]
lustre/portals/knals/socknal/Makefile.in [deleted file]
lustre/portals/knals/socknal/Makefile.mk [deleted file]
lustre/portals/knals/socknal/autoMakefile.am [deleted file]
lustre/portals/knals/socknal/socknal.c [deleted file]
lustre/portals/knals/socknal/socknal.h [deleted file]
lustre/portals/knals/socknal/socknal_cb.c [deleted file]
lustre/portals/libcfs/.cvsignore [deleted file]
lustre/portals/libcfs/Makefile.in [deleted file]
lustre/portals/libcfs/Makefile.mk [deleted file]
lustre/portals/libcfs/autoMakefile.am [deleted file]
lustre/portals/libcfs/debug.c [deleted file]
lustre/portals/libcfs/lwt.c [deleted file]
lustre/portals/libcfs/module.c [deleted file]
lustre/portals/libcfs/proc.c [deleted file]
lustre/portals/libcfs/tracefile.c [deleted file]
lustre/portals/libcfs/tracefile.h [deleted file]
lustre/portals/libcfs/watchdog.c [deleted file]
lustre/portals/packaging/.cvsignore [deleted file]
lustre/portals/packaging/Makefile.am [deleted file]
lustre/portals/packaging/portals.spec.in [deleted file]
lustre/portals/portals/.cvsignore [deleted file]
lustre/portals/portals/Makefile.in [deleted file]
lustre/portals/portals/Makefile.mk [deleted file]
lustre/portals/portals/api-errno.c [deleted file]
lustre/portals/portals/api-ni.c [deleted file]
lustre/portals/portals/api-wrap.c [deleted file]
lustre/portals/portals/autoMakefile.am [deleted file]
lustre/portals/portals/lib-eq.c [deleted file]
lustre/portals/portals/lib-init.c [deleted file]
lustre/portals/portals/lib-md.c [deleted file]
lustre/portals/portals/lib-me.c [deleted file]
lustre/portals/portals/lib-move.c [deleted file]
lustre/portals/portals/lib-msg.c [deleted file]
lustre/portals/portals/lib-ni.c [deleted file]
lustre/portals/portals/lib-pid.c [deleted file]
lustre/portals/portals/module.c [deleted file]
lustre/portals/router/.cvsignore [deleted file]
lustre/portals/router/Makefile.in [deleted file]
lustre/portals/router/Makefile.mk [deleted file]
lustre/portals/router/autoMakefile.am [deleted file]
lustre/portals/router/proc.c [deleted file]
lustre/portals/router/router.c [deleted file]
lustre/portals/router/router.h [deleted file]
lustre/portals/tests/.cvsignore [deleted file]
lustre/portals/tests/Makefile.in [deleted file]
lustre/portals/tests/Makefile.mk [deleted file]
lustre/portals/tests/autoMakefile.am [deleted file]
lustre/portals/tests/ping.h [deleted file]
lustre/portals/tests/ping_cli.c [deleted file]
lustre/portals/tests/ping_srv.c [deleted file]
lustre/portals/tests/sping_cli.c [deleted file]
lustre/portals/tests/sping_srv.c [deleted file]
lustre/portals/tests/startclient.sh [deleted file]
lustre/portals/tests/startserver.sh [deleted file]
lustre/portals/tests/stopclient.sh [deleted file]
lustre/portals/tests/stopserver.sh [deleted file]
lustre/portals/unals/.cvsignore [deleted file]
lustre/portals/unals/Makefile.am [deleted file]
lustre/portals/unals/README [deleted file]
lustre/portals/unals/address.c [deleted file]
lustre/portals/unals/bridge.h [deleted file]
lustre/portals/unals/connection.c [deleted file]
lustre/portals/unals/connection.h [deleted file]
lustre/portals/unals/debug.c [deleted file]
lustre/portals/unals/dispatch.h [deleted file]
lustre/portals/unals/ipmap.h [deleted file]
lustre/portals/unals/pqtimer.c [deleted file]
lustre/portals/unals/pqtimer.h [deleted file]
lustre/portals/unals/procapi.c [deleted file]
lustre/portals/unals/procbridge.h [deleted file]
lustre/portals/unals/proclib.c [deleted file]
lustre/portals/unals/select.c [deleted file]
lustre/portals/unals/table.c [deleted file]
lustre/portals/unals/table.h [deleted file]
lustre/portals/unals/tcpnal.c [deleted file]
lustre/portals/unals/timer.h [deleted file]
lustre/portals/unals/utypes.h [deleted file]
lustre/portals/utils/.cvsignore [deleted file]
lustre/portals/utils/Makefile.am [deleted file]
lustre/portals/utils/Makefile.mk [deleted file]
lustre/portals/utils/acceptor.c [deleted file]
lustre/portals/utils/debug.c [deleted file]
lustre/portals/utils/debugctl.c [deleted file]
lustre/portals/utils/gmnalnid.c [deleted file]
lustre/portals/utils/l_ioctl.c [deleted file]
lustre/portals/utils/parser.c [deleted file]
lustre/portals/utils/parser.h [deleted file]
lustre/portals/utils/portals.c [deleted file]
lustre/portals/utils/ptlctl.c [deleted file]
lustre/portals/utils/routerstat.c [deleted file]
lustre/portals/utils/wirecheck.c [deleted file]
lustre/ptlrpc/Makefile.in
lustre/ptlrpc/autoMakefile.am
lustre/scripts/Makefile.am

diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..c69cfd8
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,352 @@
+
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+                       Linus Torvalds
+
+----------------------------------------
+
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/README b/README
index e69de29..c052124 100644 (file)
--- a/README
+++ b/README
@@ -0,0 +1,2 @@
+Instructions for building, configuring and running Lustre can be found at:
+    http://projects.clusterfs.com/lustre/LustreHowto.
index e33e4c9..4fd32d4 100644 (file)
@@ -27,8 +27,8 @@ linux/ldiskfs%.h: linux-stage/include/linux/ext3%.h
 # FIXME: we need to grab the series in configure somehow
 # (see bug 1679)
 #
-series := @top_srcdir@/kernel_patches/series/ldiskfs-$(LDISKFS_SERIES)
-patches := @top_srcdir@/kernel_patches/patches
+series := @top_srcdir@/lustre/kernel_patches/series/ldiskfs-$(LDISKFS_SERIES)
+patches := @top_srcdir@/lustre/kernel_patches/patches
 
 sources: $(ext3_sources) $(ext3_headers) $(linux_headers) $(series)
        rm -rf linux-stage linux sources $(ldiskfs_SOURCES)
index 485ff04..f2ba240 100644 (file)
@@ -3,6 +3,7 @@
 # This code is issued under the GNU General Public License.
 # See the file COPYING in this distribution
 
-EXTRA_DIST = archdep.m4 build.m4
+SUBDIRS = portals libcfs knals unals router tests doc utils include    \
+       autoconf
 
-SUBDIRS = portals libcfs knals unals router tests doc utils include
+sources:
diff --git a/lnet/autoconf/Makefile.am b/lnet/autoconf/Makefile.am
new file mode 100644 (file)
index 0000000..f65d2c0
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_DIST := lustre-portals.m4
diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4
new file mode 100644 (file)
index 0000000..0cb49a2
--- /dev/null
@@ -0,0 +1,483 @@
+#
+# LP_CONFIG_ZEROCOPY
+#
+# check if zerocopy is available/wanted
+#
+AC_DEFUN([LP_CONFIG_ZEROCOPY],
+[AC_MSG_CHECKING([for zero-copy TCP support])
+AC_ARG_ENABLE([zerocopy],
+       AC_HELP_STRING([--disable-zerocopy],
+                      [disable socknal zerocopy]),
+       [],[enable_zerocopy='yes'])
+if test x$enable_zerocopy = xno ; then
+       AC_MSG_RESULT([no (by request)])
+else
+       ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
+       if test "$ZCCD" != 0 ; then
+               AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP])
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT([no (no kernel support)])
+       fi
+fi
+])
+
+#
+# LP_CONFIG_AFFINITY
+#
+# check if cpu affinity is available/wanted
+#
+AC_DEFUN([LP_CONFIG_AFFINITY],
+[AC_ARG_ENABLE([affinity],
+       AC_HELP_STRING([--disable-affinity],
+                      [disable process/irq affinity]),
+       [],[enable_affinity='yes'])
+
+AC_MSG_CHECKING([for CPU affinity support])
+if test x$enable_affinity = xno ; then
+       AC_MSG_RESULT([no (by request)])
+else
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/sched.h>
+       ],[
+               struct task_struct t;
+               #ifdef CPU_ARRAY_SIZE
+               cpumask_t m;
+               #else
+               unsigned long m;
+               #endif
+               set_cpus_allowed(&t, m);
+       ],[
+               AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support])
+               AC_MSG_RESULT([yes])
+       ],[
+               AC_MSG_RESULT([no (no kernel support)])
+       ])
+fi
+])
+
+#
+# LP_CONFIG_QUADRICS
+#
+# check if quadrics support is in this kernel
+#
+AC_DEFUN([LP_CONFIG_QUADRICS],
+[AC_MSG_CHECKING([if quadrics kernel headers are present])
+if test -d $LINUX/drivers/net/qsnet ; then
+       AC_MSG_RESULT([yes])
+       QSWNAL="qswnal"
+       AC_MSG_CHECKING([for multirail EKC])
+       if test -f $LINUX/include/elan/epcomms.h; then
+               AC_MSG_RESULT([supported])
+               QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
+       else
+               AC_MSG_RESULT([not supported])
+               if test -d $LINUX/drivers/net/qsnet/include; then
+                       QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
+               else
+                       QSWCPPFLAGS="-I$LINUX/include/linux"
+               fi
+       fi
+else
+       AC_MSG_RESULT([no])
+       QSWNAL=""
+       QSWCPPFLAGS=""
+fi
+AC_SUBST(QSWCPPFLAGS)
+AC_SUBST(QSWNAL)
+])
+
+#
+# LP_CONFIG_GM
+#
+# check if infiniband support is available
+#
+AC_DEFUN([LP_CONFIG_GM],
+[AC_MSG_CHECKING([if gm support was requested])
+AC_ARG_WITH([gm],
+       AC_HELP_STRING([--with-gm=path],
+                      [build gmnal against path]),
+       [
+               case $with_gm in 
+                       yes)
+                               AC_MSG_RESULT([yes])
+                               GMCPPFLAGS="-I/usr/local/gm/include"
+                               GMNAL="gmnal"
+                               ;;
+                       no)
+                               AC_MSG_RESULT([no])
+                               GMCPPFLAGS=""
+                               GMNAL=""
+                               ;;
+                       *)
+                               AC_MSG_RESULT([yes])
+                               GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
+                               GMNAL="gmnal"
+                               ;;
+               esac
+       ],[
+               AC_MSG_RESULT([no])
+               GMCPPFLAGS=""
+               GMNAL=""
+       ])
+AC_SUBST(GMCPPFLAGS)
+AC_SUBST(GMNAL)
+])
+
+#
+# LP_CONFIG_OPENIB
+#
+# check for OpenIB in the kernel
+AC_DEFUN([LP_CONFIG_OPENIB],
+[AC_MSG_CHECKING([if OpenIB kernel headers are present])
+OPENIBCPPFLAGS="-I$LINUX/drivers/infiniband/include -DIN_TREE_BUILD"
+EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
+LB_LINUX_TRY_COMPILE(
+       [
+               #include <ts_ib_core.h>
+       ],[
+                struct ib_device_properties props;
+               return 0;
+       ],[
+               AC_MSG_RESULT([yes])
+               OPENIBNAL="openibnal"
+       ],[
+               AC_MSG_RESULT([no])
+               OPENIBNAL=""
+               OPENIBCPPFLAGS=""
+       ])
+EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+AC_SUBST(OPENIBCPPFLAGS)
+AC_SUBST(OPENIBNAL)
+])
+
+#
+# LP_CONFIG_IIB
+#
+# check for infinicon infiniband support
+#
+AC_DEFUN([LP_CONFIG_IIB],
+[AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
+# for how the only infinicon ib build has headers in /usr/include/iba
+IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
+EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/iba/ibt.h>
+],[
+        IBT_INTERFACE_UNION interfaces;
+        FSTATUS             rc;
+
+         rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
+                                      &interfaces);
+
+       return rc == FSUCCESS ? 0 : 1;
+],[
+       AC_MSG_RESULT([yes])
+       IIBNAL="iibnal"
+],[
+       AC_MSG_RESULT([no])
+       IIBNAL=""
+       IIBCPPFLAGS=""
+])
+EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+AC_SUBST(IIBCPPFLAGS)
+AC_SUBST(IIBNAL)
+])
+
+#
+# LP_STRUCT_PAGE_LIST
+#
+# 2.6.4 no longer has page->list
+#
+AC_DEFUN([LP_STRUCT_PAGE_LIST],
+[AC_MSG_CHECKING([if struct page has a list field])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/mm.h>
+],[
+       struct page page;
+       &page.list;
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LP_STRUCT_SIGHAND
+#
+# red hat 2.4 adds sighand to struct task_struct
+#
+AC_DEFUN([LP_STRUCT_SIGHAND],
+[AC_MSG_CHECKING([if task_struct has a sighand field])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/sched.h>
+],[
+       struct task_struct p;
+       p.sighand = NULL;
+],[
+       AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LP_FUNC_CPU_ONLINE
+#
+# cpu_online is different in rh 2.4, vanilla 2.4, and 2.6
+#
+AC_DEFUN([LP_FUNC_CPU_ONLINE],
+[AC_MSG_CHECKING([if kernel defines cpu_online()])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/sched.h>
+],[
+       cpu_online(0);
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LP_TYPE_CPUMASK_T
+#
+# same goes for cpumask_t
+#
+AC_DEFUN([LP_TYPE_CPUMASK_T],
+[AC_MSG_CHECKING([if kernel defines cpumask_t])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/sched.h>
+],[
+       return sizeof (cpumask_t);
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LP_FUNC_SHOW_TASK
+#
+# we export show_task(), but not all kernels have it (yet)
+#
+AC_DEFUN([LP_FUNC_SHOW_TASK],
+[AC_MSG_CHECKING([if kernel exports show_task])
+have_show_task=0
+for file in ksyms sched ; do
+       if grep -q "EXPORT_SYMBOL(show_task)" \
+                "$LINUX/kernel/$file.c" 2>/dev/null ; then
+               have_show_task=1
+               break
+       fi
+done
+if test x$have_show_task = x1 ; then
+       AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
+       AC_MSG_RESULT([yes])
+else
+       AC_MSG_RESULT([no])
+fi
+])
+
+#
+# LP_PROG_LINUX
+#
+# Portals linux kernel checks
+#
+AC_DEFUN([LP_PROG_LINUX],
+[LP_CONFIG_ZEROCOPY
+LP_CONFIG_AFFINITY
+LP_CONFIG_QUADRICS
+LP_CONFIG_GM
+if test $linux25 = 'no' ; then
+       LP_CONFIG_OPENIB
+fi
+LP_CONFIG_IIB
+
+LP_STRUCT_PAGE_LIST
+LP_STRUCT_SIGHAND
+LP_FUNC_CPU_ONLINE
+LP_TYPE_CPUMASK_T
+LP_FUNC_SHOW_TASK
+])
+
+#
+# LP_PATH_DEFAULTS
+#
+# default paths for installed files
+#
+AC_DEFUN([LP_PATH_DEFAULTS],
+[
+])
+
+#
+# LP_CONFIGURE
+#
+# other configure checks
+#
+AC_DEFUN([LP_CONFIGURE],
+[# portals/utils/portals.c
+AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h])
+AC_CHECK_FUNCS([gethostbyname socket connect])
+
+# portals/utils/debug.c
+AC_CHECK_HEADERS([linux/version.h])
+
+AC_CHECK_TYPE([spinlock_t],
+       [AC_DEFINE(HAVE_SPINLOCK_T, 1, [spinlock_t is defined])],
+       [],
+       [#include <linux/spinlock.h>])
+
+# --------  Check for required packages  --------------
+
+# this doesn't seem to work on older autoconf
+# AC_CHECK_LIB(readline, readline,,)
+AC_MSG_CHECKING([for readline support])
+AC_ARG_ENABLE(readline,
+       AC_HELP_STRING([--disable-readline],
+                       [do not use readline library]),
+       [],[enable_readline='yes'])
+AC_MSG_RESULT([$enable_readline]) 
+if test x$enable_readline = xyes ; then
+       LIBREADLINE="-lreadline -lncurses"
+       AC_DEFINE(HAVE_LIBREADLINE, 1, [readline library is available])
+else 
+       LIBREADLINE=""
+fi
+AC_SUBST(LIBREADLINE)
+
+AC_MSG_CHECKING([if efence debugging support is requested])
+AC_ARG_ENABLE(efence,
+       AC_HELP_STRING([--enable-efence],
+                       [use efence library]),
+       [],[enable_efence='no'])
+AC_MSG_RESULT([$enable_efence])
+if test "$enable_efence" = "yes" ; then
+       LIBEFENCE="-lefence"
+       AC_DEFINE(HAVE_LIBEFENCE, 1, [libefence support is requested])
+else 
+       LIBEFENCE=""
+fi
+AC_SUBST(LIBEFENCE)
+
+# -------- enable acceptor libwrap (TCP wrappers) support? -------
+AC_MSG_CHECKING([if libwrap support is requested])
+AC_ARG_ENABLE([libwrap],
+       AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
+       [case "${enableval}" in
+               yes) enable_libwrap=yes ;;
+               no) enable_libwrap=no ;;
+               *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
+       esac],[enable_libwrap=no])
+AC_MSG_RESULT([$enable_libwrap])
+if test x$enable_libwrap = xyes ; then
+       LIBWRAP="-lwrap"
+       AC_DEFINE(HAVE_LIBWRAP, 1, [libwrap support is requested])
+else
+       LIBWRAP=""
+fi
+AC_SUBST(LIBWRAP)
+
+# ----------------------------------------
+# some tests for catamount-like systems
+# ----------------------------------------
+AC_ARG_ENABLE([sysio_init],
+       AC_HELP_STRING([--disable-sysio-init],
+               [call sysio init functions when initializing liblustre]),
+       [],[enable_sysio_init=yes])
+AC_MSG_CHECKING([whether to initialize libsysio])
+AC_MSG_RESULT([$enable_sysio_init])
+if test x$enable_sysio_init != xno ; then
+       AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions])
+fi
+
+AC_ARG_ENABLE([urandom],
+       AC_HELP_STRING([--disable-urandom],
+               [disable use of /dev/urandom for liblustre]),
+       [],[enable_urandom=yes])
+AC_MSG_CHECKING([whether to use /dev/urandom for liblustre])
+AC_MSG_RESULT([$enable_urandom])
+if test x$enable_urandom != xno ; then
+       AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data])
+fi
+
+# -------- check for -lcap and -lpthread ----
+if test x$enable_liblustre = xyes ; then
+       AC_CHECK_LIB([cap], [cap_get_proc],
+               [
+                       CAP_LIBS="-lcap"
+                       AC_DEFINE([HAVE_LIBCAP], 1, [use libcap])
+               ],
+               [CAP_LIBS=""])
+       AC_SUBST(CAP_LIBS)
+       AC_CHECK_LIB([pthread], [pthread_create],
+               [
+                       PTHREAD_LIBS="-lpthread"
+                       AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread])
+               ],
+               [PTHREAD_LIBS=""])
+       AC_SUBST(PTHREAD_LIBS)
+fi
+])
+
+#
+# LP_CONDITIONALS
+#
+# AM_CONDITOINAL defines for portals
+#
+AC_DEFUN([LP_CONDITIONALS],
+[AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal")
+AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
+AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
+AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
+])
+
+#
+# LP_CONFIG_FILES
+#
+# files that should be generated with AC_OUTPUT
+#
+AC_DEFUN([LP_CONFIG_FILES],
+[AC_CONFIG_FILES([
+portals/Kernelenv
+portals/Makefile
+portals/autoMakefile
+portals/autoconf/Makefile
+portals/doc/Makefile
+portals/include/Makefile
+portals/include/linux/Makefile
+portals/include/portals/Makefile
+portals/knals/Makefile
+portals/knals/autoMakefile
+portals/knals/gmnal/Makefile
+portals/knals/gmnal/autoMakefile
+portals/knals/iibnal/Makefile
+portals/knals/iibnal/autoMakefile
+portals/knals/openibnal/Makefile
+portals/knals/openibnal/autoMakefile
+portals/knals/qswnal/Makefile
+portals/knals/qswnal/autoMakefile
+portals/knals/socknal/Makefile
+portals/knals/socknal/autoMakefile
+portals/knals/lonal/Makefile
+portals/knals/lonal/autoMakefile
+portals/libcfs/Makefile
+portals/libcfs/autoMakefile
+portals/portals/Makefile
+portals/portals/autoMakefile
+portals/router/Makefile
+portals/router/autoMakefile
+portals/tests/Makefile
+portals/tests/autoMakefile
+portals/unals/Makefile
+portals/utils/Makefile
+])
+])
index 7a9e460..1907eb1 100644 (file)
@@ -1,5 +1,3 @@
-subdir-m += portals
-
 @LDISKFS_TRUE@subdir-m  += ldiskfs
 
 subdir-m += lvfs
diff --git a/lustre/README b/lustre/README
deleted file mode 100644 (file)
index c052124..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Instructions for building, configuring and running Lustre can be found at:
-    http://projects.clusterfs.com/lustre/LustreHowto.
diff --git a/lustre/README.kernel-source b/lustre/README.kernel-source
deleted file mode 100644 (file)
index 0b88efe..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-Lustre can currently build against Red Hat 2.4-style kernel-source
-RPMs.  All other kernel-source RPMs are *unsupported* at this time.
-
-Note that a Lustre-patched kernel is required for building Lustre; in
-most cases a kernel-source RPM from your Linux vendor will not contain
-the necessary patches.
-
-1.  kernel.h
-
-Building against a kernel-source RPM requires a special header.  On
-Red Hat systems, this file should be automatically created at boot
-time, and saved in /boot/kernel.h.
-
- *** If you are not running Red Hat Linux, or are not booted into the
- *** kernel you are trying to build against, you need to create this
- *** file manually.
-
- *** If you do not, the Lustre build may fail, or may fail to build
- *** modules that work with your kernel.
-
-Here is an example /boot/kernel.h file.  If you are building on
-x86_64, the first defines should be __MODULE_KERNEL_x86_64, etc.  The
-other defines should be simple to figure out.
-
-/* This file is automatically generated at boot time. */
-#ifndef __BOOT_KERNEL_H_
-#define __BOOT_KERNEL_H_
-
-/* Kernel type i686-smp */
-
-#ifndef __MODULE_KERNEL_i686
-#define __MODULE_KERNEL_i686 1
-#endif
-
-#ifndef __BOOT_KERNEL_ENTERPRISE
-#define __BOOT_KERNEL_ENTERPRISE 0
-#endif
-
-#ifndef __BOOT_KERNEL_BIGMEM
-#define __BOOT_KERNEL_BIGMEM 0
-#endif
-
-#ifndef __BOOT_KERNEL_HUGEMEM
-#define __BOOT_KERNEL_HUGEMEM 0
-#endif
-
-#ifndef __BOOT_KERNEL_SMP
-#define __BOOT_KERNEL_SMP 1
-#endif
-
-#ifndef __BOOT_KERNEL_UP
-#define __BOOT_KERNEL_UP 0
-#endif
-
-#endif
-
-You should save this somewhere, and pass the location of this file to
-./configure using the --with-kernel-source-header option.
-
-2.  .config
-
-You will also need to tell Lustre about the .config file for your
-kernel.  The two likely locations of this file are
-/boot/config-$(uname -r), and /usr/src/linux-2.4/configs/.  You should
-pass the location of this file to Lustre using the --with-linux-config
-option.
-
-3.  An Example
-
-Here is an example for configuring Lustre:
-
-./configure --with-linux=/usr/src/linux-2.4.20-28.9_lustre.1.0.3 \
---with-kernel-source-header=/boot/kernel.h \
---with-linux-config=/boot/config-2.4.20-28.9_lustre.1.0.3smp
index 6d9b324..8211b00 100644 (file)
@@ -5,47 +5,13 @@
 
 AUTOMAKE_OPTIONS = foreign
 
-SUBDIRS = . include portals ldiskfs lvfs obdclass lov ldlm ptlrpc      \
-       obdecho osc mdc lmv  mds obdfilter ost llite cobd ptlbd smfs cmobd \
-       liblustre doc utils tests conf scripts
+SUBDIRS = include ldiskfs lvfs obdclass lov ldlm ptlrpc      \
+       obdecho osc mdc lmv  mds obdfilter ost llite cobd ptlbd smfs snapfs \
+       cmobd liblustre doc utils tests conf scripts autoconf
 
-EXTRA_DIST = BUGS FDL Rules.in kernel_patches kernel-tests/Makefile    \
+EXTRA_DIST = BUGS FDL Rules.in kernel_patches \
        README.kernel-source
 
-# these empty rules are needed so that automake doesn't add its own
-# recursive rules
-etags-recursive:
-
-ctags-recursive:
-
-tags-recursive:
-
-TAGS:
-
-tags:
-       rm -f $(top_srcdir)/TAGS
-       ETAGSF=`etags --version | grep -iq exuberant && \
-               echo "-I __initdata,__exitdata,EXPORT_SYMBOL"`; \
-       find $(top_srcdir) -name '*.[hc]' | xargs etags $$ETAGSF -a
-
-       rm -f $(top_srcdir)/tags
-       CTAGSF=`ctags --version | grep -iq exuberant && \
-               echo "-I __initdata,__exitdata,EXPORT_SYMBOL"`; \
-       find $(top_srcdir) -name '*.[hc]' | xargs ctags $$CTAGSF -a
-
-if MODULES
-all-am: modules
-
-if !LINUX25
-DEP = dep
-dep: .depend
-
-.depend:
-       $(MAKE) $(ARCH_UM) -C $(LINUX) -f $(PWD)/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) -o scripts -o include/config/MARKER _sfdep_$(PWD) _FASTDEP_ALL_SUB_DIRS="$(PWD)"
-
-CLEANFILES = .depend
-endif
-
 if LDISKFS
 LDISKFS = ldiskfs-sources
 ldiskfs-sources:
@@ -55,27 +21,17 @@ endif
 lvfs-sources:
        $(MAKE) sources -C lvfs
 
-modules: lustre_build_version $(DEP) $(LDISKFS) lvfs-sources
-       $(MAKE) $(ARCH_UM) -C $(LINUX) -f $(PWD)/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) $(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o include/config/MARKER $@
-
-endif # MODULES
+sources: $(LDISKFS) lvfs-sources lustre_build_version
 
 all-recursive: lustre_build_version
 
 lustre_build_version:
-       perl $(top_builddir)/scripts/version_tag.pl $(top_srcdir) $(top_builddir) > tmpver
+       perl $(top_builddir)/lustre/scripts/version_tag.pl $(top_srcdir) $(top_builddir) > tmpver
        echo "#define LUSTRE_RELEASE @RELEASE@" >> tmpver
-       cmp -s $(top_builddir)/include/linux/lustre_build_version.h tmpver \
+       cmp -s $(top_builddir)/lustre/include/linux/lustre_build_version.h tmpver \
                 2> /dev/null &&                                            \
                 $(RM) tmpver ||                                            \
-                mv tmpver $(top_builddir)/include/linux/lustre_build_version.h
-
-dist-hook:
-       find $(distdir) -name .deps | xargs rm -rf
-       find $(distdir) -name CVS | xargs rm -rf
-
-rpms: dist Makefile
-       rpmbuild -ta $(distdir).tar.gz
+                mv tmpver $(top_builddir)/lustre/include/linux/lustre_build_version.h
 
 CSTK=/tmp/checkstack
 CSTKO=/tmp/checkstack.orig
diff --git a/lustre/autoconf/Makefile.am b/lustre/autoconf/Makefile.am
new file mode 100644 (file)
index 0000000..7a747da
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_DIST := lustre-core.m4 lustre-version.ac
diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
new file mode 100644 (file)
index 0000000..be1bed5
--- /dev/null
@@ -0,0 +1,489 @@
+#
+# LC_CONFIG_SRCDIR
+#
+# Wrapper for AC_CONFIG_SUBDIR
+#
+AC_DEFUN([LC_CONFIG_SRCDIR],
+[AC_CONFIG_SRCDIR([lustre/obdclass/obdo.c])
+])
+
+#
+# LC_PATH_DEFAULTS
+#
+# lustre specific paths
+#
+AC_DEFUN([LC_PATH_DEFAULTS],
+[# ptlrpc kernel build requires this
+LUSTRE="$PWD/lustre"
+AC_SUBST(LUSTRE)
+
+# mount.lustre
+rootsbindir='/sbin'
+AC_SUBST(rootsbindir)
+
+demodir='$(docdir)/demo'
+AC_SUBST(demodir)
+
+pkgexampledir='${pkgdatadir}/examples'
+AC_SUBST(pkgexampledir)
+
+pymoddir='${pkglibdir}/python/Lustre'
+AC_SUBST(pymoddir)
+])
+
+#
+# LC_TARGET_SUPPORTED
+#
+# is the target os supported?
+#
+AC_DEFUN([LC_TARGET_SUPPORTED],
+[case $target_os in
+       linux*)
+$1
+               ;;
+       *)
+$2
+               ;;
+esac
+])
+
+#
+# LC_CONFIG_EXT3
+#
+# that ext3 is enabled in the kernel
+#
+AC_DEFUN([LC_CONFIG_EXT3],
+[LB_LINUX_CONFIG([EXT3_FS],[],[
+       LB_LINUX_CONFIG([EXT3_FS_MODULE],[],[$2])
+])
+LB_LINUX_CONFIG([EXT3_FS_XATTR],[$1],[$3])
+])
+
+#
+# LC_FSHOOKS
+#
+# If we have (and can build) fshooks.h
+#
+AC_DEFUN([LC_FSHOOKS],
+[AC_CHECK_FILE([$LINUX/include/linux/fshooks.h],[
+       AC_MSG_CHECKING([if fshooks.h can be compiled])
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/fshooks.h>
+       ],[],[
+               AC_MSG_RESULT([yes])
+       ],[
+               AC_MSG_RESULT([no])
+               AC_MSG_WARN([You might have better luck with gcc 3.3.x.])
+               AC_MSG_WARN([You can set CC=gcc33 before running configure.])
+               AC_MSG_ERROR([Your compiler cannot build fshooks.h.])
+       ])
+$1
+],[
+$2
+])
+])
+
+#
+# LC_STRUCT_KIOBUF
+#
+# rh 2.4.18 has iobuf->dovary, but other kernels do not
+#
+AC_DEFUN([LC_STRUCT_KIOBUF],
+[AC_MSG_CHECKING([if struct kiobuf has a dovary field])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/iobuf.h>
+],[
+       struct kiobuf iobuf;
+       iobuf.dovary = 1;
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LC_FUNC_COND_RESCHED
+#
+# cond_resched() was introduced in 2.4.20
+#
+AC_DEFUN([LC_FUNC_COND_RESCHED],
+[AC_MSG_CHECKING([if kernel offers cond_resched])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/sched.h>
+],[
+       cond_resched();
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LC_FUNC_ZAP_PAGE_RANGE
+#
+# if zap_page_range() takes a vma arg
+#
+AC_DEFUN([LC_FUNC_ZAP_PAGE_RANGE],
+[AC_MSG_CHECKING([if zap_pag_range with vma parameter])
+ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`"
+if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then
+       AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter])
+       AC_MSG_RESULT([yes])
+else
+       AC_MSG_RESULT([no])
+fi
+])
+
+#
+# LC_FUNC_PDE
+#
+# if proc_fs.h defines PDE()
+#
+AC_DEFUN([LC_FUNC_PDE],
+[AC_MSG_CHECKING([if kernel defines PDE])
+HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
+if test "$HAVE_PDE" != 0 ; then
+       AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE])
+       AC_MSG_RESULT([yes])
+else
+       AC_MSG_RESULT([no])
+fi
+])
+
+#
+# LC_FUNC_DIRECT_IO
+#
+# if direct_IO takes a struct file argument
+#
+AC_DEFUN([LC_FUNC_DIRECT_IO],
+[AC_MSG_CHECKING([if kernel passes struct file to direct_IO])
+HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
+if test "$HAVE_DIO_FILE" != 0 ; then
+       AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO])
+       AC_MSG_RESULT(yes)
+else
+       AC_MSG_RESULT(no)
+fi
+])
+
+#
+# LC_HEADER_MM_INLINE
+#
+# RHEL kernels define page_count in mm_inline.h
+#
+AC_DEFUN([LC_HEADER_MM_INLINE],
+[AC_MSG_CHECKING([if kernel has mm_inline.h header])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/mm_inline.h>
+],[
+       #ifndef page_count
+       #error mm_inline.h does not define page_count
+       #endif
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LC_STRUCT_INODE
+#
+# if inode->i_alloc_sem exists
+#
+AC_DEFUN([LC_STRUCT_INODE],
+[AC_MSG_CHECKING([if struct inode has i_alloc_sem])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/version.h>
+],[
+       #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24))
+       #error "down_read_trylock broken before 2.4.24"
+       #endif
+       struct inode i;
+       return (char *)&i.i_alloc_sem - (char *)&i;
+],[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# LC_CONFIG_BACKINGFS
+#
+# whether to use extN or ldiskfs instead of ext3
+#
+AC_DEFUN([LC_CONFIG_BACKINGFS],
+[
+BACKINGFS='ext3'
+
+# LLNL patches their ext3 and calls it extN
+AC_MSG_CHECKING([whether to use extN])
+AC_ARG_ENABLE([extN],
+       AC_HELP_STRING([--enable-extN],
+                       [use extN instead of ext3 for lustre backend]),
+       [BACKINGFS='extN'],[enable_extN='no'])
+AC_MSG_RESULT([$enable_extN])
+
+# SuSE gets ldiskfs
+AC_MSG_CHECKING([whether to enable ldiskfs])
+AC_ARG_ENABLE([ldiskfs],
+       AC_HELP_STRING([--enable-ldiskfs],
+                       [use ldiskfs for the Lustre backing FS]),
+       [],[enable_ldiskfs="$linux25"])
+AC_MSG_RESULT([$enable_ldiskfs])
+
+if test x$enable_ldiskfs = xyes ; then
+       BACKINGFS="ldiskfs"
+
+       AC_PATH_PROG(PATCH, patch, [no])
+       AC_PATH_PROG(QUILT, quilt, [no])
+
+       if test x$enable_ldiskfs$PATCH$QUILT = xyesnono ; then
+               AC_MSG_ERROR([Quilt or patch are needed to build the ldiskfs module (for Linux 2.6)])
+       fi
+
+       AC_DEFINE(CONFIG_LDISKFS_FS_MODULE, 1, [build ldiskfs as a module])
+       AC_DEFINE(CONFIG_LDISKFS_FS_XATTR, 1, [enable extended attributes for ldiskfs])
+       AC_DEFINE(CONFIG_LDISKFS_FS_POSIX_ACL, 1, [enable posix acls])
+       AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [enable fs security])
+fi
+
+AC_MSG_CHECKING([which backing filesystem to use])
+AC_MSG_RESULT([$BACKINGFS])
+AC_SUBST(BACKINGFS)
+
+case $BACKINGFS in
+       ext3)
+               # --- Check that ext3 and ext3 xattr are enabled in the kernel
+               LC_CONFIG_EXT3([],[
+                       AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel])
+               ],[
+                       AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel])
+                       AC_MSG_WARN([This build may fail.])
+               ])
+               ;;
+       ldiskfs)
+               LC_FSHOOKS([
+                       LDISKFS_SERIES="2.6-suse.series"
+               ],[
+                       LDISKFS_SERIES="2.6-vanilla.series"
+               ])
+               AC_SUBST(LDISKFS_SERIES)
+               ;;
+esac # $BACKINGFS
+])
+
+#
+# LC_CONFIG_PINGER
+#
+# the pinger is temporary, until we have the recovery node in place
+#
+AC_DEFUN([LC_CONFIG_PINGER],
+[AC_MSG_CHECKING([whether to enable pinger support])
+AC_ARG_ENABLE([pinger],
+       AC_HELP_STRING([--disable-pinger],
+                       [disable recovery pinger support]),
+       [],[enable_pinger='yes'])
+AC_MSG_RESULT([$enable_pinger])
+if test x$enable_pinger != xno ; then
+  AC_DEFINE(ENABLE_PINGER, 1, Use the Pinger)
+fi
+])
+
+#
+# LC_CONFIG_OBD_BUFFER_SIZE
+#
+# the maximum buffer size of lctl ioctls
+#
+AC_DEFUN([LC_CONFIG_OBD_BUFFER_SIZE],
+[AC_MSG_CHECKING([maximum OBD ioctl size])
+AC_ARG_WITH([obd-buffer-size],
+       AC_HELP_STRING([--with-obd-buffer-size=[size]],
+                       [set lctl ioctl maximum bytes (default=8192)]),
+       [
+               OBD_BUFFER_SIZE=$with_obd_buffer_size
+       ],[
+               OBD_BUFFER_SIZE=8192
+       ])
+AC_MSG_RESULT([$OBD_BUFFER_SIZE bytes])
+AC_DEFINE_UNQUOTED(OBD_MAX_IOCTL_BUFFER, $OBD_BUFFER_SIZE, [IOCTL Buffer Size])
+])
+
+#
+# LC_CONFIG_SNAPFS
+#
+# Whether snapfs is desired
+#
+AC_DEFUN([LC_CONFIG_SNAPFS],
+[# snap compilation
+AC_MSG_CHECKING([whether to enable snapfs support])
+AC_ARG_ENABLE([snapfs],
+       AC_HELP_STRING([--enable-snapfs],
+                       [build snapfs]),
+       [],[enable_snapfs='no'])
+AC_MSG_RESULT([$enable_snapfs])
+])
+
+#
+# LC_CONFIG_SMFS
+#
+# whether smfs is desired
+#
+AC_DEFUN([LC_CONFIG_SMFS],
+[AC_MSG_CHECKING([whether to enable smfs support])
+AC_ARG_ENABLE([smfs],
+       AC_HELP_STRING([--enable-smfs],
+                       [build smfs]),
+       [],[enable_smfs='no'])
+AC_MSG_RESULT([$enable_smfs])
+])
+
+#
+# LC_PROG_LINUX
+#
+# Lustre linux kernel checks
+#
+AC_DEFUN([LC_PROG_LINUX],
+[LC_CONFIG_BACKINGFS
+LC_CONFIG_PINGER
+LC_CONFIG_OBD_BUFFER_SIZE
+LC_CONFIG_SNAPFS
+LC_CONFIG_SMFS
+
+LC_STRUCT_KIOBUF
+LC_FUNC_COND_RESCHED
+LC_FUNC_ZAP_PAGE_RANGE
+LC_FUNC_PDE
+LC_FUNC_DIRECT_IO
+LC_HEADER_MM_INLINE
+LC_STRUCT_INODE
+])
+
+#
+# LC_CONFIG_LIBLUSTRE
+#
+# whether to build liblustre
+#
+AC_DEFUN([LC_CONFIG_LIBLUSTRE],
+[AC_MSG_CHECKING([whether to build Lustre library])
+AC_ARG_ENABLE([liblustre],
+       AC_HELP_STRING([--disable-liblustre],
+                       [disable building of Lustre library]),
+       [],[enable_liblustre=$enable_libsysio])
+AC_MSG_RESULT([$enable_liblustre])
+
+AC_MSG_CHECKING([whether to build mpitests])
+AC_ARG_ENABLE([mpitests],
+       AC_HELP_STRING([--enable-mpitests],
+                       [build liblustre mpi tests]),
+       [],[enable_mpitests=no])
+AC_MSG_RESULT([$enable_mpitests])
+])
+
+#
+# LC_CONFIGURE
+#
+# other configure checks
+#
+AC_DEFUN([LC_CONFIGURE],
+[# include/liblustre.h
+AC_CHECK_HEADERS([asm/page.h sys/user.h stdint.h])
+
+# liblustre/llite_lib.h
+AC_CHECK_HEADERS([xtio.h file.h])
+
+# liblustre/dir.c
+AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
+
+# liblustre/lutil.c
+AC_CHECK_HEADERS([netinet/in.h arpa/inet.h catamount/data.h])
+AC_CHECK_FUNCS([inet_ntoa])
+])
+
+#
+# LC_CONDITIONALS
+#
+# AM_CONDITIONALS for lustre
+#
+AC_DEFUN([LC_CONDITIONALS],
+[AM_CONDITIONAL(LIBLUSTRE, test x$enable_liblustre = xyes)
+AM_CONDITIONAL(EXTN, test x$enable_extN = xyes)
+AM_CONDITIONAL(LDISKFS, test x$enable_ldiskfs = xyes)
+AM_CONDITIONAL(USE_QUILT, test x$QUILT != xno)
+AM_CONDITIONAL(MPITESTS, test x$enable_mpitests = xyes, Build MPI Tests)
+AM_CONDITIONAL(SNAPFS, test x$enable_snapfs = xyes)
+AM_CONDITIONAL(SMFS, test x$enable_smfs = xyes)
+AM_CONDITIONAL(LIBLUSTRE, test x$enable_liblustre = xyes)
+AM_CONDITIONAL(MPITESTS, test x$enable_mpitests = xyes, Build MPI Tests)
+])
+
+#
+# LC_CONFIG_FILES
+#
+# files that should be generated with AC_OUTPUT
+#
+AC_DEFUN([LC_CONFIG_FILES],
+[AC_CONFIG_FILES([
+lustre/Makefile
+lustre/autoMakefile
+lustre/autoconf/Makefile
+lustre/cmobd/Makefile
+lustre/cmobd/autoMakefile
+lustre/cobd/Makefile
+lustre/cobd/autoMakefile
+lustre/conf/Makefile
+lustre/doc/Makefile
+lustre/include/Makefile
+lustre/include/linux/Makefile
+lustre/include/lustre/Makefile
+lustre/ldiskfs/Makefile
+lustre/ldiskfs/autoMakefile
+lustre/ldlm/Makefile
+lustre/liblustre/Makefile
+lustre/liblustre/tests/Makefile
+lustre/llite/Makefile
+lustre/llite/autoMakefile
+lustre/lmv/Makefile
+lustre/lmv/autoMakefile
+lustre/lov/Makefile
+lustre/lov/autoMakefile
+lustre/lvfs/Makefile
+lustre/lvfs/autoMakefile
+lustre/mdc/Makefile
+lustre/mdc/autoMakefile
+lustre/mds/Makefile
+lustre/mds/autoMakefile
+lustre/obdclass/Makefile
+lustre/obdclass/autoMakefile
+lustre/obdecho/Makefile
+lustre/obdecho/autoMakefile
+lustre/obdfilter/Makefile
+lustre/obdfilter/autoMakefile
+lustre/osc/Makefile
+lustre/osc/autoMakefile
+lustre/ost/Makefile
+lustre/ost/autoMakefile
+lustre/ptlbd/Makefile
+lustre/ptlbd/autoMakefile
+lustre/ptlrpc/Makefile
+lustre/ptlrpc/autoMakefile
+lustre/scripts/Makefile
+lustre/scripts/version_tag.pl
+lustre/smfs/Makefile
+lustre/smfs/autoMakefile
+lustre/snapfs/Makefile
+lustre/snapfs/autoMakefile
+lustre/snapfs/utils/Makefile
+lustre/tests/Makefile
+lustre/utils/Lustre/Makefile
+lustre/utils/Makefile
+])
+])
diff --git a/lustre/autoconf/lustre-version.ac b/lustre/autoconf/lustre-version.ac
new file mode 100644 (file)
index 0000000..756fba6
--- /dev/null
@@ -0,0 +1 @@
+m4_define([LUSTRE_VERSION],[1.3.9.1])
diff --git a/lustre/autogen.sh b/lustre/autogen.sh
deleted file mode 100644 (file)
index e1c2c6c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/bash
-
-# taken from gnome-common/macros2/autogen.sh
-compare_versions() {
-    ch_min_version=$1
-    ch_actual_version=$2
-    ch_status=0
-    IFS="${IFS=         }"; ch_save_IFS="$IFS"; IFS="."
-    set $ch_actual_version
-    for ch_min in $ch_min_version; do
-        ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; shift # remove letter suffixes
-        if [ -z "$ch_min" ]; then break; fi
-        if [ -z "$ch_cur" ]; then ch_status=1; break; fi
-        if [ $ch_cur -gt $ch_min ]; then break; fi
-        if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi
-    done
-    IFS="$ch_save_IFS"
-    return $ch_status
-}
-
-error_msg() {
-       echo "$cmd is $1.  version $required is required to build Lustre."
-
-       if [ -e /usr/lib/autolustre/bin/$cmd ]; then
-               cat >&2 <<-EOF
-               You apparently already have Lustre-specific autoconf/make RPMs
-               installed on your system at /usr/lib/autolustre/share/$cmd.
-               Please set your PATH to point to those versions:
-
-               export PATH="/usr/lib/autolustre/bin:\$PATH"
-               EOF
-       else
-               cat >&2 <<-EOF
-               CFS provides RPMs which can be installed alongside your
-               existing autoconf/make RPMs, if you are nervous about
-               upgrading.  See
-
-               ftp://ftp.lustre.org/pub/other/autolustre/README.autolustre
-
-               You may be able to download newer version from:
-
-               http://ftp.gnu.org/gnu/$cmd/$cmd-$required.tar.gz
-       EOF
-       fi
-       [ "$cmd" = "autoconf" -a "$required" = "2.57" ] && cat >&2 <<EOF
-
-or for RH9 systems you can use:
-
-ftp://fr2.rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/autoconf-2.57-3.noarch.rpm
-EOF
-       [ "$cmd" = "automake-1.7" -a "$required" = "1.7.8" ] && cat >&2 <<EOF
-
-or for RH9 systems you can use:
-
-ftp://fr2.rpmfind.net/linux/fedora/core/1/i386/os/Fedora/RPMS/automake-1.7.8-1.noarch.rpm
-EOF
-       exit 1
-}
-
-check_version() {
-    local tool
-    local cmd
-    local required
-    local version
-
-    tool=$1
-    cmd=$2
-    required=$3
-    echo -n "checking for $cmd $required... "
-    if ! $cmd --version >/dev/null ; then
-       error_msg "missing"
-    fi
-    version=$($cmd --version | awk "BEGIN { IGNORECASE=1 } /$tool \(GNU $tool\)/ { print \$4 }")
-    echo "found $version"
-    if ! compare_versions "$required" "$version" ; then
-       error_msg "too old"
-    fi
-}
-
-check_version automake automake-1.7 "1.7.8"
-check_version autoconf autoconf "2.57"
-echo "Running aclocal..."
-aclocal-1.7
-echo "Running autoheader..."
-autoheader
-echo "Running automake..."
-automake-1.7 -a -c
-echo "Running autoconf..."
-autoconf
-
index 6e3666b..978cf29 100644 (file)
@@ -6,7 +6,9 @@
 EXTRA_DIST = lustre.dtd lustre.schema slapd-lustre.conf lustre2ldif.xsl top.ldif
 ldapconfdir = $(sysconfdir)/openldap
 ldapschemadir = $(sysconfdir)/openldap/schema
+
+if UTILS
 ldapconf_SCRIPTS = slapd-lustre.conf
 ldapschema_SCRIPTS = lustre.schema
-pkglibdir = '${exec_prefix}/usr/lib/$(PACKAGE)'
-pkglib_DATA = top.ldif lustre2ldif.xsl
+pkgdata_DATA = top.ldif lustre2ldif.xsl
+endif
diff --git a/lustre/configure.in b/lustre/configure.in
deleted file mode 100644 (file)
index 5c9ffc0..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-# Copyright (C) 2001-2003 Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-AC_INIT
-AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE(lustre, 1.3.9.1)
-# AM_MAINTAINER_MODE
-
-# Four main targets: lustre kernel modules, utilities, tests, and liblustre
-AC_MSG_CHECKING([whether to build kernel modules])
-AC_ARG_ENABLE([modules],
-       AC_HELP_STRING([--disable-modules],
-                       [disable building of Lustre kernel modules]),
-       [],[enable_modules='yes'])
-AC_MSG_RESULT([$enable_modules])
-AM_CONDITIONAL(MODULES, test x$enable_modules = xyes)
-
-AC_MSG_CHECKING([whether to build Lustre library])
-AC_ARG_ENABLE([liblustre],
-       AC_HELP_STRING([--disable-liblustre],
-                       [disable building of Lustre library]),
-       [],[enable_liblustre='yes'])
-AC_MSG_RESULT([$enable_liblustre])
-AM_CONDITIONAL(LIBLUSTRE, test x$enable_liblustre = xyes)
-
-AC_MSG_CHECKING([whether to build utilities])
-AC_ARG_ENABLE([utils],
-       AC_HELP_STRING([--disable-utils],
-                       [disable building of Lustre utility programs]),
-       [],[enable_utils='yes'])
-AC_MSG_RESULT([$enable_utils])
-
-AC_MSG_CHECKING([whether to build Lustre tests])
-AC_ARG_ENABLE([tests],
-       AC_HELP_STRING([--disable-tests],
-                       [disable building of Lustre tests]),
-       [],[enable_tests='yes'])
-AC_MSG_RESULT([$enable_tests])
-
-# specify wether to build doc or not
-AC_MSG_CHECKING([whether to build docs])
-AC_ARG_ENABLE(doc,
-       AC_HELP_STRING([--disable-doc],
-                       [skip creation of pdf documentation]),
-       [
-               if test x$enable_doc = xyes ; then
-                   ENABLE_DOC=1           
-               else
-                   ENABLE_DOC=0
-               fi
-       ],[
-               ENABLE_DOC=0
-               enable_doc='no'
-       ])
-AC_MSG_RESULT([$enable_doc])
-AM_CONDITIONAL(DOC, test x$ENABLE_DOC = x1)
-AC_SUBST(ENABLE_DOC)
-
-# default backing fs is ext3
-BACKINGFS='ext3'
-
-# SuSE gets ldiskfs
-AC_MSG_CHECKING([whether to enable ldiskfs])
-AC_ARG_ENABLE([ldiskfs],
-       AC_HELP_STRING([--enable-ldiskfs],
-                       [use ldiskfs for the Lustre backing FS]),
-       [BACKINGFS='ldiskfs'],[enable_ldiskfs='no'])
-AC_MSG_RESULT([$enable_ldiskfs])
-
-AC_MSG_CHECKING([which backing filesystem to use])
-AC_MSG_RESULT([$BACKINGFS])
-AC_SUBST(BACKINGFS)
-
-# the pinger is temporary, until we have the recovery node in place
-AC_MSG_CHECKING([whether to enable pinger support])
-AC_ARG_ENABLE([pinger],
-       AC_HELP_STRING([--disable-pinger],
-                       [disable recovery pinger support]),
-       [],[enable_pinger='yes'])
-AC_MSG_RESULT([$enable_pinger])
-if test x$enable_pinger != xno ; then
-  AC_DEFINE(ENABLE_PINGER, 1, Use the Pinger)
-fi
-
-AC_MSG_CHECKING([maximum OBD ioctl size])
-AC_ARG_WITH([obd-buffer-size],
-       AC_HELP_STRING([--with-obd-buffer-size=[size]],
-                       [set lctl ioctl maximum bytes (default=8192)]),
-       [
-               OBD_BUFFER_SIZE=$with_obd_buffer_size
-       ],[
-               OBD_BUFFER_SIZE=8192
-       ])
-AC_MSG_RESULT([$OBD_BUFFER_SIZE bytes])
-AC_DEFINE_UNQUOTED(OBD_MAX_IOCTL_BUFFER, $OBD_BUFFER_SIZE, [IOCTL Buffer Size])
-
-# specify location of libsysio tree
-AC_MSG_CHECKING([location of libsysio])
-AC_ARG_WITH([sysio],
-       AC_HELP_STRING([--with-sysio=[path]],
-                       [set path to libsysio source (default=../libsysio)]),
-       [
-               SYSIO=$with_sysio
-               SYSIO_PATH=$SYSIO
-       ],[
-               SYSIO='$(top_srcdir)/../libsysio'
-               SYSIO_PATH='../libsysio'
-       ])
-AC_MSG_RESULT([$SYSIO_PATH])
-
-AC_CHECK_FILE([$SYSIO_PATH/lib/libsysio.a],[],
-       [
-               if test x$enable_liblustre = xyes ; then
-                  AC_MSG_ERROR([A built libsysio tree is required for building liblustre.])
-               fi
-       ])
-AC_SUBST(SYSIO)
-
-#build mpi-tests 
-AC_MSG_CHECKING([whether to build mpitests])
-AC_ARG_ENABLE([mpitests],
-       AC_HELP_STRING([--enable-mpitests],
-                       [build liblustre mpi tests]),
-       [],[enable_mpitests=no])
-AC_MSG_RESULT([$enable_mpitests])
-AM_CONDITIONAL(MPITESTS, test x$enable_mpitests = xyes, Build MPI Tests)
-
-# snap compilation
-AC_MSG_CHECKING([whether to enable snapfs support])
-AC_ARG_ENABLE([snapfs],
-       AC_HELP_STRING([--enable-snapfs],
-                       [build snapfs]),
-       [],[enable_snapfs='no'])
-AC_MSG_RESULT([$enable_snapfs])
-AM_CONDITIONAL(SNAPFS, test x$enable_snapfs = xyes)
-
-# smfs compilation
-AC_MSG_CHECKING([whether to enable smfs support])
-AC_ARG_ENABLE([smfs],
-       AC_HELP_STRING([--enable-smfs],
-                       [build smfs]),
-       [],[enable_smfs='no'])
-AC_MSG_RESULT([$enable_smfs])
-AM_CONDITIONAL(SMFS, test x$enable_smfs = xyes)
-
-sinclude(portals/build.m4)
-sinclude(portals/archdep.m4)
-
-AM_CONDITIONAL(LDISKFS, test x$enable_ldiskfs = xyes)
-
-if test x$enable_inkernel = xyes ; then
-       find . -name Makefile.mk | sed 's/.mk$//' | xargs -n 1 \
-               sh -e -x -c '(cp -f $0.mk $0.in)'
-fi
-
-# we need to pass a full path here for kernel makefiles
-INCLUDE_RULES="include $PWD/Rules"
-AC_SUBST(INCLUDE_RULES)
-
-# ptlrpc kernel build requires this
-LUSTRE="$PWD"
-AC_SUBST(LUSTRE)
-
-#
-AM_CONDITIONAL(UTILS, test x$enable_utils = xyes)
-AM_CONDITIONAL(TESTS, test x$enable_tests = xyes)
-
-AM_CONFIG_HEADER(include/config.h)
-
-AC_OUTPUT([
-Makefile
-Rules
-autoMakefile
-cobd/Makefile
-cobd/autoMakefile
-conf/Makefile
-doc/Makefile
-include/Makefile
-include/linux/Makefile
-include/lustre/Makefile
-ldiskfs/Makefile
-ldiskfs/autoMakefile
-ldlm/Makefile
-liblustre/Makefile
-liblustre/tests/Makefile
-llite/Makefile
-llite/autoMakefile
-lov/Makefile
-lov/autoMakefile
-lmv/Makefile
-lmv/autoMakefile
-lvfs/Makefile
-lvfs/autoMakefile
-mdc/Makefile
-mdc/autoMakefile
-mds/Makefile
-mds/autoMakefile
-obdclass/Makefile
-obdclass/autoMakefile
-obdecho/Makefile
-obdecho/autoMakefile
-obdfilter/Makefile
-obdfilter/autoMakefile
-osc/Makefile
-osc/autoMakefile
-ost/Makefile
-ost/autoMakefile
-portals/Kernelenv
-portals/Makefile
-portals/autoMakefile
-portals/doc/Makefile
-portals/include/Makefile
-portals/include/linux/Makefile
-portals/include/portals/Makefile
-portals/knals/Makefile
-portals/knals/autoMakefile
-portals/knals/gmnal/Makefile
-portals/knals/gmnal/autoMakefile
-portals/knals/iibnal/Makefile
-portals/knals/iibnal/autoMakefile
-portals/knals/openibnal/Makefile
-portals/knals/openibnal/autoMakefile
-portals/knals/qswnal/Makefile
-portals/knals/qswnal/autoMakefile
-portals/knals/socknal/Makefile
-portals/knals/socknal/autoMakefile
-portals/knals/lonal/Makefile
-portals/knals/lonal/autoMakefile
-portals/knals/ranal/Makefile
-portals/knals/ranal/autoMakefile
-portals/libcfs/Makefile
-portals/libcfs/autoMakefile
-portals/portals/Makefile
-portals/portals/autoMakefile
-portals/router/Makefile
-portals/router/autoMakefile
-portals/tests/Makefile
-portals/tests/autoMakefile
-portals/unals/Makefile
-portals/utils/Makefile
-ptlbd/Makefile
-ptlbd/autoMakefile
-ptlrpc/Makefile
-ptlrpc/autoMakefile
-scripts/Makefile
-scripts/lustre.spec
-scripts/version_tag.pl
-smfs/Makefile
-smfs/autoMakefile
-cmobd/Makefile
-cmobd/autoMakefile
-snapfs/Makefile
-snapfs/autoMakefile
-snapfs/utils/Makefile
-tests/Makefile
-utils/Lustre/Makefile
-utils/Makefile
-])
index 2a3f201..f2c2d76 100644 (file)
@@ -5,5 +5,5 @@
 # See the file COPYING in this distribution
 
 SUBDIRS = linux lustre
-EXTRA_DIST = config.h.in ioctl.h liblustre.h 
+EXTRA_DIST = ioctl.h liblustre.h 
 
index 77c7afd..d187775 100644 (file)
@@ -14,4 +14,5 @@ EXTRA_DIST = lprocfs_status.h lustre_debug.h lustre_ha.h lustre_lib.h \
   lustre_net.h obd_class.h obd_ost.h obd_support.h lustre_commit_confd.h \
   lustre_export.h lustre_log.h obd_echo.h obd_ptlbd.h obd_trace.h \
   lustre_compat25.h lustre_fsfilt.h lustre_import.h lustre_mds.h obd.h \
-  lvfs.h lvfs_linux.h lustre_cfg.h lustre_lite.h  lustre_idl.h lustre_smfs.h 
+  lvfs.h lvfs_linux.h lustre_cfg.h lustre_lite.h  lustre_idl.h lustre_smfs.h \
+  lustre_cmobd.h obd_lmv.h lustre_snap.h
index f976cda..db19c01 100644 (file)
@@ -164,8 +164,6 @@ static inline void lustre_daemonize_helper(void)
                 page->private = 0; \
         } while(0)
 
-#define smp_num_cpus    NR_CPUS
-
 #define kiobuf bio
 
 #include <linux/proc_fs.h>
index e33e4c9..4fd32d4 100644 (file)
@@ -27,8 +27,8 @@ linux/ldiskfs%.h: linux-stage/include/linux/ext3%.h
 # FIXME: we need to grab the series in configure somehow
 # (see bug 1679)
 #
-series := @top_srcdir@/kernel_patches/series/ldiskfs-$(LDISKFS_SERIES)
-patches := @top_srcdir@/kernel_patches/patches
+series := @top_srcdir@/lustre/kernel_patches/series/ldiskfs-$(LDISKFS_SERIES)
+patches := @top_srcdir@/lustre/kernel_patches/patches
 
 sources: $(ext3_sources) $(ext3_headers) $(linux_headers) $(series)
        rm -rf linux-stage linux sources $(ldiskfs_SOURCES)
index f2e39bd..ee16557 100644 (file)
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I$(SYSIO)/include -I/opt/lam/include $(LLCPPFLAGS) -I$(top_srcdir
 AM_CFLAGS = $(LLCFLAGS)
 LIBS = $(LIBEFENCE) $(LIBREADLINE)
 
-LLIB_EXEC= $(top_builddir)/liblustre/liblustre.a -lcap -lpthread
+LLIB_EXEC= $(top_builddir)/lustre/liblustre/liblustre.a -lcap -lpthread
 
 if LIBLUSTRE
 noinst_LIBRARIES = libtestcommon.a
@@ -19,30 +19,33 @@ endif # LIBLUSTRE
 
 libtestcommon_a_SOURCES = test_common.c test_common.h
 
-echo_test_SOURCES = echo_test.c  $(top_srcdir)/utils/parser.c $(top_srcdir)/utils/obd.c $(top_srcdir)/utils/lustre_cfg.c
+echo_test_SOURCES = echo_test.c $(top_srcdir)/lustre/utils/parser.c    \
+       $(top_srcdir)/lustre/utils/obd.c                                \
+       $(top_srcdir)/lustre/utils/lustre_cfg.c
+
 echo_test_CFLAGS = $(LL_CFLAGS)
-echo_test_LDADD = $(top_builddir)/liblustre/liblsupport.a $(LIBREADLINE) -lcap -lpthread 
-echo_test_DEPENDENCIES=$(top_builddir)/liblustre/liblsupport.a
+echo_test_LDADD = $(top_builddir)/lustre/liblustre/liblsupport.a $(LIBREADLINE) -lcap -lpthread 
+echo_test_DEPENDENCIES=$(top_builddir)/lustre/liblustre/liblsupport.a
 
 sanity_SOURCES = sanity.c
 sanity_CFLAGS = $(LL_CFLAGS)
 sanity_LDADD := libtestcommon.a $(LLIB_EXEC)
-sanity_DEPENDENCIES = $(top_builddir)/liblustre/liblustre.a libtestcommon.a
+sanity_DEPENDENCIES = $(top_builddir)/lustre/liblustre/liblustre.a libtestcommon.a
 
 recovery_small_SOURCES = recovery_small.c
 recovery_small_CFLAGS = $(LL_CFLAGS)
 recovery_small_LDADD := libtestcommon.a $(LLIB_EXEC) 
-recovery_small_DEPENDENCIES = $(top_builddir)/liblustre/liblustre.a libtestcommon.a
+recovery_small_DEPENDENCIES = $(top_builddir)/lustre/liblustre/liblustre.a libtestcommon.a
 
 replay_single_SOURCES = replay_single.c
 replay_single_CFLAGS = $(LL_CFLAGS)
 replay_single_LDADD := libtestcommon.a $(LLIB_EXEC)
-replay_single_DEPENDENCIES = $(top_builddir)/liblustre/liblustre.a libtestcommon.a
+replay_single_DEPENDENCIES = $(top_builddir)/lustre/liblustre/liblustre.a libtestcommon.a
 
 replay_ost_single_SOURCES = replay_ost_single.c
 replay_ost_single_CFLAGS = $(LL_CFLAGS)
 replay_ost_single_LDADD := libtestcommon.a $(LLIB_EXEC)
-replay_ost_single_DEPENDENCIES = $(top_builddir)/liblustre/liblustre.a libtestcommon.a
+replay_ost_single_DEPENDENCIES = $(top_builddir)/lustre/liblustre/liblustre.a libtestcommon.a
 
 if MPITESTS
 test_lock_cancel_SOURCES = test_lock_cancel.c
index c2511c4..ca9c839 100644 (file)
@@ -43,7 +43,7 @@ endif # MODULES
 
 DIST_SOURCES = fsfilt.c fsfilt_ext3.c fsfilt_smfs.c fsfilt_reiserfs.c \
        lvfs_common.c lvfs_internal.h lvfs_linux.c llog.c llog_cat.c \
-       llog_lvfs.c lvfs_userfs.c
+       llog_lvfs.c lvfs_userfs.c fsfilt_snap_ext3.c
 
 MOSTLYCLEANFILES = *.o *.ko *.mod.c
 CLEANFILES = fsfilt-*.c fsfilt_ldiskfs.c fsfilt_extN.c sources
diff --git a/lustre/portals/.cvsignore b/lustre/portals/.cvsignore
deleted file mode 100644 (file)
index f30d862..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Kernelenv
-Makefile
-autoMakefile
-autoMakefile.in
-aclocal.m4
-autom4te.cache
-config.log
-config.status
-configure
-.*.cmd
-.depend
diff --git a/lustre/portals/AUTHORS b/lustre/portals/AUTHORS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lustre/portals/ChangeLog b/lustre/portals/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lustre/portals/Kernelenv.in b/lustre/portals/Kernelenv.in
deleted file mode 100644 (file)
index 7a48c58..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTRA_CFLAGS := -Ifs/lustre/include -Ifs/lustre/portals/include
-# portals/utils/debug.c wants <linux/version.h> from userspace.  sigh.
-HOSTCFLAGS := -I@LINUX@/include $(EXTRA_CFLAGS)
-LIBREADLINE := @LIBREADLINE@
-# 2.5's makefiles aren't nice to cross dir libraries in host programs
-PTLCTLOBJS := debug.o l_ioctl.o parser.o portals.o
diff --git a/lustre/portals/Kernelenv.mk b/lustre/portals/Kernelenv.mk
deleted file mode 100644 (file)
index 7c66dfa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-EXTRA_CFLAGS := -Ifs/lustre/include -Ifs/lustre/portals/include
-HOSTCFLAGS := $(EXTRA_CFLAGS)
-# the kernel doesn't want us to build archives for host binaries :/
-PTLCTLOBJS := debug.o l_ioctl.o parser.o portals.o
diff --git a/lustre/portals/Makefile.in b/lustre/portals/Makefile.in
deleted file mode 100644 (file)
index 71d0dc8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-subdir-m += libcfs
-
-cray-subdirs += portals
-cray-subdirs += knals
-cray-subdirs += router
-cray-subdirs += tests
-@CRAY_PORTALS_FALSE@subdir-m += $(cray-subdirs)
-
-@INCLUDE_RULES@
diff --git a/lustre/portals/Makefile.mk b/lustre/portals/Makefile.mk
deleted file mode 100644 (file)
index 73a19df..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-include $(src)/Kernelenv
-
-# The ordering of these determines the order that each subsystem's 
-# module_init() functions are called in.  if these are changed make sure
-# they reflect the dependencies between each subsystem's _init functions.
-obj-y += libcfs/
-obj-y += portals/
-obj-y += router/
-obj-y += knals/
-obj-y += tests/
-
-obj-m += utils/
diff --git a/lustre/portals/NEWS b/lustre/portals/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lustre/portals/README b/lustre/portals/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/lustre/portals/archdep.m4 b/lustre/portals/archdep.m4
deleted file mode 100644 (file)
index 2f1d563..0000000
+++ /dev/null
@@ -1,902 +0,0 @@
-# -------- we can't build modules unless srcdir = builddir
-if test x$enable_modules != xno ; then
-       AC_CHECK_FILE([autoMakefile.am],[],
-               [AC_MSG_ERROR([At this time, Lustre does not support building kernel modules with srcdir != buildir.])])
-fi
-
-# -------- in kernel compilation? (2.5 only) -------------
-AC_MSG_CHECKING([if inkernel build support is requested])
-AC_ARG_ENABLE([inkernel],
-       AC_HELP_STRING([--enable-inkernel],
-                      [set up 2.5 kernel makefiles]),
-       [],[enable_inkernel=no])
-AC_MSG_RESULT([$enable_inkernel])
-AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes)
-
-# -------- are we building against an external portals? -------
-AC_MSG_CHECKING([for Cray portals])
-AC_ARG_WITH([cray-portals],
-       AC_HELP_STRING([--with-cray-portals=path],
-                      [path to cray portals]),
-       [
-               if test "$with_cray_portals" != no; then
-                       CRAY_PORTALS_PATH=$with_cray_portals
-                       CRAY_PORTALS_INCLUDES="$with_cray_portals/include"
-                       CRAY_PORTALS_LIBS="$with_cray_portals"
-                fi
-       ],[with_cray_portals=no])
-AC_SUBST(CRAY_PORTALS_PATH)
-AC_MSG_RESULT([$CRAY_PORTALS_PATH])
-
-AC_MSG_CHECKING([for Cray portals includes])
-AC_ARG_WITH([cray-portals-includes],
-       AC_HELP_STRING([--with-cray-portals-includes=path],
-                      [path to cray portals includes]),
-       [
-               if test "$with_cray_portals_includes" != no; then
-                       CRAY_PORTALS_INCLUDES="$with_cray_portals_includes"
-                fi
-       ])
-AC_SUBST(CRAY_PORTALS_INCLUDES)
-AC_MSG_RESULT([$CRAY_PORTALS_INCLUDES])
-
-AC_MSG_CHECKING([for Cray portals libs])
-AC_ARG_WITH([cray-portals-libs],
-       AC_HELP_STRING([--with-cray-portals-libs=path],
-                      [path to cray portals libs]),
-       [
-               if test "$with_cray_portals_libs" != no; then
-                       CRAY_PORTALS_LIBS="$with_cray_portals_libs"
-                fi
-       ])
-AC_SUBST(CRAY_PORTALS_LIBS)
-AC_MSG_RESULT([$CRAY_PORTALS_LIBS])
-
-if test x$CRAY_PORTALS_INCLUDES != x ; then
-       if test ! -r $CRAY_PORTALS_INCLUDES/portals/api.h ; then
-               AC_MSG_ERROR([Cray portals headers were not found in $CRAY_PORTALS_INCLUDES.  Please check the paths passed to --with-cray-portals or --with-cray-portals-includes.])
-       fi
-fi
-if test x$CRAY_PORTALS_LIBS != x ; then
-       if test ! -r $CRAY_PORTALS_LIBS/libportals.a ; then
-               AC_MSG_ERROR([Cray portals libraries were not found in $CRAY_PORTALS_LIBS.  Please check the paths passed to --with-cray-portals or --with-cray-portals-libs.])
-       fi
-fi
-
-AC_MSG_CHECKING([whether to use Cray portals])
-if test x$CRAY_PORTALS_INCLUDES != x -a x$CRAY_PORTALS_LIBS != x ; then
-       with_cray_portals=yes
-       AC_DEFINE(CRAY_PORTALS, 1, [Building with Cray Portals])
-       CRAY_PORTALS_INCLUDES="-I$CRAY_PORTALS_INCLUDES"
-else
-       with_cray_portals=no
-fi
-AC_MSG_RESULT([$with_cray_portals])
-AM_CONDITIONAL(CRAY_PORTALS, test x$with_cray_portals != xno)
-
-# ----------------------------------------
-# some tests for catamount-like systems
-# ----------------------------------------
-AC_ARG_ENABLE([sysio_init],
-       AC_HELP_STRING([--disable-sysio-init],
-               [call sysio init functions when initializing liblustre]),
-       [],[enable_sysio_init=yes])
-AC_MSG_CHECKING([whether to initialize libsysio])
-AC_MSG_RESULT([$enable_sysio_init])
-if test x$enable_sysio_init != xno ; then
-       AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions])
-fi
-
-AC_ARG_ENABLE([urandom],
-       AC_HELP_STRING([--disable-urandom],
-               [disable use of /dev/urandom for liblustre]),
-       [],[enable_urandom=yes])
-AC_MSG_CHECKING([whether to use /dev/urandom for liblustre])
-AC_MSG_RESULT([$enable_urandom])
-if test x$enable_urandom != xno ; then
-       AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data])
-fi
-
-# -------- check for -lcap and -lpthread ----
-if test x$enable_liblustre = xyes ; then
-       AC_CHECK_LIB([cap], [cap_get_proc],
-               [
-                       CAP_LIBS="-lcap"
-                       AC_DEFINE([HAVE_LIBCAP], 1, [use libcap])
-               ],
-               [CAP_LIBS=""])
-       AC_SUBST(CAP_LIBS)
-       AC_CHECK_LIB([pthread], [pthread_create],
-               [
-                       PTHREAD_LIBS="-lpthread"
-                       AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread])
-               ],
-               [PTHREAD_LIBS=""])
-       AC_SUBST(PTHREAD_LIBS)
-fi
-
-# -------- enable tests and utils? -------
-if test x$enable_tests = xno ; then
-       AC_MSG_NOTICE([disabling tests])
-       enable_tests=no
-fi
-if test x$enable_utils = xno ; then
-       AC_MSG_NOTICE([disabling utilities])
-       enable_utils=no
-fi
-
-if test x$enable_modules != xno ; then
-       # -------- set linuxdir ------------
-       AC_MSG_CHECKING([for Linux sources])
-       AC_ARG_WITH([linux],
-               AC_HELP_STRING([--with-linux=path],
-                              [set path to Linux source (default=/usr/src/linux)]),
-               [LINUX=$with_linux],
-               [LINUX=/usr/src/linux])
-       AC_MSG_RESULT([$LINUX])
-       AC_SUBST(LINUX)
-       if test x$enable_inkernel = xyes ; then
-               echo ln -s `pwd` $LINUX/fs/lustre
-               rm $LINUX/fs/lustre
-               ln -s `pwd` $LINUX/fs/lustre
-       fi
-
-       # -------- linux objects (for 2.6) --
-       AC_MSG_CHECKING([for Linux objects dir])
-       AC_ARG_WITH([linux-obj],
-               AC_HELP_STRING([--with-linux-obj=path],
-                               [set path to Linux objects dir (default=\$LINUX)]),
-               [LINUX_OBJ=$with_linux_obj],
-               [LINUX_OBJ=$LINUX])
-       AC_MSG_RESULT([$LINUX_OBJ])
-       AC_SUBST(LINUX_OBJ)
-
-       # -------- check for .confg --------
-       AC_ARG_WITH([linux-config],
-               [AC_HELP_STRING([--with-linux-config=path],
-                               [set path to Linux .conf (default=\$LINUX_OBJ/.config)])],
-               [LINUX_CONFIG=$with_linux_config],
-               [LINUX_CONFIG=$LINUX_OBJ/.config])
-       AC_SUBST(LINUX_CONFIG)
-
-       AC_CHECK_FILE([/boot/kernel.h],
-               [KERNEL_SOURCE_HEADER='/boot/kernel.h'],
-               [AC_CHECK_FILE([/var/adm/running-kernel.h]),
-                       [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h']])
-
-       AC_ARG_WITH([kernel-source-header],
-               AC_HELP_STRING([--with-kernel-source-header=path],
-                               [Use a different kernel version header.  Consult README.kernel-source for details.]),
-               [KERNEL_SOURCE_HEADER=$with_kernel_source_header])
-
-       #  --------------------
-       ARCH_UM=
-       UML_CFLAGS=
-
-       AC_MSG_CHECKING([if you are running user mode linux for $host_cpu])
-       if test -e $LINUX/include/asm-um ; then
-               if test  X`ls -id $LINUX/include/asm/ | awk '{print $1}'` = X`ls -id $LINUX/include/asm-um | awk '{print $1}'` ; then
-                       ARCH_UM='ARCH=um'
-                       # see notes in Rules.in
-                       UML_CFLAGS='-O0'
-                       AC_MSG_RESULT(yes)
-               else
-                       AC_MSG_RESULT([no (asm doesn't point at asm-um)])
-               fi
-       else
-               AC_MSG_RESULT([no (asm-um missing)])
-       fi
-
-       AC_SUBST(ARCH_UM)
-       AC_SUBST(UML_CFLAGS)
-
-       # --------- Linux 25 ------------------
-       AC_CHECK_FILE([$LINUX/include/linux/namei.h],
-               [
-                       linux25="yes"
-                       KMODEXT=".ko"
-                       enable_ldiskfs="yes"
-                       BACKINGFS="ldiskfs"
-               ],[
-                       KMODEXT=".o"
-                       linux25="no"
-               ])
-       AC_MSG_CHECKING([if you are using Linux 2.6])
-       AC_MSG_RESULT([$linux25])
-
-       AC_SUBST(LINUX25)
-       AC_SUBST(KMODEXT)
-
-       AC_PATH_PROG(PATCH, patch, [no])
-       AC_PATH_PROG(QUILT, quilt, [no])
-
-       if test x$enable_ldiskfs$PATCH$QUILT = xyesnono ; then
-               AC_MSG_ERROR([Quilt or patch are needed to build the ldiskfs module (for Linux 2.6)])
-       fi
-fi
-AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
-AM_CONDITIONAL(USE_QUILT, test x$QUILT != xno)
-
-# -------  Makeflags ------------------
-
-CPPFLAGS="$CPPFLAGS $CRAY_PORTALS_INCLUDES -I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include"
-
-# liblustre are all the same
-LLCPPFLAGS="-D__arch_lib__ -D_LARGEFILE64_SOURCE=1"
-AC_SUBST(LLCPPFLAGS)
-
-LLCFLAGS="-g -Wall -fPIC"
-AC_SUBST(LLCFLAGS)
-
-# everyone builds against portals and lustre
-
-if test x$enable_ldiskfs = xyes ; then
-       AC_DEFINE(CONFIG_LDISKFS_FS_MODULE, 1, [build ldiskfs as a module])
-       AC_DEFINE(CONFIG_LDISKFS_FS_XATTR, 1, [enable extended attributes for ldiskfs])
-       AC_DEFINE(CONFIG_LDISKFS_FS_POSIX_ACL, 1, [enable posix acls])
-       AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [enable fs security])
-fi
-
-EXTRA_KCFLAGS="-g $CRAY_PORTALS_INCLUDES -I$PWD/portals/include -I$PWD/include"
-
-# these are like AC_TRY_COMPILE, but try to build modules against the
-# kernel, inside the kernel-tests directory
-
-AC_DEFUN([LUSTRE_MODULE_CONFTEST],
-[cat >conftest.c <<_ACEOF
-$1
-_ACEOF
-])
-
-AC_DEFUN([LUSTRE_MODULE_COMPILE_IFELSE],
-[m4_ifvaln([$1], [LUSTRE_MODULE_CONFTEST([$1])])dnl
-rm -f kernel-tests/conftest.o kernel-tests/conftest.mod.c kernel-tests/conftest.ko
-AS_IF([AC_TRY_COMMAND(cp conftest.c kernel-tests && make [$2] CC="$CC" -f $PWD/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM $MODULE_TARGET=$PWD/kernel-tests) >/dev/null && AC_TRY_COMMAND([$3])],
-       [$4],
-       [_AC_MSG_LOG_CONFTEST
-m4_ifvaln([$5],[$5])dnl])dnl
-rm -f kernel-tests/conftest.o kernel-tests/conftest.mod.c kernel-tests/conftest.mod.o kernel-tests/conftest.ko m4_ifval([$1], [kernel-tests/conftest.c conftest.c])[]dnl
-])
-
-AC_DEFUN([LUSTRE_MODULE_TRY_COMPILE],
-[LUSTRE_MODULE_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[$1]], [[$2]])],
-       [modules],
-       [test -s kernel-tests/conftest.o],
-       [$3], [$4])])
-
-AC_DEFUN([LUSTRE_MODULE_TRY_MAKE],
-[LUSTRE_MODULE_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4], [$5], [$6])])
-
-# ------------ include paths ------------------
-
-if test x$enable_modules != xno ; then
-       # ------------ .config exists ----------------
-       AC_CHECK_FILE([$LINUX_CONFIG],[],
-               [AC_MSG_ERROR([Kernel config could not be found.  If you are building from a kernel-source rpm consult README.kernel-source])])
-
-       # ----------- make dep run? ------------------
-       AC_CHECK_FILES([$LINUX_OBJ/include/linux/autoconf.h
-                       $LINUX_OBJ/include/linux/version.h
-                       $LINUX/include/linux/config.h],[],
-               [AC_MSG_ERROR([Run make config in $LINUX.])])
-
-       # ------------ rhconfig.h includes runtime-generated bits --
-       # red hat kernel-source checks
-
-       # we know this exists after the check above.  if the user
-       # tarred up the tree and ran make dep etc. in it, then
-       # version.h gets overwritten with a standard linux one.
-
-       if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
-               # This is a clean kernel-source tree, we need to
-               # enable extensive workarounds to get this to build
-               # modules
-               AC_CHECK_FILE([$KERNEL_SOURCE_HEADER],
-                       [if test $KERNEL_SOURCE_HEADER = '/boot/kernel.h' ; then
-                               AC_MSG_WARN([Using /boot/kernel.h from RUNNING kernel.])
-                               AC_MSG_WARN([If this is not what you want, use --with-kernel-source-header.])
-                               AC_MSG_WARN([Consult README.kernel-source for details.])
-                       fi],
-                       [AC_MSG_ERROR([$KERNEL_SOURCE_HEADER not found.  Consult README.kernel-source for details.])])
-               EXTRA_KCFLAGS="-include $KERNEL_SOURCE_HEADER $EXTRA_KCFLAGS"
-       fi
-
-       # ------------ external module support ---------------------
-       MODULE_TARGET="SUBDIRS"
-       if test $linux25 = 'yes' ; then
-               makerule="$PWD/kernel-tests"
-               AC_MSG_CHECKING([for external module build support])
-               rm -f kernel-tests/conftest.i
-               LUSTRE_MODULE_TRY_MAKE([],[],
-                       [$makerule LUSTRE_KERNEL_TEST=conftest.i],
-                       [test -s kernel-tests/conftest.i],
-                       [
-                               AC_MSG_RESULT([no])
-                       ],[
-                               AC_MSG_RESULT([yes])
-                               makerule="_module_$makerule"
-                               MODULE_TARGET="M"
-                       ])
-       else
-               makerule="_dir_$PWD/kernel-tests"
-       fi
-       AC_SUBST(MODULE_TARGET)
-
-       # --- check that we can build modules at all
-       AC_MSG_CHECKING([that modules can be built])
-       LUSTRE_MODULE_TRY_COMPILE([],[],
-               [
-                       AC_MSG_RESULT([yes])
-               ],[
-                       AC_MSG_RESULT([no])
-                       AC_MSG_WARN([Consult config.log for details.])
-                       AC_MSG_WARN([If you are trying to build with a kernel-source rpm, consult README.kernel-source])
-                       AC_MSG_ERROR([Kernel modules could not be built.])
-               ])
-
-       # ------------ LINUXRELEASE and moduledir ------------------
-       LINUXRELEASE=
-       rm -f kernel-tests/conftest.i
-       AC_MSG_CHECKING([for Linux release])
-       LUSTRE_MODULE_TRY_MAKE(
-               [#include <linux/version.h>],
-               [char *LINUXRELEASE;
-                LINUXRELEASE=UTS_RELEASE;],
-               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
-               [test -s kernel-tests/conftest.i],
-               [
-                       # LINUXRELEASE="UTS_RELEASE"
-                       eval $(grep "LINUXRELEASE=" kernel-tests/conftest.i)
-               ],[
-                       AC_MSG_RESULT([unknown])
-                       AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
-               ])
-       rm -f kernel-tests/conftest.i
-       if test x$LINUXRELEASE = x ; then
-               AC_MSG_RESULT([unknown])
-               AC_MSG_ERROR([Could not determine Linux release version from linux/version.h.])
-       fi
-       AC_MSG_RESULT([$LINUXRELEASE])
-       AC_SUBST(LINUXRELEASE)
-
-       moduledir='/lib/modules/'$LINUXRELEASE/kernel
-       modulefsdir='$(moduledir)/fs/$(PACKAGE)'
-       modulenetdir='$(moduledir)/net/$(PACKAGE)'
-
-       AC_SUBST(moduledir)
-       AC_SUBST(modulefsdir)
-       AC_SUBST(modulenetdir)
-
-       # ------------ RELEASE --------------------------------
-       AC_MSG_CHECKING([for Lustre release])
-       RELEASE="`echo ${LINUXRELEASE} | tr '-' '_'`_`date +%Y%m%d%H%M`"
-       AC_MSG_RESULT($RELEASE)
-       AC_SUBST(RELEASE)
-
-       # ---------- Portals flags --------------------
-
-       AC_MSG_CHECKING([for zero-copy TCP support])
-       AC_ARG_ENABLE([zerocopy],
-               AC_HELP_STRING([--disable-zerocopy],
-                              [disable socknal zerocopy]),
-               [],[enable_zerocopy='yes'])
-       if test x$enable_zerocopy = xno ; then
-               AC_MSG_RESULT([no (by request)])
-       else
-               ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
-               if test "$ZCCD" != 0 ; then
-                       AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP])
-                       AC_MSG_RESULT(yes)
-               else
-                       AC_MSG_RESULT([no (no kernel support)])
-               fi
-       fi
-
-       AC_ARG_ENABLE([affinity],
-               AC_HELP_STRING([--disable-affinity],
-                              [disable process/irq affinity]),
-               [],[enable_affinity='yes'])
-
-       AC_MSG_CHECKING([for CPU affinity support])
-       if test x$enable_affinity = xno ; then
-               AC_MSG_RESULT([no (by request)])
-       else
-               LUSTRE_MODULE_TRY_COMPILE(
-                       [
-                               #include <linux/sched.h>
-                       ],[
-                               struct task_struct t;
-                               #ifdef CPU_ARRAY_SIZE
-                               cpumask_t m;
-                               #else
-                               unsigned long m;
-                               #endif
-                               set_cpus_allowed(&t, m);
-                       ],[
-                               AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support])
-                               AC_MSG_RESULT([yes])
-                       ],[
-                               AC_MSG_RESULT([no (no kernel support)])
-                       ])
-       fi
-
-       #####################################
-
-       AC_MSG_CHECKING([if quadrics kernel headers are present])
-       if test -d $LINUX/drivers/net/qsnet ; then
-               AC_MSG_RESULT([yes])
-               QSWNAL="qswnal"
-               AC_MSG_CHECKING([for multirail EKC])
-               if test -f $LINUX/include/elan/epcomms.h; then
-                       AC_MSG_RESULT([supported])
-                       QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
-               else
-                       AC_MSG_RESULT([not supported])
-                       if test -d $LINUX/drivers/net/qsnet/include; then
-                               QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
-                       else
-                               QSWCPPFLAGS="-I$LINUX/include/linux"
-                       fi
-               fi
-       else
-               AC_MSG_RESULT([no])
-               QSWNAL=""
-               QSWCPPFLAGS=""
-       fi
-       AC_SUBST(QSWCPPFLAGS)
-       AC_SUBST(QSWNAL)
-
-       AC_MSG_CHECKING([if gm support was requested])
-       AC_ARG_WITH([gm],
-               AC_HELP_STRING([--with-gm=path],
-                              [build gmnal against path]),
-               [
-                       case $with_gm in 
-                               yes)
-                                       AC_MSG_RESULT([yes])
-                                       GMCPPFLAGS="-I/usr/local/gm/include"
-                                       GMNAL="gmnal"
-                                       ;;
-                               no)
-                                       AC_MSG_RESULT([no])
-                                       GMCPPFLAGS=""
-                                       GMNAL=""
-                                       ;;
-                               *)
-                                       AC_MSG_RESULT([yes])
-                                       GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
-                                       GMNAL="gmnal"
-                                       ;;
-                       esac
-               ],[
-                       AC_MSG_RESULT([no])
-                       GMCPPFLAGS=""
-                       GMNAL=""
-               ])
-       AC_SUBST(GMCPPFLAGS)
-       AC_SUBST(GMNAL)
-
-       if test $linux25 = 'no' ; then
-       #### OpenIB 
-       AC_MSG_CHECKING([if OpenIB kernel headers are present])
-       OPENIBCPPFLAGS="-I$LINUX/drivers/infiniband/include -DIN_TREE_BUILD"
-       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <ts_ib_core.h>
-               ],[
-                       struct ib_device_properties props;
-                       return 0;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       OPENIBNAL="openibnal"
-               ],[
-                       AC_MSG_RESULT([no])
-                       OPENIBNAL=""
-                       OPENIBCPPFLAGS=""
-               ])
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
-       AC_SUBST(OPENIBCPPFLAGS)
-       AC_SUBST(OPENIBNAL)
-       fi
-
-       #### Infinicon IB
-       AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
-       # for how the only infinicon ib build has headers in /usr/include/iba
-       IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
-       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/iba/ibt.h>
-               ],[
-                       IBT_INTERFACE_UNION interfaces;
-                       FSTATUS             rc;
-
-                       rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
-                                                     &interfaces);
-
-                       return rc == FSUCCESS ? 0 : 1;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       IIBNAL="iibnal"
-               ],[
-                       AC_MSG_RESULT([no])
-                       IIBNAL=""
-                       IIBCPPFLAGS=""
-               ])
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
-       AC_SUBST(IIBCPPFLAGS)
-       AC_SUBST(IIBNAL)
-
-       #### Rapid Array
-       AC_MSG_CHECKING([if RapidArray kernel headers are present])
-       # placeholder
-       RACPPFLAGS="-I/tmp"
-       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/types.h>
-                       #include <rapl.h>
-               ],[
-                       RAP_RETURN          rc;
-                       RAP_PVOID           dev_handle;
-
-                       rc = RapkGetDeviceByIndex(0, NULL, &dev_handle);
-
-                       return rc == RAP_SUCCESS ? 0 : 1;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       RANAL="ranal"
-               ],[
-                       AC_MSG_RESULT([no])
-                       RANAL=""
-                       RACPPFLAGS=""
-               ])
-       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
-       AC_SUBST(RACPPFLAGS)
-       AC_SUBST(RANAL)
-
-       # ---------- Red Hat 2.4.18 has iobuf->dovary --------------
-       # But other kernels don't
-
-       AC_MSG_CHECKING([if struct kiobuf has a dovary field])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/iobuf.h>
-               ],[
-                       struct kiobuf iobuf;
-                       iobuf.dovary = 1;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])      
-
-       # ----------- 2.6.4 no longer has page->list ---------------
-       AC_MSG_CHECKING([if struct page has a list field])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/mm.h>
-               ],[
-                       struct page page;
-                       &page.list;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ---------- Red Hat 2.4.20 backports some 2.5 bits --------
-       # This needs to run after we've defined the KCPPFLAGS
-
-       AC_MSG_CHECKING([if task_struct has a sighand field])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/sched.h>
-               ],[
-                       struct task_struct p;
-                       p.sighand = NULL;
-               ],[
-                       AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
-                       AC_MSG_RESULT([yes])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ---------- 2.4.20 introduced cond_resched --------------
-
-       AC_MSG_CHECKING([if kernel offers cond_resched])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/sched.h>
-               ],[
-                       cond_resched();
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # --------- zap_page_range(vma) --------------------------------
-       AC_MSG_CHECKING([if zap_pag_range with vma parameter])
-       ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`"
-       if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then
-               AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter])
-               AC_MSG_RESULT([yes])
-       else
-               AC_MSG_RESULT([no])
-       fi
-
-       # ---------- Red Hat 2.4.21 backports some more 2.5 bits --------
-
-       AC_MSG_CHECKING([if kernel defines PDE])
-       HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
-       if test "$HAVE_PDE" != 0 ; then
-               AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE])
-               AC_MSG_RESULT([yes])
-       else
-               AC_MSG_RESULT([no])
-       fi
-
-       AC_MSG_CHECKING([if kernel passes struct file to direct_IO])
-       HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
-       if test "$HAVE_DIO_FILE" != 0 ; then
-               AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO])
-               AC_MSG_RESULT(yes)
-       else
-               AC_MSG_RESULT(no)
-       fi
-
-       AC_MSG_CHECKING([if kernel defines cpu_online()])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/sched.h>
-               ],[
-                       cpu_online(0);
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-       AC_MSG_CHECKING([if kernel defines cpumask_t])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/sched.h>
-               ],[
-                       return sizeof (cpumask_t);
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ---------- RHEL kernels define page_count in mm_inline.h
-       AC_MSG_CHECKING([if kernel has mm_inline.h header])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/mm_inline.h>
-               ],[
-                       #ifndef page_count
-                       #error mm_inline.h does not define page_count
-                       #endif
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ---------- inode->i_alloc_sem --------------
-       AC_MSG_CHECKING([if struct inode has i_alloc_sem])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/fs.h>
-                       #include <linux/version.h>
-               ],[
-                       #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24))
-                       #error "down_read_trylock broken before 2.4.24"
-                       #endif
-                       struct inode i;
-                       return (char *)&i.i_alloc_sem - (char *)&i;
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-
-       # ---------- modules? ------------------------
-       AC_MSG_CHECKING([for module support])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/config.h>
-               ],[
-                       #ifndef CONFIG_MODULES
-                       #error CONFIG_MODULES not #defined
-                       #endif
-               ],[
-                       AC_MSG_RESULT([yes])
-               ],[
-                       AC_MSG_RESULT([no])
-                       AC_MSG_ERROR([module support is required to build Lustre kernel modules.])
-               ])
-
-       # ---------- modversions? --------------------
-       AC_MSG_CHECKING([for MODVERSIONS])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/config.h>
-               ],[
-                       #ifndef CONFIG_MODVERSIONS
-                       #error CONFIG_MODVERSIONS not #defined
-                       #endif
-               ],[
-                       AC_MSG_RESULT([yes])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ------------ preempt -----------------------
-       AC_MSG_CHECKING([if preempt is enabled])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/config.h>
-               ],[
-                       #ifndef CONFIG_PREEMPT
-                       #error CONFIG_PREEMPT is not #defined
-                       #endif
-               ],[
-                       AC_MSG_RESULT([yes])
-                       AC_MSG_ERROR([Lustre does not support kernels with preempt enabled.])
-               ],[
-                       AC_MSG_RESULT([no])
-               ])
-
-       # ------------ kallsyms (so software watchdogs produce useful stacks)
-       AC_MSG_CHECKING([if kallsyms is enabled])
-       LUSTRE_MODULE_TRY_COMPILE(
-               [
-                       #include <linux/config.h>
-               ],[
-                       #ifndef CONFIG_KALLSYMS
-                       #error CONFIG_KALLSYMS is not #defined
-                       #endif
-               ],[
-                       AC_MSG_RESULT([yes])
-               ],[
-                       AC_MSG_RESULT([no])
-                       if test "x$ARCH_UM" = "x" ; then
-                               AC_MSG_ERROR([Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.])
-                       fi
-               ])
-
-       # ------------ check for our show_task patch
-       AC_MSG_CHECKING([if kernel exports show_task])
-       have_show_task=0
-       for file in ksyms sched ; do
-               if grep -q "EXPORT_SYMBOL(show_task)" \
-                        "$LINUX/kernel/$file.c" 2>/dev/null ; then
-                       have_show_task=1
-                       break
-               fi
-       done
-       if test x$have_show_task = x1 ; then
-               AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
-               AC_MSG_RESULT(yes)
-       else
-               AC_MSG_RESULT(no)
-       fi
-
-       case $BACKINGFS in
-               ext3)
-                       # --- Check that ext3 and ext3 xattr are enabled in the kernel
-                       AC_MSG_CHECKING([that ext3 is enabled in the kernel])
-                       LUSTRE_MODULE_TRY_COMPILE(
-                               [
-                                       #include <linux/config.h>
-                               ],[
-                                       #ifndef CONFIG_EXT3_FS
-                                       #ifndef CONFIG_EXT3_FS_MODULE
-                                       #error CONFIG_EXT3_FS not #defined
-                                       #endif
-                                       #endif
-                               ],[
-                                       AC_MSG_RESULT([yes])
-                               ],[
-                                       AC_MSG_RESULT([no])
-                                       AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel (CONFIG_EXT3_FS)])
-                               ])
-       
-                       AC_MSG_CHECKING([that extended attributes for ext3 are enabled in the kernel])
-                       LUSTRE_MODULE_TRY_COMPILE(
-                               [
-                                       #include <linux/config.h>
-                               ],[
-                                       #ifndef CONFIG_EXT3_FS_XATTR
-                                       #error CONFIG_EXT3_FS_XATTR not #defined
-                                       #endif
-                               ],[
-                                       AC_MSG_RESULT([yes])
-                               ],[
-                                       AC_MSG_RESULT([no])
-                                       AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel (CONFIG_EXT3_FS_XATTR.)])
-                                       AC_MSG_WARN([This build may fail.])
-                               ])
-                       ;;
-               ldiskfs)
-                       AC_MSG_CHECKING([if fshooks are present])
-                       LUSTRE_MODULE_TRY_COMPILE(
-                               [
-                                       #include <linux/fshooks.h>
-                               ],[],[
-                                       AC_MSG_RESULT([yes])
-                                       LDISKFS_SERIES="2.6-suse.series"
-                               ],[
-                                       AC_MSG_RESULT([no])
-                                       LDISKFS_SERIES="2.6-vanilla.series"
-                               ])
-                       AC_SUBST(LDISKFS_SERIES)
-                       # --- check which ldiskfs series we should use
-                       ;;
-       esac # $BACKINGFS
-fi
-
-AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal")
-AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
-AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
-AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
-AM_CONDITIONAL(BUILD_RANAL, test x$RANAL = "xranal")
-
-# portals/utils/portals.c
-AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h])
-AC_CHECK_FUNCS([gethostbyname socket connect])
-
-# portals/utils/debug.c
-AC_CHECK_HEADERS([linux/version.h])
-
-# include/liblustre.h
-AC_CHECK_HEADERS([asm/page.h sys/user.h stdint.h])
-
-# liblustre/llite_lib.h
-AC_CHECK_HEADERS([xtio.h file.h])
-
-# liblustre/dir.c
-AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
-
-# liblustre/lutil.c
-AC_CHECK_HEADERS([netinet/in.h arpa/inet.h catamount/data.h])
-AC_CHECK_FUNCS([inet_ntoa])
-
-CPPFLAGS="-include \$(top_builddir)/include/config.h $CPPFLAGS"
-EXTRA_KCFLAGS="-include $PWD/include/config.h $EXTRA_KCFLAGS"
-AC_SUBST(EXTRA_KCFLAGS)
-
-echo "CPPFLAGS: $CPPFLAGS"
-echo "LLCPPFLAGS: $LLCPPFLAGS"
-echo "CFLAGS: $CFLAGS"
-echo "EXTRA_KCFLAGS: $EXTRA_KCFLAGS"
-echo "LLCFLAGS: $LLCFLAGS"
-
-ENABLE_INIT_SCRIPTS=0
-if test x$enable_utils = xyes ; then
-        AC_MSG_CHECKING([whether to install init scripts])
-        # our scripts only work on red hat systems
-        if test -f /etc/init.d/functions -a -f /etc/sysconfig/network ; then
-                ENABLE_INIT_SCRIPTS=1
-                AC_MSG_RESULT([yes])
-        else
-                AC_MSG_RESULT([no])
-        fi
-fi
-AM_CONDITIONAL(INIT_SCRIPTS, test x$ENABLE_INIT_SCRIPTS = "x1")
-AC_SUBST(ENABLE_INIT_SCRIPTS)
diff --git a/lustre/portals/autoMakefile.am b/lustre/portals/autoMakefile.am
deleted file mode 100644 (file)
index 485ff04..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (C) 2001  Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-EXTRA_DIST = archdep.m4 build.m4
-
-SUBDIRS = portals libcfs knals unals router tests doc utils include
diff --git a/lustre/portals/autogen.sh b/lustre/portals/autogen.sh
deleted file mode 100755 (executable)
index 9deed73..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-aclocal &&
-automake --add-missing &&
-${AUTOCONF:-autoconf}
diff --git a/lustre/portals/build.m4 b/lustre/portals/build.m4
deleted file mode 100644 (file)
index f158396..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-# ----------  other tests and settings ---------
-
-AC_CHECK_TYPE([spinlock_t],
-       [AC_DEFINE(HAVE_SPINLOCK_T, 1, [spinlock_t is defined])],
-       [],
-       [#include <linux/spinlock.h>])
-
-# ---------  unsigned long long sane? -------
-
-AC_CHECK_SIZEOF(unsigned long long, 0)
-echo "---> size SIZEOF $SIZEOF_unsigned_long_long"
-echo "---> size SIZEOF $ac_cv_sizeof_unsigned_long_long"
-if test $ac_cv_sizeof_unsigned_long_long != 8 ; then
-        AC_MSG_ERROR([** we assume that sizeof(long long) == 8.  Tell phil@clusterfs.com])
-fi
-
-# directories for binaries
-ac_default_prefix=/usr
-
-# mount.lustre
-rootsbindir='/sbin'
-AC_SUBST(rootsbindir)
-sysconfdir='/etc'
-AC_SUBST(sysconfdir)
-# Directories for documentation and demos.
-docdir='${datadir}/doc/$(PACKAGE)'
-AC_SUBST(docdir)
-demodir='$(docdir)/demo'
-AC_SUBST(demodir)
-pkgexampledir='${pkgdatadir}/examples'
-AC_SUBST(pkgexampledir)
-pymoddir='${pkglibdir}/python/Lustre'
-AC_SUBST(pymoddir)
-
-# ----------  BAD gcc? ------------
-AC_PROG_RANLIB
-AC_PROG_CC
-AC_MSG_CHECKING([for buggy compiler])
-CC_VERSION=`$CC -v 2>&1 | grep "^gcc version"`
-bad_cc() {
-       AC_MSG_RESULT([buggy compiler found!])
-       echo
-       echo "   '$CC_VERSION'"
-       echo "  has been known to generate bad code, "
-       echo "  please get an updated compiler."
-       AC_MSG_ERROR([sorry])
-}
-TMP_VERSION=`echo $CC_VERSION | cut -c 1-16`
-if test "$TMP_VERSION" = "gcc version 2.95"; then
-        bad_cc
-fi
-case "$CC_VERSION" in 
-       # ost_pack_niobuf putting 64bit NTOH temporaries on the stack
-       # without "sub    $0xc,%esp" to protect the stack from being
-       # stomped on by interrupts (bug 606)
-       "gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)")
-               bad_cc
-               ;;
-       # mandrake's similar sub 0xc compiler bug
-       # http://marc.theaimsgroup.com/?l=linux-kernel&m=104748366226348&w=2
-       "gcc version 2.96 20000731 (Mandrake Linux 8.1 2.96-0.62mdk)")
-               bad_cc
-               ;;
-       # unpatched 'gcc' on rh9.  miscompiles a
-       #        struct = (type) { .member = value, };
-       # asignment in the iibnal where the struct is a mix
-       # of u64 and u32 bit-fields.
-       "gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)")
-               bad_cc
-               ;;
-       *)
-               AC_MSG_RESULT([no known problems])
-               ;;
-esac
-# end ------  BAD gcc? ------------
-
-# --------  Check for required packages  --------------
-
-# this doesn't seem to work on older autoconf
-# AC_CHECK_LIB(readline, readline,,)
-AC_MSG_CHECKING([for readline support])
-AC_ARG_ENABLE(readline,
-       AC_HELP_STRING([--disable-readline],
-                       [do not use readline library]),
-       [],[enable_readline='yes'])
-AC_MSG_RESULT([$enable_readline]) 
-if test x$enable_readline = xyes ; then
-       LIBREADLINE="-lreadline -lncurses"
-       AC_DEFINE(HAVE_LIBREADLINE, 1, [readline library is available])
-else 
-       LIBREADLINE=""
-fi
-AC_SUBST(LIBREADLINE)
-
-AC_MSG_CHECKING([if efence debugging support is requested])
-AC_ARG_ENABLE(efence,
-       AC_HELP_STRING([--enable-efence],
-                       [use efence library]),
-       [],[enable_efence='no'])
-AC_MSG_RESULT([$enable_efence])
-if test "$enable_efence" = "yes" ; then
-       LIBEFENCE="-lefence"
-       AC_DEFINE(HAVE_LIBEFENCE, 1, [libefence support is requested])
-else 
-       LIBEFENCE=""
-fi
-AC_SUBST(LIBEFENCE)
-
-# -------- enable acceptor libwrap (TCP wrappers) support? -------
-AC_MSG_CHECKING([if libwrap support is requested])
-AC_ARG_ENABLE([libwrap],
-       AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
-       [case "${enableval}" in
-               yes) enable_libwrap=yes ;;
-               no) enable_libwrap=no ;;
-               *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
-       esac],[enable_libwrap=no])
-AC_MSG_RESULT([$enable_libwrap])
-if test x$enable_libwrap = xyes ; then
-       LIBWRAP="-lwrap"
-       AC_DEFINE(HAVE_LIBWRAP, 1, [libwrap support is requested])
-else
-       LIBWRAP=""
-fi
-AC_SUBST(LIBWRAP)
-
-AC_SUBST(LIBS)
diff --git a/lustre/portals/doc/.cvsignore b/lustre/portals/doc/.cvsignore
deleted file mode 100644 (file)
index 827dca4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Makefile
-Makefile.in
-*.eps
-*.pdf
diff --git a/lustre/portals/doc/Data-structures b/lustre/portals/doc/Data-structures
deleted file mode 100644 (file)
index b5532b1..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-In this document I will try to draw the data structures and how they
-interrelate in the Portals 3 reference implementation.  It is probably
-best shown with a drawing, so there may be an additional xfig or
-Postscript figure.
-
-
-MEMORY POOLS:
-------------
-
-First, a digression on memory allocation in the library.  As mentioned
-in the NAL Writer's Guide, the library does not link against any
-standard C libraries and as such is unable to dynamically allocate
-memory on its own.  It requires that the NAL implement a method
-for allocation that is appropriate for the protection domain in
-which the library lives.  This is only called when a network
-interface is initialized to allocate the Portals object pools.
-
-These pools are preallocate blocks of objects that the library
-can rapidly make active and manage with a minimum of overhead.
-It is also cuts down on overhead for setting up structures
-since the NAL->malloc() callback does not need to be called
-for each object.
-
-The objects are maintained on a per-object type singly linked free
-list and contain a pointer to the next free object.  This pointer
-is NULL if the object is not on the free list and is non-zero
-if it is on the list.  The special sentinal value of 0xDEADBEEF
-is used to mark the end of the free list since NULL could
-indicate that the last object in the list is not free.
-
-When one of the lib_*_alloc() functions is called, the library
-returns the head of the free list and advances the head pointer
-to the next item on the list.  The special case of 0xDEADBEEF is
-checked and a NULL pointer is returned if there are no more
-objects of this type available.   The lib_*_free() functions
-are even simpler -- check to ensure that the object is not already
-free, set its next pointer to the current head and then set
-the head to be this newly freed object.
-
-Since C does not have templates, I did the next best thing and wrote
-the memory pool allocation code as a macro that expands based on the
-type of the argument.  The mk_alloc(T) macro expands to
-write the _lib_T_alloc() and lib_T_free() functions.
-It requires that the object have a pointer of the type T named
-"next_free".  There are also functions that map _lib_T_alloc()
-to lib_T_alloc() so that the library can add some extra
-functionality to the T constructor.
-
-
-
-LINKED LISTS:
-------------
-
-Many of the active Portals objects are stored in doubly linked lists
-when they are active.  These are always implemented with the pointer
-to the next object and a pointer to the next pointer of the
-previous object.  This avoids the "dummy head" object or
-special cases for inserting at the beginning or end of the list.
-The pointer manipulations are a little hairy at times, but
-I hope that they are understandable.
-
-The actual linked list code is implemented as macros in <lib-p30.h>,
-although the object has to know about 
-
-
diff --git a/lustre/portals/doc/Makefile.am b/lustre/portals/doc/Makefile.am
deleted file mode 100644 (file)
index b7f6252..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (C) 2001  Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-LYX2PDF = lyx --export pdf
-LYX2TXT = lyx --export text
-LYX2HTML = lyx --export html
-SUFFIXES = .lin .lyx .pdf .sgml .html .txt .fig .eps
-
-if DOC
-  DOCS = portals3.pdf
-else
-  DOCS =
-endif
-
-IMAGES = file.eps flow_new.eps get.eps mpi.eps portals.eps put.eps
-LYXFILES= portals3.lyx
-
-MAINTAINERCLEANFILES =  $(IMAGES) $(DOCS) $(GENERATED)
-GENERATED = 
-EXTRA_DIST = $(DOCS) $(IMAGES) $(LYXFILES) 
-
-all: $(DOCS)
-
-# update date and version in document
-date := $(shell date +%x)
-tag := $(shell echo '$$Name:  $$' | sed -e 's/^\$$Na''me: *\$$$$/HEAD/; s/^\$$Na''me: \(.*\) \$$$$/\1/')
-addversion = sed -e 's|@T''AG@|$(tag)|g; s|@VER''SION@|$(VERSION)|g; s|@DA''TE@|$(date)|g'
-
-# Regenerate when the $(VERSION) or $Name:  $ changes.
-.INTERMEDIATE: $(GENERATED)
-$(GENERATED) : %.lyx: %.lin Makefile
-       $(addversion) $< > $@
-
-.lyx.pdf:
-       @$(LYX2PDF) $< || printf "\n*** Warning: not creating PDF docs; install lyx to rectify this\n"
-
-.lyx.txt:
-       @$(LYX2TXT) $< || printf "\n*** Warning: not creating text docs; install lyx to rectify this\n"
-.lyx.html:
-       @$(LYX2HTML) $< || printf "\n*** Warning: not creating HTML docs; install lyx to rectify this\n"
-.fig.eps:
-       -fig2dev -L eps $< > $@
-
-portals3.pdf portals3.txt portals3.html: $(IMAGES) portals3.lyx
-
-syncweb: portals3.pdf
-#      cp lustre.pdf /usr/src/www/content/lustre/docs/lustre.pdf
-#      ( cd /usr/src/www ; make lustre ; make synclustre )
-
diff --git a/lustre/portals/doc/Message-life-cycle b/lustre/portals/doc/Message-life-cycle
deleted file mode 100644 (file)
index e8cc7e2..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-This documents the life cycle of message as it arrives and is handled by
-a basic async, packetized NAL.  There are four types of messages that have
-slightly different life cycles, so they are addressed independently.
-
-
-Put request
------------
-
-1.  NAL notices that there is a incoming message header on the network
-and reads an ptl_hdr_t in from the wire.
-
-2.  It may store additional NAL specific data that provides context
-for this event in a void* that it will interpret in some fashion
-later.
-
-3.  The NAL calls lib_parse() with a pointer to the header and its
-private data structure.
-
-4.  The library decodes the header and may build a message state
-object that describes the event to be written and the ACK to be
-sent, if any.  It then calls nal->recv() with the private data
-that the NAL passed in, a pointer to the message state object
-and a translated user address.
-
-       The NAL will have been given a chance to pretranslate
-       all user addresses when the buffers are created.  This
-       process is described in the NAL-HOWTO.
-
-5.  The NAL should restore what ever context it required from the
-private data pointer, begin receiving the bytes and possibly store
-some extra state of its own.  It should return at this point.
-
-
-
-Get request
------------
-
-1.  As with a Put, the NAL notices the incoming message header and
-passes it to lib_parse().
-
-2.  The library decodes the header and calls nal->recv() with a
-zero byte length, offset and destination to instruct it to clean
-up the wire after reading the header.  The private data will
-be passed in as well, allowing the NAL to retrieve any state
-or context that it requires.
-
-3.  The library may build a message state object to possibly
-write an event log or invalidate a memory region.
-
-4.  The library will build a ptl_msg_t header that specifies the
-Portals protocol information for delivery at the remote end.
-
-5.  The library calls nal->send() with the pre-built header,
-the optional message state object, the four part address
-component, a translated user pointer + offset, and some
-other things.
-
-6.  The NAL is to put the header on the wire or copy it at
-this point (since it off the stack).  It should store some
-amount of state about its current position in the message and
-the destination address.
-
-7.  And then return to the library.
-
-
-Reply request
--------------
-
-1.  Starting at "The library decodes the header..."
-
-2.  The library decodes the header and calls nal->recv()
-to bring in the rest of the message.  Flow continues in
-exactly the same fashion as with all other receives.
-
-
-Ack request
------------
-
-1.  The library decodes the header, builds the appropriate data
-structures for the event in a message state object and calls nal->recv()
-with a zero byte length, etc.
-
-
-Packet arrival
---------------
-
-1.  The NAL should notice the arrival of a packet, retrieve whatever
-state it needs from the message ID or other NAL specific header data
-and place the data bytes directly into the user address that were
-given to nal->recv().
-
-       How this happens is outside the scope of the Portals library
-       and soley determined by the NAL...
-
-2.  If this is the last packet in a message, the NAL should retrieve
-the lib_msg_t *cookie that it was given in the call to nal->recv()
-and pass it to lib_finalize().  lib_finalize() may call nal->send()
-to send an ACK, nal->write() to record an entry in the event log,
-nal->invalidate() to unregister a region of memory or do nothing at all.
-
-3.  It should then clean up any remaining NAL specific state about
-the message and go back into the main loop.
-
-
-Outgoing packets
-----------------
-
-1.  When the NAL has pending output, it should put the packets on
-the wire wrapped with whatever implementation specified wrappers.
-
-2.  Once it has output all the packets of a message it should
-call lib_finalize() with the message state object that was
-handed to nal->send().  This will allows the library to clean
-up its state regarding the message and write any pending event
-entries.
-
-
-
diff --git a/lustre/portals/doc/NAL-HOWTO b/lustre/portals/doc/NAL-HOWTO
deleted file mode 100644 (file)
index ea38aed..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-This document is a first attempt at describing how to write a NAL
-for the Portals 3 library.  It also defines the library architecture
-and the abstraction of protection domains.
-
-
-First, an overview of the architecture:
-
-    Application
-
-----|----+--------
-         |
-   API  === NAL        (User space)
-         |   
----------+---|-----
-         |    
-   LIB  === NAL        (Library space)
-         |
----------+---|-----
-          
-    Physical wire      (NIC space)
-          
-
-Application
-    API
-API-side NAL
-------------
-LIB-side NAL
-    LIB
-LIB-side NAL
-   wire
-
-Communication is through the indicated paths via well defined
-interfaces.  The API and LIB portions are written to be portable
-across platforms and do not depend on the network interface.
-
-Communcation between the application and the API code is
-defined in the Portals 3 API specification.  This is the
-user-visible portion of the interface and should be the most
-stable.
-
-
-
-API-side NAL:
-------------
-
-The user space NAL needs to implement only a few functions
-that are stored in a nal_t data structure and called by the
-API-side library:
-
-       int forward( nal_t *nal,
-               int     index,
-               void    *args,
-               size_t  arg_len,
-               void    *ret,
-               size_t  ret_len
-       );
-
-Most of the data structures in the portals library are held in
-the LIB section of the code, so it is necessary to forward API
-calls across the protection domain to the library.  This is
-handled by the NAL's forward method.  Once the argument and return
-blocks are on the remote side the NAL should call lib_dispatch()
-to invoke the appropriate API function.
-
-       int validate( nal_t *nal,
-               void    *base,
-               size_t  extent,
-               void    **trans_base,
-               void    **trans_data
-       );
-
-The validate method provides a means for the NAL to prevalidate
-and possibly pretranslate user addresses into a form suitable
-for fast use by the network card or kernel module.  The trans_base
-pointer will be used by the library everytime it needs to
-refer to the block of memory.  The trans_data result is a
-cookie that will be handed to the NAL along with the trans_base.
-
-The library never performs calculations on the trans_base value;
-it only computes offsets that are then handed to the NAL.
-
-
-       int shutdown( nal_t *nal, int interface );
-
-Brings down the network interface.  The remote NAL side should
-call lib_fini() to bring down the library side of the network.
-
-       void yield( nal_t *nal );
-
-This allows the user application to gracefully give up the processor
-while busy waiting.  Performance critical applications may not
-want to take the time to call this function, so it should be an
-option to the PtlEQWait call.  Right now it is not implemented as such.
-
-Lastly, the NAL must implement a function named PTL_IFACE_*, where
-* is the name of the NAL such as PTL_IFACE_IP or PTL_IFACE_MYR.
-This initialization function is to set up communication with the
-library-side NAL, which should call lib_init() to bring up the
-network interface.
-
-
-
-LIB-side NAL:
-------------
-
-On the library-side, the NAL has much more responsibility.  It
-is responsible for calling lib_dispatch() on behalf of the user,
-it is also responsible for bringing packets off the wire and
-pushing bits out.  As on the user side, the methods are stored
-in a nal_cb_t structure that is defined on a per network
-interface basis.
-
-The calls to lib_dispatch() need to be examined.  The prototype:
-
-       void    lib_dispatch(
-                       nal_cb_t                *nal,
-                       void                    *private,
-                       int                     index,
-                       void                    *arg_block,
-                       void                    *ret_block
-       );
-
-has two complications.  The private field is a NAL-specific
-value that will be passed to any callbacks produced as a result
-of this API call.  Kernel module implementations may use this
-for task structures, or perhaps network card data.  It is ignored
-by the library.
-
-Secondly, the arg_block and ret_block must be in the same protection
-domain as the library.  The NAL's two halves must communicate the
-sizes and perform the copies.  After the call, the buffer pointed
-to by ret_block will be filled in and should be copied back to
-the user space.  How this is to be done is NAL specific.
-
-       int lib_parse(
-                       nal_cb_t                *nal,
-                       ptl_hdr_t               *hdr,
-                       void                    *private
-       );
-
-This is the only other entry point into the library from the NAL.
-When the NAL detects an incoming message on the wire it should read
-sizeof(ptl_hdr_t) bytes and pass a pointer to the header to
-lib_parse().  It may set private to be anything that it needs to
-tie the incoming message to callbacks that are made as a result
-of this event.
-
-The method calls are:
-
-       int     (*send)(
-                       nal_cb_t                *nal,
-                       void                    *private,
-                       lib_msg_t               *cookie,
-                       ptl_hdr_t               *hdr,
-                       int                     nid,
-                       int                     pid,
-                       int                     gid,
-                       int                     rid,
-                       user_ptr                trans_base,
-                       user_ptr                trans_data,
-                       size_t                  offset,
-                       size_t                  len
-       );
-
-This is a tricky function -- it must support async output
-of messages as well as properly syncronized event log writing.
-The private field is the same that was passed into lib_dispatch()
-or lib_parse() and may be used to tie this call to the event
-that initiated the entry to the library.
-
-The cookie is a pointer to a library private value that must
-be passed to lib_finalize() once the message has been completely
-sent.  It should not be examined by the NAL for any meaning.
-
-The four ID fields are passed in, although some implementations
-may not use all of them.
-
-The single base pointer has been replaced with the translated
-address that the API NAL generated in the api_nal->validate()
-call.  The trans_data is unchanged and the offset is in bytes.
-
-
-       int     (*recv)(
-                       nal_cb_t                *nal,
-                       void                    *private,
-                       lib_msg_t               *cookie,
-                       user_ptr                trans_base,
-                       user_ptr                trans_data,
-                       size_t                  offset,
-                       size_t                  mlen,
-                       size_t                  rlen
-       );
-
-This callback will only be called in response to lib_parse().
-The cookie, trans_addr and trans_data  are as discussed in send().
-The NAL should read mlen bytes from the wire, deposit them into
-trans_base + offset and then discard (rlen - mlen) bytes.
-Once the entire message has been received the NAL should call
-lib_finalize() with the lib_msg_t *cookie.
-
-The special arguments of base=NULL, data=NULL, offset=0, mlen=0, rlen=0
-is used to indicate that the NAL should clean up the wire.  This could
-be implemented as a blocking call, although having it return as quickly
-as possible is desirable.
-
-       int     (*write)(
-                       nal_cb_t                *nal,
-                       void                    *private,
-                       user_ptr                trans_addr,
-                       user_ptr                trans_data,
-                       size_t                  offset,
-
-                       void                    *src_addr,
-                       size_t                  len
-       );
-
-This is essentially a cross-protection domain memcpy().  The user address
-has been pretranslated by the api_nal->translate() call.
-
-       void    *(*malloc)(
-                       nal_cb_t                *nal,
-                       size_t                  len
-       );
-
-       void    (*free)(
-                       nal_cb_t                *nal,
-                       void                    *buf
-       );
-
-Since the NAL may be in a non-standard hosted environment it can
-not call malloc().  This allows the library side NAL to implement
-the system specific malloc().  In the current reference implementation
-the libary only calls nal->malloc() when the network interface is
-initialized and then calls free when it is brought down.  The library
-maintains its own pool of objects for allocation so only one call to
-malloc is made per object type.
-
-       void    (*invalidate)(
-                       nal_cb_t                *nal,
-                       user_ptr                trans_base,
-                       user_ptr                trans_data,
-                       size_t                  extent
-       );
-
-User addresses are validated/translated at the user-level API NAL
-method, which is likely to push them to this level.  Meanwhile,
-the library NAL will be notified when the library no longer
-needs the buffer.  Overlapped buffers are not detected by the
-library, so the NAL should ref count each page involved.
-
-Unfortunately we have a few bugs when the invalidate method is
-called.  It is still in progress...
-
-       void    (*printf)(
-                       nal_cb_t                *nal,
-                       const char              *fmt,
-                       ...
-       );
-
-As with malloc(), the library does not have any way to do printf
-or printk.  It is not necessary for the NAL to implement the this
-call, although it will make debugging difficult.
-
-       void    (*cli)(
-                       nal_cb_t                *nal,
-                       unsigned long           *flags
-       );
-
-       void    (*sti)(
-                       nal_cb_t                *nal,
-                       unsigned long           *flags
-       );
-
-These are used by the library to mark critical sections.
-
-       int     (*gidrid2nidpid)(
-                       nal_cb_t                *nal,
-                       ptl_id_t                gid,
-                       ptl_id_t                rid,
-                       ptl_id_t                *nid,
-                       ptl_id_t                *pid
-       );
-
-
-       int     (*nidpid2gidrid)(
-                       nal_cb_t                *nal,
-                       ptl_id_t                nid,
-                       ptl_id_t                pid,
-                       ptl_id_t                *gid,
-                       ptl_id_t                *rid
-       );
-
-Rolf added these.  I haven't looked at how they have to work yet.
diff --git a/lustre/portals/doc/file.fig b/lustre/portals/doc/file.fig
deleted file mode 100644 (file)
index 914c294..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-6 1200 750 1650 1050
-2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
-        1650 1050 1650 750 1200 750 1200 1050 1650 1050
-4 1 0 100 0 0 10 0.0000 0 105 240 1425 952 FS0\001
--6
-6 1200 2325 1650 2625
-2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
-        1650 2625 1650 2325 1200 2325 1200 2625 1650 2625
-4 1 0 100 0 0 10 0.0000 0 105 240 1425 2527 FS3\001
--6
-6 1200 1800 1650 2100
-2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
-        1650 2100 1650 1800 1200 1800 1200 2100 1650 2100
-4 1 0 100 0 0 10 0.0000 0 105 240 1425 2002 FS2\001
--6
-6 1200 1275 1650 1575
-2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
-        1650 1575 1650 1275 1200 1275 1200 1575 1650 1575
-4 1 0 100 0 0 10 0.0000 0 105 240 1425 1477 FS1\001
--6
-6 450 750 900 1200
-5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 750.000 450 1050 675 1125 900 1050
-1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 825 225 75 450 900 900 750
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        450 825 450 1050
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 1050 900 825
--6
-6 450 2325 900 2775
-5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 2325.000 450 2625 675 2700 900 2625
-1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 2400 225 75 450 2475 900 2325
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        450 2400 450 2625
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 2625 900 2400
--6
-6 450 1800 900 2250
-5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 1800.000 450 2100 675 2175 900 2100
-1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 1875 225 75 450 1950 900 1800
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        450 1875 450 2100
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 2100 900 1875
--6
-6 450 1275 900 1725
-5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 1275.000 450 1575 675 1650 900 1575
-1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 1350 225 75 450 1425 900 1275
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        450 1350 450 1575
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 1575 900 1350
--6
-6 2250 750 3450 2625
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2550 1200 3150 1200
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2550 1500 3150 1500
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2550 1800 3150 1800
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2550 2100 3150 2100
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2550 975 3150 975 3150 2625 2550 2625 2550 975
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        2550 2400 3150 2400
-4 1 0 100 0 0 10 0.0000 0 135 1185 2850 900 Application Buffer\001
--6
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 2400 2550 1350
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 1875 2550 1050
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 1425 2550 1950
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 900 2550 1650
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 900 1200 900
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 1425 1200 1425
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 1950 1200 1950
-2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
-        900 2475 1200 2475
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 2025 2550 2250
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
-       0 0 1.00 60.00 120.00
-       0 0 1.00 60.00 120.00
-        1650 2550 2550 2475
-2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
-        1875 2850 1875 600 225 600 225 2850 1875 2850
-4 1 0 100 0 0 10 0.0000 0 105 1215 1050 525 Parallel File Server\001
diff --git a/lustre/portals/doc/flow_new.fig b/lustre/portals/doc/flow_new.fig
deleted file mode 100644 (file)
index d828dea..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-6 525 2175 1575 2925
-6 675 2287 1425 2812
-4 1 0 50 0 0 10 0.0000 4 105 255 1050 2437 MD\001
-4 1 0 50 0 0 10 0.0000 4 105 645 1050 2587 Exists and\001
-4 1 0 50 0 0 10 0.0000 4 135 555 1050 2737 Accepts?\001
--6
-2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
-        1575 2550 1050 2175 525 2550 1050 2925 1575 2550
--6
-6 3450 1275 4350 1725
-6 3600 1312 4200 1687
-4 1 0 100 0 0 10 0.0000 0 135 525 3900 1612 Message\001
-4 1 0 100 0 0 10 0.0000 0 105 465 3900 1462 Discard\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        3450 1275 4350 1275 4350 1725 3450 1725 3450 1275
--6
-6 4650 1275 5550 1725
-6 4725 1312 5475 1687
-4 1 0 100 0 0 10 0.0000 0 135 735 5100 1612 Drop Count\001
-4 1 0 100 0 0 10 0.0000 0 105 630 5100 1462 Increment\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        4650 1275 5550 1275 5550 1725 4650 1725 4650 1275
--6
-6 1350 525 2250 975
-6 1350 562 2250 937
-4 1 0 100 0 0 10 0.0000 0 135 795 1800 862 Match Entry\001
-4 1 0 100 0 0 10 0.0000 0 105 585 1800 712 Get Next\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1350 525 2250 525 2250 975 1350 975 1350 525
--6
-6 525 1125 1575 1875
-2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
-        1575 1500 1050 1125 525 1500 1050 1875 1575 1500
-4 1 0 100 0 0 10 0.0000 0 105 465 1049 1552 Match?\001
--6
-6 2340 1237 2940 1687
-6 2340 1237 2940 1687
-4 1 0 100 0 0 10 0.0000 0 105 345 2640 1387 More\001
-4 1 0 100 0 0 10 0.0000 0 105 405 2640 1537 Match\001
-4 1 0 100 0 0 10 0.0000 0 105 510 2640 1687 Entries?\001
--6
--6
-6 525 3225 1575 3975
-6 675 3375 1425 3750
-4 1 0 50 0 0 10 0.0000 4 105 255 1050 3525 MD\001
-4 1 0 50 0 0 10 0.0000 4 105 615 1050 3720 has room?\001
--6
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
-        525 3600 1050 3225 1575 3600 1050 3975 525 3600
--6
-6 3300 3375 4350 3825
-6 3300 3412 4350 3787
-4 1 0 50 0 0 10 0.0000 4 105 735 3825 3562 Unlink MD\001
-4 1 0 50 0 0 10 0.0000 4 135 945 3825 3712 & Match Entry\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        3300 3375 4350 3375 4350 3825 3300 3825 3300 3375
--6
-6 1950 3225 3000 3975
-6 2250 3450 2700 3750
-4 1 0 50 0 0 10 0.0000 4 105 450 2475 3600 Unlink\001
-4 1 0 50 0 0 10 0.0000 4 105 315 2475 3750 full?\001
--6
-2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
-        3000 3600 2475 3225 1950 3600 2475 3975 3000 3600
--6
-6 3150 4500 4200 4950
-6 3150 4537 4200 4912
-4 1 0 50 0 0 10 0.0000 4 105 735 3675 4687 Unlink MD\001
-4 1 0 50 0 0 10 0.0000 4 135 945 3675 4837 & Match Entry\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        3150 4500 4200 4500 4200 4950 3150 4950 3150 4500
--6
-6 600 4500 1500 4950
-6 675 4537 1425 4912
-4 1 0 50 0 0 10 0.0000 4 135 615 1050 4837 Operation\001
-4 1 0 50 0 0 10 0.0000 4 105 525 1050 4687 Perform\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        600 4500 1500 4500 1500 4950 600 4950 600 4500
--6
-6 4650 4350 5700 5100
-6 4950 4537 5400 4912
-6 4950 4537 5400 4912
-4 1 0 50 0 0 10 0.0000 4 135 435 5175 4837 Queue?\001
-4 1 0 50 0 0 10 0.0000 4 105 360 5175 4687 Event\001
--6
--6
-2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
-        5700 4725 5175 4350 4650 4725 5175 5100 5700 4725
--6
-6 6000 4500 6900 4950
-6 6225 4575 6675 4875
-4 1 0 50 0 0 10 0.0000 4 105 360 6450 4875 Event\001
-4 1 0 50 0 0 10 0.0000 4 105 435 6450 4725 Record\001
--6
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        6000 4500 6900 4500 6900 4950 6000 4950 6000 4500
--6
-6 1800 4350 2850 5100
-6 2100 4575 2550 4875
-4 1 0 50 0 0 10 0.0000 4 105 450 2325 4725 Unlink\001
-4 1 0 50 0 0 10 0.0000 4 105 450 2325 4875 thresh?\001
--6
-2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
-        2850 4725 2325 4350 1800 4725 2325 5100 2850 4725
--6
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1050 1875 1050 2175
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1575 1500 2100 1500
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1050 450 1050 1125
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1350 750 1050 750
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1050 2925 1050 3225
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3150 1500 3450 1500
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        4350 1500 4650 1500
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
-        2100 1500 2625 1125 3150 1500 2625 1875 2100 1500
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1575 3600 1950 3600
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1050 3975 1050 4500
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3000 3600 3300 3600
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1500 4725 1800 4725
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        5700 4725 6000 4725
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        2850 4725 3150 4725
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        4200 4725 4650 4725
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        6900 4725 7950 4725
-3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
-       0 0 1.00 60.00 120.00
-        1575 2550 1650 2550 1800 2550 1800 2400 1800 1500
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 0 1 5
-       0 0 1.00 60.00 120.00
-        2250 750 2475 750 2625 750 2625 900 2625 1125
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 0 1 5
-       0 0 1.00 60.00 120.00
-        7500 4725 7500 1650 7500 1500 7350 1500 5550 1500
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 50 0 -1 0.000 0 1 0 5
-       0 0 1.00 60.00 120.00
-        2475 3225 2475 2400 2475 2250 2325 2250 1800 2250
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 50 0 -1 0.000 0 1 0 5
-       0 0 1.00 60.00 120.00
-        3825 3375 3825 2175 3825 2025 3675 2025 1800 2025
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 50 0 -1 0.000 0 1 0 8
-       0 0 1.00 60.00 120.00
-        2325 4350 2325 4275 2325 4125 2475 4125 4275 4125 4425 4125
-        4425 4275 4425 4725
-        0.000 1.000 1.000 1.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 50 0 -1 0.000 0 1 0 8
-       0 0 1.00 60.00 120.00
-        5175 4350 5175 4275 5175 4125 5325 4125 7125 4125 7275 4125
-        7275 4275 7275 4725
-        0.000 1.000 1.000 1.000 1.000 1.000 1.000 0.000
-4 1 0 100 0 0 10 0.0000 0 75 150 1575 1425 no\001
-4 1 0 100 0 0 10 0.0000 0 135 360 825 525 Entry\001
-4 1 0 100 0 0 10 0.0000 0 75 150 1575 2475 no\001
-4 1 0 100 0 0 10 0.0000 0 105 195 1200 1950 yes\001
-4 1 0 100 0 0 10 0.0000 0 105 195 1200 3000 yes\001
-4 1 0 100 0 0 10 0.0000 0 105 195 2775 1050 yes\001
-4 1 0 100 0 0 10 0.0000 0 75 150 3225 1425 no\001
-4 1 0 100 0 0 10 0.0000 0 75 150 1650 3525 no\001
-4 1 0 100 0 0 10 0.0000 0 105 195 1200 4050 yes\001
-4 1 0 100 0 0 10 0.0000 0 105 195 3150 3525 yes\001
-4 1 0 100 0 0 10 0.0000 0 75 150 2625 3150 no\001
-4 1 0 100 0 0 10 0.0000 0 105 195 3000 4650 yes\001
-4 1 0 100 0 0 10 0.0000 0 105 195 5850 4650 yes\001
-4 1 0 100 0 0 10 0.0000 0 75 150 2475 4275 no\001
-4 1 0 100 0 0 10 0.0000 0 75 150 5325 4275 no\001
-4 1 0 50 0 0 10 0.0000 4 105 285 7800 4650 Exit\001
diff --git a/lustre/portals/doc/get.fig b/lustre/portals/doc/get.fig
deleted file mode 100644 (file)
index 28db949..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-6 2775 900 3525 1200
-4 0 0 100 0 0 10 0.0000 0 105 720 2775 1200 Translation\001
-4 0 0 100 0 0 10 0.0000 0 105 405 2850 1050 Portal\001
--6
-6 1350 1725 2175 2025
-4 0 0 100 0 0 10 0.0000 0 105 825 1350 2025 Transmission\001
-4 0 0 100 0 0 10 0.0000 0 105 285 1620 1875 Data\001
--6
-2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        900 525 2700 750
-2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        2700 825 2700 1275
-2 1 0 1 0 7 100 0 -1 3.000 0 0 7 1 0 2
-       0 0 1.00 60.00 120.00
-        2700 1350 900 1950
-2 2 0 1 0 7 100 0 -1 4.000 0 0 7 0 0 5
-        2400 300 3600 300 3600 2250 2400 2250 2400 300
-2 2 0 1 0 7 100 0 -1 4.000 0 0 7 0 0 5
-        0 300 1200 300 1200 2250 0 2250 0 300
-4 1 0 100 0 0 10 0.0000 4 135 495 1800 825 Request\001
-4 1 0 100 0 0 10 0.0000 0 105 540 600 525 Initiator\001
-4 1 0 100 0 0 10 0.0000 0 135 405 3000 525 Target\001
diff --git a/lustre/portals/doc/ieee.bst b/lustre/portals/doc/ieee.bst
deleted file mode 100644 (file)
index 4df7c50..0000000
+++ /dev/null
@@ -1,1112 +0,0 @@
-% ---------------------------------------------------------------
-%
-% by Paolo.Ienne@di.epfl.ch
-%
-% ---------------------------------------------------------------
-%
-% no guarantee is given that the format corresponds perfectly to 
-% IEEE 8.5" x 11" Proceedings, but most features should be ok.
-%
-% ---------------------------------------------------------------
-%
-% `ieee' from BibTeX standard bibliography style `abbrv'
-% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than
-% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
-% This restriction helps ensure that all standard styles are identical.
-% The file btxbst.doc has the documentation for this style.
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-  }
-  {}
-  { label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { ", " * write$ }
-    { output.state after.block =
- { add.period$ write$
-   newline$
-   "\newblock " write$
- }
- { output.state before.all =
-     'write$
-     { add.period$ " " * write$ }
-   if$
- }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.check}
-{ 't :=
-  duplicate$ empty$
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
- 'skip$
- { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
-      nameptr #1 >
- { namesleft #1 >
-     { ", " * t * }
-     { numnames #2 >
-  { "," * }
-  'skip$
-       if$
-       t "others" =
-  { " et~al." * }
-  { " and " * t * }
-       if$
-     }
-   if$
- }
- 't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
- { ", editors" * }
- { ", editor" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.title}
-{ title empty$
-    { "" }
-    { title "t" change.case$ }
-  if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
- { t #1 #2 substring$ "--" = not
-     { "--" *
-       t #2 global.max$ substring$ 't :=
-     }
-     {   { t #1 #1 substring$ "-" = }
-  { "-" *
-    t #2 global.max$ substring$ 't :=
-  }
-       while$
-     }
-   if$
- }
- { t #1 #1 substring$ *
-   t #2 global.max$ substring$ 't :=
- }
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ year empty$
-    { month empty$
- { "" }
- { "there's a month but no year in " cite$ * warning$
-   month
- }
-      if$
-    }
-    { month empty$
- 'year
- { month " " * year * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.btitle}
-{ title emphasize
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
-    { "" }
-    { "volume" volume tie.or.space.connect
-      series empty$
- 'skip$
- { " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
-    { number empty$
- { series field.or.null }
- { output.state mid.sentence =
-     { "number" }
-     { "Number" }
-   if$
-   number tie.or.space.connect
-   series empty$
-     { "there's a number but no series in " cite$ * warning$ }
-     { " in " * series * }
-   if$
- }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
- { edition "l" change.case$ " edition" * }
- { edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
- { #1 'multiresult := }
- { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
-    { "" }
-    { pages multi.page.check
- { "pages" pages n.dashify tie.or.space.connect }
- { "page" pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
-  number empty$
-    'skip$
-    { "(" number * ")" * *
-      volume empty$
- { "there's a number but no volume in " cite$ * warning$ }
- 'skip$
-      if$
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
- { pop$ format.pages }
- { ":" * pages n.dashify * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
- { "chapter" }
- { type "l" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty$
- 'skip$
- { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { editor empty$
- { "In " booktitle emphasize * }
- { "In " format.editors * ", " * booktitle emphasize * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { "Technical Report" }
-    'type
-  if$
-  number empty$
-    { "t" change.case$ }
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION {format.article.crossref}
-{ key empty$
-    { journal empty$
- { "need key or journal for " cite$ * " to crossref " * crossref *
-   warning$
-   ""
- }
- { "In {\em " journal * "\/}" * }
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al." * }
-    { #2 <
- 'skip$
- { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-     { " et~al." * }
-     { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-   if$
- }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect
-      " of " *
-    }
-  if$
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
- { series empty$
-     { "need editor, key, or series for " cite$ * " to crossref " *
-       crossref * warning$
-       "" *
-     }
-     { "{\em " * series * "\/}" * }
-   if$
- }
- { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
- { booktitle empty$
-     { "need editor, key, or booktitle for " cite$ * " to crossref " *
-       crossref * warning$
-       ""
-     }
-     { "In {\em " booktitle * "\/}" * }
-   if$
- }
- { "In " key * }
-      if$
-    }
-    { "In " format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { journal emphasize "journal" output.check
-      format.vol.num.pages output
-      format.date "year" output.check
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
-  format.authors output
-  new.block
-  format.title "title" output.check
-  howpublished address new.block.checkb
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.chapter.pages output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-      format.edition output
-      format.date "year" output.check
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.pages output
-      address empty$
- { organization publisher new.sentence.checkb
-   organization output
-   publisher output
-   format.date "year" output.check
- }
- { address output.nonnull
-   format.date "year" output.check
-   new.sentence
-   organization output
-   publisher output
- }
-      if$
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
-  author empty$
-    { organization empty$
- 'skip$
- { organization output.nonnull
-   address output
- }
-      if$
-    }
-    { format.authors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  author empty$
-    { organization empty$
- { address new.block.checka
-   address output
- }
- 'skip$
-      if$
-    }
-    { organization address new.block.checkb
-      organization output
-      address output
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  "Master's thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
-  format.authors output
-  title howpublished new.block.checkb
-  format.title output
-  howpublished new.block.checka
-  howpublished output
-  format.date output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "PhD thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
-  editor empty$
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  format.bvolume output
-  format.number.series output
-  address empty$
-    { editor empty$
- { publisher new.sentence.checka }
- { organization publisher new.sentence.checkb
-   organization output
- }
-      if$
-      publisher output
-      format.date "year" output.check
-    }
-    { address output.nonnull
-      format.date "year" output.check
-      new.sentence
-      editor empty$
- 'skip$
- { organization output }
-      if$
-      publisher output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  format.tr.number output.nonnull
-  institution "institution" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  note "note" output.check
-  format.date output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"Jan."}
-
-MACRO {feb} {"Feb."}
-
-MACRO {mar} {"Mar."}
-
-MACRO {apr} {"Apr."}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"Aug."}
-
-MACRO {sep} {"Sept."}
-
-MACRO {oct} {"Oct."}
-
-MACRO {nov} {"Nov."}
-
-MACRO {dec} {"Dec."}
-
-MACRO {acmcs} {"ACM Comput. Surv."}
-
-MACRO {acta} {"Acta Inf."}
-
-MACRO {cacm} {"Commun. ACM"}
-
-MACRO {ibmjrd} {"IBM J. Res. Dev."}
-
-MACRO {ibmsj} {"IBM Syst.~J."}
-
-MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
-
-MACRO {ieeetc} {"IEEE Trans. Comput."}
-
-MACRO {ieeetcad}
- {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
-
-MACRO {ipl} {"Inf. Process. Lett."}
-
-MACRO {jacm} {"J.~ACM"}
-
-MACRO {jcss} {"J.~Comput. Syst. Sci."}
-
-MACRO {scp} {"Sci. Comput. Programming"}
-
-MACRO {sicomp} {"SIAM J. Comput."}
-
-MACRO {tocs} {"ACM Trans. Comput. Syst."}
-
-MACRO {tods} {"ACM Trans. Database Syst."}
-
-MACRO {tog} {"ACM Trans. Gr."}
-
-MACRO {toms} {"ACM Trans. Math. Softw."}
-
-MACRO {toois} {"ACM Trans. Office Inf. Syst."}
-
-MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
-
-MACRO {tcs} {"Theoretical Comput. Sci."}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
- { "   " * }
- 'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
- { "et al" * }
- { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
-    { key empty$
- { "to sort, need author or key in " cite$ * warning$
-   ""
- }
- { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
-    { editor empty$
- { key empty$
-     { "to sort, need author, editor, or key in " cite$ * warning$
-       ""
-     }
-     { key sortify }
-   if$
- }
- { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
-    { organization empty$
- { key empty$
-     { "to sort, need author, organization, or key in " cite$ * warning$
-       ""
-     }
-     { key sortify }
-   if$
- }
- { "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
- { key empty$
-     { "to sort, need editor, organization, or key in " cite$ * warning$
-       ""
-     }
-     { key sortify }
-   if$
- }
- { "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
-     'author.organization.sort
-     'author.sort
-   if$
- }
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION {begin.bib}
-{ preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * 
-  "}\setlength{\itemsep}{-1ex}\small" * write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
-
-% end of file ieee.bst
-% ---------------------------------------------------------------
diff --git a/lustre/portals/doc/mpi.fig b/lustre/portals/doc/mpi.fig
deleted file mode 100644 (file)
index e1a91b5..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-6 150 1650 900 2025
-4 1 0 100 0 0 10 0.0000 0 135 735 525 1800 Unexpected\001
-4 1 0 100 0 0 10 0.0000 0 135 585 525 1995 Messages\001
--6
-6 150 150 900 525
-4 1 0 100 0 0 10 0.0000 0 135 615 525 300 Preposted\001
-4 1 0 100 0 0 10 0.0000 0 105 525 525 495 Receives\001
--6
-6 2550 4125 3150 4725
-4 1 0 100 0 0 10 0.0000 0 135 600 2850 4275 Length=0\001
-4 1 0 100 0 0 10 0.0000 0 105 540 2850 4470 Truncate\001
-4 1 0 100 0 0 10 0.0000 0 105 480 2850 4665 No Ack\001
--6
-6 1050 1575 1950 1875
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1050 1575 1950 1575 1950 1875 1050 1875 1050 1575
-4 1 0 100 0 0 10 0.0000 0 105 780 1500 1725 Match Short\001
--6
-6 5400 1575 6300 2175
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        5400 1575 6300 1575 6300 2175 5400 2175 5400 1575
-4 1 0 100 0 0 10 0.0000 0 105 405 5850 1875 Buffer\001
--6
-6 5400 2400 6300 3000
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        5400 2400 6300 2400 6300 3000 5400 3000 5400 2400
-4 1 0 100 0 0 10 0.0000 0 105 405 5850 2700 Buffer\001
--6
-6 1050 2400 1950 2700
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1050 2400 1950 2400 1950 2700 1050 2700 1050 2400
-4 1 0 100 0 0 10 0.0000 0 105 780 1500 2550 Match Short\001
--6
-6 1050 825 1950 1125
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1050 825 1950 825 1950 1125 1050 1125 1050 825
-4 1 0 100 0 0 10 0.0000 0 105 765 1500 975 Match None\001
--6
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1500 1125 1500 1575
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3225 2025 4050 3375
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
-        150 675 6600 675
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
-        150 1350 6600 1350
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2400 4125 3300 4125 3300 4725 2400 4725 2400 4125
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3225 4500 4050 3675
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3225 1725 5400 1725
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3225 2550 5400 2550
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3225 2850 4050 3450
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1500 1800 1500 2400
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2400 825 3300 825 3300 1275 2400 1275 2400 825
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1500 2625 1500 4125
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1050 4125 1950 4125 1950 4425 1050 4425 1050 4125
-2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1500 300 1500 825
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1875 975 2400 975
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1875 1725 2400 1725
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1875 2550 2400 2550
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        1875 4275 2400 4275
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2400 1575 3300 1575 3300 2175 2400 2175 2400 1575
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2400 2400 3300 2400 3300 3000 2400 3000 2400 2400
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        4050 3300 5250 3300 5250 3750 4050 3750 4050 3300
-4 1 0 100 0 0 10 0.0000 0 105 885 1500 150 Match Entries\001
-4 1 0 100 0 0 10 0.0000 0 135 1290 2850 150 Memory Descriptors\001
-4 1 0 100 0 0 10 0.0000 0 135 1065 5850 150 Memory Regions\001
-4 1 0 100 0 0 10 0.0000 0 135 825 4500 150 Event Queues\001
-4 1 0 100 0 0 10 0.0000 0 105 585 525 1050 RcvMark\001
-4 1 0 100 0 0 10 0.0000 0 105 330 2850 1102 None\001
-4 1 0 100 0 0 10 0.0000 0 135 705 1500 4275 Match Any\001
-4 1 0 50 0 0 10 0.0000 0 150 810 2850 1725 max_offset=\001
-4 1 0 50 0 0 10 0.0000 0 150 840 2850 1875 n - short_len\001
-4 1 0 50 0 0 10 0.0000 0 150 810 2850 2550 max_offset=\001
-4 1 0 50 0 0 10 0.0000 0 150 840 2850 2700 n - short_len\001
-4 1 0 50 0 0 10 0.0000 0 105 405 2850 2100 unlink\001
-4 1 0 50 0 0 10 0.0000 0 105 405 2850 2925 unlink\001
-4 1 0 100 0 0 10 0.0000 0 135 930 4650 3675 Message Queue\001
-4 1 0 100 0 0 10 0.0000 0 135 735 4650 3525 Unexpected\001
diff --git a/lustre/portals/doc/portals.fig b/lustre/portals/doc/portals.fig
deleted file mode 100644 (file)
index 9b1271b..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1350 900 1650 900 1650 1200 1350 1200 1350 900
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        1800 1350 2100 1350 2100 1650 1800 1650 1800 1350
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2250 1800 2550 1800 2550 2100 2250 2100 2250 1800
-2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
-        4200 375 4200 2100
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        525 600 1125 600 1125 2100 525 2100 525 600
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        4425 1275 4875 1275 4875 1950 4425 1950 4425 1275
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        2550 1200 3150 1200 3150 1500 2550 1500 2550 1200
-2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3000 1425 4425 1425
-2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
-        3600 825 3750 825 3750 1125 3600 1125 3600 825
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        2025 1425 2550 1425
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
-        4425 750 4875 750 4875 1125 4425 1125 4425 750
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
-       0 0 1.00 60.00 120.00
-        3675 975 4425 975
-3 0 0 1 0 7 100 0 -1 0.000 0 1 0 2
-       0 0 1.00 60.00 120.00
-        825 1050 1350 1050
-        0.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
-       0 0 1.00 60.00 120.00
-        1500 1125 1500 1350 1500 1500 1650 1500 1800 1500
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
-       0 0 1.00 60.00 120.00
-        1950 1575 1950 1800 1950 1950 2100 1950 2250 1950
-        0.000 1.000 1.000 1.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 0 0 2
-        525 975 1125 975
-        0.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 0 0 2
-        525 1125 1125 1125
-        0.000 0.000
-3 0 0 1 0 7 100 0 -1 0.000 0 1 0 7
-       0 0 1.00 60.00 120.00
-        3000 1275 3150 1275 3300 1275 3300 1125 3300 975 3450 975
-        3600 975
-        0.000 1.000 1.000 1.000 1.000 1.000 0.000
-4 0 0 100 0 0 10 0.0000 0 105 690 1275 750 Match List\001
-4 1 0 100 0 0 10 0.0000 0 105 780 825 525 Portal Table\001
-4 2 0 100 0 0 10 0.0000 0 135 825 4050 2025 Library Space\001
-4 0 0 100 0 0 10 0.0000 0 135 1110 4350 2175 Application Space\001
-4 1 0 100 0 0 10 0.0000 0 135 660 2850 1050 Descriptor\001
-4 1 0 100 0 0 10 0.0000 0 135 540 2850 825 Memory\001
-4 1 0 100 0 0 10 0.0000 0 135 765 3750 675 Event Queue\001
-4 1 0 100 0 0 10 0.0000 0 135 495 4650 675 Regions\001
-4 1 0 100 0 0 10 0.0000 0 135 540 4650 525 Memory\001
diff --git a/lustre/portals/doc/portals3.bib b/lustre/portals/doc/portals3.bib
deleted file mode 100644 (file)
index 323b99f..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-@Article{           Cplant,
-    title       = { {M}assively {P}arallel {C}omputing with
-                    {C}ommodity {C}omponents },
-    author      = { Ron Brightwell and David S. Greenberg and Arthur
-                    B. Maccabe and Rolf Riesen },
-    journal     = { Parallel Computing },
-    volume      = { 26 },
-    month       = { February },
-    pages       = { 243-266 },
-    year        = { 2000 }
-}
-
-@Manual{     Portals,
-    organization = { Sandia National Laboratories },
-    title        = { {P}uma {P}ortals },
-    note         = { http://www.cs.sandia.gov/puma/portals },
-    year         = { 1997 }
-}
-
-@Techreport{      VIA,
-  title         = { {V}irtual {I}nterface {A}rchitecture
-                    {S}pecification {V}ersion 1.0 }, 
-  author        = { {Compaq, Microsoft, and Intel} },
-  institution   = { Compaq, Microsoft, and Intel },
-  month         = { December },
-  year          = { 1997 }
-}
-
-@Techreport{      ST,
-  title         = { {I}nformation {T}echnology - {S}cheduled
-                  {T}ransfer {P}rotocol - {W}orking {D}raft 2.0 },
-  author        = { {Task Group of Technical Committee T11} },
-  institution   = { Accredited Standards Committee NCITS },
-  month         = { July },
-  year          = { 1998 }
-}
-
-@Manual{     TFLOPS,
-    organization = { Sandia National Laboratories },
-    title        = { ASCI Red },
-    note         = { http://www.sandia.gov/ASCI/TFLOP },
-    year         = { 1996 }
-}
-
-@Techreport{      GM,
-  title         = { The {GM} {M}essage {P}assing {S}ystem },
-  author         = { {Myricom, Inc.} },
-  institution    = { {Myricom, Inc.} },
-  year          = { 1997 },
-}
-
-@Article{           MPIstandard,
-    title        = { {MPI}: {A} {M}essage-{P}assing {I}nterface standard },
-    author       = { {Message Passing Interface Forum} },
-    journal      = { The International Journal of Supercomputer Applications
-                     and High Performance Computing },
-    volume       = { 8 },
-    year         = { 1994 }
-}
-
-@Inproceedings{    PumaOS,
-    author       = "Lance Shuler and Chu Jong and Rolf Riesen and
-                    David van Dresser and Arthur B. Maccabe and
-                    Lee Ann Fisk and T. Mack Stallcup",
-    booktitle    = "Proceeding of the 1995 Intel Supercomputer
-                    User's Group Conference",
-    title        = "The {P}uma Operating System for Massively Parallel Computers",
-    organization = "Intel Supercomputer User's Group",
-    year         = 1995
-}
-
-@InProceedings{   SUNMOS,
-author          = "Arthur B. Maccabe and Kevin S. McCurley and Rolf Riesen and
-                   Stephen R. Wheat",
-title           = "{SUNMOS} for the {Intel} {Paragon}: A Brief User's Guide",
-booktitle       = "Proceedings of the {Intel} Supercomputer Users' Group. 1994
-                   Annual North America Users' Conference.",
-year            = 1994,
-pages           = "245--251",
-month           = "June",
-location        = "ftp.cs.sandia.gov /pub/sunmos/papers/ISUG94-1.ps"
-}
-
-@InProceedings {   PumaMPI,
-    title        = { Design and Implementation of {MPI} on {P}uma Portals },
-    author       = { Ron Brightwell and Lance Shuler },
-    booktitle    = { Proceedings of the Second MPI Developer's Conference },
-    pages        = { 18-25 },
-    month        = { July },
-    year         = { 1996 }
-}
-
-@Inproceedings{     FM2,
-    author       = { Mario Lauria and Scott Pakin and Andrew Chien },
-    title        = { {E}fficient {L}ayering for {H}igh {S}peed
-                     {C}ommunication: {F}ast {M}essages 2.x },
-    Booktitle    = { Proceedings of the IEEE International Symposium
-                     on High Performance Distributed Computing },
-    year         = { 1998 }
-}
-
-@Manual {          CraySHMEM,
-    title        = "SHMEM Technical Note for C, SG-2516 2.3",
-    organization = "Cray Research, Inc.",
-    month        = "October",
-    year         = 1994
-}
-
-@Manual {          MPI2,
-    title        = "{MPI}-2: {E}xtensions to the {M}essage-{P}assing {I}nterface",
-    organization = "Message Passing Interface Forum",
-    note         = "http://www.mpi-forum.org/docs/mpi-20-html/mpi2-report.html",
-    month        = "July",
-    year         = 1997
-}
-
-@InProceedings {   PMMPI,
-    title        = { {The Design and Implementation of Zero Copy MPI Using
-                       Commodity Hardware with a High Performance Network} },
-    author       = { Francis O'Carroll and  Hiroshi Tezuka and Atsushi Hori
-                     and Yutaka Ishikawa  },
-    booktitle    = { Proceedings of the ICS },
-    year         = { 1998 }
-}
diff --git a/lustre/portals/doc/portals3.lyx b/lustre/portals/doc/portals3.lyx
deleted file mode 100644 (file)
index 8429280..0000000
+++ /dev/null
@@ -1,15944 +0,0 @@
-#LyX 1.2 created this file. For more info see http://www.lyx.org/
-\lyxformat 220
-\textclass report
-\begin_preamble
-\usepackage{fullpage}
-\renewenvironment{comment}%
-{\begin{quote}\textbf{Discussion}: \slshape}%
-{\end{quote}}
-\pagestyle{myheadings}
-\end_preamble
-\language american
-\inputencoding auto
-\fontscheme pslatex
-\graphics default
-\paperfontsize 10
-\spacing single 
-\papersize letterpaper
-\paperpackage a4
-\use_geometry 0
-\use_amsmath 0
-\use_natbib 0
-\use_numerical_citations 0
-\paperorientation portrait
-\secnumdepth 2
-\tocdepth 2
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\quotes_times 2
-\papercolumns 1
-\papersides 2
-\paperpagestyle headings
-
-\layout Title
-
-The Portals 3.2 Message Passing Interface 
-\newline 
- Revision 1.1
-\layout Author
-
-Ron Brightwell
-\begin_inset Foot
-collapsed true
-
-\layout Standard
-
-R.
- Brightwell and R.
- Riesen are with the Scalable Computing Systems Department, Sandia National
- Laboratories, P.O.
- Box 5800, Albuquerque, NM\SpecialChar ~
-\SpecialChar ~
-87111-1110, bright@cs.sandia.gov, rolf@cs.sandia.gov.
-\end_inset 
-
-, Arthur B.
- Maccabe
-\begin_inset Foot
-collapsed true
-
-\layout Standard
-
-A.
- B.
- Maccabe is with the Computer Science Department, University of New Mexico,
- Albuquerque, NM\SpecialChar ~
-\SpecialChar ~
-87131-1386, maccabe@cs.unm.edu.
-\end_inset 
-
-, Rolf Riesen and Trammell Hudson
-\layout Abstract
-
-This report presents a specification for the Portals 3.2 message passing
- interface.
- Portals 3.2 is intended to allow scalable, high-performance network communicatio
-n between nodes of a parallel computing system.
- Specifically, it is designed to support a parallel computing platform composed
- of clusters of commodity workstations connected by a commodity system area
- network fabric.
- In addition, Portals 3.2 is well suited to massively parallel processing
- and embedded systems.
- Portals 3.2 represents an adaption of the data movement layer developed
- for massively parallel processing platforms, such as the 4500-node Intel
- TeraFLOPS machine.
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-clearpage
-\backslash 
-pagenumbering{roman}
-\backslash 
-setcounter{page}{3}
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset LatexCommand \tableofcontents{}
-
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-cleardoublepage
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset FloatList figure
-
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-cleardoublepage
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset FloatList table
-
-\end_inset 
-
-
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-cleardoublepage
-\end_inset 
-
-
-\layout Chapter*
-
-Summary of Changes for Revision 1.1
-\layout Enumerate
-
-Updated version number to 3.2 throughout the document
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sub:PtlGetId}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_SEGV
-\family default 
- to error list for 
-\shape italic 
-PtlGetId
-\shape default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:meattach}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_ML_TOOLONG
-\family default 
- to error list for 
-\shape italic 
-PtlMEAttach
-\shape default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:meunlink}
-
-\end_inset 
-
-: removed text referring to a list of associated memory descriptors.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:mdfree}
-
-\end_inset 
-
-: added text to describe unlinking a free-floating memory descriptor.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:types}
-
-\end_inset 
-
-: added entry for 
-\family typewriter 
-ptl_seq_t
-\family default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:md-type}
-
-\end_inset 
-
-:
-\begin_deeper 
-\layout Enumerate
-
-added definition of 
-\family typewriter 
-max_offset
-\family default 
-.
-\layout Enumerate
-
-added text to clarify 
-\family typewriter 
-PTL_MD_MANAGE_REMOTE
-\family default 
-.
-\end_deeper 
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:mdattach}
-
-\end_inset 
-
-: modified text for 
-\family typewriter 
-unlink_op
-\family default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:niinit}
-
-\end_inset 
-
-: added text to clarify multiple calls to 
-\shape italic 
-PtlNIInit
-\shape default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:mdattach}
-
-\end_inset 
-
-: added text to clarify 
-\family typewriter 
-unlink_nofit
-\family default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:receiving}
-
-\end_inset 
-
-: removed text indicating that an MD will reject a message if the associated
- EQ is full.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:mdfree}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_MD_INUSE
-\family default 
- error code and text to indicate that only MDs with no pending operations
- can be unlinked.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:retcodes}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_MD_INUSE
-\family default 
- return code.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:event-type}
-
-\end_inset 
-
-: added user id field, MD handle field, and NI specific failure field to
- the 
-\family typewriter 
-ptl_event_t
-\family default 
- structure.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:types}
-
-\end_inset 
-
-: added 
-\family typewriter 
-ptl_ni_fail_t
-\family default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:event-type}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_EVENT_UNLINK
-\family default 
- event type.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:func}
-
-\end_inset 
-
-: removed 
-\shape slanted 
-PtlTransId
-\shape default 
-.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:meattach}
-
-\end_inset 
-
-, Section 
-\begin_inset LatexCommand \ref{sec:meinsert}
-
-\end_inset 
-
-, Section 
-\begin_inset LatexCommand \ref{sec:put}
-
-\end_inset 
-
-: listed allowable constants with relevant fields.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:func}
-
-\end_inset 
-
-: added 
-\shape italic 
-PtlMEAttachAny
-\shape default 
- function.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:retcodes}
-
-\end_inset 
-
-: added 
-\family typewriter 
-PTL_PT_FULL
-\family default 
- return code for 
-\shape italic 
-PtlMEAttachAny
-\shape default 
-.
-\layout Enumerate
-
-Table 
-\begin_inset LatexCommand \ref{tab:oconsts}
-
-\end_inset 
-
-: updated to reflect new event types.
-\layout Enumerate
-
-Section 
-\begin_inset LatexCommand \ref{sec:id-type}
-
-\end_inset 
-
-: added 
-\family typewriter 
-ptl_nid_t
-\family default 
-, 
-\family typewriter 
-ptl_pid_t
-\family default 
-, and 
-\family typewriter 
-ptl_uid_t
-\family default 
-.
-\layout Chapter*
-
-Summary of Changes for Version 3.1
-\layout Section*
-
-Thread Issues
-\layout Standard
-
-The most significant change to the interface from version 3.0 to 3.1 involves
- the clarification of how the interface interacts with multi-threaded applicatio
-ns.
- We adopted a generic thread model in which processes define an address
- space and threads share the address space.
- Consideration of the API in the light of threads lead to several clarifications
- throughout the document: 
-\layout Enumerate
-
-Glossary: 
-\begin_deeper 
-\layout Enumerate
-
-added a definition for 
-\emph on 
-thread
-\emph default 
-, 
-\layout Enumerate
-
-reworded the definition for 
-\emph on 
-process
-\emph default 
-.
-\end_deeper 
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:apiover}
-
-\end_inset 
-
-: added section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:threads}
-
-\end_inset 
-
- to describe the multi-threading model used by the Portals API.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:ptlinit}
-
-\end_inset 
-
-: 
-\emph on 
-PtlInit
-\emph default 
- must be called at least once and may be called any number of times.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:ptlfini}
-
-\end_inset 
-
-: 
-\emph on 
-PtlFini
-\emph default 
- should be called once as the process is terminating and not as each thread
- terminates.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:pid}
-
-\end_inset 
-
-: Portals does not define thread ids.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:ni}
-
-\end_inset 
-
-: network interfaces are associated with processes, not threads.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:niinit}
-
-\end_inset 
-
-: 
-\emph on 
-PtlNIInit
-\emph default 
- must be called at least once and may be called any number of times.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:eqget}
-
-\end_inset 
-
-: 
-\emph on 
-PtlEQGet
-\emph default 
- returns 
-\family typewriter 
-PTL_EQ_EMPTY
-\family default 
- if a thread is blocked on 
-\emph on 
-PtlEQWait
-\emph default 
-.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:eqwait}
-
-\end_inset 
-
-: waiting threads are awakened in FIFO order.
-\layout Standard
-
-Two functions, 
-\emph on 
-PtlNIBarrier
-\emph default 
- and 
-\emph on 
-PtlEQCount
-\emph default 
- were removed from the API.
-\emph on 
-PtlNIBarrier
-\emph default 
- was defined to block the calling process until all of the processes in
- the application group had invoked 
-\emph on 
-PtlNIBarrier
-\emph default 
-.
- We now consider this functionality, along with the concept of groups (see
- the discussion under 
-\begin_inset Quotes eld
-\end_inset 
-
-other changes
-\begin_inset Quotes erd
-\end_inset 
-
-), to be part of the runtime system, not part of the Portals API.
-\emph on 
-PtlEQCount
-\emph default 
- was defined to return the number of events in an event queue.
- Because external operations may lead to new events being added and other
- threads may remove events, the value returned by 
-\emph on 
-PtlEQCount
-\emph default 
- would have to be a hint about the number of events in the event queue.
-\layout Section*
-
-Handling small, unexpected messages
-\layout Standard
-
-Another set of changes relates to handling small unexpected messages in
- MPI.
- In designing version 3.0, we assumed that each unexpected message would
- be placed in a unique memory descriptor.
- To avoid the need to process a long list of memory descriptors, we moved
- the memory descriptors out of the match list and hung them off of a single
- match list entry.
- In this way, large unexpected messages would only encounter a single 
-\begin_inset Quotes eld
-\end_inset 
-
-short message
-\begin_inset Quotes erd
-\end_inset 
-
- match list entry before encountering the 
-\begin_inset Quotes eld
-\end_inset 
-
-long message
-\begin_inset Quotes erd
-\end_inset 
-
- match list entry.
- Experience with this strategy identified resource management problems with
- this approach.
- In particular, a long sequence of very short (or zero length) messages
- could quickly exhaust the memory descriptors constructed for handling unexpecte
-d messages.
- Our new strategy involves the use of several very large memory descriptors
- for small unexpected messages.
- Consecutive unexpected messages will be written into the first of these
- memory descriptors until the memory descriptor fills up.
- When the first of the 
-\begin_inset Quotes eld
-\end_inset 
-
-small memory
-\begin_inset Quotes erd
-\end_inset 
-
- descriptors fills up, it will be unlinked and subsequent short messages
- will be written into the next 
-\begin_inset Quotes eld
-\end_inset 
-
-short message
-\begin_inset Quotes erd
-\end_inset 
-
- memory descriptor.
- In this case, a 
-\begin_inset Quotes eld
-\end_inset 
-
-short message
-\begin_inset Quotes erd
-\end_inset 
-
- memory descriptor will be declared full when it does not have sufficient
- space for the largest small unexpected message.
-\layout Standard
-
-This lead to two significant changes.
- First, each match list entry now has a single memory descriptor rather
- than a list of memory descriptors.
- Second, in addition to exceeding the operation threshold, a memory descriptor
- can be unlinked when the local offset exceeds a specified value.
- These changes have lead to several changes in this document: 
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{subsec:paddress}
-
-\end_inset 
-
-: 
-\begin_deeper 
-\layout Enumerate
-
-removed references to the memory descriptor list, 
-\layout Enumerate
-
-changed the portals address translation description to indicate that unlinking
- a memory descriptor implies unlinking the associated match list entry--match
- list entries can no longer be unlinked independently from the memory descriptor.
-\end_deeper 
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:meattach}
-
-\end_inset 
-
-: 
-\begin_deeper 
-\layout Enumerate
-
-removed unlink from argument list, 
-\layout Enumerate
-
-removed description of 
-\family typewriter 
-ptl_unlink
-\family default 
- type, 
-\layout Enumerate
-
-changed wording of the error condition when the Portal table index already
- has an associated match list.
-\end_deeper 
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:meinsert}
-
-\end_inset 
-
-: removed unlink from argument list.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:md-type}
-
-\end_inset 
-
-: added 
-\family typewriter 
-max_offset
-\family default 
-.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdattach}
-
-\end_inset 
-
-: 
-\begin_deeper 
-\layout Enumerate
-
-added description of 
-\family typewriter 
-ptl_unlink
-\family default 
- type, 
-\layout Enumerate
-
-removed reference to memory descriptor lists, 
-\layout Enumerate
-
-changed wording of the error condition when match list entry already has
- an associated memory descriptor, 
-\layout Enumerate
-
-changed the description of the 
-\family typewriter 
-unlink
-\family default 
- argument.
-\end_deeper 
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:md}
-
-\end_inset 
-
-: removed 
-\family typewriter 
-PtlMDInsert
-\family default 
- operation.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdbind}
-
-\end_inset 
-
-: removed references to memory descriptor list.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdfree}
-
-\end_inset 
-
-: removed reference to memory descriptor list.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:summary}
-
-\end_inset 
-
-: removed references to PtlMDInsert.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:semantics}
-
-\end_inset 
-
-: removed reference to memory descriptor list.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:exmpi}
-
-\end_inset 
-
-: revised the MPI example to reflect the changes to the interface.
-\layout Standard
-
-Several changes have been made to improve the general documentation of the
- interface.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:handle-type}
-
-\end_inset 
-
-: documented the special value 
-\family typewriter 
-PTL_EQ_NONE
-\family default 
-.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:id-type}
-
-\end_inset 
-
-: documented the special value 
-\family typewriter 
-PTL_ID_ANY
-\family default 
-.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdbind}
-
-\end_inset 
-
-: documented the return value 
-\family typewriter 
-PTL_INV_EQ
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdupdate}
-
-\end_inset 
-
-: clarified the description of the 
-\emph on 
-PtlMDUpdate
-\emph default 
- function.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:implvals}
-
-\end_inset 
-
-: introduced a new section to document the implementation defined values.
-\layout Enumerate
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:summary}
-
-\end_inset 
-
-: modified Table\SpecialChar ~
-
-\begin_inset LatexCommand \ref{tab:oconsts}
-
-\end_inset 
-
- to indicate where each constant is introduced and where it is used.
-\layout Section*
-
-Other changes
-\layout Subsection*
-
-Implementation defined limits (Section 
-\begin_inset LatexCommand \ref{sec:niinit}
-
-\end_inset 
-
-)
-\layout Standard
-
-The earlier version provided implementation defined limits for the maximum
- number of match entries, the maximum number of memory descriptors, etc.
- Rather than spanning the entire implementation, these limits are now associated
- with individual network interfaces.
-\layout Subsection*
-
-Added User Ids (Section 
-\begin_inset LatexCommand \ref{sec:uid}
-
-\end_inset 
-
-)
-\layout Standard
-
-Group Ids had been used to simplify access control entries.
- In particular, a process could allow access for all of the processes in
- a group.
- User Ids have been introduced to regain this functionality.
- We use user ids to fill this role.
-\layout Subsection*
-
-Removed Group Ids and Rank Ids (Section 
-\begin_inset LatexCommand \ref{sec:pid}
-
-\end_inset 
-
-)
-\layout Standard
-
-The earlier version of Portals had two forms for addressing processes: <node
- id, process id> and <group id, rank id>.
- A process group was defined as the collection processes created during
- application launch.
- Each process in the group was given a unique rank id in the range 0 to
-\begin_inset Formula $n-1$
-\end_inset 
-
- where 
-\begin_inset Formula $n$
-\end_inset 
-
- was the number of processes in the group.
- We removed groups because they are better handled in the runtime system.
-\layout Subsection*
-
-Match lists (Section 
-\begin_inset LatexCommand \ref{sec:meattach}
-
-\end_inset 
-
-)
-\layout Standard
-
-It is no longer illegal to have an existing match entry when calling PtlMEAttach.
- A position argument was added to the list of arguments supplied to 
-\emph on 
-PtlMEAttach
-\emph default 
- to specify whether the new match entry is prepended or appended to the
- existing list.
- If there is no existing match list, the position argument is ignored.
-\layout Subsection*
-
-Unlinking Memory Descriptors (Section 
-\begin_inset LatexCommand \ref{sec:md}
-
-\end_inset 
-
-)
-\layout Standard
-
-Previously, a memory descriptor could be unlinked if the offset exceeded
- a threshold upon the completion of an operation.
- In this version, the unlinking is delayed until there is a matching operation
- which requires more memory than is currently available in the descriptor.
- In addition to changes in section, this lead to a revision of Figure\SpecialChar ~
-
-\begin_inset LatexCommand \ref{fig:flow}
-
-\end_inset 
-
-.
-\layout Subsection*
-
-Split Phase Operations and Events (Section 
-\begin_inset LatexCommand \ref{sec:eq}
-
-\end_inset 
-
-)
-\layout Standard
-
-Previously, there were five types of events: 
-\family typewriter 
-PTL_EVENT_PUT
-\family default 
-, 
-\family typewriter 
-PTL_EVENT_GET
-\family default 
-, 
-\family typewriter 
-PTL_EVENT_REPLY
-\family default 
-, 
-\family typewriter 
-PTL_EVENT_SENT
-\family default 
-, and 
-\family typewriter 
-PTL_EVENT_ACK.
-\family default 
-The first four of these reflected the completion of potentially long operations.
- We have introduced new event types to reflect the fact that long operations
- have a distinct starting point and a distinct completion point.
- Moreover, the completion may be successful or unsuccessful.
-\layout Standard
-
-In addition to providing a mechanism for reporting failure to higher levels
- of software, this split provides an opportunity for for improved ordering
- semantics.
- Previously, if one process intiated two operations (e.g., two put operations)
- on a remote process, these operations were guaranteed to complete in the
- same order that they were initiated.
- Now, we only guarantee that the initiation events are delivered in the
- same order.
- In particular, the operations do not need to complete in the order that
- they were intiated.
-\layout Subsection*
-
-Well known proces ids (Section 
-\begin_inset LatexCommand \ref{sec:niinit}
-
-\end_inset 
-
-)
-\layout Standard
-
-To support the notion of 
-\begin_inset Quotes eld
-\end_inset 
-
-well known process ids,
-\begin_inset Quotes erd
-\end_inset 
-
- we added a process id argument to the arguments for PtlNIInit.
-\layout Chapter*
-
-Glossary
-\layout Description
-
-API Application Programming Interface.
- A definition of the functions and semantics provided by library of functions.
-\layout Description
-
-Initiator A 
-\emph on 
-process
-\emph default 
- that initiates a message operation.
-\layout Description
-
-Message An application-defined unit of data that is exchanged between 
-\emph on 
-processes
-\emph default 
-.
-\layout Description
-
-Message\SpecialChar ~
-Operation Either a put operation, which writes data, or a get operation,
- which reads data.
-\layout Description
-
-Network A network provides point-to-point communication between 
-\emph on 
-nodes
-\emph default 
-.
- Internally, a network may provide multiple routes between endpoints (to
- improve fault tolerance or to improve performance characteristics); however,
- multiple paths will not be exposed outside of the network.
-\layout Description
-
-Node A node is an endpoint in a 
-\emph on 
-network
-\emph default 
-.
- Nodes provide processing capabilities and memory.
- A node may provide multiple processors (an SMP node) or it may act as a
-\emph on 
-gateway
-\emph default 
- between networks.
-\layout Description
-
-Process A context of execution.
- A process defines a virtual memory (VM) context.
- This context is not shared with other processes.
- Several threads may share the VM context defined by a process.
-\layout Description
-
-Target A 
-\emph on 
-process
-\emph default 
- that is acted upon by a message operation.
-\layout Description
-
-Thread A context of execution that shares a VM context with other threads.
-\layout Standard
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-
-\backslash 
-cleardoublepage
-\layout Standard
-
-\backslash 
-setcounter{page}{1}
-\backslash 
-pagenumbering{arabic}
-\end_inset 
-
-
-\layout Chapter
-
-Introduction
-\begin_inset LatexCommand \label{sec:intro}
-
-\end_inset 
-
-
-\layout Section
-
-Overview
-\layout Standard
-
-This document describes an application programming interface for message
- passing between nodes in a system area network.
- The goal of this interface is to improve the scalability and performance
- of network communication by defining the functions and semantics of message
- passing required for scaling a parallel computing system to ten thousand
- nodes.
- This goal is achieved by providing an interface that will allow a quality
- implementation to take advantage of the inherently scalable design of Portals.
-\layout Standard
-
-This document is divided into several sections: 
-\layout Description
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:intro}
-
-\end_inset 
-
----Introduction This section describes the purpose and scope of the Portals
- API.
-\layout Description
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:apiover}
-
-\end_inset 
-
----An\SpecialChar ~
-Overview\SpecialChar ~
-of\SpecialChar ~
-the\SpecialChar ~
-Portals\SpecialChar ~
-3.1\SpecialChar ~
-API This section gives a brief overview of the
- Portals API.
- The goal is to introduce the key concepts and terminology used in the descripti
-on of the API.
-\layout Description
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:api}
-
-\end_inset 
-
----The\SpecialChar ~
-Portals\SpecialChar ~
-3.2\SpecialChar ~
-API This section describes the functions and semantics of
- the Portals application programming interface.
-\layout Description
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:semantics}
-
-\end_inset 
-
---The\SpecialChar ~
-Semantics\SpecialChar ~
-of\SpecialChar ~
-Message\SpecialChar ~
-Transmission This section describes the semantics
- of message transmission.
- In particular, the information transmitted in each type of message and
- the processing of incoming messages.
-\layout Description
-
-Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:examples}
-
-\end_inset 
-
----Examples This section presents several examples intended to illustrates
- the use of the Portals API.
-\layout Section
-
-Purpose
-\layout Standard
-
-Existing message passing technologies available for commodity cluster networking
- hardware do not meet the scalability goals required by the Cplant\SpecialChar ~
-
-\begin_inset LatexCommand \cite{Cplant}
-
-\end_inset 
-
- project at Sandia National Laboratories.
- The goal of the Cplant project is to construct a commodity cluster that
- can scale to the order of ten thousand nodes.
- This number greatly exceeds the capacity for which existing message passing
- technologies have been designed and implemented.
-\layout Standard
-
-In addition to the scalability requirements of the network, these technologies
- must also be able to support a scalable implementation of the Message Passing
- Interface (MPI)\SpecialChar ~
-
-\begin_inset LatexCommand \cite{MPIstandard}
-
-\end_inset 
-
- standard, which has become the 
-\shape italic 
-de facto
-\shape default 
- standard for parallel scientific computing.
- While MPI does not impose any scalability limitations, existing message
- passing technologies do not provide the functionality needed to allow implement
-ations of MPI to meet the scalability requirements of Cplant.
-\layout Standard
-
-The following are properties of a network architecture that do not impose
- any inherent scalability limitations: 
-\layout Itemize
-
-Connectionless - Many connection-oriented architectures, such as VIA\SpecialChar ~
-
-\begin_inset LatexCommand \cite{VIA}
-
-\end_inset 
-
- and TCP/IP sockets, have limitations on the number of peer connections
- that can be established.
-\layout Itemize
-
-Network independence - Many communication systems depend on the host processor
- to perform operations in order for messages in the network to be consumed.
- Message consumption from the network should not be dependent on host processor
- activity, such as the operating system scheduler or user-level thread scheduler.
-\layout Itemize
-
-User-level flow control - Many communication systems manage flow control
- internally to avoid depleting resources, which can significantly impact
- performance as the number of communicating processes increases.
-\layout Itemize
-
-OS Bypass - High performance network communication should not involve memory
- copies into or out of a kernel-managed protocol stack.
-\layout Standard
-
-The following are properties of a network architecture that do not impose
- scalability limitations for an implementation of MPI:
-\layout Itemize
-
-Receiver-managed - Sender-managed message passing implementations require
- a persistent block of memory to be available for every process, requiring
- memory resources to increase with job size and requiring user-level flow
- control mechanisms to manage these resources.
-\layout Itemize
-
-User-level Bypass - While OS Bypass is necessary for high-performance, it
- alone is not sufficient to support the Progress Rule of MPI asynchronous
- operations.
-\layout Itemize
-
-Unexpected messages - Few communication systems have support for receiving
- messages for which there is no prior notification.
- Support for these types of messages is necessary to avoid flow control
- and protocol overhead.
-\layout Section
-
-Background
-\layout Standard
-
-Portals was originally designed for and implemented on the nCube machine
- as part of the SUNMOS (Sandia/UNM OS)\SpecialChar ~
-
-\begin_inset LatexCommand \cite{SUNMOS}
-
-\end_inset 
-
- and Puma\SpecialChar ~
-
-\begin_inset LatexCommand \cite{PumaOS}
-
-\end_inset 
-
- lightweight kernel development projects.
- Portals went through two design phases, the latter of which is used on
- the 4500-node Intel TeraFLOPS machine\SpecialChar ~
-
-\begin_inset LatexCommand \cite{TFLOPS}
-
-\end_inset 
-
-.
- Portals have been very successful in meeting the needs of such a large
- machine, not only as a layer for a high-performance MPI implementation\SpecialChar ~
-
-\begin_inset LatexCommand \cite{PumaMPI}
-
-\end_inset 
-
-, but also for implementing the scalable run-time environment and parallel
- I/O capabilities of the machine.
-\layout Standard
-
-The second generation Portals implementation was designed to take full advantage
- of the hardware architecture of large MPP machines.
- However, efforts to implement this same design on commodity cluster technology
- identified several limitations, due to the differences in network hardware
- as well as to shortcomings in the design of Portals.
-\layout Section
-
-Scalability
-\layout Standard
-
-The primary goal in the design of Portals is scalability.
- Portals are designed specifically for an implementation capable of supporting
- a parallel job running on tens of thousands of nodes.
- Performance is critical only in terms of scalability.
- That is, the level of message passing performance is characterized by how
- far it allows an application to scale and not by how it performs in micro-bench
-marks (e.g., a two node bandwidth or latency test).
-\layout Standard
-
-The Portals API is designed to allow for scalability, not to guarantee it.
- Portals cannot overcome the shortcomings of a poorly designed application
- program.
- Applications that have inherent scalability limitations, either through
- design or implementation, will not be transformed by Portals into scalable
- applications.
- Scalability must be addressed at all levels.
- Portals do not inhibit scalability, but do not guarantee it either.
-\layout Standard
-
-To support scalability, the Portals interface maintains a minimal amount
- of state.
- Portals provide reliable, ordered delivery of messages between pairs of
- processes.
- They are connectionless: a process is not required to explicitly establish
- a point-to-point connection with another process in order to communicate.
- Moreover, all buffers used in the transmission of messages are maintained
- in user space.
- The target process determines how to respond to incoming messages, and
- messages for which there are no buffers are discarded.
-\layout Section
-
-Communication Model
-\layout Standard
-
-Portals combine the characteristics of both one-side and two-sided communication.
- They define a 
-\begin_inset Quotes eld
-\end_inset 
-
-matching put
-\begin_inset Quotes erd
-\end_inset 
-
- operation and a 
-\begin_inset Quotes eld
-\end_inset 
-
-matching get
-\begin_inset Quotes erd
-\end_inset 
-
- operation.
- The destination of a put (or send) is not an explicit address; instead,
- each message contains a set of match bits that allow the receiver to determine
- where incoming messages should be placed.
- This flexibility allows Portals to support both traditional one-sided operation
-s and two-sided send/receive operations.
-\layout Standard
-
-Portals allows the target to determine whether incoming messages are acceptable.
- A target process can choose to accept message operations from any specific
- process or can choose to ignore message operations from any specific process.
-\layout Section
-
-Zero Copy, OS Bypass and Application Bypass
-\layout Standard
-
-In traditional system architectures, network packets arrive at the network
- interface card (NIC), are passed through one or more protocol layers in
- the operating system, and eventually copied into the address space of the
- application.
- As network bandwidth began to approach memory copy rates, reduction of
- memory copies became a critical concern.
- This concern lead to the development of zero-copy message passing protocols
- in which message copies are eliminated or pipelined to avoid the loss of
- bandwidth.
-\layout Standard
-
-A typical zero-copy protocol has the NIC generate an interrupt for the CPU
- when a message arrives from the network.
- The interrupt handler then controls the transfer of the incoming message
- into the address space of the appropriate application.
- The interrupt latency, the time from the initiation of an interrupt until
- the interrupt handler is running, is fairly significant.
- To avoid this cost, some modern NICs have processors that can be programmed
- to implement part of a message passing protocol.
- Given a properly designed protocol, it is possible to program the NIC to
- control the transfer of incoming messages, without needing to interrupt
- the CPU.
- Because this strategy does not need to involve the OS on every message
- transfer, it is frequently called 
-\begin_inset Quotes eld
-\end_inset 
-
-OS Bypass.
-\begin_inset Quotes erd
-\end_inset 
-
- ST\SpecialChar ~
-
-\begin_inset LatexCommand \cite{ST}
-
-\end_inset 
-
-, VIA\SpecialChar ~
-
-\begin_inset LatexCommand \cite{VIA}
-
-\end_inset 
-
-, FM\SpecialChar ~
-
-\begin_inset LatexCommand \cite{FM2}
-
-\end_inset 
-
-, GM\SpecialChar ~
-
-\begin_inset LatexCommand \cite{GM}
-
-\end_inset 
-
-, and Portals are examples of OS Bypass protocols.
-\layout Standard
-
-Many protocols that support OS Bypass still require that the application
- actively participate in the protocol to ensure progress.
- As an example, the long message protocol of PM requires that the application
- receive and reply to a request to put or get a long message.
- This complicates the runtime environment, requiring a thread to process
- incoming requests, and significantly increases the latency required to
- initiate a long message protocol.
- The Portals message passing protocol does not require activity on the part
- of the application to ensure progress.
- We use the term 
-\begin_inset Quotes eld
-\end_inset 
-
-Application Bypass
-\begin_inset Quotes erd
-\end_inset 
-
- to refer to this aspect of the Portals protocol.
-\layout Section
-
-Faults 
-\layout Standard
-
-Given the number of components that we are dealing with and the fact that
- we are interested in supporting applications that run for very long times,
- failures are inevitable.
- The Portals API recognizes that the underlying transport may not be able
- to successfully complete an operation once it has been initiated.
- This is reflected in the fact that the Portals API reports three types
- of events: events indicating the initiation of an operation, events indicating
- the successful completion of an operation, and events indicating the unsuccessf
-ul completion of an operation.
- Every initiation event is eventually followed by a successful completion
- event or an unsuccessful completion event.
-\layout Standard
-
-Between the time an operation is started and the time that the operation
- completes (successfully or unsuccessfully), any memory associated with
- the operation should be considered volatile.
- That is, the memory may be changed in unpredictable ways while the operation
- is progressing.
- Once the operation completes, the memory associated with the operation
- will not be subject to further modification (from this operation).
- Notice that unsuccessful operations may alter memory in an essentially
- unpredictable fashion.
-\layout Chapter
-
-An Overview of the Portals API
-\begin_inset LatexCommand \label{sec:apiover}
-
-\end_inset 
-
-
-\layout Standard
-
-In this section, we give a conceptual overview of the Portals API.
- The goal is to provide a context for understanding the detailed description
- of the API presented in the next section.
-\layout Section
-
-Data Movement
-\begin_inset LatexCommand \label{sec:dmsemantics}
-
-\end_inset 
-
-
-\layout Standard
-
-A Portal represents an opening in the address space of a process.
- Other processes can use a Portal to read (get) or write (put) the memory
- associated with the portal.
- Every data movement operation involves two processes, the 
-\series bold 
-initiator
-\series default 
- and the 
-\series bold 
-target
-\series default 
-.
- The initiator is the process that initiates the data movement operation.
- The target is the process that responds to the operation by either accepting
- the data for a put operation, or replying with the data for a get operation.
-\layout Standard
-
-In this discussion, activities attributed to a process may refer to activities
- that are actually performed by the process or 
-\emph on 
-on behalf of the process
-\emph default 
-.
- The inclusiveness of our terminology is important in the context of 
-\emph on 
-application bypass
-\emph default 
-.
- In particular, when we note that the target sends a reply in the case of
- a get operation, it is possible that reply will be generated by another
- component in the system, bypassing the application.
-\layout Standard
-
-Figures\SpecialChar ~
-
-\begin_inset LatexCommand \ref{fig:put}
-
-\end_inset 
-
- and 
-\begin_inset LatexCommand \ref{fig:get}
-
-\end_inset 
-
- present graphical interpretations of the Portal data movement operations:
- put and get.
- In the case of a put operation, the initiator sends a put request message
- containing the data to the target.
- The target translates the Portal addressing information in the request
- using its local Portal structures.
- When the request has been processed, the target optionally sends an acknowledge
-ment message.
-\layout Standard
-
-
-\begin_inset Float figure
-placement htbp
-wide false
-collapsed false
-
-\layout Standard
-\align center 
-
-\begin_inset Graphics FormatVersion 1
-       filename put.eps
-       display color
-       size_type 0
-       rotateOrigin center
-       lyxsize_type 1
-       lyxwidth 218pt
-       lyxheight 119pt
-\end_inset 
-
-
-\layout Caption
-
-Portal Put (Send)
-\begin_inset LatexCommand \label{fig:put}
-
-\end_inset 
-
-
-\end_inset 
-
-
-\layout Standard
-
-In the case of a get operation, the initiator sends a get request to the
- target.
- As with the put operation, the target translates the Portal addressing
- information in the request using its local Portal structures.
- Once it has translated the Portal addressing information, the target sends
- a reply that includes the requested data.
-\layout Standard
-
-
-\begin_inset Float figure
-placement htbp
-wide false
-collapsed false
-
-\layout Standard
-\align center 
-
-\begin_inset Graphics FormatVersion 1
-       filename get.eps
-       display color
-       size_type 0
-       rotateOrigin center
-       lyxsize_type 1
-       lyxwidth 218pt
-       lyxheight 119pt
-\end_inset 
-
-
-\layout Caption
-
-Portal Get
-\begin_inset LatexCommand \label{fig:get}
-
-\end_inset 
-
-
-\end_inset 
-
-
-\layout Standard
-
-We should note that Portal address translations are only performed on nodes
- that respond to operations initiated by other nodes.
- Acknowledgements and replies to get operations bypass the portals address
- translation structures.
-\layout Section
-
-Portal Addressing
-\begin_inset LatexCommand \label{subsec:paddress}
-
-\end_inset 
-
-
-\layout Standard
-
-One-sided data movement models (e.g., shmem\SpecialChar ~
-
-\begin_inset LatexCommand \cite{CraySHMEM}
-
-\end_inset 
-
-, ST\SpecialChar ~
-
-\begin_inset LatexCommand \cite{ST}
-
-\end_inset 
-
-, MPI-2\SpecialChar ~
-
-\begin_inset LatexCommand \cite{MPI2}
-
-\end_inset 
-
-) typically use a triple to address memory on a remote node.
- This triple consists of a process id, memory buffer id, and offset.
- The process id identifies the target process, the memory buffer id specifies
- the region of memory to be used for the operation, and the offset specifies
- an offset within the memory buffer.
-\layout Standard
-
-In addition to the standard address components (process id, memory buffer
- id, and offset), a Portal address includes a set of match bits.
- This addressing model is appropriate for supporting one-sided operations
- as well as traditional two-sided message passing operations.
- Specifically, the Portals API provides the flexibility needed for an efficient
- implementation of MPI-1, which defines two-sided operations with one-sided
- completion semantics.
-\layout Standard
-
-Figure\SpecialChar ~
-
-\begin_inset LatexCommand \ref{fig:portals}
-
-\end_inset 
-
- presents a graphical representation of the structures used by a target
- in the interpretation of a Portal address.
- The process id is used to route the message to the appropriate node and
- is not reflected in this diagram.
- The memory buffer id, called the 
-\series bold 
-portal id
-\series default 
-, is used as an index into the Portal table.
- Each element of the Portal table identifies a match list.
- Each element of the match list specifies two bit patterns: a set of 
-\begin_inset Quotes eld
-\end_inset 
-
-don't care
-\begin_inset Quotes erd
-\end_inset 
-
- bits, and a set of 
-\begin_inset Quotes eld
-\end_inset 
-
-must match
-\begin_inset Quotes erd
-\end_inset 
-
- bits.
- In addition to the two sets of match bits, each match list element has
- at most one memory descriptor.
- Each memory descriptor identifies a memory region and an optional event
- queue.
- The memory region specifies the memory to be used in the operation and
- the event queue is used to record information about these operations.
-\layout Standard
-
-
-\begin_inset Float figure
-placement htbp
-wide false
-collapsed false
-
-\layout Standard
-\align center 
-
-\begin_inset Graphics FormatVersion 1
-       filename portals.eps
-       display color
-       size_type 0
-       rotateOrigin center
-       lyxsize_type 1
-       lyxwidth 305pt
-       lyxheight 106pt
-\end_inset 
-
-
-\layout Caption
-
-Portal Addressing Structures
-\begin_inset LatexCommand \label{fig:portals}
-
-\end_inset 
-
-
-\end_inset 
-
-
-\layout Standard
-
-Figure\SpecialChar ~
-
-\begin_inset LatexCommand \ref{fig:flow}
-
-\end_inset 
-
- illustrates the steps involved in translating a Portal address, starting
- from the first element in a match list.
- If the match criteria specified in the match list entry are met and the
- memory descriptor list accepts the operation
-\begin_inset Foot
-collapsed true
-
-\layout Standard
-
-Memory descriptors can reject operations because a threshold has been exceeded
- or because the memory region does not have sufficient space, see Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:md}
-
-\end_inset 
-
-
-\end_inset 
-
-, the operation (put or get) is performed using the memory region specified
- in the memory descriptor.
- If the memory descriptor specifies that it is to be unlinked when a threshold
- has been exceeded, the match list entry is removed from the match list
- and the resources associated with the memory descriptor and match list
- entry are reclaimed.
- Finally, if there is an event queue specified in the memory descriptor,
- the operation is logged in the event queue.
-\layout Standard
-
-
-\begin_inset Float figure
-placement htbp
-wide false
-collapsed false
-
-\layout Standard
-\align center 
-
-\begin_inset Graphics FormatVersion 1
-       filename flow_new.eps
-       display color
-       size_type 0
-       rotateOrigin center
-       lyxsize_type 1
-       lyxwidth 447pt
-       lyxheight 282pt
-\end_inset 
-
-
-\layout Caption
-
-Portals Address Translation
-\begin_inset LatexCommand \label{fig:flow}
-
-\end_inset 
-
-
-\end_inset 
-
-
-\layout Standard
-
-If the match criteria specified in the match list entry are not met, or
- there is no memory descriptor associated with the match list entry, or
- the memory descriptor associated with the match list entry rejects the
- operation, the address translation continues with the next match list entry.
- If the end of the match list has been reached, the address translation
- is aborted and the incoming requested is discarded.
-\layout Section
-
-Access Control
-\layout Standard
-
-A process can control access to its portals using an access control list.
- Each entry in the access control list specifies a process id and a Portal
- table index.
- The access control list is actually an array of entries.
- Each incoming request includes an index into the access control list (i.e.,
- a 
-\begin_inset Quotes eld
-\end_inset 
-
-cookie
-\begin_inset Quotes erd
-\end_inset 
-
- or hint).
- If the id of the process issuing the request doesn't match the id specified
- in the access control list entry or the Portal table index specified in
- the request doesn't match the Portal table index specified in the access
- control list entry, the request is rejected.
- Process identifiers and Portal table indexes may include wild card values
- to increase the flexibility of this mechanism.
-\layout Standard
-
-Two aspects of this design merit further discussion.
- First, the model assumes that the information in a message header, the
- sender's id in particular, is trustworthy.
- In most contexts, we assume that the entity that constructs the header
- is trustworthy; however, using cryptographic techniques, we could easily
- devise a protocol that would ensure the authenticity of the sender.
-\layout Standard
-
-Second, because the access check is performed by the receiver, it is possible
- that a malicious process will generate thousands of messages that will
- be denied by the receiver.
- This could saturate the network and/or the receiver, resulting in a 
-\emph on 
-denial of service
-\emph default 
- attack.
- Moving the check to the sender using capabilities, would remove the potential
- for this form of attack.
- However, the solution introduces the complexities of capability management
- (exchange of capabilities, revocation, protections, etc).
-\layout Section
-
-Multi-threaded Applications
-\begin_inset LatexCommand \label{sec:threads}
-
-\end_inset 
-
-\layout Standard
-
-The Portals API supports a generic view of multi-threaded applications.
- From the perspective of the Portals API, an application program is defined
- by a set of processes.
- Each process defines a unique address space.
- The Portals API defines access to this address space from other processes
- (using portals addressing and the data movement operations).
- A process may have one or more 
-\emph on 
-threads
-\emph default 
- executing in its address space.
-\layout Standard
-
-With the exception of 
-\emph on 
-PtlEQWait
-\emph default 
- every function in the Portals API is non-blocking and atomic with respect
- to both other threads and external operations that result from data movement
- operations.
- While individual operations are atomic, sequences of these operations may
- be interleaved between different threads and with external operations.
- The Portals API does not provide any mechanisms to control this interleaving.
- It is expected that these mechanisms will be provided by the API used to
- create threads.
-\layout Chapter
-
-The Portals API
-\begin_inset LatexCommand \label{sec:api}
-
-\end_inset 
-
-
-\layout Section
-
-Naming Conventions
-\begin_inset LatexCommand \label{sec:conv}
-
-\end_inset 
-
-
-\layout Standard
-
-The Portals API defines two types of entities: functions and types.
- Function always start with 
-\emph on 
-Ptl
-\emph default 
- and use mixed upper and lower case.
- When used in the body of this report, function names appear in italic face,
- e.g., 
-\emph on 
-PtlInit
-\emph default 
-.
- The functions associated with an object type will have names that start
- with 
-\emph on 
-Ptl
-\emph default 
-, followed by the two letter object type code shown in Table\SpecialChar ~
-
-\begin_inset LatexCommand \ref{tab:objcodes}
-
-\end_inset 
-
-.
- As an example, the function 
-\emph on 
-PtlEQAlloc
-\emph default 
- allocates resources for an event queue.
-\layout Standard
-
-
-\begin_inset Float table
-placement htbp
-wide false
-collapsed false
-
-\layout Caption
-
-Object Type Codes
-\begin_inset LatexCommand \label{tab:objcodes}
-
-\end_inset 
-
-
-\begin_inset ERT
-status Collapsed
-
-\layout Standard
-\backslash 
-medskip
-\newline 
-  
-\end_inset 
-
-
-\layout Standard
-\align center 
-
-\size small 
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="5" columns="3">
-<features firstHeadEmpty="true">
-<column alignment="left" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="0pt">
-<row bottomline="true">
-<cell alignment="left" valignment="top" bottomline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-\emph on 
-xx
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" bottomline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Name 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" bottomline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Section 
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-EQ 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Event Queue 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-\begin_inset LatexCommand \ref{sec:eq}
-
-\end_inset 
-
-
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- MD 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Memory Descriptor 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-\begin_inset LatexCommand \ref{sec:md}
-
-\end_inset 
-
-
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- ME 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Match list Entry 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-\begin_inset LatexCommand \ref{sec:me}
-
-\end_inset 
-
-
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- NI 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
- Network Interface 
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-\begin_inset LatexCommand \ref{sec:ni}
-
-\end_inset 
-
-
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\end_inset 
-
-
-\layout Standard
-
-Type names use lower case with underscores to separate words.
- Each type name starts with 
-\family typewriter 
-ptl
-\family default 
-_ and ends with 
-\family typewriter 
-_t
-\family default 
-.
- When used in the body of this report, type names appear in a fixed font,
- e.g., 
-\family typewriter 
-ptl_match_bits_t
-\family default 
-.
-\layout Standard
-
-Names for constants use upper case with underscores to separate words.
- Each constant name starts with 
-\family typewriter 
-PTL_
-\family default 
-.
- When used in the body of this report, type names appear in a fixed font,
- e.g., 
-\family typewriter 
-PTL_OK
-\family default 
-.
-\layout Section
-
-Base Types
-\layout Standard
-
-The Portals API defines a variety of base types.
- These types represent a simple renaming of the base types provided by the
- C programming language.
- In most cases these new type names have been introduced to improve type
- safety and to avoid issues arising from differences in representation sizes
- (e.g., 16-bit or 32-bit integers).
-\layout Subsection
-
-Sizes
-\begin_inset LatexCommand \label{sec:size-t}
-
-\end_inset 
-
-\layout Standard
-
-The type 
-\family typewriter 
-ptl_size_t
-\family default 
- is an unsigned 64-bit integral type used for representing sizes.
-\layout Subsection
-
-Handles
-\begin_inset LatexCommand \label{sec:handle-type}
-
-\end_inset 
-
-\layout Standard
-
-Objects maintained by the API are accessed through handles.
- Handle types have names of the form 
-\family typewriter 
-ptl_handle_
-\emph on 
-xx
-\emph default 
-_t
-\family default 
-, where 
-\emph on 
-xx
-\emph default 
- is one of the two letter object type codes shown in Table\SpecialChar ~
-
-\begin_inset LatexCommand \ref{tab:objcodes}
-
-\end_inset 
-
-.
- For example, the type 
-\family typewriter 
-ptl_handle_ni_t
-\family default 
- is used for network interface handles.
-\layout Standard
-
-Each type of object is given a unique handle type to enhance type checking.
- The type, 
-\family typewriter 
-ptl_handle_any_t
-\family default 
-, can be used when a generic handle is needed.
- Every handle value can be converted into a value of type 
-\family typewriter 
-ptl_handle_any_t
-\family default 
- without loss of information.
-\layout Standard
-
-Handles are not simple values.
- Every portals object is associated with a specific network interface and
- an identifier for this interface (along with an object identifier) is part
- of the handle for the object.
-\layout Standard
-
-The special value 
-\family typewriter 
-PTL_EQ_NONE
-\family default 
-, of type 
-\family typewriter 
-ptl_handle_eq_t
-\family default 
-, is used to indicate the absence of an event queue.
- See sections 
-\begin_inset LatexCommand \ref{sec:mdfree}
-
-\end_inset 
-
- and\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:mdupdate}
-
-\end_inset 
-
- for uses of this value.
-\layout Subsection
-
-Indexes
-\begin_inset LatexCommand \label{sec:index-type}
-
-\end_inset 
-
-\layout Standard
-
-The types 
-\family typewriter 
-ptl_pt_index_t
-\family default 
- and 
-\family typewriter 
-ptl_ac_index_t
-\family default 
- are integral types used for representing Portal table indexes and access
- control tables indexes, respectively.
- See section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:niinit}
-
-\end_inset 
-
- for limits on values of these types.
-\layout Subsection
-
-Match Bits
-\begin_inset LatexCommand \label{sec:mb-type}
-
-\end_inset 
-
-\layout Standard
-
-The type 
-\family typewriter 
-ptl_match_bits_t
-\family default 
- is capable of holding unsigned 64-bit integer values.
-\layout Subsection
-
-Network Interfaces
-\begin_inset LatexCommand \label{sec:ni-type}
-
-\end_inset 
-
-\layout Standard
-
-The type 
-\family typewriter 
-ptl_interface_t
-\family default 
- is an integral type used for identifying different network interfaces.
- Users will need to consult the local documentation to determine appropriate
- values for the interfaces available.
- The special value 
-\family typewriter 
-PTL_IFACE_DEFAULT
-\family default 
- identifies the default interface.
-\layout Subsection
-
-Identifiers
-\begin_inset LatexCommand \label{sec:id-type}
-
-\end_inset 
-
-
-\layout Standard
-
-The type 
-\family typewriter 
-ptl_nid_t
-\family default 
- is an integral type used for representing node ids
-\family typewriter 
-, ptl_pid_t
-\family default 
- is an integral type for representing process ids, and 
-\family typewriter 
-ptl_uid_t 
-\family default 
-is an integral type for representing user ids.
-\layout Standard
-
-The special values 
-\family typewriter 
-PTL_PID_ANY
-\family default 
- matches any process identifier, PTL_NID_ANY matches any node identifier,
- and 
-\family typewriter 
-PTL_UID_ANY
-\family default 
- matches any user identifier.
- See sections 
-\begin_inset LatexCommand \ref{sec:meattach}
-
-\end_inset 
-
- and\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:acentry}
-
-\end_inset 
-
- for uses of these values.
-\layout Subsection
-
-Status Registers
-\begin_inset LatexCommand \label{sec:stat-type}
-
-\end_inset 
-
-
-\layout Standard
-
-Each network interface maintains an array of status registers that can be
- accessed using the 
-\family typewriter 
-PtlNIStatus
-\family default 
- function (see Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:nistatus}
-
-\end_inset 
-
-).
- The type 
-\family typewriter 
-ptl_sr_index_t
-\family default 
- defines the types of indexes that can be used to access the status registers.
- The only index defined for all implementations is 
-\family typewriter 
-PTL_SR_DROP_COUNT
-\family default 
- which identifies the status register that counts the dropped requests for
- the interface.
- Other indexes (and registers) may be defined by the implementation.
-\layout Standard
-
-The type 
-\family typewriter 
-ptl_sr_value_t
-\family default 
- defines the types of values held in status registers.
- This is a signed integer type.
- The size is implementation dependent, but must be at least 32 bits.
-\layout Section
-
-Initialization and Cleanup
-\begin_inset LatexCommand \label{sec:init}
-
-\end_inset 
-
-
-\layout Standard
-
-The Portals API includes a function, 
-\emph on 
-PtlInit
-\emph default 
-, to initialize the library and a function, 
-\emph on 
-PtlFini
-\emph default 
-, to cleanup after the application is done using the library.
-\layout Subsection
-
-PtlInit
-\begin_inset LatexCommand \label{sec:ptlinit}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-int PtlInit( int *max_interfaces );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlInit
-\emph default 
- function initializes the Portals library.
- PtlInit must be called at least once by a process before any thread makes
- a Portals function call, but may be safely called more than once.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_FAIL Indicates an error during initialization.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-max_interfaces
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="1" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="5in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-max_interfaces
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold the maximum number of interfaces
- that can be initialized.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Subsection
-
-PtlFini
-\begin_inset LatexCommand \label{sec:ptlfini}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-void PtlFini( void );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlFini
-\emph default 
- function cleans up after the Portals library is no longer needed by a process.
- After this function is called, calls to any of the functions defined by
- the Portal API or use of the structures set up by the Portals API will
- result in undefined behavior.
- This function should be called once and only once during termination by
- a process.
- Typically, this function will be called in the exit sequence of a process.
- Individual threads should not call PtlFini when they terminate.
-\layout Section
-
-Network Interfaces
-\begin_inset LatexCommand \label{sec:ni}
-
-\end_inset 
-
-\layout Standard
-
-The Portals API supports the use of multiple network interfaces.
- However, each interface is treated as an independent entity.
- Combining interfaces (e.g., 
-\begin_inset Quotes eld
-\end_inset 
-
-bonding
-\begin_inset Quotes erd
-\end_inset 
-
- to create a higher bandwidth connection) must be implemented by the application
- or embedded in the underlying network.
- Interfaces are treated as independent entities to make it easier to cache
- information on individual network interface cards.
-\layout Standard
-
-Once initialized, each interface provides a Portal table, an access control
- table, and a collection of status registers.
- See Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:me}
-
-\end_inset 
-
- for a discussion of updating Portal table entries using the 
-\emph on 
-PtlMEAttach
-\emph default 
- function.
- See Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:ac}
-
-\end_inset 
-
- for a discussion of the initialization and updating of entries in the access
- control table.
- See Section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:nistatus}
-
-\end_inset 
-
- for a discussion of the 
-\emph on 
-PtlNIStatus
-\emph default 
- function which can be used to determine the value of a status register.
-\layout Standard
-
-Every other type of Portal object (e.g., memory descriptor, event queue, or
- match list entry) is associated with a specific network interface.
- The association to a network interface is established when the object is
- created and is encoded in the handle for the object.
-\layout Standard
-
-Each network interface is initialized and shutdown independently.
- The initialization routine, 
-\emph on 
-PtlNIInit
-\emph default 
-, returns a handle for an interface object which is used in all subsequent
- Portal operations.
- The 
-\emph on 
-PtlNIFini
-\emph default 
- function is used to shutdown an interface and release any resources that
- are associated with the interface.
- Network interface handles are associated with processes, not threads.
- All threads in a process share all of the network interface handles.
-\layout Standard
-
-The Portals API also defines the 
-\emph on 
-PtlNIStatus
-\emph default 
- function to query the status registers for a network interface, the 
-\emph on 
-PtlNIDist
-\emph default 
- function to determine the 
-\begin_inset Quotes eld
-\end_inset 
-
-distance
-\begin_inset Quotes erd
-\end_inset 
-
- to another process, and the 
-\emph on 
-PtlNIHandle
-\emph default 
- function to determine the network interface that an object is associated
- with.
-\layout Subsection
-
-PtlNIInit
-\begin_inset LatexCommand \label{sec:niinit}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-typedef struct {
-\newline 
-    int            max_match_entries;
-\newline 
-    int            max_mem_descriptors;
-\newline 
-    int            max_event_queues;
-\newline 
-    ptl_ac_index_t max_atable_index; 
-\newline 
-    ptl_pt_index_t max_ptable_index;
-\newline 
-} ptl_ni_limits_t;
-\newline 
-
-\newline 
-int PtlNIInit( ptl_interface_t  interface
-\newline 
-               ptl_pid_t        pid,
-\newline 
-               ptl_ni_limits_t* desired,
-\newline 
-               ptl_ni_limits_t* actual,
-\newline 
-               ptl_handle_ni_t* handle );
-\layout Standard
-
-Values of type 
-\family typewriter 
-ptl_ni_limits_t
-\family default 
- include the following members:
-\layout Description
-
-max_match_entries Maximum number of match entries that can be allocated
- at any one time.
-\layout Description
-
-max_mem_descriptors Maximum number of memory descriptors that can be allocated
- at any one time.
-\layout Description
-
-max_event_queues Maximum number of event queues that can be allocated at
- any one time.
-\layout Description
-
-max_atable_index Largest access control table index for this interface,
- valid indexes range from zero to 
-\family typewriter 
-max_atable_index
-\family default 
-, inclusive.
-\layout Description
-
-max_ptable_index Largest Portal table index for this interface, valid indexes
- range from zero to 
-\family typewriter 
-max_ptable_index
-\family default 
-, inclusive.
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlNIInit
-\emph default 
- function is used to initialized the Portals API for a network interface.
- This function must be called at least once by each process before any other
- operations that apply to the interface by any process or thread.
- For subsequent calls to 
-\shape italic 
-PtlNIInit
-\shape default 
- from within the same process (either by different threads or the same thread),
- the desired limits will be ignored and the call will return the existing
- NI handle.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INIT_DUP Indicates a duplicate initialization of 
-\family typewriter 
-interface
-\family default 
-.
-\layout Description
-
-PTL_INIT_INV Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a valid network interface.
-\layout Description
-
-PTL_NOSPACE Indicates that there is insufficient memory to initialize the
- interface.
-\layout Description
-
-PTL_INV_PROC Indicates that 
-\family typewriter 
-pid
-\family default 
- is not a valid process id.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-actual 
-\family default 
-or
-\family typewriter 
- handle
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="5" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="4.7in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Identifies the network interface to be initialized.
-  (See section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:ni-type}
-
-\end_inset 
-
- for a discussion of  values used to identify network interfaces.)
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-pid
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Identifies the desired process id (for well known process ids).
- The value 
-\family typewriter 
-PTL_PID_ANY
-\family default 
- may be used to have the process id assigned by the underlying library.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-desired
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-If non-NULL, points to a structure that holds the desired limits.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-actual
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, the location pointed to by actual will hold the actual
- limits.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-handle
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold a  handle for the interface.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-The use of desired is implementation dependent.
- In particular, an implementation may choose to ignore this argument.
-\layout Subsection
-
-PtlNIFini
-\begin_inset LatexCommand \label{sec:nifini}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-int PtlNIFini( ptl_handle_ni_t interface );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlNIFini
-\emph default 
- function is used to release the resources allocated for a network interface.
- Once the 
-\emph on 
-PtlNIFini
-\emph default 
- operation has been started, the results of pending API operations (e.g.,
- operations initiated by another thread) for this interface are undefined.
- Similarly, the effects of incoming operations (puts and gets) or return
- values (acknowledgements and replies) for this interface are undefined.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a valid network interface handle.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="1" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-A handle for the interface to shutdown.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Subsection
-
-PtlNIStatus
-\begin_inset LatexCommand \label{sec:nistatus}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-int PtlNIStatus( ptl_handle_ni_t interface,
-\newline 
-                 ptl_sr_index_t  status_register,
-\newline 
-                 ptl_sr_value_t* status );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlNIStatus
-\emph default 
- function returns the value of a status register for the specified interface.
- (See section\SpecialChar ~
-
-\begin_inset LatexCommand \ref{sec:stat-type}
-
-\end_inset 
-
- for more information on status register indexes and status register values.)
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a valid network interface handle.
-\layout Description
-
-PTL_INV_SR_INDX Indicates that 
-\family typewriter 
-status_register
-\family default 
- is not a valid status register.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-status
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="3" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="4.7in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A handle for the interface to use.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-status_register
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-An index for the status register to read.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-status
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold the current value of the status
- register.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-The only status register that must be defined is a drop count register (
-\family typewriter 
-PTL_SR_DROP_COUNT
-\family default 
-).
- Implementations may define additional status registers.
- Identifiers for the indexes associated with these registers should start
- with the prefix 
-\family typewriter 
-PTL_SR_
-\family default 
-.
-\layout Subsection
-
-PtlNIDist
-\layout LyX-Code
-
-int PtlNIDist( ptl_handle_ni_t  interface,
-\newline 
-               ptl_process_id_t process,
-\newline 
-               unsigned long*   distance );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlNIDist
-\emph default 
- function returns the distance to another process using the specified interface.
- Distances are only defined relative to an interface.
- Distance comparisons between different interfaces on the same process may
- be meaningless.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a valid network interface handle.
-\layout Description
-
-PTL_INV_PROC Indicates that 
-\family typewriter 
-process
-\family default 
- is not a valid process identifier.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-distance
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="3" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="4.7in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A handle for the interface to use.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-process
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-An identifier for the process whose distance is being  requested.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-distance
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold the  distance to the remote
- process.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-This function should return a static measure of distance.
- Examples include minimum latency, the inverse of available bandwidth, or
- the number of switches between the two endpoints.
-\layout Subsection
-
-PtlNIHandle
-\layout LyX-Code
-
-int PtlNIHandle( ptl_handle_any_t handle,
-\newline 
-                 ptl_handle_ni_t* interface );
-\layout Standard
-\noindent 
-The 
-\emph on 
-PtlNIHandle
-\emph default 
- function returns a handle for the network interface with which the object
- identified by 
-\family typewriter 
-handle
-\family default 
- is associated.
- If the object identified by 
-\family typewriter 
-handle
-\family default 
- is a network interface, this function returns the same value it is passed.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INV_HANDLE Indicates that 
-\family typewriter 
-handle
-\family default 
- is not a valid handle.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="2" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="4.7in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-handle
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A handle for the object.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold a handle for the network interface
- associated with 
-\family typewriter 
-handle
-\family default 
-.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-Every handle should encode the network interface and the object id relative
- to this handle.
- Both are presumably encoded using integer values.
-\layout Section
-
-User Identification
-\begin_inset LatexCommand \label{sec:uid}
-
-\end_inset 
-
-
-\layout Standard
-
-Every process runs on behalf of a user.
-\layout Subsection
-
-PtlGetUid
-\layout LyX-Code
-
-int PtlGetUid( ptl_handle_ni_t   ni_handle,
-\newline 
-               ptl_uid_t*        uid );
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-ni_handle
-\family default 
- is not a valid network interface handle.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="2" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="5in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-handle
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A network interface handle.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-id
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold the user id for the calling
- process.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-Note that user identifiers are dependent on the network interface(s).
- In particular, if a node has multiple interfaces, a process may have multiple
- user identifiers.
-\layout Section
-
-Process Identification
-\begin_inset LatexCommand \label{sec:pid}
-
-\end_inset 
-
-
-\layout Standard
-
-Processes that use the Portals API, can be identified using a node id and
- process id.
- Every node accessible through a network interface has a unique node identifier
- and every process running on a node has a unique process identifier.
- As such, any process in the computing system can be identified by its node
- id and process id.
-\layout Standard
-
-The Portals API defines a type, 
-\family typewriter 
-ptl_process_id_t
-\family default 
- for representing process ids and a function, 
-\emph on 
-PtlGetId
-\emph default 
-, which can be used to obtain the id of the current process.
-\layout Comment
-
-The portals API does not include thread identifiers.
-  Messages are delivered to processes (address spaces) not threads (contexts
- of  execution).
-\layout Subsection
-
-The Process Id Type
-\begin_inset LatexCommand \label{sec:pid-type}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-typedef struct {
-\newline 
-    ptl_nid_t       nid; /* node id */
-\newline 
-    ptl_pid_t       pid; /* process id */
-\newline 
-} ptl_process_id_t;
-\layout Standard
-\noindent 
-The 
-\family typewriter 
-ptl_process_id_t
-\family default 
- type uses two identifiers to represent a process id: a node id and a process
- id.
-\layout Subsection
-
-PtlGetId
-\begin_inset LatexCommand \label{sub:PtlGetId}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-int PtlGetId( ptl_handle_ni_t   ni_handle,
-\newline 
-              ptl_process_id_t* id );
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-ni_handle
-\family default 
- is not a valid network interface handle.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_SEGV Indicates that 
-\family typewriter 
-id
-\family default 
- is not a legal address.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="2" columns="3">
-<features>
-<column alignment="right" valignment="top" width="0pt">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="5in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-handle
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A network interface handle.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\family typewriter 
-id
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold the id for the calling process.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Comment
-
-Note that process identifiers are dependent on the network interface(s).
- In particular, if a node has multiple interfaces, it may have multiple
- node identifiers.
-\layout Section
-
-Match List Entries and Match Lists
-\begin_inset LatexCommand \label{sec:me}
-
-\end_inset 
-
-
-\layout Standard
-
-A match list is a chain of match list entries.
- Each match list entry includes a memory descriptor and a set of match criteria.
- The match criteria can be used to reject incoming requests based on process
- id or the match bits provided in the request.
- A match list is created using the 
-\emph on 
-PtlMEAttach
-\emph default 
- or 
-\shape italic 
-PtlMEAttachAny
-\shape default 
- functions, which create a match list consisting of a single match list
- entry, attaches the match list to the specified Portal index, and returns
- a handle for the match list entry.
- Match entries can be dynamically inserted and removed from a match list
- using the 
-\emph on 
-PtlMEInsert
-\emph default 
- and 
-\emph on 
-PtlMEUnlink
-\emph default 
- functions.
-\layout Subsection
-
-PtlMEAttach
-\begin_inset LatexCommand \label{sec:meattach}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-typedef enum { PTL_RETAIN, PTL_UNLINK } ptl_unlink_t;
-\newline 
-
-\layout LyX-Code
-
-typedef enum { PTL_INS_BEFORE, PTL_INS_AFTER } ptl_ins_pos_t;
-\newline 
-
-\layout LyX-Code
-
-int PtlMEAttach( ptl_handle_ni_t  interface,
-\newline 
-                 ptl_pt_index_t   index,
-\newline 
-                 ptl_process_id_t matchid,
-\newline 
-                 ptl_match_bits_t match_bits,
-\newline 
-                 ptl_match_bits_t ignorebits,
-\newline 
-                 ptl_unlink_t     unlink,
-\newline 
-                 ptl_ins_pos_t    position,
-\newline 
-                 ptl_handle_me_t* handle );
-\layout Standard
-\noindent 
-Values of the type 
-\family typewriter 
-ptl_ins_pos_t
-\family default 
- are used to control where a new item is inserted.
- The value 
-\family typewriter 
-PTL_INS_BEFORE
-\family default 
- is used to insert the new item before the current item or before the head
- of the list.
- The value 
-\family typewriter 
-PTL_INS_AFTER
-\family default 
- is used to insert the new item after the current item or after the last
- item in the list.
-\layout Standard
-
-The 
-\emph on 
-PtlMEAttach
-\emph default 
- function creates a match list consisting of a single entry and attaches
- this list to the Portal table for 
-\family typewriter 
-interface
-\family default 
-.
-\layout Subsubsection
-
-Return Codes
-\layout Description
-
-PTL_OK Indicates success.
-\layout Description
-
-PTL_INV_NI Indicates that 
-\family typewriter 
-interface
-\family default 
- is not a valid network interface handle.
-\layout Description
-
-PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
-\layout Description
-
-PTL_INV_PTINDEX Indicates that 
-\family typewriter 
-index
-\family default 
- is not a valid Portal table index.
-\layout Description
-
-PTL_INV_PROC Indicates that 
-\family typewriter 
-matchid
-\family default 
- is not a valid process identifier.
-\layout Description
-
-PTL_NOSPACE Indicates that there is insufficient memory to allocate the
- match list entry.
-\layout Description
-
-PTL_ML_TOOLONG Indicates that the resulting match list is too long.
- The maximum length for a match list is defined by the interface.
-\layout Subsubsection
-
-Arguments
-\layout Standard
-
-
-\begin_inset  Tabular
-<lyxtabular version="3" rows="7" columns="3">
-<features>
-<column alignment="left" valignment="top" width="0.8in">
-<column alignment="center" valignment="top" width="0pt">
-<column alignment="left" valignment="top" width="4.75in">
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-interface
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-A handle for the interface to use.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-index
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-The Portal table index where the match list  should be attached.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-matchid
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Specifies the match criteria for the process id of the requestor.
-  The constants 
-\family typewriter 
-PTL_PID_ANY
-\family default 
- and 
-\family typewriter 
-PTL_NID_ANY
-\family default 
- can be used to  wildcard either of the ids in the 
-\family typewriter 
-ptl_process_id_t
-\family default 
- structure.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-match_bits, ignorebits
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Specify the match criteria to apply  to the match bits in the incoming request.
-  The 
-\family typewriter 
-ignorebits
-\family default 
- are used to mask out insignificant bits in the incoming match bits.
-  The resulting bits are then compared to the match list entry's match 
- bits to determine if the incoming request meets the match criteria.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-unlink
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Indicates the match list entry should be unlinked when the last memory descripto
-r associated with this match list  entry is unlinked.
-  (Note, the check for unlinking a match entry  only occurs when a memory
- descriptor is unlinked.) 
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-position
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-input
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-Indicates whether the new match entry should be prepended or appended to
- the existing match list.
- If there is no existing list, this argument is ignored and the new match
- entry becomes the only entry in the list.
- Allowed constants: 
-\family typewriter 
-PTL_INS_BEFORE
-\family default 
-, 
-\family typewriter 
-PTL_INS_AFTER
-\family default 
-.
-\end_inset 
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-
-\family typewriter 
-handle
-\end_inset 
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series bold 
-output
-\end_inset 
-</cell>
-<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-\noindent 
-On successful return, this location will hold a  handle for the newly created
- match list entry.
-\end_inset 
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset 
-
-
-\layout Subsection
-
-PtlMEAttachAny
-\begin_inset LatexCommand \label{sec:attachany}
-
-\end_inset 
-
-
-\layout LyX-Code
-
-int PtlMEAttachAny( ptl_handle_ni_t  interface,
-\newline 
-                    ptl_pt_index_t   *index,
-\newline 
-                    ptl_process_id_t matchid,
-\newline 
-                    ptl_match_bits_t match_bits,
-\newline 
-                    ptl_match_bits_t ignorebits,
-\newline 
-                    ptl_unlink_t     unlink,
-\newline 
-                    ptl_handle_me_t* handle );
-\layout Standard
-
-The 
-\emph on 
-PtlMEAttachAny
-\emph default 
- function creates a match list consisting of a single entry and attaches
- this list to an unused Portal table entry for 
-\family typewriter 
-interface
-\family default