Page MenuHomeFreeBSD

D5682.id14477.diff
No OneTemporary

D5682.id14477.diff

Index: share/dtrace/Makefile
===================================================================
--- share/dtrace/Makefile
+++ share/dtrace/Makefile
@@ -30,4 +30,10 @@
SCRIPTSDIR= ${SHAREDIR}/dtrace
+DSRCS= mbuf.d
+
+FILES= ${DSRCS}
+FILESDIR= /usr/lib/dtrace
+FILESMODE= ${NOBINMODE}
+
.include <bsd.prog.mk>
Index: sys/kern/kern_mbuf.c
===================================================================
--- sys/kern/kern_mbuf.c
+++ sys/kern/kern_mbuf.c
@@ -731,6 +731,7 @@
zone_drain(zone_pack);
uma_zalloc_arg(zone_clust, m, how);
}
+ MBUF_PROBE2(m__clget, m, how);
return (m->m_flags & M_EXT);
}
@@ -745,7 +746,8 @@
m_cljget(struct mbuf *m, int how, int size)
{
uma_zone_t zone;
-
+ void *retval;
+
if (m != NULL) {
KASSERT((m->m_flags & M_EXT) == 0, ("%s: mbuf %p has M_EXT",
__func__, m));
@@ -753,7 +755,11 @@
}
zone = m_getzone(size);
- return (uma_zalloc_arg(zone, m, how));
+ retval = uma_zalloc_arg(zone, m, how);
+
+ MBUF_PROBE3(m__cljget, m, how, size);
+
+ return (retval);
}
/*
@@ -933,6 +939,7 @@
void
m_freem(struct mbuf *mb)
{
+ MBUF_PROBE1(m__freem, mb);
while (mb != NULL)
mb = m_free(mb);
Index: sys/kern/uipc_mbuf.c
===================================================================
--- sys/kern/uipc_mbuf.c
+++ sys/kern/uipc_mbuf.c
@@ -47,6 +47,46 @@
#include <sys/domain.h>
#include <sys/protosw.h>
#include <sys/uio.h>
+#include <sys/sdt.h>
+
+SDT_PROVIDER_DEFINE(mbuf);
+
+SDT_PROBE_DEFINE5_XLATE(mbuf, , , m__init,
+ "struct mbuf *", "mbufinfo_t *",
+ "uint32_t", "uint32_t",
+ "uint16_t", "uint16_t",
+ "uint32_t", "uint32_t",
+ "uint32_t", "uint32_t");
+
+SDT_PROBE_DEFINE3_XLATE(mbuf, , , m__gethdr,
+ "uint32_t", "uint32_t",
+ "uint16_t", "uint16_t",
+ "struct mbuf *", "mbufinfo_t *");
+
+SDT_PROBE_DEFINE3_XLATE(mbuf, , , m__get,
+ "uint32_t", "uint32_t",
+ "uint16_t", "uint16_t",
+ "struct mbuf *", "mbufinfo_t *");
+
+SDT_PROBE_DEFINE4_XLATE(mbuf, , , m__getcl,
+ "uint32_t", "uint32_t",
+ "uint16_t", "uint16_t",
+ "uint32_t", "uint32_t",
+ "struct mbuf *", "mbufinfo_t *");
+
+SDT_PROBE_DEFINE3_XLATE(mbuf, , , m__clget,
+ "struct mbuf *", "mbufinfo_t *",
+ "uint32_t", "uint32_t",
+ "uint32_t", "uint32_t");
+
+SDT_PROBE_DEFINE(mbuf, , , m__cljget);
+SDT_PROBE_DEFINE(mbuf, , , m__cljset);
+
+SDT_PROBE_DEFINE1_XLATE(mbuf, , , m__free,
+ "struct mbuf *", "mbufinfo_t *");
+
+SDT_PROBE_DEFINE1_XLATE(mbuf, , , m__freem,
+ "struct mbuf *", "mbufinfo_t *");
#include <security/mac/mac_framework.h>
Index: sys/sys/mbuf.h
===================================================================
--- sys/sys/mbuf.h
+++ sys/sys/mbuf.h
@@ -44,6 +44,34 @@
#endif
#endif
+#ifdef _KERNEL
+#include <sys/sdt.h>
+
+#define MBUF_PROBE1(probe, arg0) \
+ SDT_PROBE1(mbuf, , , probe, arg0)
+#define MBUF_PROBE2(probe, arg0, arg1) \
+ SDT_PROBE2(mbuf, , , probe, arg0, arg1)
+#define MBUF_PROBE3(probe, arg0, arg1, arg2) \
+ SDT_PROBE3(mbuf, , , probe, arg0, arg1, arg2)
+#define MBUF_PROBE4(probe, arg0, arg1, arg2, arg3) \
+ SDT_PROBE4(mbuf, , , probe, arg0, arg1, arg2, arg3)
+#define MBUF_PROBE5(probe, arg0, arg1, arg2, arg3, arg4) \
+ SDT_PROBE5(mbuf, , , probe, arg0, arg1, arg2, arg3, arg4)
+
+SDT_PROVIDER_DECLARE(mbuf);
+
+SDT_PROBE_DECLARE(mbuf, , , m__init);
+SDT_PROBE_DECLARE(mbuf, , , m__gethdr);
+SDT_PROBE_DECLARE(mbuf, , , m__get);
+SDT_PROBE_DECLARE(mbuf, , , m__getcl);
+SDT_PROBE_DECLARE(mbuf, , , m__clget);
+SDT_PROBE_DECLARE(mbuf, , , m__cljget);
+SDT_PROBE_DECLARE(mbuf, , , m__cljset);
+SDT_PROBE_DECLARE(mbuf, , , m__free);
+SDT_PROBE_DECLARE(mbuf, , , m__freem);
+
+#endif /* _KERNEL */
+
/*
* Mbufs are of a single size, MSIZE (sys/param.h), which includes overhead.
* An mbuf may add a single "mbuf cluster" of size MCLBYTES (also in
@@ -664,7 +692,7 @@
static __inline int
m_init(struct mbuf *m, int how, short type, int flags)
{
- int error;
+ int error = 0;
m->m_next = NULL;
m->m_nextpkt = NULL;
@@ -673,41 +701,50 @@
m->m_flags = flags;
m->m_type = type;
if (flags & M_PKTHDR) {
- if ((error = m_pkthdr_init(m, how)) != 0)
- return (error);
+ error = m_pkthdr_init(m, how);
}
- return (0);
+ MBUF_PROBE5(m__init, m, how, type, flags, error);
+ return (error);
}
static __inline struct mbuf *
m_get(int how, short type)
{
+ struct mbuf *m;
struct mb_args args;
args.flags = 0;
args.type = type;
- return (uma_zalloc_arg(zone_mbuf, &args, how));
+ m = uma_zalloc_arg(zone_mbuf, &args, how);
+ MBUF_PROBE3(m__get, how, type, m);
+ return (m);
}
static __inline struct mbuf *
m_gethdr(int how, short type)
{
+ struct mbuf *m;
struct mb_args args;
args.flags = M_PKTHDR;
args.type = type;
- return (uma_zalloc_arg(zone_mbuf, &args, how));
+ m = uma_zalloc_arg(zone_mbuf, &args, how);
+ MBUF_PROBE3(m__gethdr, how, type, m);
+ return (m);
}
static __inline struct mbuf *
m_getcl(int how, short type, int flags)
{
+ struct mbuf *m;
struct mb_args args;
args.flags = flags;
args.type = type;
- return (uma_zalloc_arg(zone_pack, &args, how));
+ m = uma_zalloc_arg(zone_pack, &args, how);
+ MBUF_PROBE4(m__getcl, how, type, flags, m);
+ return (m);
}
/*
@@ -747,6 +784,7 @@
m->m_ext.ext_flags = EXT_FLAG_EMBREF;
m->m_ext.ext_count = 1;
m->m_flags |= M_EXT;
+ MBUF_PROBE3(m__cljset, m, cl, type);
}
static __inline void
@@ -1122,6 +1160,7 @@
{
struct mbuf *n = m->m_next;
+ MBUF_PROBE1(m__free, m);
if ((m->m_flags & (M_PKTHDR|M_NOFREE)) == (M_PKTHDR|M_NOFREE))
m_tag_delete_chain(m, NULL);
if (m->m_flags & M_EXT)

File Metadata

Mime Type
text/plain
Expires
Fri, May 29, 4:53 AM (17 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33601858
Default Alt Text
D5682.id14477.diff (5 KB)

Event Timeline