From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by dpdk.org (Postfix) with ESMTP id C6EEE2C0A for ; Fri, 16 Dec 2016 11:47:15 +0100 (CET) Received: by mail-wm0-f67.google.com with SMTP id g23so4568187wme.1 for ; Fri, 16 Dec 2016 02:47:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=PPt2JQeNqnZA+d56GrL8kvzLZ+uLC4K0m23mPfH1R0Q=; b=MI15pv9UFiXAQhhkfCakVNBm9UkbzE6oRyExc3b05FR/f22qde8BWN7UqiTvUPJ/sc Lm6is7edeei8/oZW4YyjOZEItzJHNTyua1Vy2AhcISU0qhrAhGQupc2h+LfdX7uazIZ0 ieu0PzxBQ+e4FlkjYry9STWTAYoAgdOXi2hKV4Yfk7H1mEDG8SozQl8GinSeG+g7s1t4 vexdHjxW1eio7G3UddJgKtu7V74zNhZHqecd8o4+LRCt6OoIsSxWXVtCnB06Y40JDMwV gmHeJaj904bkrRUMaItkZx6/KbNSlEhCJIQDtsVh84Plui+AdVv9e1G9/0tmJkRDmUGy OoWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=PPt2JQeNqnZA+d56GrL8kvzLZ+uLC4K0m23mPfH1R0Q=; b=FxBKuwxts2RtWaucZfwX6IeObv1yzEJC0ojlcP6EG0DSlS0sbFgw9FqLLcAqLjBvVn jEGFA7Xq3Z400J/Qrj4+PhXK4RWig+RUhkjd5T5HOIU94abj9lNU1bPOedi5qsKahxR7 zv0BOjkH+r7aATq85wHoaT7LC/HjpKW/STb+BgE11zpRyxte9QVKsFRS87xqwpAJz9X4 Fw2Zqk9d7wRJRLBfuk27EGlRJpW4jDG+atF+FQyKLd6ZX5TPX4icB8rXG86cV1wZUH53 RAi4NZGLmNxJuA7pk6HJT72r0mcYa1K5xOC3qHkkaRjNdeLw6MW+cXRkGVVpgKrMa5MB Tt4w== X-Gm-Message-State: AIkVDXKksmc30P97vb6fAB8DXChM29NncDLLpjf+5o9h48NKf0167k+N+OaAqYP9I8gtul+xpVfDyoIKZrSRew== X-Received: by 10.28.104.213 with SMTP id d204mr2462454wmc.101.1481885235475; Fri, 16 Dec 2016 02:47:15 -0800 (PST) MIME-Version: 1.0 Sender: jblunck@gmail.com Received: by 10.28.63.83 with HTTP; Fri, 16 Dec 2016 02:47:14 -0800 (PST) In-Reply-To: <20161216092306.GD10340@6wind.com> References: <1480846288-2517-1-git-send-email-shreyansh.jain@nxp.com> <1481636232-2300-1-git-send-email-shreyansh.jain@nxp.com> <1481636232-2300-2-git-send-email-shreyansh.jain@nxp.com> <3310c320-fa39-cd8c-ab77-ced20daa5073@nxp.com> <20161216092306.GD10340@6wind.com> From: Jan Blunck Date: Fri, 16 Dec 2016 11:47:14 +0100 X-Google-Sender-Auth: dzfLoYIVs9SecDDewkxiA8Gd7d0 Message-ID: To: Adrien Mazarguil Cc: Shreyansh Jain , dev@dpdk.org, David Marchand , Thomas Monjalon , Ferruh Yigit , jianbo.liu@linaro.org, Jan Viktorin Content-Type: text/plain; charset=UTF-8 Subject: Re: [dpdk-dev] [PATCH v2 01/12] eal: define container_of macro X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Dec 2016 10:47:15 -0000 On Fri, Dec 16, 2016 at 10:23 AM, Adrien Mazarguil wrote: > On Fri, Dec 16, 2016 at 09:14:29AM +0100, Jan Blunck wrote: >> On Wed, Dec 14, 2016 at 6:12 AM, Shreyansh Jain wrote: >> > On Wednesday 14 December 2016 03:54 AM, Jan Blunck wrote: >> >> >> >> On Tue, Dec 13, 2016 at 2:37 PM, Shreyansh Jain >> >> wrote: >> >>> >> >>> From: Jan Blunck >> >>> >> >>> This macro is based on Jan Viktorin's original patch but also checks the >> >>> type of the passed pointer against the type of the member. >> >>> >> >>> Signed-off-by: Jan Viktorin >> >>> [shreyansh.jain@nxp.com: Fix checkpatch error] >> >>> Signed-off-by: Shreyansh Jain >> >>> [jblunck@infradead.org: add type checking and __extension__] >> >>> Signed-off-by: Jan Blunck >> >>> >> >>> -- >> >>> v2: >> >>> - fix checkpatch error >> >>> --- >> >>> 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 db5ac91..3eb8d11 100644 >> >>> --- a/lib/librte_eal/common/include/rte_common.h >> >>> +++ b/lib/librte_eal/common/include/rte_common.h >> >>> @@ -331,6 +331,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); >> >>> + */ >> >>> +#ifndef container_of >> >>> +#define container_of(ptr, type, member) (__extension__ ({ >> >>> \ >> >>> + typeof(((type *)0)->member) * _ptr = (ptr); \ >> >>> + (type *)(((char *)_ptr) - offsetof(type, >> >>> member));\ >> >>> + })) >> >> >> >> >> >> This is a checkpatch false positive. It should be fine to ignore this. >> >> IIRC we already discussed this before. >> > >> > >> > I too thought something similar was discussed. I tried searching the >> > archives but couldn't find anything - thus, I thought probably I was >> > hallucinating :P >> > >> > So, you want me to revert back the '()' change? Does it impact the expansion >> > of this macro? >> >> We haven't added this on any other usage of the __extension__ keyword >> in the existing code. From my perspective it is more consistent to >> revert it. >> >> Anyone else with an opinion here? David? Thomas? > > As an exported header, rte_common.h must pass check-includes.sh. Both > typeof() and the ({ ... }) construct are non-standard GCC extensions and > would fail to compile with pedantic options. > Thanks Adrien. These extensions are already in use by rte_common.h and other headers. I don't believe we can remove the usage of typeof() that easily without making the code really ugly.