Author: glebius
Date: Thu Jan 31 22:37:28 2019
New Revision: 343627
URL: https://svnweb.freebsd.org/changeset/base/343627

Log:
  Add new m_ext type for data for M_NOFREE mbufs, which doesn't actually do
  anything except several assertions.  This type is going to be used for
  temporary on stack mbufs, that point into data in receive ring of a NIC,
  that shall not be freed.  Such mbuf can not be stored or reallocated, its
  life time is current context.

Modified:
  head/sys/kern/kern_mbuf.c
  head/sys/sys/mbuf.h

Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c   Thu Jan 31 22:27:39 2019        (r343626)
+++ head/sys/kern/kern_mbuf.c   Thu Jan 31 22:37:28 2019        (r343627)
@@ -847,7 +847,8 @@ mb_free_ext(struct mbuf *m)
         */
        if (m->m_flags & M_NOFREE) {
                freembuf = 0;
-               KASSERT(m->m_ext.ext_type == EXT_EXTREF,
+               KASSERT(m->m_ext.ext_type == EXT_EXTREF ||
+                   m->m_ext.ext_type == EXT_RXRING,
                    ("%s: no-free mbuf %p has wrong type", __func__, m));
        } else
                freembuf = 1;
@@ -890,6 +891,10 @@ mb_free_ext(struct mbuf *m)
                        KASSERT(m->m_ext.ext_free != NULL,
                            ("%s: ext_free not set", __func__));
                        m->m_ext.ext_free(m);
+                       break;
+               case EXT_RXRING:
+                       KASSERT(m->m_ext.ext_free == NULL,
+                           ("%s: ext_free is set", __func__));
                        break;
                default:
                        KASSERT(m->m_ext.ext_type == 0,

Modified: head/sys/sys/mbuf.h
==============================================================================
--- head/sys/sys/mbuf.h Thu Jan 31 22:27:39 2019        (r343626)
+++ head/sys/sys/mbuf.h Thu Jan 31 22:37:28 2019        (r343627)
@@ -443,6 +443,7 @@ struct mbuf {
 #define        EXT_JUMBO16     5       /* jumbo cluster 16184 bytes */
 #define        EXT_PACKET      6       /* mbuf+cluster from packet zone */
 #define        EXT_MBUF        7       /* external mbuf reference */
+#define        EXT_RXRING      8       /* data in NIC receive ring */
 
 #define        EXT_VENDOR1     224     /* for vendor-internal use */
 #define        EXT_VENDOR2     225     /* for vendor-internal use */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to