diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2016-04-19 17:01:11 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2016-04-19 10:01:11 -0700 |
commit | 831698b8f7e479506b2f7156ce54fe95b7126c1c (patch) | |
tree | 3273b0d938e451bbc5bab2642961a56fc6ba064b /libitm/util.cc | |
parent | d855ad89cbf9f70c1f2cd1e0eea7be4e08f769d8 (diff) | |
download | gcc-831698b8f7e479506b2f7156ce54fe95b7126c1c.zip gcc-831698b8f7e479506b2f7156ce54fe95b7126c1c.tar.gz gcc-831698b8f7e479506b2f7156ce54fe95b7126c1c.tar.bz2 |
Allocate memory on cache line if requested
Since GTM::gtm_thread has
gtm_thread *next_thread __attribute__((__aligned__(HW_CACHELINE_SIZE)));
GTM::gtm_thread::operator new () calls xmalloc with separate_cl == true.
xmalloc must return memory on cache line in this case.
PR libitm/70456
* util.cc (xmalloc): Use posix_memalign to allocate memory on
on cache line if requested.
From-SVN: r235211
Diffstat (limited to 'libitm/util.cc')
-rw-r--r-- | libitm/util.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/libitm/util.cc b/libitm/util.cc index 16e5d03..f89b2e5 100644 --- a/libitm/util.cc +++ b/libitm/util.cc @@ -61,12 +61,22 @@ GTM_fatal (const char *fmt, ...) void * xmalloc (size_t size, bool separate_cl) { - // TODO Use posix_memalign if separate_cl is true, or some other allocation - // method that will avoid sharing cache lines with data used by other - // threads. - void *r = malloc (size); - if (r == 0) - GTM_fatal ("Out of memory allocating %lu bytes", (unsigned long) size); + void *r; +#ifdef HAVE_POSIX_MEMALIGN + if (separate_cl) + { + if (posix_memalign (&r, HW_CACHELINE_SIZE, size)) + GTM_fatal ("Out of memory allocating %lu bytes aligned on cache line", + (unsigned long) size); + } + else +#endif + { + r = malloc (size); + if (r == 0) + GTM_fatal ("Out of memory allocating %lu bytes", + (unsigned long) size); + } return r; } |