[dpdk-dev,05/13] vhost: fix errors with strict compilation flags

Message ID f1b1661e287326a33f05a317832fabaf4f880276.1493048352.git.adrien.mazarguil@6wind.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Adrien Mazarguil April 24, 2017, 3:52 p.m. UTC
  Exported headers must allow compilation with the strictest flags. This
commit addresses the following errors:

 In file included from /tmp/check-includes.sh.20132.c:1:0:
 build/include/rte_vhost.h:73:30: error: ISO C forbids zero-size array
    'regions' [-Werror=pedantic]
 [...]

Also:

- Add C++ awareness to rte_vhost.h for consistency with rte_eth_vhost.h.
- Move Linux includes into C++ block to prevent linking issues with
  exported symbols.
- Update check-includes.sh following the removal of rte_virtio_net.h.

Finally, update check-includes.sh to ignore rte_vhost.h and rte_eth_vhost.h
from now on since the Linux headers they depend on are not clean enough:

 In file included from /usr/include/linux/vhost.h:17:0,
                  from build/include/rte_vhost.h:43,
                  from build/include/rte_eth_vhost.h:44,
                  from /tmp/check-includes.sh.20132.c:1:
 /usr/include/linux/virtio_ring.h: In function 'vring_init':
 /usr/include/linux/virtio_ring.h:146:16: error: pointer of type 'void *'
    used in arithmetic [-Werror=pointer-arith]
 [...]
 In file included from build/include/rte_vhost.h:43:0,
                  from build/include/rte_eth_vhost.h:44,
                  from /tmp/check-includes.sh.20132.c:1:
 /usr/include/linux/vhost.h: At top level:
 /usr/include/linux/vhost.h:73:3: error: ISO C99 doesn't support unnamed
    structs/unions [-Werror=pedantic]
 [...]

Fixes: eb32247457fe ("vhost: export guest memory regions")
Fixes: a798beb47c8e ("vhost: rename header file")

Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
---
 devtools/check-includes.sh   |  4 +++-
 lib/librte_vhost/rte_vhost.h | 16 +++++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)
  

Comments

Yuanhan Liu April 25, 2017, 2:15 a.m. UTC | #1
On Mon, Apr 24, 2017 at 05:52:59PM +0200, Adrien Mazarguil wrote:
> Exported headers must allow compilation with the strictest flags. This
> commit addresses the following errors:
> 
>  In file included from /tmp/check-includes.sh.20132.c:1:0:
>  build/include/rte_vhost.h:73:30: error: ISO C forbids zero-size array
>     'regions' [-Werror=pedantic]
>  [...]
> 
> Also:
> 
> - Add C++ awareness to rte_vhost.h for consistency with rte_eth_vhost.h.
> - Move Linux includes into C++ block to prevent linking issues with
>   exported symbols.
> - Update check-includes.sh following the removal of rte_virtio_net.h.
> 
> Finally, update check-includes.sh to ignore rte_vhost.h and rte_eth_vhost.h
> from now on since the Linux headers they depend on are not clean enough:
> 
>  In file included from /usr/include/linux/vhost.h:17:0,
>                   from build/include/rte_vhost.h:43,
>                   from build/include/rte_eth_vhost.h:44,
>                   from /tmp/check-includes.sh.20132.c:1:
>  /usr/include/linux/virtio_ring.h: In function 'vring_init':
>  /usr/include/linux/virtio_ring.h:146:16: error: pointer of type 'void *'
>     used in arithmetic [-Werror=pointer-arith]
>  [...]
>  In file included from build/include/rte_vhost.h:43:0,
>                   from build/include/rte_eth_vhost.h:44,
>                   from /tmp/check-includes.sh.20132.c:1:
>  /usr/include/linux/vhost.h: At top level:
>  /usr/include/linux/vhost.h:73:3: error: ISO C99 doesn't support unnamed
>     structs/unions [-Werror=pedantic]
>  [...]
> 
> Fixes: eb32247457fe ("vhost: export guest memory regions")
> Fixes: a798beb47c8e ("vhost: rename header file")
> 
> Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>

	--yliu
  
Maxime Coquelin April 26, 2017, 7:32 a.m. UTC | #2
On 04/24/2017 05:52 PM, Adrien Mazarguil wrote:
> Exported headers must allow compilation with the strictest flags. This
> commit addresses the following errors:
> 
>   In file included from /tmp/check-includes.sh.20132.c:1:0:
>   build/include/rte_vhost.h:73:30: error: ISO C forbids zero-size array
>      'regions' [-Werror=pedantic]
>   [...]
> 
> Also:
> 
> - Add C++ awareness to rte_vhost.h for consistency with rte_eth_vhost.h.
> - Move Linux includes into C++ block to prevent linking issues with
>    exported symbols.
> - Update check-includes.sh following the removal of rte_virtio_net.h.
> 
> Finally, update check-includes.sh to ignore rte_vhost.h and rte_eth_vhost.h
> from now on since the Linux headers they depend on are not clean enough:
> 
>   In file included from /usr/include/linux/vhost.h:17:0,
>                    from build/include/rte_vhost.h:43,
>                    from build/include/rte_eth_vhost.h:44,
>                    from /tmp/check-includes.sh.20132.c:1:
>   /usr/include/linux/virtio_ring.h: In function 'vring_init':
>   /usr/include/linux/virtio_ring.h:146:16: error: pointer of type 'void *'
>      used in arithmetic [-Werror=pointer-arith]
>   [...]
>   In file included from build/include/rte_vhost.h:43:0,
>                    from build/include/rte_eth_vhost.h:44,
>                    from /tmp/check-includes.sh.20132.c:1:
>   /usr/include/linux/vhost.h: At top level:
>   /usr/include/linux/vhost.h:73:3: error: ISO C99 doesn't support unnamed
>      structs/unions [-Werror=pedantic]
>   [...]
> 
> Fixes: eb32247457fe ("vhost: export guest memory regions")
> Fixes: a798beb47c8e ("vhost: rename header file")
> 
> Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> ---
>   devtools/check-includes.sh   |  4 +++-
>   lib/librte_vhost/rte_vhost.h | 16 +++++++++++++---
>   2 files changed, 16 insertions(+), 4 deletions(-)

Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Thanks,
Maxime
  

Patch

diff --git a/devtools/check-includes.sh b/devtools/check-includes.sh
index d65adc6..c4ec73f 100755
--- a/devtools/check-includes.sh
+++ b/devtools/check-includes.sh
@@ -109,10 +109,12 @@  include_dir=${1:-build/include}
 	'rte_byteorder_64.h' \
 	'generic/*' \
 	'exec-env/*' \
+	'rte_vhost.h' \
+	'rte_eth_vhost.h' \
 }
 : ${IGNORE_CXX= \
+	'rte_vhost.h' \
 	'rte_eth_vhost.h' \
-	'rte_virtio_net.h' \
 }
 
 temp_cc=/tmp/${0##*/}.$$.c
diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
index 7a586e4..605e47c 100644
--- a/lib/librte_vhost/rte_vhost.h
+++ b/lib/librte_vhost/rte_vhost.h
@@ -40,13 +40,19 @@ 
  */
 
 #include <stdint.h>
-#include <linux/vhost.h>
-#include <linux/virtio_ring.h>
 #include <sys/eventfd.h>
 
 #include <rte_memory.h>
 #include <rte_mempool.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These are not C++-aware. */
+#include <linux/vhost.h>
+#include <linux/virtio_ring.h>
+
 #define RTE_VHOST_USER_CLIENT		(1ULL << 0)
 #define RTE_VHOST_USER_NO_RECONNECT	(1ULL << 1)
 #define RTE_VHOST_USER_DEQUEUE_ZERO_COPY	(1ULL << 2)
@@ -70,7 +76,7 @@  struct rte_vhost_mem_region {
  */
 struct rte_vhost_memory {
 	uint32_t nregions;
-	struct rte_vhost_mem_region regions[0];
+	struct rte_vhost_mem_region regions[];
 };
 
 struct rte_vhost_vring {
@@ -426,4 +432,8 @@  int rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem);
 int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
 			      struct rte_vhost_vring *vring);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _RTE_VHOST_H_ */