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 12static 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 27static 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 35static void m_ex(void) 36{ 37} 38 39module_init(m_in); 40module_exit(m_ex); 41MODULE_AUTHOR("Matthew Wilcox <willy@infradead.org>"); 42MODULE_LICENSE("GPL"); 43