[ovs-dev] [PATCH 1/2] sparse: Fix sparse when compiling DPDK.

Ethan Jackson ethan at nicira.com
Fri May 22 20:27:54 UTC 2015


Cool, I've folded the change in, thanks!

Ethan

On Fri, May 22, 2015 at 10:08 AM, Daniele Di Proietto
<diproiettod at vmware.com> wrote:
> I was running an old version, getting it from the upstream repo helped,
> thanks!
>
> I manage to compile everything without warnings if I apply the following
> incremental
>
> ---8<---
>
> diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
> index c80c4c2..0456ee6 100644
> --- a/include/sparse/automake.mk
> +++ b/include/sparse/automake.mk
> @@ -1,6 +1,7 @@
>  noinst_HEADERS += \
>         include/sparse/arpa/inet.h \
>         include/sparse/assert.h \
> +       include/sparse/bmi2intrin.h \
>         include/sparse/emmintrin.h \
>         include/sparse/math.h \
>         include/sparse/netinet/in.h \
> diff --git a/include/sparse/bmi2intrin.h b/include/sparse/bmi2intrin.h
> new file mode 100644
> index 0000000..3ee37bb
> --- /dev/null
> +++ b/include/sparse/bmi2intrin.h
> @@ -0,0 +1,25 @@
> +/* Copyright (c) 2015 Nicira, Inc.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at:
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +#ifndef __CHECKER__
> +#error "Use this header only with sparse.  It is not a correct
> implementation."
> +#endif
> +
> +/* Sparse doesn't know the __int128 type used by GCC 4.9 *intrin.h
> headers.
> + * We cannot use a typedef because the type is used with a qualifier
> + * ('unsigned __int128') */
> +#define __int128 int
> +#include_next <bmi2intrin.h>
> +#undef __int128
> diff --git a/include/sparse/emmintrin.h b/include/sparse/emmintrin.h
> index 7c788dc..3810f55 100644
> --- a/include/sparse/emmintrin.h
> +++ b/include/sparse/emmintrin.h
> @@ -17,5 +17,11 @@
>  #error "Use this header only with sparse.  It is not a correct
> implementation."
>  #endif
>
> -/* Sparse doesn't support SSE2 so the "real" header file quits with an
> error.
> - * Instead, we simply do nothing thereby surpressing the message. */
> +/* GCC 4.8 *intrin.h headers do not work if these are not defined */
> +#define __SSE2__
> +#define __SSE__
> +#define __MMX__
> +#include_next <emmintrin.h>
> +#undef __MMX__
> +#undef __SSE__
> +#undef __SSE2__
>
>
> ---8<---
>
>
> I have tested this with GCC 4.8 and GCC 4.9 headers.
>
> If you're happy with the above change feel free to merge it:
>
> Acked-by: Daniele Di Proietto <diproiettod at vmware.com>
>
>
> On 19/05/2015 22:34, "Ethan Jackson" <ethan at nicira.com> wrote:
>
>>I think you're running into the issue that sparse doesn't understand
>>the "gnu_inline" macro which is used extensively in the DPDK header
>>files.  If you run tip of master sparse
>>(git://git.kernel.org/pub/scm/devel/sparse/sparse.git) it should work
>>for you.
>>
>>In the past we've typically required relatively bleeding edge sparse
>>builds due to similar reasons, so IMO I'm fine with making this
>>requirement.  Also, it's unclear to me how to auto generate these
>>stubs, it's actually somewhat difficult requiring a lot of manually
>>tuning.
>>
>>Ethan
>>
>>On Mon, May 18, 2015 at 1:20 PM, Daniele Di Proietto
>><diproiettod at vmware.com> wrote:
>>> On my system (I'm using GCC 4.9 and sparse 0.4.5) I need
>>> lots of other headers like emmintrin.h to compile without
>>> warnings.
>>>
>>> The complete list is:
>>>
>>> adxintrin.h,ammintrin.h,avx2intrin.h,avx512fintrin.h,
>>> avxintrin.h,bmi2intrin.h,bmiintrin.h,f16cintrin.h,
>>> fma4intrin.h,fmaintrin.h,fxsrintrin.h,ia32intrin.h,
>>> immintrin.h,lwpintrin.h,lzcntintrin.h,mm3dnow.h,
>>> mmintrin.h,pmmintrin.h,popcntintrin.h,prfchwintrin.h,
>>> rdseedintrin.h,smmintrin.h,tbmintrin.h,tmmintrin.h,
>>> wmmintrin.h,xmmintrin.h,xopintrin.h,xsaveintrin.h,
>>> xsaveoptintrin.h
>>>
>>> Do we want to generate these at build time, maybe?
>>>
>>> On 18/05/2015 16:53, "Ethan Jackson" <ethan at nicira.com> wrote:
>>>
>>>>Sparse doesn't like several of the DPDK header files.  This patch
>>>>works around it so we can get analysis when compiling DPDK.
>>>>
>>>>Signed-off-by: Ethan Jackson <ethan at nicira.com>
>>>>---
>>>> include/sparse/automake.mk  |  4 ++++
>>>> include/sparse/emmintrin.h  | 21 +++++++++++++++++++++
>>>> include/sparse/rte_atomic.h | 25 +++++++++++++++++++++++++
>>>> include/sparse/rte_lcore.h  | 23 +++++++++++++++++++++++
>>>> include/sparse/rte_vect.h   | 23 +++++++++++++++++++++++
>>>> 5 files changed, 96 insertions(+)
>>>> create mode 100644 include/sparse/emmintrin.h
>>>> create mode 100644 include/sparse/rte_atomic.h
>>>> create mode 100644 include/sparse/rte_lcore.h
>>>> create mode 100644 include/sparse/rte_vect.h
>>>>
>>>>diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
>>>>index 572c7c2..c80c4c2 100644
>>>>--- a/include/sparse/automake.mk
>>>>+++ b/include/sparse/automake.mk
>>>>@@ -1,10 +1,14 @@
>>>> noinst_HEADERS += \
>>>>         include/sparse/arpa/inet.h \
>>>>         include/sparse/assert.h \
>>>>+        include/sparse/emmintrin.h \
>>>>         include/sparse/math.h \
>>>>         include/sparse/netinet/in.h \
>>>>         include/sparse/netinet/ip6.h \
>>>>         include/sparse/netpacket/packet.h \
>>>>         include/sparse/pthread.h \
>>>>+        include/sparse/rte_atomic.h \
>>>>+        include/sparse/rte_lcore.h \
>>>>+        include/sparse/rte_vect.h \
>>>>         include/sparse/sys/socket.h \
>>>>         include/sparse/sys/wait.h
>>>>diff --git a/include/sparse/emmintrin.h b/include/sparse/emmintrin.h
>>>>new file mode 100644
>>>>index 0000000..7c788dc
>>>>--- /dev/null
>>>>+++ b/include/sparse/emmintrin.h
>>>>@@ -0,0 +1,21 @@
>>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>>+ *
>>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>>+ * you may not use this file except in compliance with the License.
>>>>+ * You may obtain a copy of the License at:
>>>>+ *
>>>>+ *
>>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>>se
>>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>>=S
>>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>>mC
>>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>>+ *
>>>>+ * Unless required by applicable law or agreed to in writing, software
>>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>implied.
>>>>+ * See the License for the specific language governing permissions and
>>>>+ * limitations under the License.
>>>>+ */
>>>>+
>>>>+#ifndef __CHECKER__
>>>>+#error "Use this header only with sparse.  It is not a correct
>>>>implementation."
>>>>+#endif
>>>>+
>>>>+/* Sparse doesn't support SSE2 so the "real" header file quits with an
>>>>error.
>>>>+ * Instead, we simply do nothing thereby surpressing the message. */
>>>>diff --git a/include/sparse/rte_atomic.h b/include/sparse/rte_atomic.h
>>>>new file mode 100644
>>>>index 0000000..ae49fe5
>>>>--- /dev/null
>>>>+++ b/include/sparse/rte_atomic.h
>>>>@@ -0,0 +1,25 @@
>>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>>+ *
>>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>>+ * you may not use this file except in compliance with the License.
>>>>+ * You may obtain a copy of the License at:
>>>>+ *
>>>>+ *
>>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>>se
>>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>>=S
>>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>>mC
>>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>>+ *
>>>>+ * Unless required by applicable law or agreed to in writing, software
>>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>implied.
>>>>+ * See the License for the specific language governing permissions and
>>>>+ * limitations under the License.
>>>>+ */
>>>>+
>>>>+#ifndef __CHECKER__
>>>>+#error "Use this header only with sparse.  It is not a correct
>>>>implementation."
>>>>+#endif
>>>>+
>>>>+/* Fix sparse technicality about types in one of the function calls by
>>>>just
>>>>+ * ignoring it. */
>>>>+#define __sync_add_and_fetch(a, b) (0)
>>>>+
>>>>+/* Get actual <rte_atomic.h> definitions for us to annotate and build
>>>>on. */
>>>>+#include_next <rte_atomic.h>
>>>>diff --git a/include/sparse/rte_lcore.h b/include/sparse/rte_lcore.h
>>>>new file mode 100644
>>>>index 0000000..584bfe1
>>>>--- /dev/null
>>>>+++ b/include/sparse/rte_lcore.h
>>>>@@ -0,0 +1,23 @@
>>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>>+ *
>>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>>+ * you may not use this file except in compliance with the License.
>>>>+ * You may obtain a copy of the License at:
>>>>+ *
>>>>+ *
>>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>>se
>>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>>=S
>>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>>mC
>>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>>+ *
>>>>+ * Unless required by applicable law or agreed to in writing, software
>>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>implied.
>>>>+ * See the License for the specific language governing permissions and
>>>>+ * limitations under the License.
>>>>+ */
>>>>+
>>>>+#ifndef __CHECKER__
>>>>+#error "Use this header only with sparse.  It is not a correct
>>>>implementation."
>>>>+#endif
>>>>+
>>>>+typedef int rte_cpuset_t;
>>>>+
>>>>+/* Get actual <rte_lcore.h> definitions for us to annotate and build
>>>>on.
>>>>*/
>>>>+#include_next <rte_lcore.h>
>>>>diff --git a/include/sparse/rte_vect.h b/include/sparse/rte_vect.h
>>>>new file mode 100644
>>>>index 0000000..6f6625b
>>>>--- /dev/null
>>>>+++ b/include/sparse/rte_vect.h
>>>>@@ -0,0 +1,23 @@
>>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>>+ *
>>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>>+ * you may not use this file except in compliance with the License.
>>>>+ * You may obtain a copy of the License at:
>>>>+ *
>>>>+ *
>>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>>se
>>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>>=S
>>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>>mC
>>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>>+ *
>>>>+ * Unless required by applicable law or agreed to in writing, software
>>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>implied.
>>>>+ * See the License for the specific language governing permissions and
>>>>+ * limitations under the License.
>>>>+ */
>>>>+
>>>>+#ifndef __CHECKER__
>>>>+#error "Use this header only with sparse.  It is not a correct
>>>>implementation."
>>>>+#endif
>>>>+
>>>>+typedef int __m128i;
>>>>+
>>>>+/* Get actual <rte_vect.h> definitions for us to annotate and build on.
>>>>*/
>>>>+#include_next <rte_vect.h>
>>>>--
>>>>1.9.1
>>>>
>>>>_______________________________________________
>>>>dev mailing list
>>>>dev at openvswitch.org
>>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mail
>>>>ma
>>>>n_listinfo_dev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=
>>>>Sm
>>>>B5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshium
>>>>CE
>>>>9wwf7RTwL7R6E&s=oleBRmY2dr-PG6K8DPzFmAQrpw7AwfLUqGMNhho-KH0&e=
>>>
>



More information about the dev mailing list