|
@@ -17,6 +17,16 @@ void vmacache_flush_all(struct mm_struct *mm)
|
|
|
{
|
|
|
struct task_struct *g, *p;
|
|
|
|
|
|
+ /*
|
|
|
+ * Single threaded tasks need not iterate the entire
|
|
|
+ * list of process. We can avoid the flushing as well
|
|
|
+ * since the mm's seqnum was increased and don't have
|
|
|
+ * to worry about other threads' seqnum. Current's
|
|
|
+ * flush will occur upon the next lookup.
|
|
|
+ */
|
|
|
+ if (atomic_read(&mm->mm_users) == 1)
|
|
|
+ return;
|
|
|
+
|
|
|
rcu_read_lock();
|
|
|
for_each_process_thread(g, p) {
|
|
|
/*
|