Advice on a multithreaded netisr patch?

Garrett Wollman wollman at
Tue Apr 7 13:12:05 PDT 2009

In article <alpine.BSF.2.00.0904061238250.34905 at>,
Robert Watson writes:

>m_pullup() has to do with mbuf chain memory contiguity during packet 

Historically, m_pullup() also had one other extremely important
function: to make sure that the header data you were about to modify
was not stored in a (possibly shared) cluster.  Thus, in the input
path for a typical driver which puts the whole packet into a cluster,
the very first m_pullup() would allocate a new plain mbuf, carefully
align the data pointer to allow for both prepending more headers and
pulling more header data out, and copy the requested data into the
internal buffer of the mbuf.


More information about the freebsd-net mailing list