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

Darrell Ball dball at vmware.com
Sat May 6 20:27:47 UTC 2017


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 at gmail.com>



On 5/5/17, 9:39 PM, "ovs-dev-bounces at openvswitch.org on behalf of Ben Pfaff" <ovs-dev-bounces at openvswitch.org on behalf of blp at 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 at 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 at 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= 
    



More information about the dev mailing list