1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * test_free_pages.c: Check that free_pages() doesn't leak memory 4 * Copyright (c) 2020 Oracle 5 * Author: Matthew Wilcox <willy@infradead.org> 6 */ 7 8 #include <linux/gfp.h> 9 #include <linux/mm.h> 10 #include <linux/module.h> 11 12 static void test_free_pages(gfp_t gfp) 13 { 14 unsigned int i; 15 16 for (i = 0; i < 1000 * 1000; i++) { 17 unsigned long addr = __get_free_pages(gfp, 3); 18 struct page *page = virt_to_page(addr); 19 20 /* Simulate page cache getting a speculative reference */ 21 get_page(page); 22 free_pages(addr, 3); 23 put_page(page); 24 } 25 } 26 27 static int m_in(void) 28 { 29 test_free_pages(GFP_KERNEL); 30 test_free_pages(GFP_KERNEL | __GFP_COMP); 31 32 return 0; 33 } 34 35 static void m_ex(void) 36 { 37 } 38 39 module_init(m_in); 40 module_exit(m_ex); 41 MODULE_AUTHOR("Matthew Wilcox <willy@infradead.org>"); 42 MODULE_LICENSE("GPL"); 43