DPDK patches and discussions
 help / color / mirror / Atom feed
From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Bruce Richardson <bruce.richardson@intel.com>
Cc: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>
Subject: Re: [dpdk-dev] [PATCH v1 5/6] fix missing includes in exported headers
Date: Thu, 21 Dec 2017 15:50:31 +0100	[thread overview]
Message-ID: <20171221145031.GM5377@6wind.com> (raw)
In-Reply-To: <20171221141257.GB8256@bricha3-MOBL3.ger.corp.intel.com>

On Thu, Dec 21, 2017 at 02:12:57PM +0000, Bruce Richardson wrote:
> On Thu, Dec 21, 2017 at 02:00:04PM +0100, Adrien Mazarguil wrote:
> > Many exported headers rely on definitions found in rte_config.h without
> > including it, as shown by the following command:
> > 
> >  grep -L '^#include <rte_config.h>' -- \
> >   $(grep -Rl \
> >     $(sed -n '/^#define \([^ ]\+\).*$/{s//\1/;H;};${x;s/\n//;s/\n/\\|/g;p;}' \
> >       build/include/rte_config.h) \
> >     -- build/include/)
> > 
> > We cannot assume external applications will include rte_config.h on their
> > own, neither directly nor through a -include parameter like DPDK does
> > internally.
> > 
> > This not only causes obvious compilation failures that can be reproduced
> > with check-includes.sh such as:
> > 
> >  [...]/rte_memory.h:88:43: error: ‘RTE_CACHE_LINE_SIZE’ was not declared in
> >      this scope
> >   #define __rte_cache_aligned __rte_aligned(RTE_CACHE_LINE_SIZE)
> >                                             ^
> > 
> > It also results in less visible issues, for instance rte_hash_crc.h relying
> > on RTE_ARCH_X86_64's presence to provide dedicated inline functions.
> > 
> > This patch partially reverts the commit below and adds missing include
> > lines to the remaining files.
> > 
> > Fixes: f1a7a5c5f404 ("remove include of generated config header")
> > Cc: Thomas Monjalon <thomas@monjalon.net>
> > 
> > Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> > ---
> 
> Hi Adrien,
> 
> Just FYI, when we move to the new DPDK build system and pass the
> necessary build meta-data to the application using pkg-config, this
> should be a non-issue, as the pkg-config information will include the
> "-include rte_config.h" parameter.

Right, actually -include rte_config.h is also provided to applications that
rely on the current DPDK build system, those are already safe.

The motivation behind this patch is other applications that casually
#include things without even depending on the build features of DPDK (not
even going through pkg-config manually), in order to meet a safety level
worthy of /usr/include.

In my opinion it's fine if this usage is not supported and a prior #include
<rte_config.h> is required, however in that case we need our header files to
#error out. Adding #include directly as done in this patch was in fact just
as easy.

> When investigating that, I also tried this approach of adding rte_config
> to files explicitly but it did not work for me as expected, as there
> were cases where the build was depending upon the rte_config.h always
> being the first include in the file. Normally, the rte_* headers should
> be last included, so putting it at the top just didn't seem right to me.
> I don't remember the specifics, but it was something like using the RTE_
> defines to determine which system header file to use e.g. BSD vs Linux.
> However, this may be an internal DPDK-build restriction rather than one
> that would affect user-apps our or examples.

Was it perhaps before we added consistency to all public headers?

check-includes.sh was added a few releases ago to make sure each of them
could be included on its own, to ensure they properly fetched all their
dependencies instead of triggering compilation errors.

Rule of thumb being if you need something, #include the file providing it
first. I find it strange rte_config.h is somehow an exception.

> So, with transitioning to meson and pkg-config, this issue becomes less
> significant.

Agreed, however I still think something needs to be done, so:

- Do we want to let applications not rely on our build flags yet still use
  our exported headers?

- Is a missing #include <rte_config.h> supposed to trigger an explicit
  #error for safety?

- How about putting back #include <rte_config.h> in our exported header
  files directly given the above?

Note this discussion is only about exported headers. The rest remains
unaffected and can safely continue to rely on -include rte_config.h.

-- 
Adrien Mazarguil
6WIND

  reply	other threads:[~2017-12-21 14:50 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-21 12:59 [dpdk-dev] [PATCH v1 0/6] Address various issues with " Adrien Mazarguil
2017-12-21 12:59 ` [dpdk-dev] [PATCH v1 1/6] devtools: update check-includes exceptions Adrien Mazarguil
2017-12-21 12:59 ` [dpdk-dev] [PATCH v1 2/6] net/i40e: fix issue in exported header Adrien Mazarguil
2017-12-27  6:53   ` Xing, Beilei
2017-12-21 12:59 ` [dpdk-dev] [PATCH v1 3/6] flow_classify: " Adrien Mazarguil
2018-01-02 15:19   ` Iremonger, Bernard
2017-12-21 13:00 ` [dpdk-dev] [PATCH v1 4/6] member: " Adrien Mazarguil
2017-12-21 13:00 ` [dpdk-dev] [PATCH v1 5/6] fix missing includes in exported headers Adrien Mazarguil
2017-12-21 14:12   ` Bruce Richardson
2017-12-21 14:50     ` Adrien Mazarguil [this message]
2017-12-21 16:01       ` Bruce Richardson
2017-12-21 13:00 ` [dpdk-dev] [PATCH v1 6/6] net: fix rte_ether conflicts with libc Adrien Mazarguil
2017-12-22 13:34   ` Olivier MATZ
2017-12-22 14:25     ` Adrien Mazarguil
2018-01-16 13:04       ` Olivier Matz
2018-01-16 23:19       ` Thomas Monjalon
2018-01-16 23:18 ` [dpdk-dev] [PATCH v1 0/6] Address various issues with exported headers Thomas Monjalon

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=20171221145031.GM5377@6wind.com \
    --to=adrien.mazarguil@6wind.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).