On Fri, Sep 09, 2016 at 09:49:06AM +0530, Shreyansh Jain wrote: > Hi Ferruh, > > On Thursday 08 September 2016 07:46 PM, Ferruh Yigit wrote: > >On 9/7/2016 3:07 PM, Shreyansh Jain wrote: > >>Signed-off-by: Jan Viktorin <viktorin at rehivetech.com> > >>Signed-off-by: Shreyansh Jain <shreyansh.jain at nxp.com> > >>--- > >> lib/librte_eal/common/include/rte_common.h | 21 +++++++++++++++++++++ > >> 1 file changed, 21 insertions(+) > >> > >>diff --git a/lib/librte_eal/common/include/rte_common.h > >>b/lib/librte_eal/common/include/rte_common.h > >>index 332f2a4..c5d94f3 100644 > >>--- a/lib/librte_eal/common/include/rte_common.h > >>+++ b/lib/librte_eal/common/include/rte_common.h > >>@@ -322,6 +322,27 @@ rte_bsf32(uint32_t v) > >> #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) > >> #endif > >> > >>+/** > >>+ * Return pointer to the wrapping struct instance. > >>+ * Example: > >>+ * > >>+ * struct wrapper { > >>+ * ... > >>+ * struct child c; > >>+ * ... > >>+ * }; > >>+ * > >>+ * struct child *x = obtain(...); > >>+ * struct wrapper *w = container_of(x, struct wrapper, c); > >>+ * > >>+ * Some implementation already have this defined, thus, conditional > >>+ * declaration. > >>+ */ > >>+#ifndef container_of > >>+#define container_of(p, type, member) \ > >>+ ((type *) (((char *) (p)) - offsetof(type, member))) > >>+#endif > >>+ > >> #define _RTE_STR(x) #x > >> /** Take a macro value and get a string version of it */ > >> #define RTE_STR(x) _RTE_STR(x) > >> > > > >Some mlx5 files includes dpdk version of container_of first, they > >produce following warning: > > > >In file included from .../dpdk/build/include/rte_mbuf.h:57:0, > > from .../dpdk/build/include/rte_ether.h:52, > > from .../dpdk/drivers/net/mlx5/mlx5_trigger.c:38: > >/usr/include/infiniband/verbs.h: In function ?verbs_get_device?: > >..../dpdk/build/include/rte_common.h:343:14: warning: cast discards > >?const? qualifier from pointer target type [-Wcast-qual] > > ((type *) (((char *) (p)) - offsetof(type, member))) > > > >The verbs.h version of container_of is same with dpdk one, I am not able > >to find why one gives warning but other not. > > Thanks for highlighting. I am setting up my environment and will have a > look.
This warning is a known issue in the Verbs header that will be addressed eventually. It occurs even without Shreyansh's patch (more likely when CONFIG_RTE_LIBRTE_MLX4_DEBUG and/or CONFIG_RTE_LIBRTE_MLX5_DEBUG are enabled). Your container_of() macro is fine, no need to spend time on this. -- Adrien Mazarguil 6WIND