Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 588f9ce6 authored by Andi Kleen's avatar Andi Kleen Committed by Andi Kleen
Browse files

HWPOISON: Be more aggressive at freeing non LRU caches



shake_page handles more types of page caches than lru_drain_all()

- per cpu page allocator pages
- per CPU LRU

Stops early when the page became free.

Used in followon patches.

Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
parent 7bc98b97
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1335,6 +1335,7 @@ extern void memory_failure(unsigned long pfn, int trapno);
extern int __memory_failure(unsigned long pfn, int trapno, int ref);
extern int __memory_failure(unsigned long pfn, int trapno, int ref);
extern int sysctl_memory_failure_early_kill;
extern int sysctl_memory_failure_early_kill;
extern int sysctl_memory_failure_recovery;
extern int sysctl_memory_failure_recovery;
extern void shake_page(struct page *p);
extern atomic_long_t mce_bad_pages;
extern atomic_long_t mce_bad_pages;


#endif /* __KERNEL__ */
#endif /* __KERNEL__ */
+22 −0
Original line number Original line Diff line number Diff line
@@ -82,6 +82,28 @@ static int kill_proc_ao(struct task_struct *t, unsigned long addr, int trapno,
	return ret;
	return ret;
}
}


/*
 * When a unknown page type is encountered drain as many buffers as possible
 * in the hope to turn the page into a LRU or free page, which we can handle.
 */
void shake_page(struct page *p)
{
	if (!PageSlab(p)) {
		lru_add_drain_all();
		if (PageLRU(p))
			return;
		drain_all_pages();
		if (PageLRU(p) || is_free_buddy_page(p))
			return;
	}
	/*
	 * Could call shrink_slab here (which would also
	 * shrink other caches). Unfortunately that might
	 * also access the corrupted page, which could be fatal.
	 */
}
EXPORT_SYMBOL_GPL(shake_page);

/*
/*
 * Kill all processes that have a poisoned page mapped and then isolate
 * Kill all processes that have a poisoned page mapped and then isolate
 * the page.
 * the page.