From f99b94e19022f473b8de15a793801fd5deb5ba7e Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 11 Jan 2013 16:40:01 +0000 Subject: 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 --- lib/sanitizer_common/sanitizer_quarantine.h | 13 +++++++++++-- 1 file 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); } } -- cgit v1.2.3