Author: andre
Date: Sat Aug 24 20:26:41 2013
New Revision: 254807
URL: http://svnweb.freebsd.org/changeset/base/254807

Log:
  Compact m_hdr by packing the type and flags fields into one uint32_t.
  
  The mbuf type is an enumerator with only a handful of types in use and
  thus reduced from int to 8bits allowing for 255 types to be specified.
  Only 5 types have been in use for a long time.
  
  The flags field gets the remaining 24 bits with 12 bits for global
  persistent flags and 12 bits for protocol/layer specific overlays.
  Some of the global flags/functionality can be moved to the csum_flags
  or ext_flags bits in the future.
  
  MT_VENDOR[1-4] and MT_EXP[1-4] types for vendor-internal and
  experimental local mapping are added.
  
  The size of m_hdr shrinks from 24/40 to 20/32bytes (32/64bit architectures).
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/sys/mbuf.h

Modified: head/sys/sys/mbuf.h
==============================================================================
--- head/sys/sys/mbuf.h Sat Aug 24 20:06:00 2013        (r254806)
+++ head/sys/sys/mbuf.h Sat Aug 24 20:26:41 2013        (r254807)
@@ -82,23 +82,18 @@ struct mb_args {
 };
 #endif /* _KERNEL */
 
-#if defined(__LP64__)
-#define M_HDR_PAD    6
-#else
-#define M_HDR_PAD    2
-#endif
-
 /*
  * Header present at the beginning of every mbuf.
+ * Size ILP32: 20
+ *      LP64: 32
  */
 struct m_hdr {
        struct mbuf     *mh_next;       /* next buffer in chain */
        struct mbuf     *mh_nextpkt;    /* next chain in queue/record */
        caddr_t          mh_data;       /* location of data */
-       int              mh_len;        /* amount of data in this mbuf */
-       int              mh_flags;      /* flags; see below */
-       short            mh_type;       /* type of data in this mbuf */
-       uint8_t          pad[M_HDR_PAD];/* word align                  */
+       int32_t          mh_len;        /* amount of data in this mbuf */
+       uint32_t         mh_type:8,     /* type of data in this mbuf */
+                        mh_flags:24;   /* flags; see below */
 };
 
 /*
@@ -206,7 +201,10 @@ struct mbuf {
 #define        m_dat           M_dat.M_databuf
 
 /*
- * mbuf flags.
+ * mbuf flags of global significance and layer crossing.
+ * Those of only protocol/layer specific significance are to be mapped
+ * to M_PROTO[1-12] and cleared at layer handoff boundaries.
+ * NB: Limited to the lower 24 bits.
  */
 #define        M_EXT           0x00000001 /* has associated external storage */
 #define        M_PKTHDR        0x00000002 /* start of record */
@@ -430,12 +428,24 @@ struct mbuf {
 #define        CSUM_FRAGMENT           0x0             /* Unused */
 
 /*
- * mbuf types.
+ * mbuf types describing the content of the mbuf (including external storage).
  */
 #define        MT_NOTMBUF      0       /* USED INTERNALLY ONLY! Object is not 
mbuf */
 #define        MT_DATA         1       /* dynamic (data) allocation */
 #define        MT_HEADER       MT_DATA /* packet header, use M_PKTHDR instead 
*/
+
+#define        MT_VENDOR1      4       /* for vendor-internal use */
+#define        MT_VENDOR2      5       /* for vendor-internal use */
+#define        MT_VENDOR3      6       /* for vendor-internal use */
+#define        MT_VENDOR4      7       /* for vendor-internal use */
+
 #define        MT_SONAME       8       /* socket name */
+
+#define        MT_EXP1         9       /* for experimental use */
+#define        MT_EXP2         10      /* for experimental use */
+#define        MT_EXP3         11      /* for experimental use */
+#define        MT_EXP4         12      /* for experimental use */
+
 #define        MT_CONTROL      14      /* extra-data protocol message */
 #define        MT_OOBDATA      15      /* expedited data  */
 #define        MT_NTYPES       16      /* number of mbuf types for mbtypes[] */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to