From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: RTM instruction compile failure for XABORT when AVX is active Date: Mon, 29 Jun 2015 12:19:20 +0200 Message-ID: <2576181.dRfjlrHRWI@xps13> References: <1A87AD2E-38CD-4C61-A9FD-C52608FF9DAC@mhcomputing.net> <39879033.dIVnPGkh8l@xps13> <386858255.20150629121137@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org To: Roman Dementiev , Matthew Hall Return-path: Received: from mail-wi0-f176.google.com (mail-wi0-f176.google.com [209.85.212.176]) by dpdk.org (Postfix) with ESMTP id C3A02C4C0 for ; Mon, 29 Jun 2015 12:20:29 +0200 (CEST) Received: by wicnd19 with SMTP id nd19so66873616wic.1 for ; Mon, 29 Jun 2015 03:20:29 -0700 (PDT) In-Reply-To: <386858255.20150629121137@intel.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 2015-06-29 12:11, Roman Dementiev: > >> On Jun 28, 2015, at 10:16 AM, Matthew Hall wrote: > >> > I am getting a strange error compiling some RTM instructions when > >> > I upgraded my VM environment from VirtualBox 4 to VirtualBox 5 and > >> > AVX instructions from the host CPU became available. However when > >> > I am reading the opcode description for XABORT it supposedly allows > >> > an immediate operand for the argument so I can't understand why this > >> > code would not compile. Any advice? > >> > > >> > CC test_hash_scaling.o > >> > In file included from /vagrant/external/dpdk/app/test/test_hash_scaling.c:37: > >> > In file included from /vagrant/external/dpdk/build/include/rte_spinlock.h:42: > >> > /vagrant/external/dpdk/build/include/rte_rtm.h:56:15: error: invalid operand for inline asm constraint 'i' > >> > asm volatile(".byte 0xc6,0xf8,%P0" :: "i" (status) : "memory"); There is no such bug with my compiler: clang version 3.6.1 (tags/RELEASE_361/final) Target: x86_64-unknown-linux-gnu Matthew, which version are you using? > It looks like a compiler bug for me. In the meantime Clang should > have native TSX intrinsics (but most compilers fail to implement > them correctly on a first attempt allowing instruction reordering). Could > you try this workaround: > > diff --git a/lib/librte_eal/common/include/arch/x86/rte_rtm.h b/lib/librte_eal/common/include/arch/x86/rte_rtm.h > index d935641..ee73dd4 100644 > --- a/lib/librte_eal/common/include/arch/x86/rte_rtm.h > +++ b/lib/librte_eal/common/include/arch/x86/rte_rtm.h > @@ -50,10 +50,14 @@ void rte_xend(void) > asm volatile(".byte 0x0f,0x01,0xd5" ::: "memory"); > } > > +#include > + > static __attribute__((__always_inline__)) inline > void rte_xabort(const unsigned int status) > { > - asm volatile(".byte 0xc6,0xf8,%P0" :: "i" (status) : "memory"); > + asm volatile(::: "memory"); > + _xabort(status); > + asm volatile(::: "memory"); > } > > static __attribute__((__always_inline__)) inline