From: Olivier MATZ <olivier.matz@6wind.com>
To: Cyril Chemparathy <cchemparathy@ezchip.com>, dev@dpdk.org
Subject: Re: [PATCH 08/10] librte_mbuf: Add rte_pktmbuf_mtod_offset()
Date: Fri, 19 Jun 2015 17:58:59 +0200 [thread overview]
Message-ID: <55843C43.6090204@6wind.com> (raw)
In-Reply-To: <1430324134-25654-9-git-send-email-cchemparathy@ezchip.com>
On 04/29/2015 06:15 PM, Cyril Chemparathy wrote:
> There are a number of instances in the code where rte_pktmbuf_mtod() is used
> to get the mbuf data pointer, only to add an offset before casting the result
> to some other header type. This patch adds a new rte_pktmbuf_mtod_offset()
> macro to eliminate these awful double cast situations.
>
> Signed-off-by: Cyril Chemparathy <cchemparathy@ezchip.com>
> ---
> lib/librte_mbuf/rte_mbuf.h | 20 +++++++++++++++++++-
> 1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> index 5ddd8dd..e8f1bf4 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -54,6 +54,7 @@
> */
>
> #include <stdint.h>
> +#include <rte_common.h>
> #include <rte_mempool.h>
> #include <rte_memory.h>
> #include <rte_atomic.h>
> @@ -1071,6 +1072,23 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m)
> }
>
> /**
> + * A macro that points to an offset into the data in the mbuf.
> + *
> + * The returned pointer is cast to type t. Before using this
> + * function, the user must ensure that m_headlen(m) is large enough to
> + * read its data.
Small comment here: m_headlen(m) should be replaced by "the length of
the first segment". Indeed, there is no m_headlen() function (I see that
it is coming from a copy/paste of the mtod() comment). Could you
also fix it by the way?
> + *
> + * @param m
> + * The packet mbuf.
> + * @param o
> + * The offset into the mbuf data.
> + * @param t
> + * The type to cast the result into.
> + */
> +#define rte_pktmbuf_mtod_offset(m, t, o) \
> + ((t)((char *)(m)->buf_addr + (m)->data_off + (o)))
> +
> +/**
> * A macro that points to the start of the data in the mbuf.
> *
> * The returned pointer is cast to type t. Before using this
> @@ -1082,7 +1100,7 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m)
> * @param t
> * The type to cast the result into.
> */
> -#define rte_pktmbuf_mtod(m, t) ((t)((char *)(m)->buf_addr + (m)->data_off))
> +#define rte_pktmbuf_mtod(m, t) rte_pktmbuf_mtod_offset(m, t, 0)
>
> /**
> * A macro that returns the length of the packet.
>
next prev parent reply other threads:[~2015-06-19 15:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-29 16:15 [PATCH 00/10] Improve cast alignment for strict aligned machines Cyril Chemparathy
[not found] ` <1430324134-25654-1-git-send-email-cchemparathy-d5a29ZRxExrQT0dZR+AlfA@public.gmane.org>
2015-04-29 16:15 ` [PATCH 01/10] eal: add and use unaligned integer types Cyril Chemparathy
2015-06-19 15:58 ` Olivier MATZ
2015-06-19 17:18 ` Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 02/10] mempool: silence -Wcast-align on pointer arithmetic Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 03/10] hash: " Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 04/10] mbuf: " Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 05/10] ethdev: " Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 06/10] app/test-pmd: pack simple_gre_hdr Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 07/10] app/test: use struct ether_addr instead of a byte array cast Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 08/10] librte_mbuf: Add rte_pktmbuf_mtod_offset() Cyril Chemparathy
2015-06-19 15:58 ` Olivier MATZ [this message]
2015-06-19 17:18 ` Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 09/10] librte_mbuf: Add transform for rte_pktmbuf_mtod_offset() Cyril Chemparathy
2015-04-29 16:15 ` [PATCH 10/10] librte_mbuf: Apply mtod-offset.cocci transform Cyril Chemparathy
2015-05-04 9:50 ` [PATCH 00/10] Improve cast alignment for strict aligned machines Olivier MATZ
[not found] ` <554740D1.4050104-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2015-05-04 17:26 ` Cyril Chemparathy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55843C43.6090204@6wind.com \
--to=olivier.matz@6wind.com \
--cc=cchemparathy@ezchip.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.