New tools and 4.6.99.3

Eric Norum norume at aps.anl.gov
Thu Apr 27 20:47:04 UTC 2006


I don't see why you need to make weak references to malloc_mbuf().   
Just placing malloc_mbuf() in its own source file would be  
adequate.   When the link editor gets to the archive library  
containing the corresponding object file it will simply leave the  
file alone if it does not satisfy any undefined references -- it the  
application has already supplied malloc_mbuf() this will be the case  
and the linker will use the application-supplied routine.   If the  
application has not supplied malloc_mbuf() the linker will see that  
the object file defines this symbol and pull the code from the library.
On Apr 26, 2006, at 10:56 PM, Steven Johnson wrote:

> Further to my earlier post:
>
> Steven Johnson wrote:
>
>> Id also like the ability to statically allocate mbuf's (and  
>> friends) in
>> the network stack.  I'm working on a generic way of doing this,
>> currently I just hack the code around to achieve what i need.  If  
>> i come
>> up with something generic ill post it.
>>
>>
> Attached for comment is a proposal to change the malloc's of mbuf
> related structures into calls to malloc_mbuf which is declared  
> weak, so
> the application can provide its own.  In this way, the application  
> could
> provide the address of pre-allocated static buffers for this data,  
> which
> is what I need to do.  By default if the application does not provide
> its own mbuf_malloc, the default is just to malloc, like it does  
> now.  I
> havent tested this yet (it does apply cleanly and build OK though),  
> its
> just attached for comment.
>
>> LibChip:
>>
>> LibChip is pretty much useless for me, and I would prefer not to  
>> build
>> it.  There is no option to not build LibChip, although the ./ 
>> configure
>> system indicates it would be desirable.  I agree.  Currently a ATA
>> driver in libchip wont build for me, I think because I'm using a bare
>> bsp.  It would be useful for me to just disable it.  Any chance of  
>> this
>> becoming an option so i wont have to patch the source tree to  
>> remove it
>> from the build?
>>
>>
> Ive attached a small patch to configure and configure.ac which  
> prevents
> libchip being built for "bare" bsp's in addition to "posix" bsp's.  I
> think a better approach would be a --disable-libchip option, but this
> patch to ./configure.ac taxed my total ability to understand ./ 
> configure
> stuff, so im not in a position to even know where to start to add it.
>
> This one does what it should, but I think it could be better.  At the
> very least I think this should be the default behavior for "bare"  
> BSP's.
>
> Steven J
> diff -Naur rtems-4.6.99.3/cpukit/libnetworking/rtems/rtems_bsdnet.h  
> rtems-4.6.99.3-mbuf-allocate-customise/cpukit/libnetworking/rtems/ 
> rtems_bsdnet.h
> --- rtems-4.6.99.3/cpukit/libnetworking/rtems/rtems_bsdnet.h	 
> 2005-11-09 01:24:28.000000000 +1100
> +++ rtems-4.6.99.3-mbuf-allocate-customise/cpukit/libnetworking/ 
> rtems/rtems_bsdnet.h	2006-04-27 14:41:01.000000000 +1100
> @@ -260,4 +260,20 @@
>   */
>  void rtems_bsdnet_malloc_starvation(void);
>
> +/*
> + * mbuf malloc interface to enable custom allocation of mbuf's
> + *
> + * May be declared in user code.  If not, then the default is to
> + * malloc.
> + */
> +void* malloc_mbuf(size_t size, int type);
> +
> +/*
> + * Possible values of the type parameter to malloc_mbuf to assist
> + * in allocation of the structure.
> + */
> +#define MBUF_MALLOC_NMBCLUSTERS (0)
> +#define MBUF_MALLOC_MCLREFCNT   (1)
> +#define MBUF_MALLOC_MBUF        (2)
> +
>  #endif /* _RTEMS_BSDNET_H */
> diff -Naur rtems-4.6.99.3/cpukit/libnetworking/rtems/rtems_glue.c  
> rtems-4.6.99.3-mbuf-allocate-customise/cpukit/libnetworking/rtems/ 
> rtems_glue.c
> --- rtems-4.6.99.3/cpukit/libnetworking/rtems/rtems_glue.c	 
> 2005-02-03 16:35:38.000000000 +1100
> +++ rtems-4.6.99.3-mbuf-allocate-customise/cpukit/libnetworking/ 
> rtems/rtems_glue.c	2006-04-27 14:26:16.000000000 +1100
> @@ -138,6 +138,19 @@
>  }
>
>  /*
> + * Default allocator for mbuf data. Over-ride in user code to change
> + * the way mbuf's are allocated.
> + */
> +
> +void* malloc_mbuf(size_t size, int type) __attribute__ ((__weak__));
> +
> +void* malloc_mbuf(size_t size, int type)
> +{
> +   return malloc(size);
> +}
> +
> +
> +/*
>   * Do the initializations required by the BSD code
>   */
>  static int
> @@ -149,7 +162,7 @@
>  	/*
>  	 * Set up mbuf cluster data strutures
>  	 */
> -	p = malloc ((nmbclusters*MCLBYTES)+MCLBYTES-1);
> +	p = malloc_mbuf ((nmbclusters*MCLBYTES)+MCLBYTES-1,  
> MBUF_MALLOC_NMBCLUSTERS);
>  	if (p == NULL) {
>  		printf ("Can't get network cluster memory.\n");
>  		return -1;
> @@ -163,7 +176,7 @@
>  		mbstat.m_clfree++;
>  	}
>  	mbstat.m_clusters = nmbclusters;
> -	mclrefcnt = malloc (nmbclusters);
> +	mclrefcnt = malloc_mbuf (nmbclusters, MBUF_MALLOC_MCLREFCNT);
>  	if (mclrefcnt == NULL) {
>  		printf ("Can't get mbuf cluster reference counts memory.\n");
>  		return -1;
> @@ -174,7 +187,7 @@
>  	 * Set up mbuf data structures
>  	 */
>
> -	p = malloc(nmbuf * MSIZE + MSIZE - 1);
> +	p = malloc_mbuf(nmbuf * MSIZE + MSIZE - 1,MBUF_MALLOC_MBUF);
>  	p = (char *)(((unsigned int)p + MSIZE - 1) & ~(MSIZE - 1));
>  	if (p == NULL) {
>  		printf ("Can't get network memory.\n");
> diff -Naur rtems-4.6.99.3/c/src/configure rtems-4.6.99.3-nolibchip/ 
> c/src/configure
> --- rtems-4.6.99.3/c/src/configure	2006-04-19 13:57:50.000000000 +1100
> +++ rtems-4.6.99.3-nolibchip/c/src/configure	2006-04-27  
> 13:48:38.000000000 +1100
> @@ -4,8 +4,7 @@
>  #
>  # Report bugs to <rtems-bugs at rtems.com>.
>  #
> -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,  
> 2002,
> -# 2003, 2004 Free Software Foundation, Inc.
> +# Copyright (C) 2003 Free Software Foundation, Inc.
>  # This configure script is free software; the Free Software  
> Foundation
>  # gives unlimited permission to copy, distribute and modify it.
>  ## --------------------- ##
> @@ -981,7 +980,7 @@
>      else
>        echo "$as_me: WARNING: no configuration information is in  
> $ac_dir" >&2
>      fi
> -    cd "$ac_popdir"
> +    cd $ac_popdir
>    done
>  fi
>
> @@ -991,8 +990,7 @@
>  rtems-c-src configure 4.6.99.3
>  generated by GNU Autoconf 2.59
>
> -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
> -2003, 2004 Free Software Foundation, Inc.
> +Copyright (C) 2003 Free Software Foundation, Inc.
>  This configure script is free software; the Free Software Foundation
>  gives unlimited permission to copy, distribute and modify it.
>  _ACEOF
> @@ -4904,11 +4902,12 @@
>  fi
>
>
> -# The posix bsp doesn't support libchip
> +# The posix and bare bsp doesn't support libchip
>  # FIXME: We should use a feature based check, here
>
>
> -if test "$RTEMS_BSP_FAMILY" != "posix"; then
> +if test "$RTEMS_BSP_FAMILY" != "posix" \
> + && test "$RTEMS_BSP_FAMILY" != "bare"; then
>    LIBCHIP_TRUE=
>    LIBCHIP_FALSE='#'
>  else
> @@ -5608,7 +5607,7 @@
>  configured by $0, generated by GNU Autoconf 2.59,
>    with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\ 
> \\&/g'`\\"
>
> -Copyright (C) 2004 Free Software Foundation, Inc.
> +Copyright (C) 2003 Free Software Foundation, Inc.
>  This config.status script is free software; the Free Software  
> Foundation
>  gives unlimited permission to copy, distribute and modify it."
>  srcdir=$srcdir
> @@ -7063,7 +7062,7 @@
>     { (exit 1); exit 1; }; }
>      fi
>
> -    cd "$ac_popdir"
> +    cd $ac_popdir
>    done
>  fi
>
> diff -Naur rtems-4.6.99.3/c/src/configure.ac rtems-4.6.99.3- 
> nolibchip/c/src/configure.ac
> --- rtems-4.6.99.3/c/src/configure.ac	2005-11-20 19:07:55.000000000  
> +1100
> +++ rtems-4.6.99.3-nolibchip/c/src/configure.ac	2006-04-27  
> 13:48:29.000000000 +1100
> @@ -233,9 +233,10 @@
>
>  AM_CONDITIONAL(HAS_POSIX,test "$HAS_POSIX_API" = "yes")
>
> -# The posix bsp doesn't support libchip
> +# The posix and bare bsp doesn't support libchip
>  # FIXME: We should use a feature based check, here
> -AM_CONDITIONAL([LIBCHIP],[test "$RTEMS_BSP_FAMILY" != "posix"])
> +AM_CONDITIONAL([LIBCHIP],[test "$RTEMS_BSP_FAMILY" != "posix" \
> + && test "$RTEMS_BSP_FAMILY" != "bare"])
>
>  # The bare bsp doesn't have libbsp.a
>  # FIXME: We should use a feature based check, here

-- 
Eric Norum <norume at aps.anl.gov>
Advanced Photon Source
Argonne National Laboratory
(630) 252-4793






More information about the users mailing list