linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] kasan: fix livelock in qlist_move_cache
@ 2017-11-28  4:04 zhouzhouyi
  2017-11-28  4:05 ` Zhouyi Zhou
  0 siblings, 1 reply; 15+ messages in thread
From: zhouzhouyi @ 2017-11-28  4:04 UTC (permalink / raw)
  To: aryabinin, glider, dvyukov, kasan-dev, linux-mm, linux-kernel; +Cc: Zhouyi Zhou

From: Zhouyi Zhou <zhouzhouyi@gmail.com>

This patch fix livelock by conditionally release cpu to let others
has a chance to run.

Tested on x86_64.
Signed-off-by: Zhouyi Zhou <zhouzhouyi@gmail.com>
---
 mm/kasan/quarantine.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c
index 3a8ddf8..33eeff4 100644
--- a/mm/kasan/quarantine.c
+++ b/mm/kasan/quarantine.c
@@ -265,10 +265,13 @@ static void qlist_move_cache(struct qlist_head *from,
 				   struct kmem_cache *cache)
 {
 	struct qlist_node *curr;
+	struct qlist_head tmp_head;
+	unsigned long flags;
 
 	if (unlikely(qlist_empty(from)))
 		return;
 
+	qlist_init(&tmp_head);
 	curr = from->head;
 	qlist_init(from);
 	while (curr) {
@@ -278,10 +281,17 @@ static void qlist_move_cache(struct qlist_head *from,
 		if (obj_cache == cache)
 			qlist_put(to, curr, obj_cache->size);
 		else
-			qlist_put(from, curr, obj_cache->size);
+			qlist_put(&tmp_head, curr, obj_cache->size);
 
 		curr = next;
+
+		if (need_resched()) {
+			spin_unlock_irqrestore(&quarantine_lock, flags);
+			cond_resched();
+			spin_lock_irqsave(&quarantine_lock, flags);
+		}
 	}
+	qlist_move_all(&tmp_head, from);
 }
 
 static void per_cpu_remove_cache(void *arg)
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2017-11-29  9:03 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-28  4:04 [PATCH 1/1] kasan: fix livelock in qlist_move_cache zhouzhouyi
2017-11-28  4:05 ` Zhouyi Zhou
2017-11-28  7:45   ` Dmitry Vyukov
2017-11-28  8:00     ` Zhouyi Zhou
2017-11-28  8:12       ` Dmitry Vyukov
2017-11-28  8:33         ` Zhouyi Zhou
2017-11-28  8:58           ` Dmitry Vyukov
2017-11-28  9:17             ` Zhouyi Zhou
2017-11-28  9:27               ` Dmitry Vyukov
2017-11-28 11:30                 ` Zhouyi Zhou
2017-11-28 17:56                   ` Dmitry Vyukov
2017-11-28 17:57                     ` Dmitry Vyukov
2017-11-28 23:41                       ` Zhouyi Zhou
2017-11-29  4:54                         ` Zhouyi Zhou
2017-11-29  9:03                           ` Dmitry Vyukov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).