Hi,

I think I have a better fix for this issue. It is to simply #include
<malloc.h> *before* ompi_config.h.

  --- ompi/mca/common/mx/common_mx.c
  +++ ompi/mca/common/mx/common_mx.c
  @@ -19,15 +19,16 @@
    * $HEADER$
    */

  +#ifdef HAVE_MALLOC_H
  +#include <malloc.h>
  +#endif
  +
   #include "ompi_config.h"
   #include "orte/util/show_help.h"
   #include "ompi/constants.h"
   #include "common_mx.h"

   #include <errno.h>
  -#ifdef HAVE_MALLOC_H
  -#include <malloc.h>
  -#endif
   #include "opal/memoryhooks/memory.h"
   #include "opal/mca/base/mca_base_param.h"
   #include "ompi/runtime/params.h"

The reason for doing this is because ompi_config.h (which includes
ompi_config_bottom.h) #defines "malloc", so we end up with OMPI code
getting spliced into the Solaris /usr/include/malloc.h code. 

Is this fix okay?

-Ethan

On Wed, Dec/10/2008 04:29:31PM, Ethan Mallove wrote:
> Hi Patrick,
> 
> r20003 seems to break MX support on Solaris.
> 
>   $ cd ompi/mca/common/mx
>   $ make
>   ...
>   "/usr/include/malloc.h", line 46: syntax error before or at: (
>   "/usr/include/malloc.h", line 47: syntax error before or at: (
>   "/usr/include/malloc.h", line 48: syntax error before or at: (
>   "/usr/include/malloc.h", line 48: cannot have void object: size_t
>   "/usr/include/malloc.h", line 48: identifier redeclared: size_t
>   ... <4000 more lines of compiler errors> ...
> 
> The below patch makes it so opal/util/malloc.h is used instead of
> /usr/include/malloc.h and the compiler errors go away. (I also needed
> to include errno.h.) Would this be okay to do?
> 
>   diff -r 347f52a3713f ompi/mca/common/mx/common_mx.c
>   --- ompi/mca/common/mx/common_mx.c
>   +++ ompi/mca/common/mx/common_mx.c
>   @@ -23,9 +23,8 @@
>    #include "ompi/constants.h"
>    #include "common_mx.h"
>    
>   -#ifdef HAVE_MALLOC_H
>   -#include <malloc.h>
>   -#endif
>   +#include <errno.h>
>   +#include "opal/util/malloc.h"
>    #include "opal/memoryhooks/memory.h"
>    #include "opal/mca/base/mca_base_param.h"
>    #include "ompi/runtime/params.h"
> 
> I tested the above on Solaris and Linux with SunStudio.
> 
> Regards,
> Ethan
> 
> 
> On Fri, Nov/14/2008 11:17:59PM, patr...@osl.iu.edu wrote:
> > Author: patrick
> > Date: 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> > New Revision: 20003
> > URL: https://svn.open-mpi.org/trac/ompi/changeset/20003
> > 
> > Log:
> > Define a "fake" mpool to provide a memory release callback for the 
> > memory hooks (munmap) and initialize the mallopt component, and 
> > nothing else.
> > Use this mpool in the MX common initialization, supporting both BTL 
> > and MTL. Automatically set the MX_RCACHE environment variable to 
> > enable registration cache in MX.
> > 
> > Tested with success for munmap() and large free().
> > 
> > 
> > Added:
> >    trunk/ompi/mca/mpool/fake/
> >    trunk/ompi/mca/mpool/fake/Makefile.am
> >    trunk/ompi/mca/mpool/fake/configure.params
> >    trunk/ompi/mca/mpool/fake/mpool_fake.h
> >    trunk/ompi/mca/mpool/fake/mpool_fake_component.c
> >    trunk/ompi/mca/mpool/fake/mpool_fake_module.c
> > Text files modified: 
> >    trunk/ompi/mca/common/mx/common_mx.c |    56 
> > +++++++++++++++++++++++++++++++++++++++ 
> >    1 files changed, 55 insertions(+), 1 deletions(-)
> > 
> > Modified: trunk/ompi/mca/common/mx/common_mx.c
> > ==============================================================================
> > --- trunk/ompi/mca/common/mx/common_mx.c    (original)
> > +++ trunk/ompi/mca/common/mx/common_mx.c    2008-11-14 23:17:58 EST (Fri, 
> > 14 Nov 2008)
> > @@ -9,6 +9,8 @@
> >   *                         University of Stuttgart.  All rights reserved.
> >   * Copyright (c) 2004-2006 The Regents of the University of California.
> >   *                         All rights reserved.
> > + * Copyright (c) 2008      Myricom. All rights reserved.
> > + * 
> >   * $COPYRIGHT$
> >   *
> >   * Additional copyrights may follow
> > @@ -21,11 +23,29 @@
> >  #include "ompi/constants.h"
> >  #include "common_mx.h"
> >  
> > +#ifdef HAVE_MALLOC_H
> > +#include <malloc.h>
> > +#endif
> > +#include "opal/memoryhooks/memory.h"
> > +#include "opal/mca/base/mca_base_param.h"
> > +#include "ompi/runtime/params.h"
> > +#include "ompi/mca/mpool/mpool.h"
> > +#include "ompi/mca/mpool/base/base.h"
> > +#include "ompi/mca/mpool/fake/mpool_fake.h"
> > +
> > +
> > +int mx__regcache_clean(void *ptr, size_t size);
> > +
> >  static int ompi_common_mx_initialize_ref_cnt = 0;
> > +static mca_mpool_base_module_t *ompi_common_mx_fake_mpool = 0;
> > +
> >  int
> >  ompi_common_mx_initialize(void)
> >  {
> >      mx_return_t mx_return;
> > +    struct mca_mpool_base_resources_t mpool_resources;
> > +    int index, value;
> > +    
> >      ompi_common_mx_initialize_ref_cnt++;
> >      
> >      if(ompi_common_mx_initialize_ref_cnt == 1) { 
> > @@ -35,7 +55,37 @@
> >           * library does not exit the application.
> >           */
> >          mx_set_error_handler(MX_ERRORS_RETURN);
> > -        
> > +   
> > +   /* If we have a memory manager available, and
> > +      mpi_leave_pinned == -1, then set mpi_leave_pinned to 1.
> > +
> > +      We have a memory manager if:
> > +      - we have both FREE and MUNMAP support
> > +      - we have MUNMAP support and the linux mallopt */
> > +   value = opal_mem_hooks_support_level();
> > +   if (((value & (OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT))
> > +        == (OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT))
> > +       || ((value & OPAL_MEMORY_MUNMAP_SUPPORT) &&
> > +           OMPI_MPOOL_BASE_HAVE_LINUX_MALLOPT)) {
> > +     index = mca_base_param_find("mpi", NULL, "leave_pinned");
> > +     if (index >= 0)
> > +            if ((mca_base_param_lookup_int(index, &value) == OPAL_SUCCESS) 
> > +           && (value == -1)) {
> > +         
> > +         ompi_mpi_leave_pinned = 1;
> > +         setenv("MX_RCACHE", "2", 1);
> > +         mpool_resources.regcache_clean = mx__regcache_clean;
> > +         ompi_common_mx_fake_mpool = 
> > +           mca_mpool_base_module_create("fake", NULL, &mpool_resources);
> > +         if (!ompi_common_mx_fake_mpool) {
> > +           ompi_mpi_leave_pinned = 0;
> > +           setenv("MX_RCACHE", "0", 1);
> > +           opal_output(0, "Error creating fake mpool (error %s)\n",
> > +                       strerror(errno));
> > +         }
> > +       }
> > +   }
> > +   
> >          /* initialize the mx library */
> >          mx_return = mx_init(); 
> >          
> > @@ -57,6 +107,10 @@
> >      mx_return_t mx_return;
> >      ompi_common_mx_initialize_ref_cnt--;
> >      if( 0 == ompi_common_mx_initialize_ref_cnt ) { 
> > +
> > +        if (ompi_common_mx_fake_mpool) 
> > +     mca_mpool_base_module_destroy(ompi_common_mx_fake_mpool);
> > +        
> >          mx_return = mx_finalize(); 
> >          if(mx_return != MX_SUCCESS){ 
> >              opal_output(0, "Error in mx_finalize (error %s)\n", 
> > mx_strerror(mx_return));
> > 
> > Added: trunk/ompi/mca/mpool/fake/Makefile.am
> > ==============================================================================
> > --- (empty file)
> > +++ trunk/ompi/mca/mpool/fake/Makefile.am   2008-11-14 23:17:58 EST (Fri, 
> > 14 Nov 2008)
> > @@ -0,0 +1,56 @@
> > +#
> > +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> > +#                         University Research and Technology
> > +#                         Corporation.  All rights reserved.
> > +# Copyright (c) 2004-2005 The University of Tennessee and The University
> > +#                         of Tennessee Research Foundation.  All rights
> > +#                         reserved.
> > +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> > +#                         University of Stuttgart.  All rights reserved.
> > +# Copyright (c) 2004-2005 The Regents of the University of California.
> > +#                         All rights reserved.
> > +# Copyright (c) 2008      Myricom.  All rights reserved.
> > +#
> > +# $COPYRIGHT$
> > +#
> > +# Additional copyrights may follow
> > +#
> > +# $HEADER$
> > +#
> > +
> > +AM_CPPFLAGS = $(mpool_fake_CPPFLAGS)
> > +
> > +sources = \
> > +   mpool_fake_module.c \
> > +   mpool_fake_component.c
> > +
> > +if WANT_INSTALL_HEADERS
> > +ompidir = $(includedir)/openmpi/ompi/mca/mpool/fake
> > +ompi_HEADERS = mpool_fake.h
> > +else
> > +ompidir = $(includedir)
> > +ompi_HEADERS =
> > +endif
> > +
> > +# Make the output library in this directory, and name it either
> > +# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
> > +# (for static builds).
> > +
> > +if OMPI_BUILD_mpool_fake_DSO
> > +component_noinst =
> > +component_install = mca_mpool_fake.la
> > +else
> > +component_noinst = libmca_mpool_fake.la
> > +component_install =
> > +endif
> > +
> > +mcacomponentdir = $(pkglibdir)
> > +mcacomponent_LTLIBRARIES = $(component_install)
> > +mca_mpool_fake_la_SOURCES = $(sources)
> > +mca_mpool_fake_la_LDFLAGS = -module -avoid-version
> > +mca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
> > +
> > +noinst_LTLIBRARIES = $(component_noinst)
> > +libmca_mpool_fake_la_SOURCES = $(sources)
> > +libmca_mpool_fake_la_LDFLAGS = -module -avoid-version
> > +libmca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
> > 
> > Added: trunk/ompi/mca/mpool/fake/configure.params
> > ==============================================================================
> > --- (empty file)
> > +++ trunk/ompi/mca/mpool/fake/configure.params      2008-11-14 23:17:58 EST 
> > (Fri, 14 Nov 2008)
> > @@ -0,0 +1,24 @@
> > +# -*- shell-script -*-
> > +#
> > +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> > +#                         University Research and Technology
> > +#                         Corporation.  All rights reserved.
> > +# Copyright (c) 2004-2005 The University of Tennessee and The University
> > +#                         of Tennessee Research Foundation.  All rights
> > +#                         reserved.
> > +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> > +#                         University of Stuttgart.  All rights reserved.
> > +# Copyright (c) 2004-2005 The Regents of the University of California.
> > +#                         All rights reserved.
> > +# Copyright (c) 2008      Myricom. All rights reserved.
> > +#
> > +# $COPYRIGHT$
> > +#
> > +# Additional copyrights may follow
> > +#
> > +# $HEADER$
> > +#
> > +
> > +# Specific to this module
> > +
> > +PARAM_CONFIG_FILES="Makefile"
> > 
> > Added: trunk/ompi/mca/mpool/fake/mpool_fake.h
> > ==============================================================================
> > --- (empty file)
> > +++ trunk/ompi/mca/mpool/fake/mpool_fake.h  2008-11-14 23:17:58 EST (Fri, 
> > 14 Nov 2008)
> > @@ -0,0 +1,74 @@
> > +/*
> > + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> > + *                         University Research and Technology
> > + *                         Corporation.  All rights reserved.
> > + * Copyright (c) 2004-2006 The University of Tennessee and The University
> > + *                         of Tennessee Research Foundation.  All rights
> > + *                         reserved.
> > + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> > + *                         University of Stuttgart.  All rights reserved.
> > + * Copyright (c) 2004-2005 The Regents of the University of California.
> > + *                         All rights reserved.
> > + * Copyright (c) 2008      Myricom. All rights reserved.
> > + *
> > + * $COPYRIGHT$
> > + *
> > + * Additional copyrights may follow
> > + *
> > + * $HEADER$
> > + */
> > +/**
> > + * @file
> > + */
> > +
> > +#ifndef MCA_MPOOL_FAKE_H
> > +#define MCA_MPOOL_FAKE_H
> > +
> > +#include "ompi/mca/mpool/mpool.h"
> > +
> > +#if defined(c_plusplus) || defined(__cplusplus)
> > +extern "C" {
> > +#endif
> > +
> > +typedef struct mca_mpool_fake_component_t {
> > +  mca_mpool_base_component_t super;
> > +} mca_mpool_fake_component_t;
> > +
> > +OMPI_DECLSPEC extern mca_mpool_fake_component_t mca_mpool_fake_component;
> > +
> > +typedef struct mca_mpool_base_resources_t {
> > +  int (*regcache_clean)(void *ptr, size_t size);
> > +} mca_mpool_base_resources_t;
> > +
> > +typedef struct mca_mpool_fake_module_t {
> > +  mca_mpool_base_module_t super;
> > +  mca_mpool_base_resources_t resources;
> > +} mca_mpool_fake_module_t;
> > +
> > +/*
> > + *  Initializes the mpool module.
> > + */
> > +void mca_mpool_fake_module_init(mca_mpool_fake_module_t *mpool);
> > +
> > +/**
> > + * unregister all registration covering the block of memory
> > + */
> > +int mca_mpool_fake_release_memory(mca_mpool_base_module_t* mpool, void 
> > *base,
> > +        size_t size);
> > +
> > +/**
> > + * finalize mpool
> > + */
> > +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t *mpool);
> > +
> > +/**
> > + * Fault Tolerance Event Notification Function
> > + * @param state Checkpoint Stae
> > + * @return OMPI_SUCCESS or failure status
> > + */
> > +int mca_mpool_fake_ft_event(int state);
> > +
> > +#if defined(c_plusplus) || defined(__cplusplus)
> > +}
> > +#endif
> > +#endif
> > 
> > Added: trunk/ompi/mca/mpool/fake/mpool_fake_component.c
> > ==============================================================================
> > --- (empty file)
> > +++ trunk/ompi/mca/mpool/fake/mpool_fake_component.c        2008-11-14 
> > 23:17:58 EST (Fri, 14 Nov 2008)
> > @@ -0,0 +1,87 @@
> > +/*
> > + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> > + *                         University Research and Technology
> > + *                         Corporation.  All rights reserved.
> > + * Copyright (c) 2004-2005 The University of Tennessee and The University
> > + *                         of Tennessee Research Foundation.  All rights
> > + *                         reserved.
> > + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> > + *                         University of Stuttgart.  All rights reserved.
> > + * Copyright (c) 2004-2005 The Regents of the University of California.
> > + *                         All rights reserved.
> > + * Copyright (c) 2008      Myricom. All rights reserved.
> > + *
> > + * $COPYRIGHT$
> > + *
> > + * Additional copyrights may follow
> > + *
> > + * $HEADER$
> > + */
> > +
> > +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
> > +#include "ompi_config.h"
> > +#include "orte/util/show_help.h"
> > +#include "opal/mca/base/base.h"
> > +#include "opal/mca/base/mca_base_param.h"
> > +#include "mpool_fake.h"
> > +#include "orte/util/proc_info.h"
> > +#ifdef HAVE_UNISTD_H
> > +#include <unistd.h>
> > +#endif
> > +#ifdef HAVE_MALLOC_H
> > +#include <malloc.h>
> > +#endif
> > +
> > +/*
> > + * Local functions
> > + */
> > +static int mca_mpool_fake_open(void);
> > +static mca_mpool_base_module_t* mca_mpool_fake_init(
> > +   struct mca_mpool_base_resources_t* resources);
> > +
> > +mca_mpool_fake_component_t mca_mpool_fake_component = {
> > +    {
> > +      /* First, the mca_base_component_t struct containing meta
> > +         information about the component itself */
> > +
> > +      {
> > +          MCA_MPOOL_BASE_VERSION_2_0_0,
> > +
> > +          "fake", /* MCA component name */
> > +          OMPI_MAJOR_VERSION,  /* MCA component major version */
> > +          OMPI_MINOR_VERSION,  /* MCA component minor version */
> > +          OMPI_RELEASE_VERSION,  /* MCA component release version */
> > +          mca_mpool_fake_open,  /* component open  */
> > +          NULL
> > +      },
> > +      {
> > +          /* The component is checkpoint ready */
> > +          MCA_BASE_METADATA_PARAM_CHECKPOINT
> > +      },
> > +
> > +      mca_mpool_fake_init
> > +    }
> > +};
> > +
> > +/**
> > +  * component open/close/init function
> > +  */
> > +static int mca_mpool_fake_open(void)
> > +{
> > +    return OMPI_SUCCESS;
> > +}
> > +
> > +static mca_mpool_base_module_t* mca_mpool_fake_init(
> > +     struct mca_mpool_base_resources_t* resources)
> > +{
> > +    mca_mpool_fake_module_t* mpool_module;
> > +
> > +    mpool_module = (mca_mpool_fake_module_t*)
> > +      malloc(sizeof(mca_mpool_fake_module_t));
> > +
> > +    mpool_module->resources = *resources;
> > +
> > +    mca_mpool_fake_module_init(mpool_module);
> > +
> > +    return &mpool_module->super;
> > +}
> > 
> > Added: trunk/ompi/mca/mpool/fake/mpool_fake_module.c
> > ==============================================================================
> > --- (empty file)
> > +++ trunk/ompi/mca/mpool/fake/mpool_fake_module.c   2008-11-14 23:17:58 EST 
> > (Fri, 14 Nov 2008)
> > @@ -0,0 +1,72 @@
> > +/* -*- Mode: C; c-basic-offset:4 ; -*- */
> > +/*
> > + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> > + *                         University Research and Technology
> > + *                         Corporation.  All rights reserved.
> > + * Copyright (c) 2004-2007 The University of Tennessee and The University
> > + *                         of Tennessee Research Foundation.  All rights
> > + *                         reserved.
> > + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> > + *                         University of Stuttgart.  All rights reserved.
> > + * Copyright (c) 2004-2005 The Regents of the University of California.
> > + *                         All rights reserved.
> > + * Copyright (c) 2008      Myricom.  All rights reserved.
> > + *
> > + * $COPYRIGHT$
> > + *
> > + * Additional copyrights may follow
> > + *
> > + * $HEADER$
> > + */
> > +
> > +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
> > +#include "ompi_config.h"
> > +#include "opal/include/opal/align.h"
> > +#include "orte/util/proc_info.h"
> > +#include "orte/util/name_fns.h"
> > +#include "orte/runtime/orte_globals.h"
> > +#include "orte/util/show_help.h"
> > +#include "mpool_fake.h"
> > +#include <errno.h>
> > +#include <string.h>
> > +#include "ompi/mca/mpool/base/base.h"
> > +#include "ompi/runtime/params.h"
> > +
> > +/*
> > + *  Initializes the mpool module.
> > + */
> > +void mca_mpool_fake_module_init(mca_mpool_fake_module_t* mpool)
> > +{
> > +    mpool->super.mpool_component = &mca_mpool_fake_component.super;
> > +    mpool->super.mpool_base = NULL; /* no base .. */
> > +    mpool->super.mpool_alloc = NULL;
> > +    mpool->super.mpool_realloc = NULL;
> > +    mpool->super.mpool_free = NULL;
> > +    mpool->super.mpool_register = NULL;
> > +    mpool->super.mpool_find = NULL;
> > +    mpool->super.mpool_deregister = NULL;
> > +    mpool->super.mpool_release_memory = mca_mpool_fake_release_memory;
> > +    mpool->super.mpool_finalize = mca_mpool_fake_finalize;
> > +    mpool->super.mpool_ft_event = mca_mpool_fake_ft_event;
> > +}
> > +
> > +
> > +int mca_mpool_fake_release_memory(struct mca_mpool_base_module_t *mpool,
> > +        void *base, size_t size)
> > +{
> > +    mca_mpool_fake_module_t *mpool_module = 
> > (mca_mpool_fake_module_t*)mpool;
> > +
> > +    mpool_module->resources.regcache_clean(base, size);
> > +
> > +    return OMPI_SUCCESS;
> > +}
> > +
> > +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t *mpool)
> > +{
> > +    ;
> > +}
> > +
> > +int mca_mpool_fake_ft_event(int state)
> > +{
> > +    return OMPI_SUCCESS;
> > +}
> > _______________________________________________
> > svn-full mailing list
> > svn-f...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/svn-full
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel

Reply via email to