sched/isolation: Allow "isolcpus=" to skip unknown sub-parameters
The "isolcpus=" parameter allows sub-parameters before the cpulist is specified, and if the parser detects an unknown sub-parameters the whole parameter will be ignored. This design is incompatible with itself when new sub-parameters are added. An older kernel will not recognize the new sub-parameter and will invalidate the whole parameter so the CPU isolation will not take effect. It emits a warning: isolcpus: Error, unknown flag The better and compatible way is to allow "isolcpus=" to skip unknown sub-parameters, so that even if new sub-parameters are added an older kernel will still be able to behave as usual even if with the new sub-parameter specified on the command line. Ideally this should have been there when the first sub-parameter for "isolcpus=" was introduced. Suggested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20200403223517.406353-1-peterx@redhat.com
This commit is contained in:
parent
8f3d9f3542
commit
3662daf023
|
@ -149,6 +149,9 @@ __setup("nohz_full=", housekeeping_nohz_full_setup);
|
|||
static int __init housekeeping_isolcpus_setup(char *str)
|
||||
{
|
||||
unsigned int flags = 0;
|
||||
bool illegal = false;
|
||||
char *par;
|
||||
int len;
|
||||
|
||||
while (isalpha(*str)) {
|
||||
if (!strncmp(str, "nohz,", 5)) {
|
||||
|
@ -169,8 +172,22 @@ static int __init housekeeping_isolcpus_setup(char *str)
|
|||
continue;
|
||||
}
|
||||
|
||||
pr_warn("isolcpus: Error, unknown flag\n");
|
||||
return 0;
|
||||
/*
|
||||
* Skip unknown sub-parameter and validate that it is not
|
||||
* containing an invalid character.
|
||||
*/
|
||||
for (par = str, len = 0; *str && *str != ','; str++, len++) {
|
||||
if (!isalpha(*str) && *str != '_')
|
||||
illegal = true;
|
||||
}
|
||||
|
||||
if (illegal) {
|
||||
pr_warn("isolcpus: Invalid flag %.*s\n", len, par);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pr_info("isolcpus: Skipped unknown flag %.*s\n", len, par);
|
||||
str++;
|
||||
}
|
||||
|
||||
/* Default behaviour for isolcpus without flags */
|
||||
|
|
Loading…
Reference in New Issue