[ovs-dev] sparse: Configure target operating system and fix fallout.

Ilya Maximets i.maximets at samsung.com
Wed Apr 24 12:40:21 UTC 2019


On 24.04.2019 2:42, Ben Pfaff wrote:
> cgcc, the "sparse" wrapper that OVS uses, can be told the host architecture
> or the host OS or both.  Until now, OVS has told it the host architecture
> because it is fairly common that it doesn't guess it automatically.  Until
> now, OS has not told it the host OS, assuming that it would get it right.
> However, it doesn't--if you tell it the host OS or the host architecture,
> it doesn't really have a default for the other.  This means that on Linux
> (presumably the only OS where sparse works properly for OVS), it was not
> defining __linux__, which caused some weird behavior.
> 
> This commit adds a flag to the cgcc invocation to make it define __linux__
> on Linux, and it fixes some errors that this would otherwise cause.
> 
> Signed-off-by: Ben Pfaff <blp at ovn.org>
> ---

LGTM,
Acked-by: Ilya Maximets <i.maximets at samsung.com>

One minor comment inline.

>  acinclude.m4                     |  6 +++---
>  include/sparse/automake.mk       |  1 +
>  include/sparse/linux/if_packet.h | 30 ++++++++++++++++++++++++++++++
>  lib/perf-counter.c               |  4 ++--
>  4 files changed, 36 insertions(+), 5 deletions(-)
>  create mode 100644 include/sparse/linux/if_packet.h
> 
> diff --git a/acinclude.m4 b/acinclude.m4
> index 1607d5f4b1d9..301aeb70d82a 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -1,6 +1,6 @@
>  # -*- autoconf -*-
>  
> -# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Nicira, Inc.
> +# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 Nicira, Inc.
>  #
>  # Licensed under the Apache License, Version 2.0 (the "License");
>  # you may not use this file except in compliance with the License.
> @@ -1107,8 +1107,8 @@ AC_DEFUN([OVS_CHECK_SPARSE_TARGET],
>         [x86_64-*], [ac_cv_sparse_target=x86_64],
>         [ac_cv_sparse_target=other])])
>     AS_CASE([$ac_cv_sparse_target],
> -     [x86], [SPARSEFLAGS= CGCCFLAGS=-target=i86],
> -     [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS=-target=x86_64],
> +     [x86], [SPARSEFLAGS= CGCCFLAGS="-target=i86 -target=host_os_specs"],
> +     [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS="-target=x86_64 -target=host_os_specs"],
>       [SPARSEFLAGS= CGCCFLAGS=])
>     AC_SUBST([SPARSEFLAGS])
>     AC_SUBST([CGCCFLAGS])])
> diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
> index 4c7b17783fd5..8d96d0346f48 100644
> --- a/include/sparse/automake.mk
> +++ b/include/sparse/automake.mk
> @@ -27,4 +27,5 @@ noinst_HEADERS += \
>          include/sparse/sys/types.h \
>          include/sparse/sys/wait.h \
>          include/sparse/threads.h \
> +        include/sparse/linux/if_packet.h \
>          include/sparse/linux/tc_act/tc_pedit.h
> diff --git a/include/sparse/linux/if_packet.h b/include/sparse/linux/if_packet.h
> new file mode 100644
> index 000000000000..eab1be9d247d
> --- /dev/null
> +++ b/include/sparse/linux/if_packet.h
> @@ -0,0 +1,30 @@
> +#ifndef FIX_LINUX_IF_PACKET_H
> +#define FIX_LINUX_IF_PACKET_H
> +
> +#ifndef __CHECKER__
> +#error "Use this header only with sparse.  It is not a correct implementation."
> +#endif
> +
> +#include_next <linux/if_packet.h>
> +
> +/* Fix endianness of 'spkt_protocol' and 'sll_protocol' members. */
> +
> +#define sockaddr_pkt rpl_sockaddr_pkt
> +struct sockaddr_pkt {
> +        unsigned short spkt_family;
> +        unsigned char spkt_device[14];
> +        ovs_be16 spkt_protocol;
> +};
> +
> +#define sockaddr_ll rpl_sockaddr_ll
> +struct sockaddr_ll {
> +        unsigned short  sll_family;
> +        ovs_be16	sll_protocol;

It'll be better to align the name with other structure fields.

> +        int             sll_ifindex;
> +        unsigned short  sll_hatype;
> +        unsigned char   sll_pkttype;
> +        unsigned char   sll_halen;
> +        unsigned char   sll_addr[8];
> +};
> +
> +#endif
> diff --git a/lib/perf-counter.c b/lib/perf-counter.c
> index c4458d2f5fa9..402fabe1775b 100644
> --- a/lib/perf-counter.c
> +++ b/lib/perf-counter.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2015, 2016 Nicira, Inc.
> + * Copyright (c) 2015, 2016, 2019 Nicira, Inc.
>   *
>   * Licensed under the Apache License, Version 2.0 (the "License");
>   * you may not use this file except in compliance with the License.
> @@ -17,7 +17,7 @@
>  /* This implementation only applies to the Linux platform.  */
>  
>  #include <config.h>
> -#if defined(__linux__) && defined(HAVE_LINUX_PERF_EVENT_H)
> +#if defined(__linux__) && defined(HAVE_LINUX_PERF_EVENT_H) && !__CHECKER__
>  
>  #include <stddef.h>
>  #include <sys/types.h>
> 


More information about the dev mailing list