Module Name:    src
Committed By:   christos
Date:           Tue Oct  4 14:13:21 UTC 2016

Modified Files:
        src/sys/kern: uipc_mbuf.c
        src/sys/sys: mbuf.h

Log Message:
Hide MFREE now that it is not being used anymore and provide some debugging
for the location of the last free for debugging kernels.


To generate a diff of this commit:
cvs rdiff -u -r1.168 -r1.169 src/sys/kern/uipc_mbuf.c
cvs rdiff -u -r1.166 -r1.167 src/sys/sys/mbuf.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/uipc_mbuf.c
diff -u src/sys/kern/uipc_mbuf.c:1.168 src/sys/kern/uipc_mbuf.c:1.169
--- src/sys/kern/uipc_mbuf.c:1.168	Wed Jun 15 22:38:40 2016
+++ src/sys/kern/uipc_mbuf.c	Tue Oct  4 10:13:21 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_mbuf.c,v 1.168 2016/06/16 02:38:40 ozaki-r Exp $	*/
+/*	$NetBSD: uipc_mbuf.c,v 1.169 2016/10/04 14:13:21 christos Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.168 2016/06/16 02:38:40 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.169 2016/10/04 14:13:21 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_mbuftrace.h"
@@ -635,28 +635,6 @@ m_clget(struct mbuf *m, int nowait)
 	MCLGET(m, nowait);
 }
 
-struct mbuf *
-m_free(struct mbuf *m)
-{
-	struct mbuf *n;
-
-	MFREE(m, n);
-	return (n);
-}
-
-void
-m_freem(struct mbuf *m)
-{
-	struct mbuf *n;
-
-	if (m == NULL)
-		return;
-	do {
-		MFREE(m, n);
-		m = n;
-	} while (m);
-}
-
 #ifdef MBUFTRACE
 /*
  * Walk a chain of mbufs, claiming ownership of each mbuf in the chain.
@@ -1935,3 +1913,79 @@ m_claim(struct mbuf *m, struct mowner *m
 	mowner_claim(m, mo);
 }
 #endif /* defined(MBUFTRACE) */
+
+/*
+ * MFREE(struct mbuf *m, struct mbuf *n)
+ * Free a single mbuf and associated external storage.
+ * Place the successor, if any, in n.
+ */
+#define	MFREE(f, l, m, n)						\
+	mowner_revoke((m), 1, (m)->m_flags);				\
+	mbstat_type_add((m)->m_type, -1);				\
+	if ((m)->m_flags & M_PKTHDR)					\
+		m_tag_delete_chain((m), NULL);				\
+	(n) = (m)->m_next;						\
+	if ((m)->m_flags & M_EXT) {					\
+		m_ext_free((m));					\
+	} else {							\
+		MBUFFREE(f, l, m);					\
+	}								\
+
+#ifdef DEBUG
+#define MBUFFREE(f, l, m)						\
+	do {								\
+		if ((m)->m_type == MT_FREE)				\
+			panic("mbuf was already freed at %s,%d", 	\
+			    m->m_data, m->m_len);			\
+		(m)->m_type = MT_FREE;					\
+		(m)->m_data = __UNCONST(f);				\
+		(m)->m_len = l;						\
+		pool_cache_put(mb_cache, (m));				\
+	} while (/*CONSTCOND*/0)
+
+#else
+#define MBUFFREE(f, l, m)						\
+	do {								\
+		KASSERT((m)->m_type != MT_FREE);			\
+		(m)->m_type = MT_FREE;					\
+		pool_cache_put(mb_cache, (m));				\
+	} while (/*CONSTCOND*/0)
+#endif
+
+struct mbuf *
+m__free(const char *f, int l, struct mbuf *m)
+{
+	struct mbuf *n;
+
+	MFREE(f, l, m, n);
+	return (n);
+}
+
+void
+m__freem(const char *f, int l, struct mbuf *m)
+{
+	struct mbuf *n;
+
+	if (m == NULL)
+		return;
+	do {
+		MFREE(f, l, m, n);
+		m = n;
+	} while (m);
+}
+
+#undef m_free
+struct mbuf *m_free(struct mbuf *);
+struct mbuf *
+m_free(struct mbuf *m)
+{
+	return m__free(__func__, __LINE__, m);
+}
+
+#undef m_freem
+void m_freem(struct mbuf *);
+void
+m_freem(struct mbuf *m)
+{
+	m__freem(__func__, __LINE__, m);
+}

Index: src/sys/sys/mbuf.h
diff -u src/sys/sys/mbuf.h:1.166 src/sys/sys/mbuf.h:1.167
--- src/sys/sys/mbuf.h:1.166	Mon Jun 20 23:07:54 2016
+++ src/sys/sys/mbuf.h	Tue Oct  4 10:13:21 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: mbuf.h,v 1.166 2016/06/21 03:07:54 ozaki-r Exp $	*/
+/*	$NetBSD: mbuf.h,v 1.167 2016/10/04 14:13:21 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -573,25 +573,6 @@ do {									\
 } while (/* CONSTCOND */ 0)
 
 /*
- * MFREE(struct mbuf *m, struct mbuf *n)
- * Free a single mbuf and associated external storage.
- * Place the successor, if any, in n.
- */
-#define	MFREE(m, n)							\
-	mowner_revoke((m), 1, (m)->m_flags);				\
-	mbstat_type_add((m)->m_type, -1);				\
-	if ((m)->m_flags & M_PKTHDR)					\
-		m_tag_delete_chain((m), NULL);				\
-	(n) = (m)->m_next;						\
-	if ((m)->m_flags & M_EXT) {					\
-		m_ext_free((m));						\
-	} else {							\
-		KASSERT((m)->m_type != MT_FREE);				\
-		(m)->m_type = MT_FREE;					\
-		pool_cache_put(mb_cache, (m));				\
-	}								\
-
-/*
  * Copy mbuf pkthdr from `from' to `to'.
  * `from' must have M_PKTHDR set, and `to' must be empty.
  */
@@ -849,7 +830,6 @@ struct	mbuf *m_copypacket(struct mbuf *,
 struct	mbuf *m_devget(char *, int, int, struct ifnet *,
 			    void (*copy)(const void *, void *, size_t));
 struct	mbuf *m_dup(struct mbuf *, int, int, int);
-struct	mbuf *m_free(struct mbuf *);
 struct	mbuf *m_get(int, int);
 struct	mbuf *m_getclr(int, int);
 struct	mbuf *m_gethdr(int, int);
@@ -871,7 +851,15 @@ struct	mbuf *m_copyback_cow(struct mbuf 
 int 	m_makewritable(struct mbuf **, int, int, int);
 struct	mbuf *m_getcl(int, int, int);
 void	m_copydata(struct mbuf *, int, int, void *);
+struct	mbuf *m__free(const char *, int, struct mbuf *);
+void	m__freem(const char *, int, struct mbuf *);
+#ifdef DEBUG
+#define m_free(m)	m__free(__func__, __LINE__, m)
+#define m_freem(m)	m__freem(__func__, __LINE__, m)
+#else
+struct	mbuf *m_free(struct mbuf *);
 void	m_freem(struct mbuf *);
+#endif
 void	m_reclaim(void *, int);
 void	mbinit(void);
 void	m_ext_free(struct mbuf *);

Reply via email to