Advice on a multithreaded netisr patch?

Garrett Wollman wollman at hergotha.csail.mit.edu
Tue Apr 7 13:12:05 PDT 2009


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

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

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.

-GAWollman


More information about the freebsd-net mailing list