1
1
Граф коммитов

23 Коммитов

Автор SHA1 Сообщение Дата
Nathan Hjelm
852cc8cfbc opal: fix various coverity errors
Fix CID 1356358:  Null pointer dereferences  (REVERSE_INULL):

flist->fl_mpool can no longer be NULL. Removed the conditional.

Fix CID 1356357:  Resource leaks  (RESOURCE_LEAK):

Added the call to free the hints array.

Fix CID 1356356:  Resource leaks  (RESOURCE_LEAK):

This is a false error but it is safe to call close (-1) so just always
call close.

Fix CID 1356354:  Control flow issues  (MISSING_BREAK):
Fix CID 1356353:  Control flow issues  (MISSING_BREAK):

Add comments that indicate the fall-through is intentional.

Fix CID 1356351:  Null pointer dereferences  (FORWARD_NULL):

Fix potential SEGV if the page_size key is malformed.

Fix CID 1356350:  Error handling issues  (CHECKED_RETURN):

Add (void) to indicate that we do not care about the return code of
sscanf in this case.

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
2016-03-17 10:05:57 -06:00
Nathan Hjelm
d4afb16f5a opal: rework mpool and rcache frameworks
This commit rewrites both the mpool and rcache frameworks. Summary of
changes:

 - Before this change a significant portion of the rcache
   functionality lived in mpool components. This meant that it was
   impossible to add a new memory pool to use with rdma networks
   (ugni, openib, etc) without duplicating the functionality of an
   existing mpool component. All the registration functionality has
   been removed from the mpool and placed in the rcache framework.

 - All registration cache mpools components (udreg, grdma, gpusm,
   rgpusm) have been changed to rcache components. rcaches are
   allocated and released in the same way mpool components were.

 - It is now valid to pass NULL as the resources argument when
   creating an rcache. At this time the gpusm and rgpusm components
   support this. All other rcache components require non-NULL
   resources.

 - A new mpool component has been added: hugepage. This component
   supports huge page allocations on linux.

 - Memory pools are now allocated using "hints". Each mpool component
   is queried with the hints and returns a priority. The current hints
   supported are NULL (uses posix_memalign/malloc), page_size=x (huge
   page mpool), and mpool=x.

 - The sm mpool has been moved to common/sm. This reflects that the sm
   mpool is specialized and not meant for any general
   allocations. This mpool may be moved back into the mpool framework
   if there is any objection.

 - The opal_free_list_init arguments have been updated. The unused0
   argument is not used to pass in the registration cache module. The
   mpool registration flags are now rcache registration flags.

 - All components have been updated to make use of the new framework
   interfaces.

As this commit makes significant changes to both the mpool and rcache
frameworks both versions have been bumped to 3.0.0.

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
2016-03-14 10:50:41 -06:00
Nathan Hjelm
2c02294389 opal_free_list: fix strange size check
OPAL free lists can be initialized with a fragment size that differs
from the size of objects from a class. This allows the free list code
to support OPAL objects that have flexible array members.

Unfortunately the free list code will throw out the desired length in
some cases. The code in question was committed in
open-mpi/ompi@90fb58de. The side effects of this are varied and can
cause segmentation faults, assert failures, hangs, etc. This commit
adds a check to ensure the requested size is at least as large as the
class size and makes opal_free_list allocations always honor the
requested fragment size (as long as it is larger than the class
size).

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
2015-11-09 19:47:55 -07:00
Ralph Castain
869041f770 Purge whitespace from the repo 2015-06-23 20:59:57 -07:00
Nathan Hjelm
88251a6b94 Combine opal_free_list_t and ompi_free_list_t
Historically these two lists were different due to ompi_free_list_t
dependencies in ompi (mpool). Those dependencies have since been moved
to opal so it is safe to (finally) combine them. The combined free
list comes in three flavors:

 - Single-threaded. Only to be used when it is guaranteed that no
   concurrent access will be made to the free list. Single-threaded
   functions are suffixed with _st.

 - Mutli-threaded. To be used when the free list may be accessed by
   multiple threads despite the setting of opal_using_threads.
   Multi-threaded functins are suffixed with _mt.

 - Conditionally multi-threaded. Common use case. These functions are
   thread-safe if opal_using_threads is set to true.

Compatibility functions for the ompi_free_list_t and the old accessor
functions (OPAL_FREE_LIST_*) are available while the code base is
transitioned to the new class/functions.

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
2015-02-24 10:05:44 -07:00
Nathan Hjelm
0ef6baffd3 Fix bug in r31764
Need to remove the items of the list to avoid an assert in debug builds.

cmr=v1.8.2:ticket=trac:4628

This commit was SVN r31769.

The following SVN revision numbers were found above:
  r31764 --> open-mpi/ompi@13fd6ae774

The following Trac tickets were found above:
  Ticket 4628 --> https://svn.open-mpi.org/trac/ompi/ticket/4628
2014-05-14 23:45:50 +00:00
Nathan Hjelm
13fd6ae774 opal_free_list: destruct free lists items when destructing the free
list

This commit updates the behavior of opal_free_list_t to match the
behavior of ompi_free_list_t. opal_free_list_t constructed items
placed on the free list but never destructed them.

cmr=v1.8.2:reviewer=jsquyres

This commit was SVN r31764.
2014-05-14 21:15:19 +00:00
Jeff Squyres
c8bb7537e7 Remove include/opal/sys/cache.h -- its only purpose in life was to
#define CACHE_LINE_SIZE to 128.  This name has a conflict on NetBSD,
and it seems kinda odd to have a header file that ''only'' defines a
single value.  Also, we'll soon be raising hwloc to be a first-class
item, so having this file around seemed kinda weird.

Therefore, I replaced CACHE_LINE_SIZE with opal_cache_line_size, an
int (in opal/runtime/opal_init.c and opal/runtime/opal.h) on the
rationale that we can fill this in at runtime with hwloc info (trunk
and v1.5/beyond, only).  The only place we ''needed'' a compile-time
CACHE_LINE_SIZE was in the BTL SM (for struct padding), so I made a
new BTL_SM_ preprocessor macro with the old CACHE_LINE_SIZE value
(128).  That use isn't suitable for run-time hwloc information,
anyway.

This commit was SVN r23349.
2010-07-06 14:33:36 +00:00
George Bosilca
83474b2e1a Solve a modulus rounding error. As the modulus can be signed (in C89 it take
the sign of the divident), we have to cast the pointer to an uintptr_t in
order to be able to correctly compute how to align it on the cache line.
Rported and solved by Stephan Kramer. Thanks Stephan.

This commit was SVN r19778.
2008-10-21 17:00:39 +00:00
George Bosilca
d4031a97c4 Decrease the number of branches in the critical path.
This commit was SVN r13379.
2007-01-31 03:01:23 +00:00
George Bosilca
5e280cda19 Latest and greatest. Now OPAL is ready for the Windows prime-time.
The same treatement will happens on all sub-projects. The .h files
have to be C++ compatibles and all symbols with an external visibility
have to get the {PROJECT}_DECLSPEC in front of the prototype.

This commit was SVN r11340.
2006-08-23 00:29:35 +00:00
Brian Barrett
f0a690933f Clean up the opal_free_list code. We don't use the user_data flag in the
opal_free_list_item_t and everyone was just treating them as
opal_list_itme_t structures, which meant that they were overwriting the
user_data memory anyway.  So make an opal_free_lsit_item_t be just a
opal_list_item_t.

Also, opal_free_list_item_t wasn't a proper class, which made it slightly
less than nice to use, so fix that part up.  Also update the
opal_free_list_t to use the class macros, so that it is more obvious we
actually do the right thing.

This commit was SVN r10304.
2006-06-12 14:49:03 +00:00
Brian Barrett
566a050c23 Next step in the project split, mainly source code re-arranging
- move files out of toplevel include/ and etc/, moving it into the
    sub-projects
  - rather than including config headers with <project>/include, 
    have them as <project>
  - require all headers to be included with a project prefix, with
    the exception of the config headers ({opal,orte,ompi}_config.h
    mpi.h, and mpif.h)

This commit was SVN r8985.
2006-02-12 01:33:29 +00:00
Jeff Squyres
42ec26e640 Update the copyright notices for IU and UTK.
This commit was SVN r7999.
2005-11-05 19:57:48 +00:00
Brian Barrett
492aeecd11 * track the actual allocations within the ompi and opal free_lists, so that
we can free all allocated memory when the free_list is destructed.  Fixes
  a whole bunch of memory leaks...

This commit was SVN r7173.
2005-09-03 19:46:44 +00:00
Brian Barrett
a9863e5ff5 * properly construct / destruct the condition variable in the free list
structures

This commit was SVN r7153.
2005-09-02 16:00:42 +00:00
Brian Barrett
39dbeeedfb * rename locking code from ompi to opal
This commit was SVN r6327.
2005-07-03 22:45:48 +00:00
Brian Barrett
761402f95f * rename ompi_list to opal_list
This commit was SVN r6322.
2005-07-03 16:22:16 +00:00
Brian Barrett
499e4de1e7 * rename ompi_object and ompi_class to opal_object and opal_class
This commit was SVN r6321.
2005-07-03 16:06:07 +00:00
Brian Barrett
8077da277b * move ompi_rb_tree from opal to ompi since it's only used in ompi, and should
have the ompi_free_list instead of the opal_free_list
* Change orte to use opal_free_list instead of ompi_free_list

This commit was SVN r6307.
2005-07-02 16:46:27 +00:00
Brian Barrett
73f05ce012 * remove last of ompi_free_list / mpool refs
This commit was SVN r6298.
2005-07-02 15:51:22 +00:00
Brian Barrett
957ac4fe3d * change ompi -> opal and remove the mpool code
This commit was SVN r6295.
2005-07-02 15:42:29 +00:00
Jeff Squyres
959a08bf42 Compromise:
- move mpool and allocator frameworks back to ompi (from opal)
- specialize the ompi_free_list class to use an mpool instance
- un-specialize opal_free_list to *not* use mpool; just use malloc/free

This commit was SVN r6292.
2005-07-02 15:35:34 +00:00