⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysctl.c

📁 Kernel code of linux kernel
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * sysctl.c: General linux system control interface * * Begun 24 March 1995, Stephen Tweedie * Added /proc support, Dec 1995 * Added bdflush entry and intvec min/max checking, 2/23/96, Tom Dyas. * Added hooks for /proc/sys/net (minor, minor patch), 96/4/1, Mike Shaver. * Added kernel/java-{interpreter,appletviewer}, 96/5/10, Mike Shaver. * Dynamic registration fixes, Stephen Tweedie. * Added kswapd-interval, ctrl-alt-del, printk stuff, 1/8/97, Chris Horn. * Made sysctl support optional via CONFIG_SYSCTL, 1/10/97, Chris *  Horn. * Added proc_doulongvec_ms_jiffies_minmax, 09/08/99, Carlos H. Bauer. * Added proc_doulongvec_minmax, 09/08/99, Carlos H. Bauer. * Changed linked lists to use list.h instead of lists.h, 02/24/00, Bill *  Wendling. * The list_for_each() macro wasn't appropriate for the sysctl loop. *  Removed it and replaced it with older style, 03/23/00, Bill Wendling */#include <linux/module.h>#include <linux/mm.h>#include <linux/swap.h>#include <linux/slab.h>#include <linux/sysctl.h>#include <linux/proc_fs.h>#include <linux/security.h>#include <linux/ctype.h>#include <linux/utsname.h>#include <linux/smp_lock.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/kobject.h>#include <linux/net.h>#include <linux/sysrq.h>#include <linux/highuid.h>#include <linux/writeback.h>#include <linux/hugetlb.h>#include <linux/initrd.h>#include <linux/key.h>#include <linux/times.h>#include <linux/limits.h>#include <linux/dcache.h>#include <linux/syscalls.h>#include <linux/vmstat.h>#include <linux/nfs_fs.h>#include <linux/acpi.h>#include <linux/reboot.h>#include <linux/ftrace.h>#include <asm/uaccess.h>#include <asm/processor.h>#ifdef CONFIG_X86#include <asm/nmi.h>#include <asm/stacktrace.h>#include <asm/io.h>#endifstatic int deprecated_sysctl_warning(struct __sysctl_args *args);#if defined(CONFIG_SYSCTL)/* External variables not in a header file. */extern int C_A_D;extern int print_fatal_signals;extern int sysctl_overcommit_memory;extern int sysctl_overcommit_ratio;extern int sysctl_panic_on_oom;extern int sysctl_oom_kill_allocating_task;extern int sysctl_oom_dump_tasks;extern int max_threads;extern int core_uses_pid;extern int suid_dumpable;extern char core_pattern[];extern int pid_max;extern int min_free_kbytes;extern int pid_max_min, pid_max_max;extern int sysctl_drop_caches;extern int percpu_pagelist_fraction;extern int compat_log;extern int maps_protect;extern int latencytop_enabled;extern int sysctl_nr_open_min, sysctl_nr_open_max;#ifdef CONFIG_RCU_TORTURE_TESTextern int rcutorture_runnable;#endif /* #ifdef CONFIG_RCU_TORTURE_TEST *//* Constants used for minimum and  maximum */#if defined(CONFIG_HIGHMEM) || defined(CONFIG_DETECT_SOFTLOCKUP)static int one = 1;#endif#ifdef CONFIG_DETECT_SOFTLOCKUPstatic int sixty = 60;static int neg_one = -1;#endif#ifdef CONFIG_MMUstatic int two = 2;#endifstatic int zero;static int one_hundred = 100;/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */static int maxolduid = 65535;static int minolduid;static int min_percpu_pagelist_fract = 8;static int ngroups_max = NGROUPS_MAX;#ifdef CONFIG_MODULESextern char modprobe_path[];#endif#ifdef CONFIG_CHR_DEV_SGextern int sg_big_buff;#endif#ifdef __sparc__extern char reboot_command [];extern int stop_a_enabled;extern int scons_pwroff;#endif#ifdef __hppa__extern int pwrsw_enabled;extern int unaligned_enabled;#endif#ifdef CONFIG_S390#ifdef CONFIG_MATHEMUextern int sysctl_ieee_emulation_warnings;#endifextern int sysctl_userprocess_debug;extern int spin_retry;#endif#ifdef CONFIG_BSD_PROCESS_ACCTextern int acct_parm[];#endif#ifdef CONFIG_IA64extern int no_unaligned_warning;#endif#ifdef CONFIG_RT_MUTEXESextern int max_lock_depth;#endif#ifdef CONFIG_PROC_SYSCTLstatic int proc_do_cad_pid(struct ctl_table *table, int write, struct file *filp,		  void __user *buffer, size_t *lenp, loff_t *ppos);static int proc_dointvec_taint(struct ctl_table *table, int write, struct file *filp,			       void __user *buffer, size_t *lenp, loff_t *ppos);#endifstatic struct ctl_table root_table[];static struct ctl_table_root sysctl_table_root;static struct ctl_table_header root_table_header = {	.count = 1,	.ctl_table = root_table,	.ctl_entry = LIST_HEAD_INIT(sysctl_table_root.default_set.list),	.root = &sysctl_table_root,	.set = &sysctl_table_root.default_set,};static struct ctl_table_root sysctl_table_root = {	.root_list = LIST_HEAD_INIT(sysctl_table_root.root_list),	.default_set.list = LIST_HEAD_INIT(root_table_header.ctl_entry),};static struct ctl_table kern_table[];static struct ctl_table vm_table[];static struct ctl_table fs_table[];static struct ctl_table debug_table[];static struct ctl_table dev_table[];extern struct ctl_table random_table[];#ifdef CONFIG_INOTIFY_USERextern struct ctl_table inotify_table[];#endif#ifdef HAVE_ARCH_PICK_MMAP_LAYOUTint sysctl_legacy_va_layout;#endifextern int prove_locking;extern int lock_stat;/* The default sysctl tables: */static struct ctl_table root_table[] = {	{		.ctl_name	= CTL_KERN,		.procname	= "kernel",		.mode		= 0555,		.child		= kern_table,	},	{		.ctl_name	= CTL_VM,		.procname	= "vm",		.mode		= 0555,		.child		= vm_table,	},	{		.ctl_name	= CTL_FS,		.procname	= "fs",		.mode		= 0555,		.child		= fs_table,	},	{		.ctl_name	= CTL_DEBUG,		.procname	= "debug",		.mode		= 0555,		.child		= debug_table,	},	{		.ctl_name	= CTL_DEV,		.procname	= "dev",		.mode		= 0555,		.child		= dev_table,	},/* * NOTE: do not add new entries to this table unless you have read * Documentation/sysctl/ctl_unnumbered.txt */	{ .ctl_name = 0 }};#ifdef CONFIG_SCHED_DEBUGstatic int min_sched_granularity_ns = 100000;		/* 100 usecs */static int max_sched_granularity_ns = NSEC_PER_SEC;	/* 1 second */static int min_wakeup_granularity_ns;			/* 0 usecs */static int max_wakeup_granularity_ns = NSEC_PER_SEC;	/* 1 second */#endifstatic struct ctl_table kern_table[] = {#ifdef CONFIG_SCHED_DEBUG	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_min_granularity_ns",		.data		= &sysctl_sched_min_granularity,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &sched_nr_latency_handler,		.strategy	= &sysctl_intvec,		.extra1		= &min_sched_granularity_ns,		.extra2		= &max_sched_granularity_ns,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_latency_ns",		.data		= &sysctl_sched_latency,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &sched_nr_latency_handler,		.strategy	= &sysctl_intvec,		.extra1		= &min_sched_granularity_ns,		.extra2		= &max_sched_granularity_ns,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_wakeup_granularity_ns",		.data		= &sysctl_sched_wakeup_granularity,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_minmax,		.strategy	= &sysctl_intvec,		.extra1		= &min_wakeup_granularity_ns,		.extra2		= &max_wakeup_granularity_ns,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_shares_ratelimit",		.data		= &sysctl_sched_shares_ratelimit,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_child_runs_first",		.data		= &sysctl_sched_child_runs_first,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_features",		.data		= &sysctl_sched_features,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_migration_cost",		.data		= &sysctl_sched_migration_cost,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_nr_migrate",		.data		= &sysctl_sched_nr_migrate,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_rt_period_us",		.data		= &sysctl_sched_rt_period,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &sched_rt_handler,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_rt_runtime_us",		.data		= &sysctl_sched_rt_runtime,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &sched_rt_handler,	},	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "sched_compat_yield",		.data		= &sysctl_sched_compat_yield,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#ifdef CONFIG_PROVE_LOCKING	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "prove_locking",		.data		= &prove_locking,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif#ifdef CONFIG_LOCK_STAT	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "lock_stat",		.data		= &lock_stat,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif	{		.ctl_name	= KERN_PANIC,		.procname	= "panic",		.data		= &panic_timeout,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= KERN_CORE_USES_PID,		.procname	= "core_uses_pid",		.data		= &core_uses_pid,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= KERN_CORE_PATTERN,		.procname	= "core_pattern",		.data		= core_pattern,		.maxlen		= CORENAME_MAX_SIZE,		.mode		= 0644,		.proc_handler	= &proc_dostring,		.strategy	= &sysctl_string,	},#ifdef CONFIG_PROC_SYSCTL	{		.procname	= "tainted",		.data		= &tainted,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_taint,	},#endif#ifdef CONFIG_LATENCYTOP	{		.procname	= "latencytop",		.data		= &latencytop_enabled,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif#ifdef CONFIG_BLK_DEV_INITRD	{		.ctl_name	= KERN_REALROOTDEV,		.procname	= "real-root-dev",		.data		= &real_root_dev,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "print-fatal-signals",		.data		= &print_fatal_signals,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#ifdef __sparc__	{		.ctl_name	= KERN_SPARC_REBOOT,		.procname	= "reboot-cmd",		.data		= reboot_command,		.maxlen		= 256,		.mode		= 0644,		.proc_handler	= &proc_dostring,		.strategy	= &sysctl_string,	},	{		.ctl_name	= KERN_SPARC_STOP_A,		.procname	= "stop-a",		.data		= &stop_a_enabled,		.maxlen		= sizeof (int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= KERN_SPARC_SCONS_PWROFF,		.procname	= "scons-poweroff",		.data		= &scons_pwroff,		.maxlen		= sizeof (int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif#ifdef __hppa__	{		.ctl_name	= KERN_HPPA_PWRSW,		.procname	= "soft-power",		.data		= &pwrsw_enabled,		.maxlen		= sizeof (int),	 	.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= KERN_HPPA_UNALIGNED,		.procname	= "unaligned-trap",		.data		= &unaligned_enabled,		.maxlen		= sizeof (int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif	{		.ctl_name	= KERN_CTLALTDEL,		.procname	= "ctrl-alt-del",		.data		= &C_A_D,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#ifdef CONFIG_FTRACE	{		.ctl_name	= CTL_UNNUMBERED,		.procname	= "ftrace_enabled",		.data		= &ftrace_enabled,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &ftrace_enable_sysctl,	},#endif#ifdef CONFIG_MODULES	{		.ctl_name	= KERN_MODPROBE,		.procname	= "modprobe",		.data		= &modprobe_path,		.maxlen		= KMOD_PATH_LEN,		.mode		= 0644,		.proc_handler	= &proc_dostring,		.strategy	= &sysctl_string,	},#endif#if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)	{		.ctl_name	= KERN_HOTPLUG,		.procname	= "hotplug",		.data		= &uevent_helper,		.maxlen		= UEVENT_HELPER_PATH_LEN,		.mode		= 0644,		.proc_handler	= &proc_dostring,		.strategy	= &sysctl_string,	},#endif#ifdef CONFIG_CHR_DEV_SG	{		.ctl_name	= KERN_SG_BIG_BUFF,		.procname	= "sg-big-buff",		.data		= &sg_big_buff,		.maxlen		= sizeof (int),		.mode		= 0444,		.proc_handler	= &proc_dointvec,	},#endif#ifdef CONFIG_BSD_PROCESS_ACCT	{		.ctl_name	= KERN_ACCT,		.procname	= "acct",		.data		= &acct_parm,		.maxlen		= 3*sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif#ifdef CONFIG_MAGIC_SYSRQ	{		.ctl_name	= KERN_SYSRQ,		.procname	= "sysrq",		.data		= &__sysrq_enabled,		.maxlen		= sizeof (int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},#endif#ifdef CONFIG_PROC_SYSCTL	{		.procname	= "cad_pid",		.data		= NULL,		.maxlen		= sizeof (int),		.mode		= 0600,		.proc_handler	= &proc_do_cad_pid,	},#endif	{		.ctl_name	= KERN_MAX_THREADS,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -