mirror of
https://github.com/torvalds/linux.git
synced 2024-12-24 11:51:27 +00:00
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 ...
This commit is contained in:
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
Block a user