VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   1) /*
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   2)  * proc sysctl test driver
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   3)  *
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   4)  * Copyright (C) 2017 Luis R. Rodriguez <mcgrof@kernel.org>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   5)  *
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   6)  * This program is free software; you can redistribute it and/or modify it
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   7)  * under the terms of the GNU General Public License as published by the Free
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   8)  * Software Foundation; either version 2 of the License, or at your option any
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700   9)  * later version; or, when distributed separately from the Linux kernel or
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  10)  * when incorporated into other software packages, subject to the following
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  11)  * license:
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  12)  *
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  13)  * This program is free software; you can redistribute it and/or modify it
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  14)  * under the terms of copyleft-next (version 0.3.1 or later) as published
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  15)  * at http://copyleft-next.org/.
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  16)  */
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  17) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  18) /*
2d0469814ade6 (Randy Dunlap      2020-10-15 20:11:10 -0700  19)  * This module provides an interface to the proc sysctl interfaces.  This
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  20)  * driver requires CONFIG_PROC_SYSCTL. It will not normally be loaded by the
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  21)  * system unless explicitly requested by name. You can also build this driver
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  22)  * into your kernel.
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  23)  */
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  24) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  25) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  26) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  27) #include <linux/init.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  28) #include <linux/list.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  29) #include <linux/module.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  30) #include <linux/printk.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  31) #include <linux/fs.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  32) #include <linux/miscdevice.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  33) #include <linux/slab.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  34) #include <linux/uaccess.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  35) #include <linux/async.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  36) #include <linux/delay.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  37) #include <linux/vmalloc.h>
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  38) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  39) static int i_zero;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  40) static int i_one_hundred = 100;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  41) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  42) struct test_sysctl_data {
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  43) 	int int_0001;
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  44) 	int int_0002;
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  45) 	int int_0003[4];
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  46) 
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  47) 	int boot_int;
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  48) 
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700  49) 	unsigned int uint_0001;
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700  50) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  51) 	char string_0001[65];
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700  52) 
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700  53) #define SYSCTL_TEST_BITMAP_SIZE	65536
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700  54) 	unsigned long *bitmap_0001;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  55) };
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  56) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  57) static struct test_sysctl_data test_data = {
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  58) 	.int_0001 = 60,
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  59) 	.int_0002 = 1,
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  60) 
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  61) 	.int_0003[0] = 0,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  62) 	.int_0003[1] = 1,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  63) 	.int_0003[2] = 2,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  64) 	.int_0003[3] = 3,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  65) 
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  66) 	.boot_int = 0,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  67) 
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700  68) 	.uint_0001 = 314,
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700  69) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  70) 	.string_0001 = "(none)",
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  71) };
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  72) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  73) /* These are all under /proc/sys/debug/test_sysctl/ */
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  74) static struct ctl_table test_table[] = {
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  75) 	{
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  76) 		.procname	= "int_0001",
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  77) 		.data		= &test_data.int_0001,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  78) 		.maxlen		= sizeof(int),
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  79) 		.mode		= 0644,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  80) 		.proc_handler	= proc_dointvec_minmax,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  81) 		.extra1		= &i_zero,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  82) 		.extra2         = &i_one_hundred,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700  83) 	},
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  84) 	{
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  85) 		.procname	= "int_0002",
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  86) 		.data		= &test_data.int_0002,
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  87) 		.maxlen		= sizeof(int),
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  88) 		.mode		= 0644,
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  89) 		.proc_handler	= proc_dointvec,
eb965eda1cabf (Luis R. Rodriguez 2017-07-12 14:33:52 -0700  90) 	},
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  91) 	{
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  92) 		.procname	= "int_0003",
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  93) 		.data		= &test_data.int_0003,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  94) 		.maxlen		= sizeof(test_data.int_0003),
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  95) 		.mode		= 0644,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  96) 		.proc_handler	= proc_dointvec,
7c43a657a4bea (Luis R. Rodriguez 2017-07-12 14:33:58 -0700  97) 	},
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  98) 	{
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700  99) 		.procname	= "boot_int",
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 100) 		.data		= &test_data.boot_int,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 101) 		.maxlen		= sizeof(test_data.boot_int),
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 102) 		.mode		= 0644,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 103) 		.proc_handler	= proc_dointvec,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 104) 		.extra1		= SYSCTL_ZERO,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 105) 		.extra2         = SYSCTL_ONE,
4f2f682d89d83 (Vlastimil Babka   2020-06-07 21:40:38 -0700 106) 	},
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 107) 	{
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 108) 		.procname	= "uint_0001",
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 109) 		.data		= &test_data.uint_0001,
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 110) 		.maxlen		= sizeof(unsigned int),
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 111) 		.mode		= 0644,
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 112) 		.proc_handler	= proc_douintvec,
2920fad3a5d39 (Luis R. Rodriguez 2017-07-12 14:33:55 -0700 113) 	},
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 114) 	{
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 115) 		.procname	= "string_0001",
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 116) 		.data		= &test_data.string_0001,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 117) 		.maxlen		= sizeof(test_data.string_0001),
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 118) 		.mode		= 0644,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 119) 		.proc_handler	= proc_dostring,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 120) 	},
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 121) 	{
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 122) 		.procname	= "bitmap_0001",
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 123) 		.data		= &test_data.bitmap_0001,
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 124) 		.maxlen		= SYSCTL_TEST_BITMAP_SIZE,
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 125) 		.mode		= 0644,
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 126) 		.proc_handler	= proc_do_large_bitmap,
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 127) 	},
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 128) 	{ }
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 129) };
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 130) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 131) static struct ctl_table test_sysctl_table[] = {
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 132) 	{
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 133) 		.procname	= "test_sysctl",
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 134) 		.maxlen		= 0,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 135) 		.mode		= 0555,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 136) 		.child		= test_table,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 137) 	},
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 138) 	{ }
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 139) };
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 140) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 141) static struct ctl_table test_sysctl_root_table[] = {
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 142) 	{
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 143) 		.procname	= "debug",
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 144) 		.maxlen		= 0,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 145) 		.mode		= 0555,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 146) 		.child		= test_sysctl_table,
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 147) 	},
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 148) 	{ }
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 149) };
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 150) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 151) static struct ctl_table_header *test_sysctl_header;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 152) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 153) static int __init test_sysctl_init(void)
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 154) {
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 155) 	test_data.bitmap_0001 = kzalloc(SYSCTL_TEST_BITMAP_SIZE/8, GFP_KERNEL);
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 156) 	if (!test_data.bitmap_0001)
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 157) 		return -ENOMEM;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 158) 	test_sysctl_header = register_sysctl_table(test_sysctl_root_table);
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 159) 	if (!test_sysctl_header) {
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 160) 		kfree(test_data.bitmap_0001);
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 161) 		return -ENOMEM;
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 162) 	}
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 163) 	return 0;
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 164) }
2f56f84511367 (Masami Hiramatsu  2020-05-28 23:52:16 +0900 165) module_init(test_sysctl_init);
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 166) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 167) static void __exit test_sysctl_exit(void)
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 168) {
2ea622b887e74 (Eric Sandeen      2019-05-14 15:45:10 -0700 169) 	kfree(test_data.bitmap_0001);
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 170) 	if (test_sysctl_header)
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 171) 		unregister_sysctl_table(test_sysctl_header);
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 172) }
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 173) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 174) module_exit(test_sysctl_exit);
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 175) 
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 176) MODULE_AUTHOR("Luis R. Rodriguez <mcgrof@kernel.org>");
9308f2f9e7f05 (Luis R. Rodriguez 2017-07-12 14:33:43 -0700 177) MODULE_LICENSE("GPL");