Skip site navigation (1) Skip section navigation (2)

Re: Re: [PATCH] Use CC atomic builtins if available [was: Re: TAS patch for building on armel/armhf thumb]

From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: Bruce Momjian <bruce(at)momjian(dot)us>, "Sergey E(dot) Koposov" <math(at)sai(dot)msu(dot)ru>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Noah Misch <noah(at)leadboat(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, PostgreSQL Bugs <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: Re: [PATCH] Use CC atomic builtins if available [was: Re: TAS patch for building on armel/armhf thumb]
Date: 2012-02-06 11:24:32
Message-ID: 4F2FB870.3060104@enterprisedb.com (view raw or flat)
Thread:
Lists: pgsql-bugs
On 03.02.2012 02:48, Bruce Momjian wrote:
> Sorry for the late reply, but Heikki, can you get this Itanium
> information into s_lock.h as a comment, particularly the information
> about the +Ovolatile=__unordered flag?

Good idea. I came up with the attached, hope that explains it.

Looking back at the discussions, we concluded that the current code is 
safe on gcc, because it implicitly adds the .rel/.acq opcodes to 
volatile accesses, and HP's compiler does the same as long as you don't 
explicitly disable it with +Ovolatile=__unordered. But what about 
Intel's icc compiler? Presumably it's also safe, but looking at Intel's 
manuals that I found, I'm not completely sure about it. There's an 
option, -m[no-]serialize-volatile, that controls it, but I couldn't 
figure out which is the default. Looking at the docs on that from Intel 
that I found [1], it seems to me that on Linux, the default is *not* 
safe, but on Windows it is.

Sergey, you have dugong in the buildfarm that uses Intel's compiler on 
Itanium. Could you verify whether the -mno-serialize-volatile is the 
default? If you could for example extract the assembler code generated 
by icc for xlog.c, and send it over. Whether it's generating the 
.rel/.acq opcodes should be easy to see in the generated code of the 
XLogGetLastRemoved() function, for example, which doesn't do much else 
than grab a spinlock. On gcc, the -s flag generates the assembly files, 
I presume it's the same on icc.

Perhaps we should set those compiler flags explicitly in configure, 
regardless of the defaults.

[1] 
http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/copts/ccpp_options/option_qserialize-volatile.htm

-- 
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com

Attachment: document-itanium-volatile-behavior-1.patch
Description: text/x-diff (1.9 KB)

In response to

Responses

pgsql-bugs by date

Next:From: ajit.pradnyavantDate: 2012-02-06 11:57:28
Subject: BUG #6433: Pg Admin Cant open
Previous:From: jt_commonDate: 2012-02-06 08:57:56
Subject: BUG #6432: does not begin the installer

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group