aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgomp/ChangeLog10
-rw-r--r--libgomp/config/linux/wait.h4
-rw-r--r--libgomp/iter.c4
-rw-r--r--libgomp/iter_ull.c4
4 files changed, 17 insertions, 5 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 1d265b6..bd9111b 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,13 @@
+2015-08-24 Joost VandeVondele <vondele@gnu.gcc.org>
+
+ PR libgomp/66761
+ PR libgomp/67303
+ * iter.c (gomp_iter_dynamic_next): Employ an atomic load.
+ (gomp_iter_guided_next): Idem.
+ * iter_ull.c (gomp_iter_ull_dynamic_next): Idem.
+ (gomp_iter_ull_guided_next): Idem.
+ * config/linux/wait.h (do_spin): Idem.
+
2015-08-10 Thomas Schwinge <thomas@codesourcery.com>
* libgomp-plugin.h (enum offload_target_type): Remove
diff --git a/libgomp/config/linux/wait.h b/libgomp/config/linux/wait.h
index 7f57454..e561c2d 100644
--- a/libgomp/config/linux/wait.h
+++ b/libgomp/config/linux/wait.h
@@ -49,7 +49,9 @@ static inline int do_spin (int *addr, int val)
{
unsigned long long i, count = gomp_spin_count_var;
- if (__builtin_expect (gomp_managed_threads > gomp_available_cpus, 0))
+ if (__builtin_expect (__atomic_load_n (&gomp_managed_threads,
+ MEMMODEL_RELAXED)
+ > gomp_available_cpus, 0))
count = gomp_throttled_spin_count_var;
for (i = 0; i < count; i++)
if (__builtin_expect (__atomic_load_n (addr, MEMMODEL_RELAXED) != val, 0))
diff --git a/libgomp/iter.c b/libgomp/iter.c
index 0ceb41d..1def8bd 100644
--- a/libgomp/iter.c
+++ b/libgomp/iter.c
@@ -218,7 +218,7 @@ gomp_iter_dynamic_next (long *pstart, long *pend)
}
}
- start = ws->next;
+ start = __atomic_load_n (&ws->next, MEMMODEL_RELAXED);
while (1)
{
long left = end - start;
@@ -301,7 +301,7 @@ gomp_iter_guided_next (long *pstart, long *pend)
long start, end, nend, incr;
unsigned long chunk_size;
- start = ws->next;
+ start = __atomic_load_n (&ws->next, MEMMODEL_RELAXED);
end = ws->end;
incr = ws->incr;
chunk_size = ws->chunk_size;
diff --git a/libgomp/iter_ull.c b/libgomp/iter_ull.c
index b1cad84..1c2d118 100644
--- a/libgomp/iter_ull.c
+++ b/libgomp/iter_ull.c
@@ -219,7 +219,7 @@ gomp_iter_ull_dynamic_next (gomp_ull *pstart, gomp_ull *pend)
}
}
- start = ws->next_ull;
+ start = __atomic_load_n (&ws->next_ull, MEMMODEL_RELAXED);
while (1)
{
gomp_ull left = end - start;
@@ -305,7 +305,7 @@ gomp_iter_ull_guided_next (gomp_ull *pstart, gomp_ull *pend)
gomp_ull start, end, nend, incr;
gomp_ull chunk_size;
- start = ws->next_ull;
+ start = __atomic_load_n (&ws->next_ull, MEMMODEL_RELAXED);
end = ws->end_ull;
incr = ws->incr_ull;
chunk_size = ws->chunk_size_ull;