svn commit: r243215 - user/andre/tcp_workqueue/sys/sys

mdf at FreeBSD.org mdf at FreeBSD.org
Mon Nov 19 17:01:50 UTC 2012


On Mon, Nov 19, 2012 at 5:33 AM, Andre Oppermann <andre at freebsd.org> wrote:
> On 19.11.2012 12:45, Gleb Smirnoff wrote:
>>
>> On Sun, Nov 18, 2012 at 12:17:07PM +0000, Andre Oppermann wrote:
>> A> Author: andre
>> A> Date: Sun Nov 18 12:17:07 2012
>> A> New Revision: 243215
>> A> URL: http://svnweb.freebsd.org/changeset/base/243215
>> A>
>> A> Log:
>> A>   Add mtodo(m, o, t) macro taking an additional offset into
>> A>   the mbuf data section before the casting to type 't'.
>>
>> IMHO, argument order of (m, t, o) is more intuitive, since
>> matches order of mtod().
>
>
> Yes, but that looks rather horrible and counter-intuitive:
>
>  th = mtodo(m, struct tcphdr *, 20);
>
> vs.
>
>  th = mtodo(m, 20, struct tcphdr *);
>
> Reads m->m_data at offset 20 is struct tcphdr.
>
> Naming it mtood() wasn't convincing either. ;-)

Why a cast at all?  Perpetuating the mistake of mtod()'s casting isn't
necessary.  mtod() can't be fixed for source reasons, but the new one
doesn't need to cast.  Since C automatically casts from void * to any
other pointer, the code gets shorter (usually) too:

th = mtodo(m, 20);

Not that I care much, it's just if we're having a bikeshed I have my
favorite colors. :-)

Cheers,
matthew

>> A>
>> A> Modified:
>> A>   user/andre/tcp_workqueue/sys/sys/mbuf.h
>> A>
>> A> Modified: user/andre/tcp_workqueue/sys/sys/mbuf.h
>> A>
>> ==============================================================================
>> A> --- user/andre/tcp_workqueue/sys/sys/mbuf.h  Sun Nov 18 12:16:50 2012
>> (r243214)
>> A> +++ user/andre/tcp_workqueue/sys/sys/mbuf.h  Sun Nov 18 12:17:07 2012
>> (r243215)
>> A> @@ -64,8 +64,10 @@
>> A>   * type:
>> A>   *
>> A>   * mtod(m, t)       -- Convert mbuf pointer to data pointer of correct
>> type.
>> A> + * mtodo(m, o, t) - Same as above but with offset 'o' into data.
>> A>   */
>> A>  #define     mtod(m, t)      ((t)((m)->m_data))
>> A> +#define     mtodo(m, o, t)  ((t)(((m)->m_data) + (o)))
>> A>
>> A>  /*
>> A>   * Argument structure passed to UMA routines during mbuf and packet
>>
>


More information about the svn-src-user mailing list