Se a linha de comando do kernel contém várias configurações para o mesmo parâmetro, como elas são avaliadas?
Exemplo:
nohz=off ... nohz=on
Qual configuração 'ganha'? O último?
E a lógica de avaliação é a mesma para cada parâmetro?
Se a linha de comando do kernel contém várias configurações para o mesmo parâmetro, como elas são avaliadas?
Exemplo:
nohz=off ... nohz=on
Qual configuração 'ganha'? O último?
E a lógica de avaliação é a mesma para cada parâmetro?
Deve ser o último.
Os parâmetros são tratados por
init/main.c
, que usaparse_args()
fromkernel/params.c
, que os varre em série. Para cada um que ele invocaparse_one()
que acaba chamando um callback dependendo do parâmetro.Como um retorno de chamada está envolvido, todos os parâmetros podem afetar seu sistema, independentemente de sua ordem.
Para
nohz
, o parâmetro é registrado e tratado porkernel/time/time-sched.c
:Portanto, ele define e desativa o sinalizador. Se não houver mais nada no meio, então não deve ter efeito.
Os desenvolvedores do kernel são pessoas razoáveis e não adicionariam parâmetros cujo comportamento depende da ordem em que são passados, então eu suponho que na maioria dos casos a distância dos dois não desempenhará um papel.
... mas ...
parse_args()
também tem um cheque:o que indica que o retorno de chamada de um sinalizador pode fazer coisas não triviais, como habilitar irqs.
Essa lógica/varredura também verifica os parâmetros do módulo (ou seja, parâmetros do kernel na forma de modulename.flag=xxx) e eu não confiaria cegamente no que os módulos escolhem fazer.