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>
