From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adrien Mazarguil Subject: Re: [PATCH v9 01/25] eal: define macro container_of Date: Fri, 9 Sep 2016 10:55:37 +0200 Message-ID: <20160909085537.GM17252@6wind.com> References: <1466510566-9240-1-git-send-email-shreyansh.jain@nxp.com> <1473257297-7221-1-git-send-email-shreyansh.jain@nxp.com> <1473257297-7221-2-git-send-email-shreyansh.jain@nxp.com> <37d34b1e-732e-d31e-a24d-84d4839fe0c5@intel.com> <858e0541-8f83-ae7c-d529-c06b3029cc54@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Cc: Ferruh Yigit , dev@dpdk.org, hemant.agrawal@nxp.com, Jan Viktorin To: Shreyansh Jain Return-path: Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by dpdk.org (Postfix) with ESMTP id DADE46CD4 for ; Fri, 9 Sep 2016 10:55:43 +0200 (CEST) Received: by mail-wm0-f54.google.com with SMTP id w12so20510427wmf.0 for ; Fri, 09 Sep 2016 01:55:43 -0700 (PDT) Content-Disposition: inline In-Reply-To: <858e0541-8f83-ae7c-d529-c06b3029cc54@nxp.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 > >>Signed-off-by: Shreyansh Jain > >>--- > >> 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