diff mbox

[ovs-dev,1/2] sparse: Add rte_memcpy.h replacement header.

Message ID 20170506043931.15834-1-blp@ovn.org
State Accepted
Headers show

Commit Message

Ben Pfaff May 6, 2017, 4:39 a.m. UTC
Without this replacement header, building netdev-dpdk.c provokes several
"sparse" warnings:

/usr/include/dpdk/rte_memcpy.h:515:33: warning: incorrect type in argument 1 (different type sizes)
/usr/include/dpdk/rte_memcpy.h:515:33:    expected long long const [usertype] *__P
/usr/include/dpdk/rte_memcpy.h:515:33:    got int const [usertype] *<noident>
/usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:20: error: undefined identifier '__builtin_ia32_loaddqu'
/usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:11: error: cast from unknown type
/usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:3: error: undefined identifier '__builtin_ia32_storedqu'
/usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:43: error: not a function <noident>
/usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:27: error: not a function <noident>
...

Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 include/sparse/automake.mk  |  1 +
 include/sparse/rte_memcpy.h | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 include/sparse/rte_memcpy.h

Comments

Darrell Ball May 6, 2017, 8:27 p.m. UTC | #1
I am not able to reproduce this using 64bit arch., although Sparse does work for me.
   (I guess I should install a 32 bit VM at some point, but I am low on disk space - too many 64bit VMs)
I tried tip of master and about 2 months old master

Based on the above data point and the error output below, it seems like this noise only afflicts 32 bit arch
Maybe specify in the commit message that this helps on 32 bit arch, unless others can see this or 
something similar on 64bit.

Acked-by: Darrell Ball <dlu998@gmail.com>



On 5/5/17, 9:39 PM, "ovs-dev-bounces@openvswitch.org on behalf of Ben Pfaff" <ovs-dev-bounces@openvswitch.org on behalf of blp@ovn.org> wrote:

    Without this replacement header, building netdev-dpdk.c provokes several
    "sparse" warnings:
    
    /usr/include/dpdk/rte_memcpy.h:515:33: warning: incorrect type in argument 1 (different type sizes)
    /usr/include/dpdk/rte_memcpy.h:515:33:    expected long long const [usertype] *__P
    /usr/include/dpdk/rte_memcpy.h:515:33:    got int const [usertype] *<noident>
    /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:20: error: undefined identifier '__builtin_ia32_loaddqu'
    /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:11: error: cast from unknown type
    /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:3: error: undefined identifier '__builtin_ia32_storedqu'
    /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:43: error: not a function <noident>
    /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:27: error: not a function <noident>
    ...
    
    Signed-off-by: Ben Pfaff <blp@ovn.org>
    ---
     include/sparse/automake.mk  |  1 +
     include/sparse/rte_memcpy.h | 39 +++++++++++++++++++++++++++++++++++++++
     2 files changed, 40 insertions(+)
     create mode 100644 include/sparse/rte_memcpy.h
    
    diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
    index 0456ee67d481..f3282c260414 100644
    --- a/include/sparse/automake.mk
    +++ b/include/sparse/automake.mk
    @@ -10,6 +10,7 @@ noinst_HEADERS += \
             include/sparse/pthread.h \
             include/sparse/rte_atomic.h \
             include/sparse/rte_lcore.h \
    +        include/sparse/rte_memcpy.h \
             include/sparse/rte_vect.h \
             include/sparse/sys/socket.h \
             include/sparse/sys/wait.h
    diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h
    new file mode 100644
    index 000000000000..5cd3f013ea8b
    --- /dev/null
    +++ b/include/sparse/rte_memcpy.h
    @@ -0,0 +1,39 @@
    +/* Copyright (c) 2017 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_licenses_LICENSE-2D2.0&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=AzghyY07JReCfJwWQShu12qMFGiOML9IpKTIdvsOTu0&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 RTE_MEMCPY_H
    +#define RTE_MEMCPY_H 1
    +
    +#ifndef __CHECKER__
    +#error "Use this header only with sparse.  It is not a correct implementation."
    +#endif
    +
    +/* Include the same headers as the real rte_memcpy(). */
    +#include <stdio.h>
    +#include <stdint.h>
    +#include <string.h>
    +#include <rte_vect.h>
    +
    +/* Declare the same functions as the real rte_memcpy.h, without defining them.
    + * This gives sparse the information it needs without provoking sparse's
    + * complaints about the implementations. */
    +void rte_mov16(uint8_t *, const uint8_t *);
    +void rte_mov32(uint8_t *, const uint8_t *);
    +void rte_mov64(uint8_t *, const uint8_t *);
    +void rte_mov128(uint8_t *, const uint8_t *);
    +void rte_mov256(uint8_t *, const uint8_t *);
    +void *rte_memcpy(void *, const void *, size_t);
    +
    +#endif  /* RTE_MEMCPY_H_WRAPPER */
    -- 
    2.10.2
    
    _______________________________________________
    dev mailing list
    dev@openvswitch.org
    https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=Nij03EBjSF5Amp8_Hg_3XzcIOE0lgMzzhGfJXVAzHhU&e=
Ben Pfaff May 7, 2017, 12:58 p.m. UTC | #2
OK, I added that it affects i386 and applied this to master.  Thank you!

On Sat, May 06, 2017 at 08:27:47PM +0000, Darrell Ball wrote:
> I am not able to reproduce this using 64bit arch., although Sparse does work for me.
>    (I guess I should install a 32 bit VM at some point, but I am low on disk space - too many 64bit VMs)
> I tried tip of master and about 2 months old master
> 
> Based on the above data point and the error output below, it seems like this noise only afflicts 32 bit arch
> Maybe specify in the commit message that this helps on 32 bit arch, unless others can see this or 
> something similar on 64bit.
> 
> Acked-by: Darrell Ball <dlu998@gmail.com>
> 
> 
> 
> On 5/5/17, 9:39 PM, "ovs-dev-bounces@openvswitch.org on behalf of Ben Pfaff" <ovs-dev-bounces@openvswitch.org on behalf of blp@ovn.org> wrote:
> 
>     Without this replacement header, building netdev-dpdk.c provokes several
>     "sparse" warnings:
>     
>     /usr/include/dpdk/rte_memcpy.h:515:33: warning: incorrect type in argument 1 (different type sizes)
>     /usr/include/dpdk/rte_memcpy.h:515:33:    expected long long const [usertype] *__P
>     /usr/include/dpdk/rte_memcpy.h:515:33:    got int const [usertype] *<noident>
>     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:20: error: undefined identifier '__builtin_ia32_loaddqu'
>     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:11: error: cast from unknown type
>     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:3: error: undefined identifier '__builtin_ia32_storedqu'
>     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:43: error: not a function <noident>
>     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:27: error: not a function <noident>
>     ...
>     
>     Signed-off-by: Ben Pfaff <blp@ovn.org>
>     ---
>      include/sparse/automake.mk  |  1 +
>      include/sparse/rte_memcpy.h | 39 +++++++++++++++++++++++++++++++++++++++
>      2 files changed, 40 insertions(+)
>      create mode 100644 include/sparse/rte_memcpy.h
>     
>     diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
>     index 0456ee67d481..f3282c260414 100644
>     --- a/include/sparse/automake.mk
>     +++ b/include/sparse/automake.mk
>     @@ -10,6 +10,7 @@ noinst_HEADERS += \
>              include/sparse/pthread.h \
>              include/sparse/rte_atomic.h \
>              include/sparse/rte_lcore.h \
>     +        include/sparse/rte_memcpy.h \
>              include/sparse/rte_vect.h \
>              include/sparse/sys/socket.h \
>              include/sparse/sys/wait.h
>     diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h
>     new file mode 100644
>     index 000000000000..5cd3f013ea8b
>     --- /dev/null
>     +++ b/include/sparse/rte_memcpy.h
>     @@ -0,0 +1,39 @@
>     +/* Copyright (c) 2017 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_licenses_LICENSE-2D2.0&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=AzghyY07JReCfJwWQShu12qMFGiOML9IpKTIdvsOTu0&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 RTE_MEMCPY_H
>     +#define RTE_MEMCPY_H 1
>     +
>     +#ifndef __CHECKER__
>     +#error "Use this header only with sparse.  It is not a correct implementation."
>     +#endif
>     +
>     +/* Include the same headers as the real rte_memcpy(). */
>     +#include <stdio.h>
>     +#include <stdint.h>
>     +#include <string.h>
>     +#include <rte_vect.h>
>     +
>     +/* Declare the same functions as the real rte_memcpy.h, without defining them.
>     + * This gives sparse the information it needs without provoking sparse's
>     + * complaints about the implementations. */
>     +void rte_mov16(uint8_t *, const uint8_t *);
>     +void rte_mov32(uint8_t *, const uint8_t *);
>     +void rte_mov64(uint8_t *, const uint8_t *);
>     +void rte_mov128(uint8_t *, const uint8_t *);
>     +void rte_mov256(uint8_t *, const uint8_t *);
>     +void *rte_memcpy(void *, const void *, size_t);
>     +
>     +#endif  /* RTE_MEMCPY_H_WRAPPER */
>     -- 
>     2.10.2
>     
>     _______________________________________________
>     dev mailing list
>     dev@openvswitch.org
>     https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=Nij03EBjSF5Amp8_Hg_3XzcIOE0lgMzzhGfJXVAzHhU&e= 
>     
>
Ben Pfaff May 8, 2017, 1:48 p.m. UTC | #3
Darrell, do you plan to review patch 2?

On Sun, May 07, 2017 at 08:58:35AM -0400, Ben Pfaff wrote:
> OK, I added that it affects i386 and applied this to master.  Thank you!
> 
> On Sat, May 06, 2017 at 08:27:47PM +0000, Darrell Ball wrote:
> > I am not able to reproduce this using 64bit arch., although Sparse does work for me.
> >    (I guess I should install a 32 bit VM at some point, but I am low on disk space - too many 64bit VMs)
> > I tried tip of master and about 2 months old master
> > 
> > Based on the above data point and the error output below, it seems like this noise only afflicts 32 bit arch
> > Maybe specify in the commit message that this helps on 32 bit arch, unless others can see this or 
> > something similar on 64bit.
> > 
> > Acked-by: Darrell Ball <dlu998@gmail.com>
> > 
> > 
> > 
> > On 5/5/17, 9:39 PM, "ovs-dev-bounces@openvswitch.org on behalf of Ben Pfaff" <ovs-dev-bounces@openvswitch.org on behalf of blp@ovn.org> wrote:
> > 
> >     Without this replacement header, building netdev-dpdk.c provokes several
> >     "sparse" warnings:
> >     
> >     /usr/include/dpdk/rte_memcpy.h:515:33: warning: incorrect type in argument 1 (different type sizes)
> >     /usr/include/dpdk/rte_memcpy.h:515:33:    expected long long const [usertype] *__P
> >     /usr/include/dpdk/rte_memcpy.h:515:33:    got int const [usertype] *<noident>
> >     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:20: error: undefined identifier '__builtin_ia32_loaddqu'
> >     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:11: error: cast from unknown type
> >     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:3: error: undefined identifier '__builtin_ia32_storedqu'
> >     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:43: error: not a function <noident>
> >     /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:27: error: not a function <noident>
> >     ...
> >     
> >     Signed-off-by: Ben Pfaff <blp@ovn.org>
> >     ---
> >      include/sparse/automake.mk  |  1 +
> >      include/sparse/rte_memcpy.h | 39 +++++++++++++++++++++++++++++++++++++++
> >      2 files changed, 40 insertions(+)
> >      create mode 100644 include/sparse/rte_memcpy.h
> >     
> >     diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
> >     index 0456ee67d481..f3282c260414 100644
> >     --- a/include/sparse/automake.mk
> >     +++ b/include/sparse/automake.mk
> >     @@ -10,6 +10,7 @@ noinst_HEADERS += \
> >              include/sparse/pthread.h \
> >              include/sparse/rte_atomic.h \
> >              include/sparse/rte_lcore.h \
> >     +        include/sparse/rte_memcpy.h \
> >              include/sparse/rte_vect.h \
> >              include/sparse/sys/socket.h \
> >              include/sparse/sys/wait.h
> >     diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h
> >     new file mode 100644
> >     index 000000000000..5cd3f013ea8b
> >     --- /dev/null
> >     +++ b/include/sparse/rte_memcpy.h
> >     @@ -0,0 +1,39 @@
> >     +/* Copyright (c) 2017 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_licenses_LICENSE-2D2.0&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=AzghyY07JReCfJwWQShu12qMFGiOML9IpKTIdvsOTu0&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 RTE_MEMCPY_H
> >     +#define RTE_MEMCPY_H 1
> >     +
> >     +#ifndef __CHECKER__
> >     +#error "Use this header only with sparse.  It is not a correct implementation."
> >     +#endif
> >     +
> >     +/* Include the same headers as the real rte_memcpy(). */
> >     +#include <stdio.h>
> >     +#include <stdint.h>
> >     +#include <string.h>
> >     +#include <rte_vect.h>
> >     +
> >     +/* Declare the same functions as the real rte_memcpy.h, without defining them.
> >     + * This gives sparse the information it needs without provoking sparse's
> >     + * complaints about the implementations. */
> >     +void rte_mov16(uint8_t *, const uint8_t *);
> >     +void rte_mov32(uint8_t *, const uint8_t *);
> >     +void rte_mov64(uint8_t *, const uint8_t *);
> >     +void rte_mov128(uint8_t *, const uint8_t *);
> >     +void rte_mov256(uint8_t *, const uint8_t *);
> >     +void *rte_memcpy(void *, const void *, size_t);
> >     +
> >     +#endif  /* RTE_MEMCPY_H_WRAPPER */
> >     -- 
> >     2.10.2
> >     
> >     _______________________________________________
> >     dev mailing list
> >     dev@openvswitch.org
> >     https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=Qv-3YRHpSQuMTnL-vRyqF0jCaFIpiuYqPGtkgPYEwxA&s=Nij03EBjSF5Amp8_Hg_3XzcIOE0lgMzzhGfJXVAzHhU&e= 
> >     
> >
diff mbox

Patch

diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
index 0456ee67d481..f3282c260414 100644
--- a/include/sparse/automake.mk
+++ b/include/sparse/automake.mk
@@ -10,6 +10,7 @@  noinst_HEADERS += \
         include/sparse/pthread.h \
         include/sparse/rte_atomic.h \
         include/sparse/rte_lcore.h \
+        include/sparse/rte_memcpy.h \
         include/sparse/rte_vect.h \
         include/sparse/sys/socket.h \
         include/sparse/sys/wait.h
diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h
new file mode 100644
index 000000000000..5cd3f013ea8b
--- /dev/null
+++ b/include/sparse/rte_memcpy.h
@@ -0,0 +1,39 @@ 
+/* Copyright (c) 2017 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 RTE_MEMCPY_H
+#define RTE_MEMCPY_H 1
+
+#ifndef __CHECKER__
+#error "Use this header only with sparse.  It is not a correct implementation."
+#endif
+
+/* Include the same headers as the real rte_memcpy(). */
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <rte_vect.h>
+
+/* Declare the same functions as the real rte_memcpy.h, without defining them.
+ * This gives sparse the information it needs without provoking sparse's
+ * complaints about the implementations. */
+void rte_mov16(uint8_t *, const uint8_t *);
+void rte_mov32(uint8_t *, const uint8_t *);
+void rte_mov64(uint8_t *, const uint8_t *);
+void rte_mov128(uint8_t *, const uint8_t *);
+void rte_mov256(uint8_t *, const uint8_t *);
+void *rte_memcpy(void *, const void *, size_t);
+
+#endif  /* RTE_MEMCPY_H_WRAPPER */