linux-next.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* linux-next: manual merge of the akpm-current tree with the bpf-next tree
@ 2020-12-04  9:20 Stephen Rothwell
  2020-12-14 20:21 ` Stephen Rothwell
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2020-12-04  9:20 UTC (permalink / raw)
  To: Andrew Morton, Daniel Borkmann, Alexei Starovoitov, Networking
  Cc: Alex Shi, Linux Kernel Mailing List, Linux Next Mailing List,
	Roman Gushchin, Shakeel Butt

[-- Attachment #1: Type: text/plain, Size: 3191 bytes --]

Hi all,

Today's linux-next merge of the akpm-current tree got conflicts in:

  include/linux/memcontrol.h
  mm/memcontrol.c

between commit:

  bcfe06bf2622 ("mm: memcontrol: Use helpers to read page's memcg data")

from the bpf-next tree and commits:

  6771a349b8c3 ("mm/memcg: remove incorrect comment")
  c3970fcb1f21 ("mm: move lruvec stats update functions to vmstat.h")

from the akpm-current tree.

I fixed it up (see below - I used the latter version of memcontrol.h)
and can carry the fix as necessary. This is now fixed as far as
linux-next is concerned, but any non trivial conflicts should be
mentioned to your upstream maintainer when your tree is submitted for
merging.  You may also want to consider cooperating with the maintainer
of the conflicting tree to minimise any particularly complex conflicts.

I also added this merge fix patch:

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Fri, 4 Dec 2020 19:53:40 +1100
Subject: [PATCH] fixup for "mm: move lruvec stats update functions to vmstat.h"

conflict against "mm: memcontrol: Use helpers to read page's memcg data"

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 mm/memcontrol.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 6f5733779927..3b6db4e906b5 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -851,16 +851,17 @@ void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
 			     int val)
 {
 	struct page *head = compound_head(page); /* rmap on tail pages */
+	struct mem_cgroup *memcg = page_memcg(head);
 	pg_data_t *pgdat = page_pgdat(page);
 	struct lruvec *lruvec;
 
 	/* Untracked pages have no memcg, no lruvec. Update only the node */
-	if (!head->mem_cgroup) {
+	if (!memcg) {
 		__mod_node_page_state(pgdat, idx, val);
 		return;
 	}
 
-	lruvec = mem_cgroup_lruvec(head->mem_cgroup, pgdat);
+	lruvec = mem_cgroup_lruvec(memcg, pgdat);
 	__mod_lruvec_state(lruvec, idx, val);
 }
 
-- 
2.29.2

-- 
Cheers,
Stephen Rothwell

diff --cc include/linux/memcontrol.h
index 320369c841f5,ff02f831e7e1..000000000000
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
diff --cc mm/memcontrol.c
index 7535042ac1ec,c9a5dce4343d..000000000000
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@@ -2880,9 -2984,9 +2975,9 @@@ static void cancel_charge(struct mem_cg
  
  static void commit_charge(struct page *page, struct mem_cgroup *memcg)
  {
 -	VM_BUG_ON_PAGE(page->mem_cgroup, page);
 +	VM_BUG_ON_PAGE(page_memcg(page), page);
  	/*
- 	 * Any of the following ensures page->mem_cgroup stability:
+ 	 * Any of the following ensures page's memcg stability:
  	 *
  	 * - the page lock
  	 * - LRU isolation
@@@ -6977,11 -7012,10 +6997,10 @@@ void mem_cgroup_migrate(struct page *ol
  		return;
  
  	/* Page cache replacement: new page already charged? */
 -	if (newpage->mem_cgroup)
 +	if (page_memcg(newpage))
  		return;
  
- 	/* Swapcache readahead pages can get replaced before being charged */
 -	memcg = oldpage->mem_cgroup;
 +	memcg = page_memcg(oldpage);
  	if (!memcg)
  		return;
  

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply related	[flat|nested] 16+ messages in thread
* linux-next: manual merge of the akpm-current tree with the bpf-next tree
@ 2022-03-15 11:57 Stephen Rothwell
  0 siblings, 0 replies; 16+ messages in thread
From: Stephen Rothwell @ 2022-03-15 11:57 UTC (permalink / raw)
  To: Andrew Morton, Daniel Borkmann, Alexei Starovoitov,
	Andrii Nakryiko, bpf, Networking
  Cc: Bjorn Helgaas, Hao Luo, Linux Kernel Mailing List,
	Linux Next Mailing List

[-- Attachment #1: Type: text/plain, Size: 1426 bytes --]

Hi all,

Today's linux-next merge of the akpm-current tree got a conflict in:

  include/linux/compiler_types.h

between commit:

  6789ab9668d9 ("compiler_types: Refactor the use of btf_type_tag attribute.")

from the bpf-next tree and commit:

  a7e15f5aee27 ("Documentation/sparse: add hints about __CHECKER__")

from the akpm-current tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc include/linux/compiler_types.h
index 1bc760ba400c,232dbd97f8b1..000000000000
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@@ -4,13 -4,7 +4,14 @@@
  
  #ifndef __ASSEMBLY__
  
 +#if defined(CONFIG_DEBUG_INFO_BTF) && defined(CONFIG_PAHOLE_HAS_BTF_TAG) && \
 +	__has_attribute(btf_type_tag)
 +# define BTF_TYPE_TAG(value) __attribute__((btf_type_tag(#value)))
 +#else
 +# define BTF_TYPE_TAG(value) /* nothing */
 +#endif
 +
+ /* sparse defines __CHECKER__; see Documentation/dev-tools/sparse.rst */
  #ifdef __CHECKER__
  /* address spaces */
  # define __kernel	__attribute__((address_space(0)))

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread
* linux-next: manual merge of the akpm-current tree with the bpf-next tree
@ 2022-02-03  3:52 Stephen Rothwell
  0 siblings, 0 replies; 16+ messages in thread
From: Stephen Rothwell @ 2022-02-03  3:52 UTC (permalink / raw)
  To: Andrew Morton, Daniel Borkmann, Alexei Starovoitov,
	Andrii Nakryiko, bpf, Networking
  Cc: Kees Cook, Linux Kernel Mailing List, Linux Next Mailing List,
	Nathan Chancellor, Stephen Rothwell

[-- Attachment #1: Type: text/plain, Size: 1323 bytes --]

Hi all,

Today's linux-next merge of the akpm-current tree got a conflict in:

  lib/Kconfig.debug

between commit:

  42d9b379e3e1 ("lib/Kconfig.debug: Allow BTF + DWARF5 with pahole 1.21+")

from the bpf-next tree and commit:

  e11ef20106b7 ("Kconfig.debug: make DEBUG_INFO selectable from a choice")

from the akpm-current tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc lib/Kconfig.debug
index f15dd96028b5,efc1a1908e04..000000000000
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@@ -317,6 -339,7 +339,7 @@@ config DEBUG_INFO_BT
  	depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
  	depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
  	depends on BPF_SYSCALL
 -	depends on !DEBUG_INFO_DWARF5
++	depends on !DEBUG_INFO_DWARF5 || PAHOLE_VERSION >= 121
  	help
  	  Generate deduplicated BTF type information from DWARF debug info.
  	  Turning this on expects presence of pahole tool, which will convert

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread
* linux-next: manual merge of the akpm-current tree with the bpf-next tree
@ 2020-04-29  6:45 Stephen Rothwell
  2020-04-29  6:47 ` Christoph Hellwig
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2020-04-29  6:45 UTC (permalink / raw)
  To: Andrew Morton, Daniel Borkmann, Alexei Starovoitov, Networking
  Cc: Linux Next Mailing List, Linux Kernel Mailing List,
	Christoph Hellwig, Al Viro, Xiaoming Ni, Guilherme G. Piccoli

[-- Attachment #1: Type: text/plain, Size: 49439 bytes --]

Hi all,

Today's linux-next merge of the akpm-current tree got a conflict in:

  kernel/sysctl.c

between commit:

  f461d2dcd511 ("sysctl: avoid forward declarations")

from the bpf-next tree and commits:

  0fe73f87ba37 ("parisc: add sysctl file interface panic_on_stackoverflow")
  631b6d13906c ("kernel/hung_task.c: introduce sysctl to print all traces when a hung task is detected")
  0defdd249368 ("panic: add sysctl to dump all CPUs backtraces on oops event")

from the akpm-current tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc kernel/sysctl.c
index e961286d0e14,d6e728e3e99f..000000000000
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@@ -1576,1732 -3376,89 +1576,1756 @@@ int proc_do_large_bitmap(struct ctl_tab
  	return -ENOSYS;
  }
  
 -int proc_dointvec_minmax(struct ctl_table *table, int write,
 -		    void __user *buffer, size_t *lenp, loff_t *ppos)
 +#endif /* CONFIG_PROC_SYSCTL */
 +
 +#if defined(CONFIG_SYSCTL)
 +int proc_do_static_key(struct ctl_table *table, int write,
 +		       void *buffer, size_t *lenp, loff_t *ppos)
  {
 -	return -ENOSYS;
 +	struct static_key *key = (struct static_key *)table->data;
 +	static DEFINE_MUTEX(static_key_mutex);
 +	int val, ret;
 +	struct ctl_table tmp = {
 +		.data   = &val,
 +		.maxlen = sizeof(val),
 +		.mode   = table->mode,
 +		.extra1 = SYSCTL_ZERO,
 +		.extra2 = SYSCTL_ONE,
 +	};
 +
 +	if (write && !capable(CAP_SYS_ADMIN))
 +		return -EPERM;
 +
 +	mutex_lock(&static_key_mutex);
 +	val = static_key_enabled(key);
 +	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
 +	if (write && !ret) {
 +		if (val)
 +			static_key_enable(key);
 +		else
 +			static_key_disable(key);
 +	}
 +	mutex_unlock(&static_key_mutex);
 +	return ret;
  }
  
 -int proc_douintvec_minmax(struct ctl_table *table, int write,
 -			  void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
 +static struct ctl_table kern_table[] = {
 +	{
 +		.procname	= "sched_child_runs_first",
 +		.data		= &sysctl_sched_child_runs_first,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#ifdef CONFIG_SCHED_DEBUG
 +	{
 +		.procname	= "sched_min_granularity_ns",
 +		.data		= &sysctl_sched_min_granularity,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_proc_update_handler,
 +		.extra1		= &min_sched_granularity_ns,
 +		.extra2		= &max_sched_granularity_ns,
 +	},
 +	{
 +		.procname	= "sched_latency_ns",
 +		.data		= &sysctl_sched_latency,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_proc_update_handler,
 +		.extra1		= &min_sched_granularity_ns,
 +		.extra2		= &max_sched_granularity_ns,
 +	},
 +	{
 +		.procname	= "sched_wakeup_granularity_ns",
 +		.data		= &sysctl_sched_wakeup_granularity,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_proc_update_handler,
 +		.extra1		= &min_wakeup_granularity_ns,
 +		.extra2		= &max_wakeup_granularity_ns,
 +	},
 +#ifdef CONFIG_SMP
 +	{
 +		.procname	= "sched_tunable_scaling",
 +		.data		= &sysctl_sched_tunable_scaling,
 +		.maxlen		= sizeof(enum sched_tunable_scaling),
 +		.mode		= 0644,
 +		.proc_handler	= sched_proc_update_handler,
 +		.extra1		= &min_sched_tunable_scaling,
 +		.extra2		= &max_sched_tunable_scaling,
 +	},
 +	{
 +		.procname	= "sched_migration_cost_ns",
 +		.data		= &sysctl_sched_migration_cost,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "sched_nr_migrate",
 +		.data		= &sysctl_sched_nr_migrate,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#ifdef CONFIG_SCHEDSTATS
 +	{
 +		.procname	= "sched_schedstats",
 +		.data		= NULL,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_schedstats,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif /* CONFIG_SCHEDSTATS */
 +#endif /* CONFIG_SMP */
 +#ifdef CONFIG_NUMA_BALANCING
 +	{
 +		.procname	= "numa_balancing_scan_delay_ms",
 +		.data		= &sysctl_numa_balancing_scan_delay,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "numa_balancing_scan_period_min_ms",
 +		.data		= &sysctl_numa_balancing_scan_period_min,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "numa_balancing_scan_period_max_ms",
 +		.data		= &sysctl_numa_balancing_scan_period_max,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "numa_balancing_scan_size_mb",
 +		.data		= &sysctl_numa_balancing_scan_size,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "numa_balancing",
 +		.data		= NULL, /* filled in by handler */
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_numa_balancing,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif /* CONFIG_NUMA_BALANCING */
 +#endif /* CONFIG_SCHED_DEBUG */
 +	{
 +		.procname	= "sched_rt_period_us",
 +		.data		= &sysctl_sched_rt_period,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_rt_handler,
 +	},
 +	{
 +		.procname	= "sched_rt_runtime_us",
 +		.data		= &sysctl_sched_rt_runtime,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_rt_handler,
 +	},
 +	{
 +		.procname	= "sched_rr_timeslice_ms",
 +		.data		= &sysctl_sched_rr_timeslice,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_rr_handler,
 +	},
 +#ifdef CONFIG_UCLAMP_TASK
 +	{
 +		.procname	= "sched_util_clamp_min",
 +		.data		= &sysctl_sched_uclamp_util_min,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_sched_uclamp_handler,
 +	},
 +	{
 +		.procname	= "sched_util_clamp_max",
 +		.data		= &sysctl_sched_uclamp_util_max,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_sched_uclamp_handler,
 +	},
 +#endif
 +#ifdef CONFIG_SCHED_AUTOGROUP
 +	{
 +		.procname	= "sched_autogroup_enabled",
 +		.data		= &sysctl_sched_autogroup_enabled,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_CFS_BANDWIDTH
 +	{
 +		.procname	= "sched_cfs_bandwidth_slice_us",
 +		.data		= &sysctl_sched_cfs_bandwidth_slice,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +	},
 +#endif
 +#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
 +	{
 +		.procname	= "sched_energy_aware",
 +		.data		= &sysctl_sched_energy_aware,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= sched_energy_aware_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_PROVE_LOCKING
 +	{
 +		.procname	= "prove_locking",
 +		.data		= &prove_locking,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_LOCK_STAT
 +	{
 +		.procname	= "lock_stat",
 +		.data		= &lock_stat,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +	{
 +		.procname	= "panic",
 +		.data		= &panic_timeout,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#ifdef CONFIG_COREDUMP
 +	{
 +		.procname	= "core_uses_pid",
 +		.data		= &core_uses_pid,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "core_pattern",
 +		.data		= core_pattern,
 +		.maxlen		= CORENAME_MAX_SIZE,
 +		.mode		= 0644,
 +		.proc_handler	= proc_dostring_coredump,
 +	},
 +	{
 +		.procname	= "core_pipe_limit",
 +		.data		= &core_pipe_limit,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_PROC_SYSCTL
 +	{
 +		.procname	= "tainted",
 +		.maxlen 	= sizeof(long),
 +		.mode		= 0644,
 +		.proc_handler	= proc_taint,
 +	},
 +	{
 +		.procname	= "sysctl_writes_strict",
 +		.data		= &sysctl_writes_strict,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &neg_one,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_LATENCYTOP
 +	{
 +		.procname	= "latencytop",
 +		.data		= &latencytop_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_latencytop,
 +	},
 +#endif
 +#ifdef CONFIG_BLK_DEV_INITRD
 +	{
 +		.procname	= "real-root-dev",
 +		.data		= &real_root_dev,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +	{
 +		.procname	= "print-fatal-signals",
 +		.data		= &print_fatal_signals,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#ifdef CONFIG_SPARC
 +	{
 +		.procname	= "reboot-cmd",
 +		.data		= reboot_command,
 +		.maxlen		= 256,
 +		.mode		= 0644,
 +		.proc_handler	= proc_dostring,
 +	},
 +	{
 +		.procname	= "stop-a",
 +		.data		= &stop_a_enabled,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "scons-poweroff",
 +		.data		= &scons_pwroff,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_SPARC64
 +	{
 +		.procname	= "tsb-ratio",
 +		.data		= &sysctl_tsb_ratio,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_PARISC
 +	{
 +		.procname	= "soft-power",
 +		.data		= &pwrsw_enabled,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW
 +	{
 +		.procname	= "unaligned-trap",
 +		.data		= &unaligned_enabled,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +	{
 +		.procname	= "ctrl-alt-del",
 +		.data		= &C_A_D,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#ifdef CONFIG_FUNCTION_TRACER
 +	{
 +		.procname	= "ftrace_enabled",
 +		.data		= &ftrace_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= ftrace_enable_sysctl,
 +	},
 +#endif
 +#ifdef CONFIG_STACK_TRACER
 +	{
 +		.procname	= "stack_tracer_enabled",
 +		.data		= &stack_tracer_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= stack_trace_sysctl,
 +	},
 +#endif
 +#ifdef CONFIG_TRACING
 +	{
 +		.procname	= "ftrace_dump_on_oops",
 +		.data		= &ftrace_dump_on_oops,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "traceoff_on_warning",
 +		.data		= &__disable_trace_on_warning,
 +		.maxlen		= sizeof(__disable_trace_on_warning),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "tracepoint_printk",
 +		.data		= &tracepoint_printk,
 +		.maxlen		= sizeof(tracepoint_printk),
 +		.mode		= 0644,
 +		.proc_handler	= tracepoint_printk_sysctl,
 +	},
 +#endif
 +#ifdef CONFIG_KEXEC_CORE
 +	{
 +		.procname	= "kexec_load_disabled",
 +		.data		= &kexec_load_disabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		/* only handle a transition from default "0" to "1" */
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_MODULES
 +	{
 +		.procname	= "modprobe",
 +		.data		= &modprobe_path,
 +		.maxlen		= KMOD_PATH_LEN,
 +		.mode		= 0644,
 +		.proc_handler	= proc_dostring,
 +	},
 +	{
 +		.procname	= "modules_disabled",
 +		.data		= &modules_disabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		/* only handle a transition from default "0" to "1" */
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_UEVENT_HELPER
 +	{
 +		.procname	= "hotplug",
 +		.data		= &uevent_helper,
 +		.maxlen		= UEVENT_HELPER_PATH_LEN,
 +		.mode		= 0644,
 +		.proc_handler	= proc_dostring,
 +	},
 +#endif
 +#ifdef CONFIG_CHR_DEV_SG
 +	{
 +		.procname	= "sg-big-buff",
 +		.data		= &sg_big_buff,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0444,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_BSD_PROCESS_ACCT
 +	{
 +		.procname	= "acct",
 +		.data		= &acct_parm,
 +		.maxlen		= 3*sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_MAGIC_SYSRQ
 +	{
 +		.procname	= "sysrq",
 +		.data		= NULL,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= sysrq_sysctl_handler,
 +	},
 +#endif
 +#ifdef CONFIG_PROC_SYSCTL
 +	{
 +		.procname	= "cad_pid",
 +		.data		= NULL,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0600,
 +		.proc_handler	= proc_do_cad_pid,
 +	},
 +#endif
 +	{
 +		.procname	= "threads-max",
 +		.data		= NULL,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_max_threads,
 +	},
 +	{
 +		.procname	= "random",
 +		.mode		= 0555,
 +		.child		= random_table,
 +	},
 +	{
 +		.procname	= "usermodehelper",
 +		.mode		= 0555,
 +		.child		= usermodehelper_table,
 +	},
 +#ifdef CONFIG_FW_LOADER_USER_HELPER
 +	{
 +		.procname	= "firmware_config",
 +		.mode		= 0555,
 +		.child		= firmware_config_table,
 +	},
 +#endif
 +	{
 +		.procname	= "overflowuid",
 +		.data		= &overflowuid,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &minolduid,
 +		.extra2		= &maxolduid,
 +	},
 +	{
 +		.procname	= "overflowgid",
 +		.data		= &overflowgid,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &minolduid,
 +		.extra2		= &maxolduid,
 +	},
 +#ifdef CONFIG_S390
 +	{
 +		.procname	= "userprocess_debug",
 +		.data		= &show_unhandled_signals,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
++#ifdef CONFIG_SMP
++	{
++		.procname	= "oops_all_cpu_backtrace",
++		.data		= &sysctl_oops_all_cpu_backtrace,
++		.maxlen		= sizeof(int),
++		.mode		= 0644,
++		.proc_handler	= proc_dointvec_minmax,
++		.extra1		= SYSCTL_ZERO,
++		.extra2		= SYSCTL_ONE,
++	},
++#endif /* CONFIG_SMP */
 +	{
 +		.procname	= "pid_max",
 +		.data		= &pid_max,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &pid_max_min,
 +		.extra2		= &pid_max_max,
 +	},
 +	{
 +		.procname	= "panic_on_oops",
 +		.data		= &panic_on_oops,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "panic_print",
 +		.data		= &panic_print,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +#if defined CONFIG_PRINTK
 +	{
 +		.procname	= "printk",
 +		.data		= &console_loglevel,
 +		.maxlen		= 4*sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "printk_ratelimit",
 +		.data		= &printk_ratelimit_state.interval,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_jiffies,
 +	},
 +	{
 +		.procname	= "printk_ratelimit_burst",
 +		.data		= &printk_ratelimit_state.burst,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "printk_delay",
 +		.data		= &printk_delay_msec,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &ten_thousand,
 +	},
 +	{
 +		.procname	= "printk_devkmsg",
 +		.data		= devkmsg_log_str,
 +		.maxlen		= DEVKMSG_STR_MAX_SIZE,
 +		.mode		= 0644,
 +		.proc_handler	= devkmsg_sysctl_set_loglvl,
 +	},
 +	{
 +		.procname	= "dmesg_restrict",
 +		.data		= &dmesg_restrict,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax_sysadmin,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "kptr_restrict",
 +		.data		= &kptr_restrict,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax_sysadmin,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +#endif
 +	{
 +		.procname	= "ngroups_max",
 +		.data		= &ngroups_max,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0444,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "cap_last_cap",
 +		.data		= (void *)&cap_last_cap,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0444,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#if defined(CONFIG_LOCKUP_DETECTOR)
 +	{
 +		.procname       = "watchdog",
 +		.data		= &watchdog_user_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler   = proc_watchdog,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "watchdog_thresh",
 +		.data		= &watchdog_thresh,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_watchdog_thresh,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &sixty,
 +	},
 +	{
 +		.procname       = "nmi_watchdog",
 +		.data		= &nmi_watchdog_user_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= NMI_WATCHDOG_SYSCTL_PERM,
 +		.proc_handler   = proc_nmi_watchdog,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "watchdog_cpumask",
 +		.data		= &watchdog_cpumask_bits,
 +		.maxlen		= NR_CPUS,
 +		.mode		= 0644,
 +		.proc_handler	= proc_watchdog_cpumask,
 +	},
 +#ifdef CONFIG_SOFTLOCKUP_DETECTOR
 +	{
 +		.procname       = "soft_watchdog",
 +		.data		= &soft_watchdog_user_enabled,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler   = proc_soft_watchdog,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "softlockup_panic",
 +		.data		= &softlockup_panic,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#ifdef CONFIG_SMP
 +	{
 +		.procname	= "softlockup_all_cpu_backtrace",
 +		.data		= &sysctl_softlockup_all_cpu_backtrace,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif /* CONFIG_SMP */
 +#endif
 +#ifdef CONFIG_HARDLOCKUP_DETECTOR
 +	{
 +		.procname	= "hardlockup_panic",
 +		.data		= &hardlockup_panic,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#ifdef CONFIG_SMP
 +	{
 +		.procname	= "hardlockup_all_cpu_backtrace",
 +		.data		= &sysctl_hardlockup_all_cpu_backtrace,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif /* CONFIG_SMP */
 +#endif
 +#endif
 +
 +#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)
 +	{
 +		.procname       = "unknown_nmi_panic",
 +		.data           = &unknown_nmi_panic,
 +		.maxlen         = sizeof (int),
 +		.mode           = 0644,
 +		.proc_handler   = proc_dointvec,
 +	},
 +#endif
- #if defined(CONFIG_X86)
+ 
 -int proc_dointvec_jiffies(struct ctl_table *table, int write,
 -		    void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
++#if (defined(CONFIG_X86_32) || defined(CONFIG_PARISC)) && \
++	defined(CONFIG_DEBUG_STACKOVERFLOW)
 +	{
- 		.procname	= "panic_on_unrecovered_nmi",
- 		.data		= &panic_on_unrecovered_nmi,
++		.procname	= "panic_on_stackoverflow",
++		.data		= &sysctl_panic_on_stackoverflow,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
++#endif
++#if defined(CONFIG_X86)
 +	{
- 		.procname	= "panic_on_io_nmi",
- 		.data		= &panic_on_io_nmi,
++		.procname	= "panic_on_unrecovered_nmi",
++		.data		= &panic_on_unrecovered_nmi,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
- #ifdef CONFIG_DEBUG_STACKOVERFLOW
 +	{
- 		.procname	= "panic_on_stackoverflow",
- 		.data		= &sysctl_panic_on_stackoverflow,
++		.procname	= "panic_on_io_nmi",
++		.data		= &panic_on_io_nmi,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
- #endif
 +	{
 +		.procname	= "bootloader_type",
 +		.data		= &bootloader_type,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0444,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "bootloader_version",
 +		.data		= &bootloader_version,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0444,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "io_delay_type",
 +		.data		= &io_delay_type,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#if defined(CONFIG_MMU)
 +	{
 +		.procname	= "randomize_va_space",
 +		.data		= &randomize_va_space,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#if defined(CONFIG_S390) && defined(CONFIG_SMP)
 +	{
 +		.procname	= "spin_retry",
 +		.data		= &spin_retry,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#if	defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86)
 +	{
 +		.procname	= "acpi_video_flags",
 +		.data		= &acpi_realmode_flags,
 +		.maxlen		= sizeof (unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +#endif
 +#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN
 +	{
 +		.procname	= "ignore-unaligned-usertrap",
 +		.data		= &no_unaligned_warning,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_IA64
 +	{
 +		.procname	= "unaligned-dump-stack",
 +		.data		= &unaligned_dump_stack,
 +		.maxlen		= sizeof (int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_DETECT_HUNG_TASK
++#ifdef CONFIG_SMP
++	{
++		.procname	= "hung_task_all_cpu_backtrace",
++		.data		= &sysctl_hung_task_all_cpu_backtrace,
++		.maxlen		= sizeof(int),
++		.mode		= 0644,
++		.proc_handler	= proc_dointvec_minmax,
++		.extra1		= SYSCTL_ZERO,
++		.extra2		= SYSCTL_ONE,
++	},
++#endif /* CONFIG_SMP */
 +	{
 +		.procname	= "hung_task_panic",
 +		.data		= &sysctl_hung_task_panic,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "hung_task_check_count",
 +		.data		= &sysctl_hung_task_check_count,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "hung_task_timeout_secs",
 +		.data		= &sysctl_hung_task_timeout_secs,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dohung_task_timeout_secs,
 +		.extra2		= &hung_task_timeout_max,
 +	},
 +	{
 +		.procname	= "hung_task_check_interval_secs",
 +		.data		= &sysctl_hung_task_check_interval_secs,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dohung_task_timeout_secs,
 +		.extra2		= &hung_task_timeout_max,
 +	},
 +	{
 +		.procname	= "hung_task_warnings",
 +		.data		= &sysctl_hung_task_warnings,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &neg_one,
 +	},
 +#endif
 +#ifdef CONFIG_RT_MUTEXES
 +	{
 +		.procname	= "max_lock_depth",
 +		.data		= &max_lock_depth,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +	{
 +		.procname	= "poweroff_cmd",
 +		.data		= &poweroff_cmd,
 +		.maxlen		= POWEROFF_CMD_PATH_LEN,
 +		.mode		= 0644,
 +		.proc_handler	= proc_dostring,
 +	},
 +#ifdef CONFIG_KEYS
 +	{
 +		.procname	= "keys",
 +		.mode		= 0555,
 +		.child		= key_sysctls,
 +	},
 +#endif
 +#ifdef CONFIG_PERF_EVENTS
 +	/*
 +	 * User-space scripts rely on the existence of this file
 +	 * as a feature check for perf_events being enabled.
 +	 *
 +	 * So it's an ABI, do not remove!
 +	 */
 +	{
 +		.procname	= "perf_event_paranoid",
 +		.data		= &sysctl_perf_event_paranoid,
 +		.maxlen		= sizeof(sysctl_perf_event_paranoid),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "perf_event_mlock_kb",
 +		.data		= &sysctl_perf_event_mlock,
 +		.maxlen		= sizeof(sysctl_perf_event_mlock),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "perf_event_max_sample_rate",
 +		.data		= &sysctl_perf_event_sample_rate,
 +		.maxlen		= sizeof(sysctl_perf_event_sample_rate),
 +		.mode		= 0644,
 +		.proc_handler	= perf_proc_update_handler,
 +		.extra1		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "perf_cpu_time_max_percent",
 +		.data		= &sysctl_perf_cpu_time_max_percent,
 +		.maxlen		= sizeof(sysctl_perf_cpu_time_max_percent),
 +		.mode		= 0644,
 +		.proc_handler	= perf_cpu_time_max_percent_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +	{
 +		.procname	= "perf_event_max_stack",
 +		.data		= &sysctl_perf_event_max_stack,
 +		.maxlen		= sizeof(sysctl_perf_event_max_stack),
 +		.mode		= 0644,
 +		.proc_handler	= perf_event_max_stack_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &six_hundred_forty_kb,
 +	},
 +	{
 +		.procname	= "perf_event_max_contexts_per_stack",
 +		.data		= &sysctl_perf_event_max_contexts_per_stack,
 +		.maxlen		= sizeof(sysctl_perf_event_max_contexts_per_stack),
 +		.mode		= 0644,
 +		.proc_handler	= perf_event_max_stack_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_thousand,
 +	},
 +#endif
 +	{
 +		.procname	= "panic_on_warn",
 +		.data		= &panic_on_warn,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
 +	{
 +		.procname	= "timer_migration",
 +		.data		= &sysctl_timer_migration,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= timer_migration_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_BPF_SYSCALL
 +	{
 +		.procname	= "unprivileged_bpf_disabled",
 +		.data		= &sysctl_unprivileged_bpf_disabled,
 +		.maxlen		= sizeof(sysctl_unprivileged_bpf_disabled),
 +		.mode		= 0644,
 +		/* only handle a transition from default "0" to "1" */
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "bpf_stats_enabled",
 +		.data		= &bpf_stats_enabled_key.key,
 +		.maxlen		= sizeof(bpf_stats_enabled_key),
 +		.mode		= 0644,
 +		.proc_handler	= proc_do_static_key,
 +	},
 +#endif
 +#if defined(CONFIG_TREE_RCU)
 +	{
 +		.procname	= "panic_on_rcu_stall",
 +		.data		= &sysctl_panic_on_rcu_stall,
 +		.maxlen		= sizeof(sysctl_panic_on_rcu_stall),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_STACKLEAK_RUNTIME_DISABLE
 +	{
 +		.procname	= "stack_erasing",
 +		.data		= NULL,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0600,
 +		.proc_handler	= stack_erasing_sysctl,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +	{ }
 +};
  
 -int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
 -		    void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
 +static struct ctl_table vm_table[] = {
 +	{
 +		.procname	= "overcommit_memory",
 +		.data		= &sysctl_overcommit_memory,
 +		.maxlen		= sizeof(sysctl_overcommit_memory),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +	{
 +		.procname	= "panic_on_oom",
 +		.data		= &sysctl_panic_on_oom,
 +		.maxlen		= sizeof(sysctl_panic_on_oom),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +	{
 +		.procname	= "oom_kill_allocating_task",
 +		.data		= &sysctl_oom_kill_allocating_task,
 +		.maxlen		= sizeof(sysctl_oom_kill_allocating_task),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "oom_dump_tasks",
 +		.data		= &sysctl_oom_dump_tasks,
 +		.maxlen		= sizeof(sysctl_oom_dump_tasks),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +	{
 +		.procname	= "overcommit_ratio",
 +		.data		= &sysctl_overcommit_ratio,
 +		.maxlen		= sizeof(sysctl_overcommit_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= overcommit_ratio_handler,
 +	},
 +	{
 +		.procname	= "overcommit_kbytes",
 +		.data		= &sysctl_overcommit_kbytes,
 +		.maxlen		= sizeof(sysctl_overcommit_kbytes),
 +		.mode		= 0644,
 +		.proc_handler	= overcommit_kbytes_handler,
 +	},
 +	{
 +		.procname	= "page-cluster",
 +		.data		= &page_cluster,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "dirty_background_ratio",
 +		.data		= &dirty_background_ratio,
 +		.maxlen		= sizeof(dirty_background_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= dirty_background_ratio_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +	{
 +		.procname	= "dirty_background_bytes",
 +		.data		= &dirty_background_bytes,
 +		.maxlen		= sizeof(dirty_background_bytes),
 +		.mode		= 0644,
 +		.proc_handler	= dirty_background_bytes_handler,
 +		.extra1		= &one_ul,
 +	},
 +	{
 +		.procname	= "dirty_ratio",
 +		.data		= &vm_dirty_ratio,
 +		.maxlen		= sizeof(vm_dirty_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= dirty_ratio_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +	{
 +		.procname	= "dirty_bytes",
 +		.data		= &vm_dirty_bytes,
 +		.maxlen		= sizeof(vm_dirty_bytes),
 +		.mode		= 0644,
 +		.proc_handler	= dirty_bytes_handler,
 +		.extra1		= &dirty_bytes_min,
 +	},
 +	{
 +		.procname	= "dirty_writeback_centisecs",
 +		.data		= &dirty_writeback_interval,
 +		.maxlen		= sizeof(dirty_writeback_interval),
 +		.mode		= 0644,
 +		.proc_handler	= dirty_writeback_centisecs_handler,
 +	},
 +	{
 +		.procname	= "dirty_expire_centisecs",
 +		.data		= &dirty_expire_interval,
 +		.maxlen		= sizeof(dirty_expire_interval),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "dirtytime_expire_seconds",
 +		.data		= &dirtytime_expire_interval,
 +		.maxlen		= sizeof(dirtytime_expire_interval),
 +		.mode		= 0644,
 +		.proc_handler	= dirtytime_interval_handler,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "swappiness",
 +		.data		= &vm_swappiness,
 +		.maxlen		= sizeof(vm_swappiness),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +#ifdef CONFIG_HUGETLB_PAGE
 +	{
 +		.procname	= "nr_hugepages",
 +		.data		= NULL,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= hugetlb_sysctl_handler,
 +	},
 +#ifdef CONFIG_NUMA
 +	{
 +		.procname       = "nr_hugepages_mempolicy",
 +		.data           = NULL,
 +		.maxlen         = sizeof(unsigned long),
 +		.mode           = 0644,
 +		.proc_handler   = &hugetlb_mempolicy_sysctl_handler,
 +	},
 +	{
 +		.procname		= "numa_stat",
 +		.data			= &sysctl_vm_numa_stat,
 +		.maxlen			= sizeof(int),
 +		.mode			= 0644,
 +		.proc_handler	= sysctl_vm_numa_stat_handler,
 +		.extra1			= SYSCTL_ZERO,
 +		.extra2			= SYSCTL_ONE,
 +	},
 +#endif
 +	 {
 +		.procname	= "hugetlb_shm_group",
 +		.data		= &sysctl_hugetlb_shm_group,
 +		.maxlen		= sizeof(gid_t),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	 },
 +	{
 +		.procname	= "nr_overcommit_hugepages",
 +		.data		= NULL,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= hugetlb_overcommit_handler,
 +	},
 +#endif
 +	{
 +		.procname	= "lowmem_reserve_ratio",
 +		.data		= &sysctl_lowmem_reserve_ratio,
 +		.maxlen		= sizeof(sysctl_lowmem_reserve_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= lowmem_reserve_ratio_sysctl_handler,
 +	},
 +	{
 +		.procname	= "drop_caches",
 +		.data		= &sysctl_drop_caches,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0200,
 +		.proc_handler	= drop_caches_sysctl_handler,
 +		.extra1		= SYSCTL_ONE,
 +		.extra2		= &four,
 +	},
 +#ifdef CONFIG_COMPACTION
 +	{
 +		.procname	= "compact_memory",
 +		.data		= &sysctl_compact_memory,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0200,
 +		.proc_handler	= sysctl_compaction_handler,
 +	},
 +	{
 +		.procname	= "extfrag_threshold",
 +		.data		= &sysctl_extfrag_threshold,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &min_extfrag_threshold,
 +		.extra2		= &max_extfrag_threshold,
 +	},
 +	{
 +		.procname	= "compact_unevictable_allowed",
 +		.data		= &sysctl_compact_unevictable_allowed,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax_warn_RT_change,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
  
 -int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
 -			     void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
 +#endif /* CONFIG_COMPACTION */
 +	{
 +		.procname	= "min_free_kbytes",
 +		.data		= &min_free_kbytes,
 +		.maxlen		= sizeof(min_free_kbytes),
 +		.mode		= 0644,
 +		.proc_handler	= min_free_kbytes_sysctl_handler,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "watermark_boost_factor",
 +		.data		= &watermark_boost_factor,
 +		.maxlen		= sizeof(watermark_boost_factor),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "watermark_scale_factor",
 +		.data		= &watermark_scale_factor,
 +		.maxlen		= sizeof(watermark_scale_factor),
 +		.mode		= 0644,
 +		.proc_handler	= watermark_scale_factor_sysctl_handler,
 +		.extra1		= SYSCTL_ONE,
 +		.extra2		= &one_thousand,
 +	},
 +	{
 +		.procname	= "percpu_pagelist_fraction",
 +		.data		= &percpu_pagelist_fraction,
 +		.maxlen		= sizeof(percpu_pagelist_fraction),
 +		.mode		= 0644,
 +		.proc_handler	= percpu_pagelist_fraction_sysctl_handler,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#ifdef CONFIG_MMU
 +	{
 +		.procname	= "max_map_count",
 +		.data		= &sysctl_max_map_count,
 +		.maxlen		= sizeof(sysctl_max_map_count),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#else
 +	{
 +		.procname	= "nr_trim_pages",
 +		.data		= &sysctl_nr_trim_pages,
 +		.maxlen		= sizeof(sysctl_nr_trim_pages),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#endif
 +	{
 +		.procname	= "laptop_mode",
 +		.data		= &laptop_mode,
 +		.maxlen		= sizeof(laptop_mode),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_jiffies,
 +	},
 +	{
 +		.procname	= "block_dump",
 +		.data		= &block_dump,
 +		.maxlen		= sizeof(block_dump),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "vfs_cache_pressure",
 +		.data		= &sysctl_vfs_cache_pressure,
 +		.maxlen		= sizeof(sysctl_vfs_cache_pressure),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \
 +    defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT)
 +	{
 +		.procname	= "legacy_va_layout",
 +		.data		= &sysctl_legacy_va_layout,
 +		.maxlen		= sizeof(sysctl_legacy_va_layout),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#endif
 +#ifdef CONFIG_NUMA
 +	{
 +		.procname	= "zone_reclaim_mode",
 +		.data		= &node_reclaim_mode,
 +		.maxlen		= sizeof(node_reclaim_mode),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +	{
 +		.procname	= "min_unmapped_ratio",
 +		.data		= &sysctl_min_unmapped_ratio,
 +		.maxlen		= sizeof(sysctl_min_unmapped_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_min_unmapped_ratio_sysctl_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +	{
 +		.procname	= "min_slab_ratio",
 +		.data		= &sysctl_min_slab_ratio,
 +		.maxlen		= sizeof(sysctl_min_slab_ratio),
 +		.mode		= 0644,
 +		.proc_handler	= sysctl_min_slab_ratio_sysctl_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &one_hundred,
 +	},
 +#endif
 +#ifdef CONFIG_SMP
 +	{
 +		.procname	= "stat_interval",
 +		.data		= &sysctl_stat_interval,
 +		.maxlen		= sizeof(sysctl_stat_interval),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_jiffies,
 +	},
 +	{
 +		.procname	= "stat_refresh",
 +		.data		= NULL,
 +		.maxlen		= 0,
 +		.mode		= 0600,
 +		.proc_handler	= vmstat_refresh,
 +	},
 +#endif
 +#ifdef CONFIG_MMU
 +	{
 +		.procname	= "mmap_min_addr",
 +		.data		= &dac_mmap_min_addr,
 +		.maxlen		= sizeof(unsigned long),
 +		.mode		= 0644,
 +		.proc_handler	= mmap_min_addr_handler,
 +	},
 +#endif
 +#ifdef CONFIG_NUMA
 +	{
 +		.procname	= "numa_zonelist_order",
 +		.data		= &numa_zonelist_order,
 +		.maxlen		= NUMA_ZONELIST_ORDER_LEN,
 +		.mode		= 0644,
 +		.proc_handler	= numa_zonelist_order_handler,
 +	},
 +#endif
 +#if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \
 +   (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
 +	{
 +		.procname	= "vdso_enabled",
 +#ifdef CONFIG_X86_32
 +		.data		= &vdso32_enabled,
 +		.maxlen		= sizeof(vdso32_enabled),
 +#else
 +		.data		= &vdso_enabled,
 +		.maxlen		= sizeof(vdso_enabled),
 +#endif
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +		.extra1		= SYSCTL_ZERO,
 +	},
 +#endif
 +#ifdef CONFIG_HIGHMEM
 +	{
 +		.procname	= "highmem_is_dirtyable",
 +		.data		= &vm_highmem_is_dirtyable,
 +		.maxlen		= sizeof(vm_highmem_is_dirtyable),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +#ifdef CONFIG_MEMORY_FAILURE
 +	{
 +		.procname	= "memory_failure_early_kill",
 +		.data		= &sysctl_memory_failure_early_kill,
 +		.maxlen		= sizeof(sysctl_memory_failure_early_kill),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "memory_failure_recovery",
 +		.data		= &sysctl_memory_failure_recovery,
 +		.maxlen		= sizeof(sysctl_memory_failure_recovery),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +	{
 +		.procname	= "user_reserve_kbytes",
 +		.data		= &sysctl_user_reserve_kbytes,
 +		.maxlen		= sizeof(sysctl_user_reserve_kbytes),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +	{
 +		.procname	= "admin_reserve_kbytes",
 +		.data		= &sysctl_admin_reserve_kbytes,
 +		.maxlen		= sizeof(sysctl_admin_reserve_kbytes),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS
 +	{
 +		.procname	= "mmap_rnd_bits",
 +		.data		= &mmap_rnd_bits,
 +		.maxlen		= sizeof(mmap_rnd_bits),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= (void *)&mmap_rnd_bits_min,
 +		.extra2		= (void *)&mmap_rnd_bits_max,
 +	},
 +#endif
 +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS
 +	{
 +		.procname	= "mmap_rnd_compat_bits",
 +		.data		= &mmap_rnd_compat_bits,
 +		.maxlen		= sizeof(mmap_rnd_compat_bits),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= (void *)&mmap_rnd_compat_bits_min,
 +		.extra2		= (void *)&mmap_rnd_compat_bits_max,
 +	},
 +#endif
 +#ifdef CONFIG_USERFAULTFD
 +	{
 +		.procname	= "unprivileged_userfaultfd",
 +		.data		= &sysctl_unprivileged_userfaultfd,
 +		.maxlen		= sizeof(sysctl_unprivileged_userfaultfd),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +	{ }
 +};
  
 -int proc_doulongvec_minmax(struct ctl_table *table, int write,
 -		    void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
 +static struct ctl_table fs_table[] = {
 +	{
 +		.procname	= "inode-nr",
 +		.data		= &inodes_stat,
 +		.maxlen		= 2*sizeof(long),
 +		.mode		= 0444,
 +		.proc_handler	= proc_nr_inodes,
 +	},
 +	{
 +		.procname	= "inode-state",
 +		.data		= &inodes_stat,
 +		.maxlen		= 7*sizeof(long),
 +		.mode		= 0444,
 +		.proc_handler	= proc_nr_inodes,
 +	},
 +	{
 +		.procname	= "file-nr",
 +		.data		= &files_stat,
 +		.maxlen		= sizeof(files_stat),
 +		.mode		= 0444,
 +		.proc_handler	= proc_nr_files,
 +	},
 +	{
 +		.procname	= "file-max",
 +		.data		= &files_stat.max_files,
 +		.maxlen		= sizeof(files_stat.max_files),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +		.extra1		= &zero_ul,
 +		.extra2		= &long_max,
 +	},
 +	{
 +		.procname	= "nr_open",
 +		.data		= &sysctl_nr_open,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &sysctl_nr_open_min,
 +		.extra2		= &sysctl_nr_open_max,
 +	},
 +	{
 +		.procname	= "dentry-state",
 +		.data		= &dentry_stat,
 +		.maxlen		= 6*sizeof(long),
 +		.mode		= 0444,
 +		.proc_handler	= proc_nr_dentry,
 +	},
 +	{
 +		.procname	= "overflowuid",
 +		.data		= &fs_overflowuid,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &minolduid,
 +		.extra2		= &maxolduid,
 +	},
 +	{
 +		.procname	= "overflowgid",
 +		.data		= &fs_overflowgid,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= &minolduid,
 +		.extra2		= &maxolduid,
 +	},
 +#ifdef CONFIG_FILE_LOCKING
 +	{
 +		.procname	= "leases-enable",
 +		.data		= &leases_enable,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_DNOTIFY
 +	{
 +		.procname	= "dir-notify-enable",
 +		.data		= &dir_notify_enable,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_MMU
 +#ifdef CONFIG_FILE_LOCKING
 +	{
 +		.procname	= "lease-break-time",
 +		.data		= &lease_break_time,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec,
 +	},
 +#endif
 +#ifdef CONFIG_AIO
 +	{
 +		.procname	= "aio-nr",
 +		.data		= &aio_nr,
 +		.maxlen		= sizeof(aio_nr),
 +		.mode		= 0444,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +	{
 +		.procname	= "aio-max-nr",
 +		.data		= &aio_max_nr,
 +		.maxlen		= sizeof(aio_max_nr),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +#endif /* CONFIG_AIO */
 +#ifdef CONFIG_INOTIFY_USER
 +	{
 +		.procname	= "inotify",
 +		.mode		= 0555,
 +		.child		= inotify_table,
 +	},
 +#endif	
 +#ifdef CONFIG_EPOLL
 +	{
 +		.procname	= "epoll",
 +		.mode		= 0555,
 +		.child		= epoll_table,
 +	},
 +#endif
 +#endif
 +	{
 +		.procname	= "protected_symlinks",
 +		.data		= &sysctl_protected_symlinks,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "protected_hardlinks",
 +		.data		= &sysctl_protected_hardlinks,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +	{
 +		.procname	= "protected_fifos",
 +		.data		= &sysctl_protected_fifos,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +	{
 +		.procname	= "protected_regular",
 +		.data		= &sysctl_protected_regular,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0600,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +	{
 +		.procname	= "suid_dumpable",
 +		.data		= &suid_dumpable,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax_coredump,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= &two,
 +	},
 +#if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
 +	{
 +		.procname	= "binfmt_misc",
 +		.mode		= 0555,
 +		.child		= sysctl_mount_point,
 +	},
 +#endif
 +	{
 +		.procname	= "pipe-max-size",
 +		.data		= &pipe_max_size,
 +		.maxlen		= sizeof(pipe_max_size),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dopipe_max_size,
 +	},
 +	{
 +		.procname	= "pipe-user-pages-hard",
 +		.data		= &pipe_user_pages_hard,
 +		.maxlen		= sizeof(pipe_user_pages_hard),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +	{
 +		.procname	= "pipe-user-pages-soft",
 +		.data		= &pipe_user_pages_soft,
 +		.maxlen		= sizeof(pipe_user_pages_soft),
 +		.mode		= 0644,
 +		.proc_handler	= proc_doulongvec_minmax,
 +	},
 +	{
 +		.procname	= "mount-max",
 +		.data		= &sysctl_mount_max,
 +		.maxlen		= sizeof(unsigned int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec_minmax,
 +		.extra1		= SYSCTL_ONE,
 +	},
 +	{ }
 +};
  
 -int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
 -				      void __user *buffer,
 -				      size_t *lenp, loff_t *ppos)
 -{
 -    return -ENOSYS;
 -}
 +static struct ctl_table debug_table[] = {
 +#ifdef CONFIG_SYSCTL_EXCEPTION_TRACE
 +	{
 +		.procname	= "exception-trace",
 +		.data		= &show_unhandled_signals,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_dointvec
 +	},
 +#endif
 +#if defined(CONFIG_OPTPROBES)
 +	{
 +		.procname	= "kprobes-optimization",
 +		.data		= &sysctl_kprobes_optimization,
 +		.maxlen		= sizeof(int),
 +		.mode		= 0644,
 +		.proc_handler	= proc_kprobes_optimization_handler,
 +		.extra1		= SYSCTL_ZERO,
 +		.extra2		= SYSCTL_ONE,
 +	},
 +#endif
 +	{ }
 +};
  
 -int proc_do_large_bitmap(struct ctl_table *table, int write,
 -			 void __user *buffer, size_t *lenp, loff_t *ppos)
 -{
 -	return -ENOSYS;
 -}
 +static struct ctl_table dev_table[] = {
 +	{ }
 +};
  
 -#endif /* CONFIG_PROC_SYSCTL */
 +static struct ctl_table sysctl_base_table[] = {
 +	{
 +		.procname	= "kernel",
 +		.mode		= 0555,
 +		.child		= kern_table,
 +	},
 +	{
 +		.procname	= "vm",
 +		.mode		= 0555,
 +		.child		= vm_table,
 +	},
 +	{
 +		.procname	= "fs",
 +		.mode		= 0555,
 +		.child		= fs_table,
 +	},
 +	{
 +		.procname	= "debug",
 +		.mode		= 0555,
 +		.child		= debug_table,
 +	},
 +	{
 +		.procname	= "dev",
 +		.mode		= 0555,
 +		.child		= dev_table,
 +	},
 +	{ }
 +};
  
 -#if defined(CONFIG_SYSCTL)
 -int proc_do_static_key(struct ctl_table *table, int write,
 -		       void __user *buffer, size_t *lenp,
 -		       loff_t *ppos)
 +int __init sysctl_init(void)
  {
 -	struct static_key *key = (struct static_key *)table->data;
 -	static DEFINE_MUTEX(static_key_mutex);
 -	int val, ret;
 -	struct ctl_table tmp = {
 -		.data   = &val,
 -		.maxlen = sizeof(val),
 -		.mode   = table->mode,
 -		.extra1 = SYSCTL_ZERO,
 -		.extra2 = SYSCTL_ONE,
 -	};
 -
 -	if (write && !capable(CAP_SYS_ADMIN))
 -		return -EPERM;
 +	struct ctl_table_header *hdr;
  
 -	mutex_lock(&static_key_mutex);
 -	val = static_key_enabled(key);
 -	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
 -	if (write && !ret) {
 -		if (val)
 -			static_key_enable(key);
 -		else
 -			static_key_disable(key);
 -	}
 -	mutex_unlock(&static_key_mutex);
 -	return ret;
 +	hdr = register_sysctl_table(sysctl_base_table);
 +	kmemleak_not_leak(hdr);
 +	return 0;
  }
 -#endif
 +#endif /* CONFIG_SYSCTL */
  /*
   * No sense putting this after each symbol definition, twice,
   * exception granted :-)

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2022-03-15 11:57 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-04  9:20 linux-next: manual merge of the akpm-current tree with the bpf-next tree Stephen Rothwell
2020-12-14 20:21 ` Stephen Rothwell
2020-12-15  1:29   ` Roman Gushchin
2020-12-15  1:40     ` Andrew Morton
2020-12-15  2:06       ` Jakub Kicinski
2020-12-15  2:11         ` Andrew Morton
2020-12-15  2:13           ` Jakub Kicinski
2020-12-15  2:23         ` Stephen Rothwell
  -- strict thread matches above, loose matches on Subject: below --
2022-03-15 11:57 Stephen Rothwell
2022-02-03  3:52 Stephen Rothwell
2020-04-29  6:45 Stephen Rothwell
2020-04-29  6:47 ` Christoph Hellwig
2020-04-29  6:49   ` Alexei Starovoitov
2020-04-29  6:54     ` Christoph Hellwig
2020-04-29  8:24       ` Stephen Rothwell
2020-05-01  4:00         ` Al Viro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).