Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Jan 2002 05:00:04 -0500
From:      Bosko Milekic <bmilekic@technokratis.com>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        freebsd-hackers@FreeBSD.ORG, re@FreeBSD.ORG
Subject:   Re: huge MFREE() macro?
Message-ID:  <20020102050004.A402@technokratis.com>
In-Reply-To: <200201020616.g026GPE56637@apollo.backplane.com>; from dillon@apollo.backplane.com on Tue, Jan 01, 2002 at 10:16:25PM -0800
References:  <200201020616.g026GPE56637@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Tue, Jan 01, 2002 at 10:16:25PM -0800, Matthew Dillon wrote:
>     I noticed a bunch of routines use MFREE() instead of m_free() (which 
>     just calls MFREE()).  MFREE() is a huge macro.
> 
> text    data     bss     dec     hex filename
> 1986399  252380  145840 2384619  2462eb kernel
> 
> text    data     bss     dec     hex filename
> 1983343  252380  145840 2381563  2456fb kernel
> 
>     We save about 3K.  Any problems with this?  Maybe also MFC to -stable
>     to save some bytes?

  In -CURRENT, MFREE() just wraps a call to m_free().

>     (The #if 0's wouldn't be in a commit, I'd actually delete the code)
> 
>     Also, if you do a search for XXX, I think there was an MFREE in there
>     that should have been an m_freem().  Could someone check that?

  See below.

>     The patch is against -stable.
> 
> 					-Matt
> 					Matthew Dillon 
> 					<dillon@backplane.com>

[...]
> Index: i386/isa/if_lnc.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/isa/Attic/if_lnc.c,v
> retrieving revision 1.68.2.4
> diff -u -r1.68.2.4 if_lnc.c
> --- i386/isa/if_lnc.c	8 Jan 2001 15:37:59 -0000	1.68.2.4
> +++ i386/isa/if_lnc.c	2 Jan 2002 06:12:24 -0000
> @@ -839,9 +839,13 @@
>  					sc->mbuf_count++;
>  					start->buff.mbuf = 0;
>  				} else {
> +#if 0
>  					struct mbuf *junk;
>  					MFREE(start->buff.mbuf, junk);
> -					start->buff.mbuf = 0;
> +#endif
> +					/* XXX shouldn't this be m_freem ?? */
> +					m_free(start->buff.mbuf);
> +					start->buff.mbuf = NULL;

  I guess it depends on whether start->buff.mbuf is always a single mbuf
or if it ever becomes a chain. If it becomes a chain then it should
certainly be m_freem(). How about placing a loop there to traverse
forward and count the number of mbufs before m_next == NULL? And, if it
is above exactly 1, then change that to an m_freem(). Anyone using lnc?

>  				}
>  			}
>  			sc->pending_transmits--;
> @@ -1702,8 +1706,12 @@
>  						m->m_len -= chunk;
>  						m->m_data += chunk;
>  						if (m->m_len <= 0) {
> +#if 0
>  							MFREE(m, head->m_next);
>  							m = head->m_next;
> +#endif
> +							m = m_free(m);
> +							head->m_next = m;
>  						}
>  					}
>  				}

-- 
 Bosko Milekic
 bmilekic@FreeBSD.org


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020102050004.A402>