09c434b8a0047 (Thomas Gleixner 2019-05-19 13:08:20 +0100 1) // SPDX-License-Identifier: GPL-2.0-only
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 2) #include <linux/kernel.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 3) #include <linux/module.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 4) #include <linux/export.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 5) #include <linux/mm.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 6) #include <linux/vmalloc.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 7) #include <linux/slab.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 8) #include <linux/sizes.h>
10fdf838e5f54 (Christophe Leroy 2018-12-10 08:08:28 +0000 9) #include <linux/io.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 10)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 11) #include <asm/page.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 12) #ifdef CONFIG_MIPS
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 13) #include <asm/bootinfo.h>
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 14) #endif
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 15)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 16) struct foo {
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 17) unsigned int bar;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 18) };
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 19)
b15f5f1ae18a7 (Colin Ian King 2018-08-21 21:57:07 -0700 20) static struct foo *foo;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 21)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 22) static int __init test_debug_virtual_init(void)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 23) {
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 24) phys_addr_t pa;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 25) void *va;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 26)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 27) va = (void *)VMALLOC_START;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 28) pa = virt_to_phys(va);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 29)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 30) pr_info("PA: %pa for VA: 0x%lx\n", &pa, (unsigned long)va);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 31)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 32) foo = kzalloc(sizeof(*foo), GFP_KERNEL);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 33) if (!foo)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 34) return -ENOMEM;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 35)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 36) pa = virt_to_phys(foo);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 37) va = foo;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 38) pr_info("PA: %pa for VA: 0x%lx\n", &pa, (unsigned long)va);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 39)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 40) return 0;
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 41) }
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 42) module_init(test_debug_virtual_init);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 43)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 44) static void __exit test_debug_virtual_exit(void)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 45) {
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 46) kfree(foo);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 47) }
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 48) module_exit(test_debug_virtual_exit);
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 49)
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 50) MODULE_LICENSE("GPL");
e4dace3615526 (Florian Fainelli 2017-09-08 16:15:31 -0700 51) MODULE_DESCRIPTION("Test module for CONFIG_DEBUG_VIRTUAL");