diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-01-11 16:40:01 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-01-11 16:40:01 +0000 |
commit | f99b94e19022f473b8de15a793801fd5deb5ba7e (patch) | |
tree | ee478cb9d4753c36815a399f9b02ee6015893410 /lib/sanitizer_common/sanitizer_quarantine.h | |
parent | 09575a176caef64cf43f3eac8e197ee4f55572bd (diff) |
asan: add memory prefetch to quarantine recycle
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@172215 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_quarantine.h')
-rw-r--r-- | lib/sanitizer_common/sanitizer_quarantine.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/sanitizer_common/sanitizer_quarantine.h b/lib/sanitizer_common/sanitizer_quarantine.h index c06d518f0..ec90d2d68 100644 --- a/lib/sanitizer_common/sanitizer_quarantine.h +++ b/lib/sanitizer_common/sanitizer_quarantine.h @@ -89,9 +89,18 @@ class Quarantine { } } recycle_mutex_.Unlock(); - while (QuarantineBatch *b = tmp.DequeueBatch()) { - for (uptr i = 0; i < b->count; i++) + DoRecycle(&tmp, cb); + } + + void NOINLINE DoRecycle(Cache *c, Callback cb) { + while (QuarantineBatch *b = c->DequeueBatch()) { + const uptr kPrefetch = 16; + for (uptr i = 0; i < kPrefetch; i++) + PREFETCH(b->batch[i]); + for (uptr i = 0; i < b->count; i++) { + PREFETCH(b->batch[i + kPrefetch]); cb.Recycle((Node*)b->batch[i]); + } cb.Deallocate(b); } } |