Module Name:    src
Committed By:   maxv
Date:           Wed Sep 18 16:18:12 UTC 2019

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

Log Message:
Handle M_EXT with M_BUFADDR, and introduce M_BUFSIZE. Use them to dedup
code.


To generate a diff of this commit:
cvs rdiff -u -r1.232 -r1.233 src/sys/kern/uipc_mbuf.c
cvs rdiff -u -r1.220 -r1.221 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.232 src/sys/kern/uipc_mbuf.c:1.233
--- src/sys/kern/uipc_mbuf.c:1.232	Thu Jan 17 02:47:15 2019
+++ src/sys/kern/uipc_mbuf.c	Wed Sep 18 16:18:12 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_mbuf.c,v 1.232 2019/01/17 02:47:15 knakahara Exp $	*/
+/*	$NetBSD: uipc_mbuf.c,v 1.233 2019/09/18 16:18:12 maxv Exp $	*/
 
 /*
  * Copyright (c) 1999, 2001, 2018 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.232 2019/01/17 02:47:15 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.233 2019/09/18 16:18:12 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_mbuftrace.h"
@@ -1768,12 +1768,7 @@ m_align(struct mbuf *m, int len)
 	KASSERT(len != M_COPYALL);
 	KASSERT(M_LEADINGSPACE(m) == 0);
 
-	if (m->m_flags & M_EXT)
-		buflen = m->m_ext.ext_size;
-	else if (m->m_flags & M_PKTHDR)
-		buflen = MHLEN;
-	else
-		buflen = MLEN;
+	buflen = M_BUFSIZE(m);
 
 	KASSERT(len <= buflen);
 	adjust = buflen - len;
@@ -2210,20 +2205,12 @@ m_verify_packet(struct mbuf *m)
 
 		dat = n->m_data;
 		len = n->m_len;
-
-		if (n->m_flags & M_EXT) {
-			low = n->m_ext.ext_buf;
-			high = low + n->m_ext.ext_size;
-		} else if (n->m_flags & M_PKTHDR) {
-			low = n->m_pktdat;
-			high = low + MHLEN;
-		} else {
-			low = n->m_dat;
-			high = low + MLEN;
-		}
 		if (__predict_false(dat + len < dat)) {
 			panic("%s: incorrect length (len = %d)", __func__, len);
 		}
+
+		low = M_BUFADDR(n);
+		high = low + M_BUFSIZE(n);
 		if (__predict_false((dat < low) || (dat + len > high))) {
 			panic("%s: m_data not in packet"
 			    "(dat = %p, len = %d, low = %p, high = %p)",

Index: src/sys/sys/mbuf.h
diff -u src/sys/sys/mbuf.h:1.220 src/sys/sys/mbuf.h:1.221
--- src/sys/sys/mbuf.h:1.220	Sun Aug 25 16:38:20 2019
+++ src/sys/sys/mbuf.h	Wed Sep 18 16:18:12 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mbuf.h,v 1.220 2019/08/25 16:38:20 rmind Exp $	*/
+/*	$NetBSD: mbuf.h,v 1.221 2019/09/18 16:18:12 maxv Exp $	*/
 
 /*
  * Copyright (c) 1996, 1997, 1999, 2001, 2007 The NetBSD Foundation, Inc.
@@ -499,18 +499,23 @@ do {									\
 	mowner_ref((m), M_EXT);						\
 } while (/* CONSTCOND */ 0)
 
+#define M_BUFADDR(m)							\
+	(((m)->m_flags & M_EXT) ? (m)->m_ext.ext_buf :			\
+	    ((m)->m_flags & M_PKTHDR) ? (m)->m_pktdat : (m)->m_dat)
+
+#define M_BUFSIZE(m)							\
+	(((m)->m_flags & M_EXT) ? (m)->m_ext.ext_size :			\
+	    ((m)->m_flags & M_PKTHDR) ? MHLEN : MLEN)
+
+#define MRESETDATA(m)	(m)->m_data = M_BUFADDR(m)
+
 /*
- * Reset the data pointer on an mbuf.
+ * Compute the offset of the beginning of the data buffer of a non-ext
+ * mbuf.
  */
-#define MRESETDATA(m)							\
-do {									\
-	if ((m)->m_flags & M_EXT)					\
-		(m)->m_data = (m)->m_ext.ext_buf;			\
-	else if ((m)->m_flags & M_PKTHDR)				\
-		(m)->m_data = (m)->m_pktdat;				\
-	else								\
-		(m)->m_data = (m)->m_dat;				\
-} while (/* CONSTCOND */ 0)
+#define M_BUFOFFSET(m)							\
+	(((m)->m_flags & M_PKTHDR) ?					\
+	 offsetof(struct mbuf, m_pktdat) : offsetof(struct mbuf, m_dat))
 
 /*
  * Determine if an mbuf's data area is read-only.  This is true
@@ -556,20 +561,6 @@ do {									\
 	(M_READONLY((m)) ? 0 : _M_TRAILINGSPACE((m)))
 
 /*
- * Compute the address of an mbuf's data area.
- */
-#define M_BUFADDR(m)							\
-	(((m)->m_flags & M_PKTHDR) ? (m)->m_pktdat : (m)->m_dat)
-
-/*
- * Compute the offset of the beginning of the data buffer of a non-ext
- * mbuf.
- */
-#define M_BUFOFFSET(m)							\
-	(((m)->m_flags & M_PKTHDR) ?					\
-	 offsetof(struct mbuf, m_pktdat) : offsetof(struct mbuf, m_dat))
-
-/*
  * Arrange to prepend space of size plen to mbuf m.
  * If a new mbuf must be allocated, how specifies whether to wait.
  * If how is M_DONTWAIT and allocation fails, the original mbuf chain

Reply via email to