From patchwork Tue Apr 4 20:07:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125787 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5E811428BC; Tue, 4 Apr 2023 22:07:52 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2579D42BD9; Tue, 4 Apr 2023 22:07:34 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id DA3D8410FB for ; Tue, 4 Apr 2023 22:07:29 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 01402210DDBC; Tue, 4 Apr 2023 13:07:28 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 01402210DDBC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=5ltsvVaUMbKkOdztLnohPoEDJyNO4qKJ6XNaAjGfoFU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h4ggFAo1m2UMonN2yhDLQc9a38xqsz6bWjFavL8Rs94E5+MThl3MbUXEbux3CiGmu kT5+0vuNe3RJeUk8KxM58dWgGiolSl3P1ubBrtkC9JeTb1lf/3zg76qlXJABIw29OQ 8xSWzDG7VyrO0GChZqfQNIhUP4Rl3ux5V+1RuyDg= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 1/9] eal: use rdtsc intrinsic when compiling with msvc Date: Tue, 4 Apr 2023 13:07:19 -0700 Message-Id: <1680638847-26430-2-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Inline assembly is not supported for msvc x64 instead use __rdtsc intrinsic. Signed-off-by: Tyler Retzlaff --- lib/eal/x86/include/rte_cycles.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/eal/x86/include/rte_cycles.h b/lib/eal/x86/include/rte_cycles.h index a461a4d..0c142ce 100644 --- a/lib/eal/x86/include/rte_cycles.h +++ b/lib/eal/x86/include/rte_cycles.h @@ -6,6 +6,10 @@ #ifndef _RTE_CYCLES_X86_64_H_ #define _RTE_CYCLES_X86_64_H_ +#ifdef RTE_TOOLCHAIN_MSVC +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -23,6 +27,7 @@ static inline uint64_t rte_rdtsc(void) { +#ifndef RTE_TOOLCHAIN_MSVC union { uint64_t tsc_64; RTE_STD_C11 @@ -47,6 +52,9 @@ "=a" (tsc.lo_32), "=d" (tsc.hi_32)); return tsc.tsc_64; +#else + return __rdtsc(); +#endif } static inline uint64_t From patchwork Tue Apr 4 20:07:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125785 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7FAB9428BC; Tue, 4 Apr 2023 22:07:37 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 090A341141; Tue, 4 Apr 2023 22:07:32 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id C64D140EE3 for ; Tue, 4 Apr 2023 22:07:29 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 0E01B210DEA0; Tue, 4 Apr 2023 13:07:28 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 0E01B210DEA0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=aVNgvOGAqJXcMymeeUabNQLNbDPaZZ1fFdt0Ib9Ah9I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AEgRMKMclF23hchMIM+uy3Je8RW6FQIESWswlt98zV1fKDK4ccIlPDNpe7ySGt+yV ee123EyH5BsEkGFHmFvl0ItylgRirB5EQh+B8se5JMJ0A19n3MXKOYG8Bt7kh/faHF faIdX9gJVohtgD8sxf4wmhVkv/8+BBRINUPIyAhM= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 2/9] eal: use rtm and xtest intrinsics when compiling with msvc Date: Tue, 4 Apr 2023 13:07:20 -0700 Message-Id: <1680638847-26430-3-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Inline assembly is not supported for msvc x64 instead use _xbegin, _xend, _xabort and _xtest intrinsics. Signed-off-by: Tyler Retzlaff --- lib/eal/x86/include/rte_rtm.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/eal/x86/include/rte_rtm.h b/lib/eal/x86/include/rte_rtm.h index 36bf498..26672cb 100644 --- a/lib/eal/x86/include/rte_rtm.h +++ b/lib/eal/x86/include/rte_rtm.h @@ -5,6 +5,9 @@ #ifndef _RTE_RTM_H_ #define _RTE_RTM_H_ 1 +#ifdef RTE_TOOLCHAIN_MSVC +#include +#endif /* Official RTM intrinsics interface matching gcc/icc, but works on older gcc compatible compilers and binutils. */ @@ -28,31 +31,47 @@ static __rte_always_inline unsigned int rte_xbegin(void) { +#ifndef RTE_TOOLCHAIN_MSVC unsigned int ret = RTE_XBEGIN_STARTED; asm volatile(".byte 0xc7,0xf8 ; .long 0" : "+a" (ret) :: "memory"); return ret; +#else + return _xbegin(); +#endif } static __rte_always_inline void rte_xend(void) { +#ifndef RTE_TOOLCHAIN_MSVC asm volatile(".byte 0x0f,0x01,0xd5" ::: "memory"); +#else + _xend(); +#endif } /* not an inline function to workaround a clang bug with -O0 */ +#ifndef RTE_TOOLCHAIN_MSVC #define rte_xabort(status) do { \ asm volatile(".byte 0xc6,0xf8,%P0" :: "i" (status) : "memory"); \ } while (0) +#else +#define rte_xabort(status) _xabort(status) +#endif static __rte_always_inline int rte_xtest(void) { +#ifndef RTE_TOOLCHAIN_MSVC unsigned char out; asm volatile(".byte 0x0f,0x01,0xd6 ; setnz %0" : "=r" (out) :: "memory"); return out; +#else + return _xtest(); +#endif } #ifdef __cplusplus From patchwork Tue Apr 4 20:07:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125786 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AD08E428BC; Tue, 4 Apr 2023 22:07:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1451742B7E; Tue, 4 Apr 2023 22:07:33 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id CAA6B410FA for ; Tue, 4 Apr 2023 22:07:29 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 1A754210DEA2; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 1A754210DEA2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=y2LESmcjgD0IRq5b13XLwCMjQMUjMArfTsoftW1Sj+M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GrpxDcIAS8tTAP2gt44SoxT3y0tCHn2rCyXVhsGSyGRpGq3py7TCfFckQKHZf4Ozx X+4yGsPRNRqy9EJb6Fknz+O3oL+UeyKUTKevIp4tuVHX5tpOnP+rPCmmcaV787a6Z7 r1wLcfb3wIGeyLcFbSGr8vITJ38UcSmcB7z6d73I= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 3/9] eal: use barrier intrinsics when compiling with msvc Date: Tue, 4 Apr 2023 13:07:21 -0700 Message-Id: <1680638847-26430-4-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Inline assembly is not supported for msvc x64 instead use _mm_{s,l,m}fence() intrinsics. Signed-off-by: Tyler Retzlaff --- lib/eal/include/generic/rte_atomic.h | 4 ++++ lib/eal/x86/include/rte_atomic.h | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/eal/include/generic/rte_atomic.h b/lib/eal/include/generic/rte_atomic.h index 234b268..e973184 100644 --- a/lib/eal/include/generic/rte_atomic.h +++ b/lib/eal/include/generic/rte_atomic.h @@ -116,9 +116,13 @@ * Guarantees that operation reordering does not occur at compile time * for operations directly before and after the barrier. */ +#ifndef RTE_TOOLCHAIN_MSVC #define rte_compiler_barrier() do { \ asm volatile ("" : : : "memory"); \ } while(0) +#else +#define rte_compiler_barrier() _ReadWriteBarrier() +#endif /** * Synchronization fence between threads based on the specified memory order. diff --git a/lib/eal/x86/include/rte_atomic.h b/lib/eal/x86/include/rte_atomic.h index f2ee1a9..7ae3a41 100644 --- a/lib/eal/x86/include/rte_atomic.h +++ b/lib/eal/x86/include/rte_atomic.h @@ -27,9 +27,13 @@ #define rte_rmb() _mm_lfence() +#ifndef RTE_TOOLCHAIN_MSVC #define rte_smp_wmb() rte_compiler_barrier() - #define rte_smp_rmb() rte_compiler_barrier() +#else +#define rte_smp_wmb() _mm_sfence() +#define rte_smp_rmb() _mm_lfence() +#endif /* * From Intel Software Development Manual; Vol 3; @@ -66,11 +70,15 @@ static __rte_always_inline void rte_smp_mb(void) { +#ifndef RTE_TOOLCHAIN_MSVC #ifdef RTE_ARCH_I686 asm volatile("lock addl $0, -128(%%esp); " ::: "memory"); #else asm volatile("lock addl $0, -128(%%rsp); " ::: "memory"); #endif +#else + _mm_mfence(); +#endif } #define rte_io_mb() rte_mb() From patchwork Tue Apr 4 20:07:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125788 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 72762428BC; Tue, 4 Apr 2023 22:07:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 379E942C54; Tue, 4 Apr 2023 22:07:35 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id F1FF541141 for ; Tue, 4 Apr 2023 22:07:29 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 2679D210DEA4; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 2679D210DEA4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=suk611O6Ad/NaeKVpu2g21DUajOcYEmDmeCZxDkH9Fs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hzNHQRSujjZMK4B+0MPGqfsngqk2Cy3gtq4IJjRDZIE+MmHY5EQZj57C4bDhT/XPV prpe31Fpvv5JTPAS/t/aFlxtFQ1vYEaoMSc0n4rh0NLRfK13HyOIUA+jmo3N91sm/g 9md3zMfb4qvrqsNKXMjxip3ERXt0lh1sILn67WUo= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 4/9] eal: typedef cpu flag enum as int for msvc Date: Tue, 4 Apr 2023 13:07:22 -0700 Message-Id: <1680638847-26430-5-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Forward declaration of a typedef is a non-standard extension and is not supported by msvc. Use an int instead. Abstract the use of the int/enum rte_cpu_flag_t in function parameter lists by re-typdefing the enum rte_cpu_flag_t to the rte_cpu_flag_t identifier. Remove the use of __extension__ on function prototypes where rte_cpu_flag_t appeared in parameter lists, it is sufficient to have the conditionally compiled __extension__ at the non-standard forward declaration site. Signed-off-by: Tyler Retzlaff --- lib/eal/include/generic/rte_cpuflags.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/eal/include/generic/rte_cpuflags.h b/lib/eal/include/generic/rte_cpuflags.h index d35551e..87ab03c 100644 --- a/lib/eal/include/generic/rte_cpuflags.h +++ b/lib/eal/include/generic/rte_cpuflags.h @@ -44,8 +44,12 @@ struct rte_cpu_intrinsics { /** * Enumeration of all CPU features supported */ +#ifndef RTE_TOOLCHAIN_MSVC __extension__ -enum rte_cpu_flag_t; +typedef enum rte_cpu_flag_t rte_cpu_flag_t; +#else +typedef int rte_cpu_flag_t; +#endif /** * Get name of CPU flag @@ -56,9 +60,8 @@ struct rte_cpu_intrinsics { * flag name * NULL if flag ID is invalid */ -__extension__ const char * -rte_cpu_get_flag_name(enum rte_cpu_flag_t feature); +rte_cpu_get_flag_name(rte_cpu_flag_t feature); /** * Function for checking a CPU flag availability @@ -70,9 +73,8 @@ struct rte_cpu_intrinsics { * 0 if flag is not available * -ENOENT if flag is invalid */ -__extension__ int -rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature); +rte_cpu_get_flag_enabled(rte_cpu_flag_t feature); /** * This function checks that the currently used CPU supports the CPU features From patchwork Tue Apr 4 20:07:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125789 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 94D37428BC; Tue, 4 Apr 2023 22:08:07 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 447F642D0E; Tue, 4 Apr 2023 22:07:36 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 77B4040A7E for ; Tue, 4 Apr 2023 22:07:30 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 328D7210DEA5; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 328D7210DEA5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=RGOshNuMPn+0padrIfYfv4CpESAP5aLLZV7po6DDosE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jo9N7/DDuZQnr0eQk73b9XdSmd8AkBsbQkWRXJIuFtTmXtj4KjJ1zKiho4rk2maQ9 Wu20ewRZt3xRv1fgIKU+23nKXYtW+phqkAw33OtO5Z0eFWA/qkuLhSizsSLRDKmMbv JoqKccrc0eueYkSG6+/3BpCzSQFYF0p9JXDTA3Gk= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 5/9] eal: hide GCC extension based alignment markers Date: Tue, 4 Apr 2023 13:07:23 -0700 Message-Id: <1680638847-26430-6-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When compiling with msvc don't expose typedefs used as alignment markers. Signed-off-by: Tyler Retzlaff --- lib/eal/include/rte_common.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h index 15765b4..2f464e3 100644 --- a/lib/eal/include/rte_common.h +++ b/lib/eal/include/rte_common.h @@ -460,6 +460,8 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) /*********** Structure alignment markers ********/ +#ifndef RTE_TOOLCHAIN_MSVC + /** Generic marker for any place in a structure. */ __extension__ typedef void *RTE_MARKER[0]; /** Marker for 1B alignment in a structure. */ @@ -471,6 +473,8 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) /** Marker for 8B alignment in a structure. */ __extension__ typedef uint64_t RTE_MARKER64[0]; +#endif + /** * Combines 32b inputs most significant set bits into the least * significant bits to construct a value with the same MSBs as x From patchwork Tue Apr 4 20:07:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125793 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 046D1428BC; Tue, 4 Apr 2023 22:08:46 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ACB0042D1D; Tue, 4 Apr 2023 22:07:40 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id C114E410FA for ; Tue, 4 Apr 2023 22:07:30 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 3EA34210DEA7; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 3EA34210DEA7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=DnaZ14ATtMFkJVRoRlrZQMfdkaZJ+/vXFYhJkmlWy/k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bHbTCqrlIQhhcdzOnQaLb6CQbrTlaPTJ1tCboHmMHrPmcRLR2KNfEOYgwEfY83CFP pImwZiBXhcCML7L6TEcPksUwLwaWT4kddm3y02maMjtFYqeFNzLLmkA4fAeeD3w7E6 pFeFRPue8us/zj/ohp8tcoNTKpC1z7cooDAvh4q4= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 6/9] eal: expand most macros to empty when using msvc Date: Tue, 4 Apr 2023 13:07:24 -0700 Message-Id: <1680638847-26430-7-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org For now expand a lot of common rte macros empty. The catch here is we need to test that most of the macros do what they should but at the same time they are blocking work needed to bootstrap of the unit tests. Later we will return and provide (where possible) expansions that work correctly for msvc and where not possible provide some alternate macros to achieve the same outcome. Signed-off-by: Tyler Retzlaff --- lib/eal/include/rte_branch_prediction.h | 8 ++++++++ lib/eal/include/rte_common.h | 33 +++++++++++++++++++++++++++++++++ lib/eal/include/rte_compat.h | 20 ++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/lib/eal/include/rte_branch_prediction.h b/lib/eal/include/rte_branch_prediction.h index 0256a9d..3589c97 100644 --- a/lib/eal/include/rte_branch_prediction.h +++ b/lib/eal/include/rte_branch_prediction.h @@ -25,7 +25,11 @@ * */ #ifndef likely +#ifndef RTE_TOOLCHAIN_MSVC #define likely(x) __builtin_expect(!!(x), 1) +#else +#define likely(x) (!!(x) == 1) +#endif #endif /* likely */ /** @@ -39,7 +43,11 @@ * */ #ifndef unlikely +#ifndef RTE_TOOLCHAIN_MSVC #define unlikely(x) __builtin_expect(!!(x), 0) +#else +#define unlikely(x) (!!(x) == 0) +#endif #endif /* unlikely */ #ifdef __cplusplus diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h index 2f464e3..a724e22 100644 --- a/lib/eal/include/rte_common.h +++ b/lib/eal/include/rte_common.h @@ -65,7 +65,11 @@ /** * Force alignment */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_aligned(a) __attribute__((__aligned__(a))) +#else +#define __rte_aligned(a) +#endif #ifdef RTE_ARCH_STRICT_ALIGN typedef uint64_t unaligned_uint64_t __rte_aligned(1); @@ -88,8 +92,13 @@ #define __rte_may_alias __attribute__((__may_alias__)) /******* Macro to mark functions and fields scheduled for removal *****/ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_deprecated __attribute__((__deprecated__)) #define __rte_deprecated_msg(msg) __attribute__((__deprecated__(msg))) +#else +#define __rte_deprecated +#define __rte_deprecated_msg(msg) +#endif /** * Macro to mark macros and defines scheduled for removal @@ -117,7 +126,11 @@ /** * short definition to mark a function parameter unused */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_unused __attribute__((__unused__)) +#else +#define __rte_unused +#endif /** * Mark pointer as restricted with regard to pointer aliasing. @@ -141,6 +154,7 @@ * even if the underlying stdio implementation is ANSI-compliant, * so this must be overridden. */ +#ifndef RTE_TOOLCHAIN_MSVC #if RTE_CC_IS_GNU #define __rte_format_printf(format_index, first_arg) \ __attribute__((format(gnu_printf, format_index, first_arg))) @@ -148,6 +162,9 @@ #define __rte_format_printf(format_index, first_arg) \ __attribute__((format(printf, format_index, first_arg))) #endif +#else +#define __rte_format_printf(format_index, first_arg) +#endif /** * Tells compiler that the function returns a value that points to @@ -222,7 +239,11 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) /** * Hint never returning function */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_noreturn __attribute__((noreturn)) +#else +#define __rte_noreturn +#endif /** * Issue a warning in case the function's return value is ignored. @@ -247,12 +268,20 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) * } * @endcode */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_warn_unused_result __attribute__((warn_unused_result)) +#else +#define __rte_warn_unused_result +#endif /** * Force a function to be inlined */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_always_inline inline __attribute__((always_inline)) +#else +#define __rte_always_inline +#endif /** * Force a function to be noinlined @@ -437,7 +466,11 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) #define RTE_CACHE_LINE_MIN_SIZE 64 /** Force alignment to cache line. */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_cache_aligned __rte_aligned(RTE_CACHE_LINE_SIZE) +#else +#define __rte_cache_aligned +#endif /** Force minimum cache line alignment. */ #define __rte_cache_min_aligned __rte_aligned(RTE_CACHE_LINE_MIN_SIZE) diff --git a/lib/eal/include/rte_compat.h b/lib/eal/include/rte_compat.h index fc9fbaa..6a4b5ee 100644 --- a/lib/eal/include/rte_compat.h +++ b/lib/eal/include/rte_compat.h @@ -12,14 +12,22 @@ #ifndef ALLOW_EXPERIMENTAL_API +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_experimental \ __attribute__((deprecated("Symbol is not yet part of stable ABI"), \ section(".text.experimental"))) +#else +#define __rte_experimental +#endif #else +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_experimental \ __attribute__((section(".text.experimental"))) +#else +#define __rte_experimental +#endif #endif @@ -30,23 +38,35 @@ #if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_internal \ __attribute__((error("Symbol is not public ABI"), \ section(".text.internal"))) +#else +#define __rte_internal +#endif #elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /* For clang */ +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_internal \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \ __attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \ section(".text.internal"))) \ _Pragma("GCC diagnostic pop") +#else +#define __rte_internal +#endif #else +#ifndef RTE_TOOLCHAIN_MSVC #define __rte_internal \ __attribute__((section(".text.internal"))) +#else +#define __rte_internal +#endif #endif From patchwork Tue Apr 4 20:07:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125790 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F656428BC; Tue, 4 Apr 2023 22:08:15 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5760342D20; Tue, 4 Apr 2023 22:07:37 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id B8CEC40EE3 for ; Tue, 4 Apr 2023 22:07:30 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 4B24C210DEA8; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 4B24C210DEA8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=qHJOrg33BxNEek/xMnSlok4qTXn4T7xviwYy2TpNsx4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aCsyrBbQhQgwiPagbuGCQ5XP7sUg6vq/BHkEAqzctAsYWWeejqVNFwct/FQAu5ONC 2jcjltci5yWtZmdsSLqydgyXp11J0deful/3VeP8vvJw3mHXF9f5Ua2+fi6C2KNjp8 Zvjw7Ui/Aq6IyvMNMzzOh1V7jg2NUmP9McXpWj58= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 7/9] eal: exclude exposure of rte atomic APIs for MSVC builds Date: Tue, 4 Apr 2023 13:07:25 -0700 Message-Id: <1680638847-26430-8-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org It's discouraged to use rte_atomics APIs instead standard APIs should be used from C11. Since MSVC is a new toolchain/platform combination block visibility of the rte_atomic APIs from day 1. Signed-off-by: Tyler Retzlaff --- lib/eal/include/generic/rte_atomic.h | 7 +++++++ lib/eal/x86/include/rte_atomic.h | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/lib/eal/include/generic/rte_atomic.h b/lib/eal/include/generic/rte_atomic.h index e973184..1964697 100644 --- a/lib/eal/include/generic/rte_atomic.h +++ b/lib/eal/include/generic/rte_atomic.h @@ -131,6 +131,8 @@ /*------------------------- 16 bit atomic operations -------------------------*/ +#ifndef RTE_TOOLCHAIN_MSVC + /** * Atomic compare and set. * @@ -1038,8 +1040,11 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v) } #endif +#endif + /*------------------------ 128 bit atomic operations -------------------------*/ + /** * 128-bit integer structure. */ @@ -1049,8 +1054,10 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v) union { uint64_t val[2]; #ifdef RTE_ARCH_64 +#ifndef RTE_TOOLCHAIN_MSVC __extension__ __int128 int128; #endif +#endif }; } __rte_aligned(16) rte_int128_t; diff --git a/lib/eal/x86/include/rte_atomic.h b/lib/eal/x86/include/rte_atomic.h index 7ae3a41..211a734 100644 --- a/lib/eal/x86/include/rte_atomic.h +++ b/lib/eal/x86/include/rte_atomic.h @@ -87,6 +87,8 @@ #define rte_io_rmb() rte_compiler_barrier() +#ifndef RTE_TOOLCHAIN_MSVC + /** * Synchronization fence between threads based on the specified memory order. * @@ -283,6 +285,8 @@ static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) #include "rte_atomic_64.h" #endif +#endif + #ifdef __cplusplus } #endif From patchwork Tue Apr 4 20:07:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125791 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 94514428BC; Tue, 4 Apr 2023 22:08:24 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7879942D2F; Tue, 4 Apr 2023 22:07:38 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id C2112410FB for ; Tue, 4 Apr 2023 22:07:30 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 5844C210DEAA; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5844C210DEAA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=UdRl6E4dhDfTdvJ/Ndp/1r/2c9CLJI/CsNAgZ1wnSmA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JVUAgYkev57lGHATq0uQv4ebTZegSzKFq68CAwUGXzNkAmffKMMWet8JwCzhuyR/C dl4Y5ffCjQ5OKWu+WCuKdJz8tb5yLjcabjzBW1Wi2jh9GeBr71UJamBIeDiuUFmfdz dB76ZFNrHQ154tKoPLMsWLkOLfjedSYVGu/MHqIo= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 8/9] telemetry: disable json print formatting with msvc Date: Tue, 4 Apr 2023 13:07:26 -0700 Message-Id: <1680638847-26430-9-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org VLAs are unsafe and will never be implemented in MSVC. When compiling with MSVC just return immediately indicating 0 output characters formatted. For now telemetry doesn't work on Windows, we will revisit support for the telemetry library sometime after we establish the DPDK unit tests. Signed-off-by: Tyler Retzlaff --- lib/telemetry/telemetry_json.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/telemetry/telemetry_json.h b/lib/telemetry/telemetry_json.h index 744bbfe..d847003 100644 --- a/lib/telemetry/telemetry_json.h +++ b/lib/telemetry/telemetry_json.h @@ -30,6 +30,7 @@ static inline int __json_snprintf(char *buf, const int len, const char *format, ...) { +#ifndef RTE_TOOLCHAIN_MSVC char tmp[len]; va_list ap; int ret; @@ -41,6 +42,7 @@ strcpy(buf, tmp); return ret; } +#endif return 0; /* nothing written or modified */ } @@ -60,6 +62,7 @@ static inline int __json_format_str(char *buf, const int len, const char *prefix, const char *str, const char *suffix) { +#ifndef RTE_TOOLCHAIN_MSVC char tmp[len]; int tmpidx = 0; @@ -98,6 +101,9 @@ strcpy(buf, tmp); return tmpidx; +#else + return 0; +#endif } /* Copies an empty array into the provided buffer. */ From patchwork Tue Apr 4 20:07:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 125792 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F14C7428BC; Tue, 4 Apr 2023 22:08:34 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 96C0A42D33; Tue, 4 Apr 2023 22:07:39 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id C6B7441141 for ; Tue, 4 Apr 2023 22:07:30 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1086) id 65456210DEAB; Tue, 4 Apr 2023 13:07:29 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 65456210DEAB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680638849; bh=8s73UQQAtEQ2WczFyopp6uPfPk17PNcxGsk9aCTBFsw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rXS/+v3TD1zBJWMwFO6Cr8+hpDFNaWLMaKSt1OlSAQf1LXrIWSlCtQdiqdi8JgXiN 8YL/F+wSXVtIQk19k+cbz2yBjhdTPwA+O0LXxHqijZJpfJFwEIpm0A0PHKDsBDTHTX kTsUq9wA6wZZv38vWgslDYq7pqcg5dHQrcDR+B8o= From: Tyler Retzlaff To: dev@dpdk.org Cc: bruce.richardson@intel.com, david.marchand@redhat.com, thomas@monjalon.net, mb@smartsharesystems.com, konstantin.ananyev@huawei.com, Tyler Retzlaff Subject: [PATCH v2 9/9] telemetry: avoid expanding versioned symbol macros on msvc Date: Tue, 4 Apr 2023 13:07:27 -0700 Message-Id: <1680638847-26430-10-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> References: <1680558751-17931-1-git-send-email-roretzla@linux.microsoft.com> <1680638847-26430-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Windows does not support versioned symbols. Fortunately Windows also doesn't have an exported stable ABI. Export rte_tel_data_add_array_int -> rte_tel_data_add_array_int_24 and rte_tel_data_add_dict_int -> rte_tel_data_add_dict_int_v24 functions. Windows does have a way to achieve similar versioning for symbols but it is not a simple #define so it will be done as a work package later. Signed-off-by: Tyler Retzlaff --- lib/telemetry/telemetry_data.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c index 2bac2de..284c16e 100644 --- a/lib/telemetry/telemetry_data.c +++ b/lib/telemetry/telemetry_data.c @@ -82,8 +82,16 @@ /* mark the v23 function as the older version, and v24 as the default version */ VERSION_SYMBOL(rte_tel_data_add_array_int, _v23, 23); BIND_DEFAULT_SYMBOL(rte_tel_data_add_array_int, _v24, 24); +#ifndef RTE_TOOLCHAIN_MSVC MAP_STATIC_SYMBOL(int rte_tel_data_add_array_int(struct rte_tel_data *d, int64_t x), rte_tel_data_add_array_int_v24); +#else +int +rte_tel_data_add_array_int(struct rte_tel_data *d, int64_t x) +{ + return rte_tel_data_add_array_int_v24(d, x); +} +#endif int rte_tel_data_add_array_uint(struct rte_tel_data *d, uint64_t x) @@ -220,8 +228,16 @@ /* mark the v23 function as the older version, and v24 as the default version */ VERSION_SYMBOL(rte_tel_data_add_dict_int, _v23, 23); BIND_DEFAULT_SYMBOL(rte_tel_data_add_dict_int, _v24, 24); +#ifndef RTE_TOOLCHAIN_MSVC MAP_STATIC_SYMBOL(int rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int64_t val), rte_tel_data_add_dict_int_v24); +#else +int +rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int64_t val) +{ + return rte_tel_data_add_dict_int_v24(d, name, val); +} +#endif int rte_tel_data_add_dict_uint(struct rte_tel_data *d,