sysctl-6.7-rc1
To help make the move of sysctls out of kernel/sysctl.c not incur a size
penalty sysctl has been changed to allow us to not require the sentinel, the
final empty element on the sysctl array. Joel Granados has been doing all this
work. On the v6.6 kernel we got the major infrastructure changes required to
support this. For v6.7-rc1 we have all arch/ and drivers/ modified to remove
the sentinel. Both arch and driver changes have been on linux-next for a bit
less than a month. It is worth re-iterating the value:
- this helps reduce the overall build time size of the kernel and run time
memory consumed by the kernel by about ~64 bytes per array
- the extra 64-byte penalty is no longer inncurred now when we move sysctls
out from kernel/sysctl.c to their own files
For v6.8-rc1 expect removal of all the sentinels and also then the unneeded
check for procname == NULL.
The last 2 patches are fixes recently merged by Krister Johansen which allow
us again to use softlockup_panic early on boot. This used to work but the
alias work broke it. This is useful for folks who want to detect softlockups
super early rather than wait and spend money on cloud solutions with nothing
but an eventual hung kernel. Although this hadn't gone through linux-next it's
also a stable fix, so we might as well roll through the fixes now.
-----BEGIN PGP SIGNATURE-----
iQJGBAABCgAwFiEENnNq2KuOejlQLZofziMdCjCSiKcFAmVCqKsSHG1jZ3JvZkBr
ZXJuZWwub3JnAAoJEM4jHQowkoinEgYQAIpkqRL85DBwems19Uk9A27lkctwZ6Fc
HdslQCObQTsbuKVimZFP4IL2beUfUE0cfLZCXlzp+4nRDOf6vyhyf3w19jPQtI0Q
YdqwTk9y6G5VjDsb35QK0+UBloY/kZ1H3/LW4uCwjXTuksUGmWW2Qvey35696Scv
hDMLADqKQmdpYxLUaNi9QyYbEAjYtOai2ezg3+i7hTG168t1k/Ab2BxIFrPVsCR2
FAiq05L4ugWjNskdsWBjck05JZsx9SK/qcAxpIPoUm4nGiFNHApXE0E0hs3vsnmn
WIHIbxCQw8ZlUDlmw4S+0YH3NFFzFbWfmW8k2b0f2qZTJm/rU4KiJfcJVknkAUVF
raFox6XDW0AUQ9L/NOUJ9ip5rup57GcFrMYocdJ3PPAvvmHKOb1D1O741p75RRcc
9j7zwfIRrzjPUqzhsQS/GFjdJu3lJNmEBK1AcgrVry6WoItrAzJHKPPDC7TwaNmD
eXpjxMl1sYzzHqtVh4hn+xkUYphj/6gTGMV8zdo+/FopFswgeJW9G8kHtlEWKDPk
MRIKwACmfetP6f3ngHunBg+BOipbjCANL7JI0nOhVOQoaULxCCPx+IPJ6GfSyiuH
AbcjH8DGI7fJbUkBFoF0dsRFZ2gH8ds1PYMbWUJ6x3FtuCuv5iIuvQYoaWU6itm7
6f0KvCogg0fU
=Qf50
-----END PGP SIGNATURE-----
Merge tag 'sysctl-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux
Pull sysctl updates from Luis Chamberlain:
"To help make the move of sysctls out of kernel/sysctl.c not incur a
size penalty sysctl has been changed to allow us to not require the
sentinel, the final empty element on the sysctl array. Joel Granados
has been doing all this work. On the v6.6 kernel we got the major
infrastructure changes required to support this. For v6.7-rc1 we have
all arch/ and drivers/ modified to remove the sentinel. Both arch and
driver changes have been on linux-next for a bit less than a month. It
is worth re-iterating the value:
- this helps reduce the overall build time size of the kernel and run
time memory consumed by the kernel by about ~64 bytes per array
- the extra 64-byte penalty is no longer inncurred now when we move
sysctls out from kernel/sysctl.c to their own files
For v6.8-rc1 expect removal of all the sentinels and also then the
unneeded check for procname == NULL.
The last two patches are fixes recently merged by Krister Johansen
which allow us again to use softlockup_panic early on boot. This used
to work but the alias work broke it. This is useful for folks who want
to detect softlockups super early rather than wait and spend money on
cloud solutions with nothing but an eventual hung kernel. Although
this hadn't gone through linux-next it's also a stable fix, so we
might as well roll through the fixes now"
* tag 'sysctl-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux: (23 commits)
watchdog: move softlockup_panic back to early_param
proc: sysctl: prevent aliased sysctls from getting passed to init
intel drm: Remove now superfluous sentinel element from ctl_table array
Drivers: hv: Remove now superfluous sentinel element from ctl_table array
raid: Remove now superfluous sentinel element from ctl_table array
fw loader: Remove the now superfluous sentinel element from ctl_table array
sgi-xp: Remove the now superfluous sentinel element from ctl_table array
vrf: Remove the now superfluous sentinel element from ctl_table array
char-misc: Remove the now superfluous sentinel element from ctl_table array
infiniband: Remove the now superfluous sentinel element from ctl_table array
macintosh: Remove the now superfluous sentinel element from ctl_table array
parport: Remove the now superfluous sentinel element from ctl_table array
scsi: Remove now superfluous sentinel element from ctl_table array
tty: Remove now superfluous sentinel element from ctl_table array
xen: Remove now superfluous sentinel element from ctl_table array
hpet: Remove now superfluous sentinel element from ctl_table array
c-sky: Remove now superfluous sentinel element from ctl_talbe array
powerpc: Remove now superfluous sentinel element from ctl_table arrays
riscv: Remove now superfluous sentinel element from ctl_table array
x86/vdso: Remove now superfluous sentinel element from ctl_table array
...
pull/807/head
commit
426ee5196d
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
static unsigned int isa_membase, isa_portbase, isa_portshift;
|
||||
|
||||
static struct ctl_table ctl_isa_vars[4] = {
|
||||
static struct ctl_table ctl_isa_vars[] = {
|
||||
{
|
||||
.procname = "membase",
|
||||
.data = &isa_membase,
|
||||
|
|
@ -35,7 +35,7 @@ static struct ctl_table ctl_isa_vars[4] = {
|
|||
.maxlen = sizeof(isa_portshift),
|
||||
.mode = 0444,
|
||||
.proc_handler = proc_dointvec,
|
||||
}, {}
|
||||
},
|
||||
};
|
||||
|
||||
static struct ctl_table_header *isa_sysctl_header;
|
||||
|
|
|
|||
|
|
@ -52,10 +52,8 @@ struct insn_emulation {
|
|||
int min;
|
||||
int max;
|
||||
|
||||
/*
|
||||
* sysctl for this emulation + a sentinal entry.
|
||||
*/
|
||||
struct ctl_table sysctl[2];
|
||||
/* sysctl for this emulation */
|
||||
struct ctl_table sysctl;
|
||||
};
|
||||
|
||||
#define ARM_OPCODE_CONDTEST_FAIL 0
|
||||
|
|
@ -558,7 +556,7 @@ static void __init register_insn_emulation(struct insn_emulation *insn)
|
|||
update_insn_emulation_mode(insn, INSN_UNDEF);
|
||||
|
||||
if (insn->status != INSN_UNAVAILABLE) {
|
||||
sysctl = &insn->sysctl[0];
|
||||
sysctl = &insn->sysctl;
|
||||
|
||||
sysctl->mode = 0644;
|
||||
sysctl->maxlen = sizeof(int);
|
||||
|
|
|
|||
|
|
@ -589,7 +589,6 @@ static struct ctl_table sve_default_vl_table[] = {
|
|||
.proc_handler = vec_proc_do_default_vl,
|
||||
.extra1 = &vl_info[ARM64_VEC_SVE],
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init sve_sysctl_init(void)
|
||||
|
|
@ -613,7 +612,6 @@ static struct ctl_table sme_default_vl_table[] = {
|
|||
.proc_handler = vec_proc_do_default_vl,
|
||||
.extra1 = &vl_info[ARM64_VEC_SME],
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init sme_sysctl_init(void)
|
||||
|
|
|
|||
|
|
@ -724,7 +724,6 @@ static struct ctl_table tagged_addr_sysctl_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init tagged_addr_init(void)
|
||||
|
|
|
|||
|
|
@ -329,7 +329,6 @@ static struct ctl_table alignment_tbl[5] = {
|
|||
.mode = 0666,
|
||||
.proc_handler = &proc_dointvec
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init csky_alignment_init(void)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,6 @@ static struct ctl_table powersave_nap_ctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ static struct ctl_table nmi_wd_lpm_factor_ctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_douintvec_minmax,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init register_nmi_wd_lpm_factor_sysctl(void)
|
||||
|
|
|
|||
|
|
@ -255,7 +255,6 @@ static struct ctl_table riscv_v_default_vstate_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dobool,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init riscv_v_sysctl_init(void)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ static struct ctl_table appldata_table[] = {
|
|||
.mode = S_IRUGO | S_IWUSR,
|
||||
.proc_handler = appldata_interval_handler,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -351,8 +350,7 @@ int appldata_register_ops(struct appldata_ops *ops)
|
|||
if (ops->size > APPLDATA_MAX_REC_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
/* The last entry must be an empty one */
|
||||
ops->ctl_table = kcalloc(2, sizeof(struct ctl_table), GFP_KERNEL);
|
||||
ops->ctl_table = kcalloc(1, sizeof(struct ctl_table), GFP_KERNEL);
|
||||
if (!ops->ctl_table)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -978,7 +978,6 @@ static struct ctl_table s390dbf_table[] = {
|
|||
.mode = S_IRUGO | S_IWUSR,
|
||||
.proc_handler = s390dbf_procactive,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct ctl_table_header *s390dbf_sysctl_header;
|
||||
|
|
|
|||
|
|
@ -636,7 +636,6 @@ static struct ctl_table topology_ctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = topology_ctl_handler,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
static int __init topology_init(void)
|
||||
|
|
|
|||
|
|
@ -332,7 +332,6 @@ static struct ctl_table cmm_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = cmm_timeout_handler,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CMM_IUCV
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ static struct ctl_table page_table_sysctl[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init page_table_register_sysctl(void)
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ static struct ctl_table abi_table2[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static __init int ia32_binfmt_init(void)
|
||||
|
|
|
|||
|
|
@ -1003,7 +1003,6 @@ static struct ctl_table sld_sysctls[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init sld_mitigate_sysctl_init(void)
|
||||
|
|
|
|||
|
|
@ -74,7 +74,6 @@ static struct ctl_table itmt_kern_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct ctl_table_header *itmt_sysctl_header;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ static struct ctl_table firmware_config_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct ctl_table_header *firmware_config_sysct_table_header;
|
||||
|
|
|
|||
|
|
@ -709,7 +709,6 @@ static struct ctl_table hpet_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct ctl_table_header *sysctl_header;
|
||||
|
|
|
|||
|
|
@ -656,7 +656,6 @@ static struct ctl_table ipmi_table[] = {
|
|||
.maxlen = sizeof(poweroff_powercycle),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec },
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct ctl_table_header *ipmi_table_header;
|
||||
|
|
|
|||
|
|
@ -1683,7 +1683,6 @@ static struct ctl_table random_table[] = {
|
|||
.mode = 0444,
|
||||
.proc_handler = proc_do_uuid,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -4836,7 +4836,6 @@ static struct ctl_table oa_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = &oa_sample_rate_hard_limit,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static u32 num_perf_groups_per_gt(struct intel_gt *gt)
|
||||
|
|
|
|||
|
|
@ -148,7 +148,6 @@ static struct ctl_table hv_ctl_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int hv_die_panic_notify_crash(struct notifier_block *self,
|
||||
|
|
|
|||
|
|
@ -111,7 +111,6 @@ static struct ctl_table iwcm_ctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ static struct ctl_table ucma_ctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct ucma_file {
|
||||
|
|
|
|||
|
|
@ -236,7 +236,6 @@ static struct ctl_table mac_hid_files[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct ctl_table_header *mac_hid_sysctl_header;
|
||||
|
|
|
|||
|
|
@ -304,7 +304,6 @@ static struct ctl_table raid_table[] = {
|
|||
.mode = S_IRUGO|S_IWUSR,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int start_readonly;
|
||||
|
|
|
|||
|
|
@ -110,7 +110,6 @@ static struct ctl_table xpc_sys_xpc_hb[] = {
|
|||
.proc_handler = proc_dointvec_minmax,
|
||||
.extra1 = &xpc_hb_check_min_interval,
|
||||
.extra2 = &xpc_hb_check_max_interval},
|
||||
{}
|
||||
};
|
||||
static struct ctl_table xpc_sys_xpc[] = {
|
||||
{
|
||||
|
|
@ -121,7 +120,6 @@ static struct ctl_table xpc_sys_xpc[] = {
|
|||
.proc_handler = proc_dointvec_minmax,
|
||||
.extra1 = &xpc_disengage_min_timelimit,
|
||||
.extra2 = &xpc_disengage_max_timelimit},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct ctl_table_header *xpc_sysctl;
|
||||
|
|
|
|||
|
|
@ -1963,7 +1963,6 @@ static const struct ctl_table vrf_table[] = {
|
|||
/* set by the vrf_netns_init */
|
||||
.extra1 = NULL,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
static int vrf_netns_init_sysctl(struct net *net, struct netns_vrf *nn_vrf)
|
||||
|
|
|
|||
|
|
@ -259,8 +259,12 @@ PARPORT_MAX_SPINTIME_VALUE;
|
|||
struct parport_sysctl_table {
|
||||
struct ctl_table_header *port_header;
|
||||
struct ctl_table_header *devices_header;
|
||||
struct ctl_table vars[12];
|
||||
struct ctl_table device_dir[2];
|
||||
#ifdef CONFIG_PARPORT_1284
|
||||
struct ctl_table vars[10];
|
||||
#else
|
||||
struct ctl_table vars[5];
|
||||
#endif /* IEEE 1284 support */
|
||||
struct ctl_table device_dir[1];
|
||||
};
|
||||
|
||||
static const struct parport_sysctl_table parport_sysctl_template = {
|
||||
|
|
@ -341,7 +345,6 @@ static const struct parport_sysctl_table parport_sysctl_template = {
|
|||
.proc_handler = do_autoprobe
|
||||
},
|
||||
#endif /* IEEE 1284 support */
|
||||
{}
|
||||
},
|
||||
{
|
||||
{
|
||||
|
|
@ -351,19 +354,14 @@ static const struct parport_sysctl_table parport_sysctl_template = {
|
|||
.mode = 0444,
|
||||
.proc_handler = do_active_device
|
||||
},
|
||||
{}
|
||||
},
|
||||
};
|
||||
|
||||
struct parport_device_sysctl_table
|
||||
{
|
||||
struct ctl_table_header *sysctl_header;
|
||||
struct ctl_table vars[2];
|
||||
struct ctl_table device_dir[2];
|
||||
struct ctl_table devices_root_dir[2];
|
||||
struct ctl_table port_dir[2];
|
||||
struct ctl_table parport_dir[2];
|
||||
struct ctl_table dev_dir[2];
|
||||
struct ctl_table vars[1];
|
||||
struct ctl_table device_dir[1];
|
||||
};
|
||||
|
||||
static const struct parport_device_sysctl_table
|
||||
|
|
@ -379,7 +377,6 @@ parport_device_sysctl_template = {
|
|||
.extra1 = (void*) &parport_min_timeslice_value,
|
||||
.extra2 = (void*) &parport_max_timeslice_value
|
||||
},
|
||||
{}
|
||||
},
|
||||
{
|
||||
{
|
||||
|
|
@ -388,17 +385,13 @@ parport_device_sysctl_template = {
|
|||
.maxlen = 0,
|
||||
.mode = 0555,
|
||||
},
|
||||
{}
|
||||
}
|
||||
};
|
||||
|
||||
struct parport_default_sysctl_table
|
||||
{
|
||||
struct ctl_table_header *sysctl_header;
|
||||
struct ctl_table vars[3];
|
||||
struct ctl_table default_dir[2];
|
||||
struct ctl_table parport_dir[2];
|
||||
struct ctl_table dev_dir[2];
|
||||
struct ctl_table vars[2];
|
||||
};
|
||||
|
||||
static struct parport_default_sysctl_table
|
||||
|
|
@ -423,7 +416,6 @@ parport_default_sysctl_table = {
|
|||
.extra1 = (void*) &parport_min_spintime_value,
|
||||
.extra2 = (void*) &parport_max_spintime_value
|
||||
},
|
||||
{}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -443,7 +435,9 @@ int parport_proc_register(struct parport *port)
|
|||
t->vars[0].data = &port->spintime;
|
||||
for (i = 0; i < 5; i++) {
|
||||
t->vars[i].extra1 = port;
|
||||
#ifdef CONFIG_PARPORT_1284
|
||||
t->vars[5 + i].extra2 = &port->probe_info[i];
|
||||
#endif /* IEEE 1284 support */
|
||||
}
|
||||
|
||||
port_name_len = strnlen(port->name, PARPORT_NAME_MAX_LEN);
|
||||
|
|
|
|||
|
|
@ -1175,7 +1175,6 @@ static struct ctl_table armv8_pmu_sysctl_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static void armv8_pmu_register_sysctl_table(void)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ static struct ctl_table scsi_table[] = {
|
|||
.maxlen = sizeof(scsi_logging_level),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec },
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct ctl_table_header *scsi_table_header;
|
||||
|
|
|
|||
|
|
@ -1650,7 +1650,6 @@ static struct ctl_table sg_sysctls[] = {
|
|||
.mode = 0444,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct ctl_table_header *hdr;
|
||||
|
|
|
|||
|
|
@ -3612,7 +3612,6 @@ static struct ctl_table tty_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ static struct ctl_table balloon_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -1576,7 +1576,6 @@ static const struct sysctl_alias sysctl_aliases[] = {
|
|||
{"hung_task_panic", "kernel.hung_task_panic" },
|
||||
{"numa_zonelist_order", "vm.numa_zonelist_order" },
|
||||
{"softlockup_all_cpu_backtrace", "kernel.softlockup_all_cpu_backtrace" },
|
||||
{"softlockup_panic", "kernel.softlockup_panic" },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
@ -1592,6 +1591,13 @@ static const char *sysctl_find_alias(char *param)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
bool sysctl_is_alias(char *param)
|
||||
{
|
||||
const char *alias = sysctl_find_alias(param);
|
||||
|
||||
return alias != NULL;
|
||||
}
|
||||
|
||||
/* Set sysctl value passed on kernel command line. */
|
||||
static int process_sysctl_arg(char *param, char *val,
|
||||
const char *unused, void *arg)
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ extern void __register_sysctl_init(const char *path, struct ctl_table *table,
|
|||
extern struct ctl_table_header *register_sysctl_mount_point(const char *path);
|
||||
|
||||
void do_sysctl_args(void);
|
||||
bool sysctl_is_alias(char *param);
|
||||
int do_proc_douintvec(struct ctl_table *table, int write,
|
||||
void *buffer, size_t *lenp, loff_t *ppos,
|
||||
int (*conv)(unsigned long *lvalp,
|
||||
|
|
@ -287,6 +288,11 @@ static inline void setup_sysctl_set(struct ctl_table_set *p,
|
|||
static inline void do_sysctl_args(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool sysctl_is_alias(char *param)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_SYSCTL */
|
||||
|
||||
int sysctl_max_threads(struct ctl_table *table, int write, void *buffer,
|
||||
|
|
|
|||
|
|
@ -530,6 +530,10 @@ static int __init unknown_bootoption(char *param, char *val,
|
|||
{
|
||||
size_t len = strlen(param);
|
||||
|
||||
/* Handle params aliased to sysctls */
|
||||
if (sysctl_is_alias(param))
|
||||
return 0;
|
||||
|
||||
repair_env_string(param, val);
|
||||
|
||||
/* Handle obsolete-style parameters */
|
||||
|
|
|
|||
|
|
@ -283,6 +283,13 @@ static DEFINE_PER_CPU(struct hrtimer, watchdog_hrtimer);
|
|||
static DEFINE_PER_CPU(bool, softlockup_touch_sync);
|
||||
static unsigned long soft_lockup_nmi_warn;
|
||||
|
||||
static int __init softlockup_panic_setup(char *str)
|
||||
{
|
||||
softlockup_panic = simple_strtoul(str, NULL, 0);
|
||||
return 1;
|
||||
}
|
||||
__setup("softlockup_panic=", softlockup_panic_setup);
|
||||
|
||||
static int __init nowatchdog_setup(char *str)
|
||||
{
|
||||
watchdog_user_enabled = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue