New tools and 4.6.99.3
Steven Johnson
sjohnson at sakuraindustries.com
Thu Apr 27 21:00:50 UTC 2006
That was option #2 :)
I originally thought of doing that, but it seemed a little excessive
having a new .c file for a single function, that just wrapped a call to
malloc. That would also mean messing with the automake stuff, which im
far from comfortable doing. But if thats what is preferred, I dont have
any problems changing it to be that way, ill work it up this morning and
post an alternate patch.
Steven
Eric Norum wrote:
> 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 <mailto: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 <mailto:norume at aps.anl.gov>>
>
> Advanced Photon Source
>
> Argonne National Laboratory
>
> (630) 252-4793
>
>
>
>
More information about the users
mailing list