1*6a6267a2SDaniel Pereira.. SPDX-License-Identifier: GPL-2.0 2*6a6267a2SDaniel Pereira 3*6a6267a2SDaniel Pereira============================================================== 4*6a6267a2SDaniel PereiraLista de verificação para submissão de patches do kernel Linux 5*6a6267a2SDaniel Pereira============================================================== 6*6a6267a2SDaniel Pereira 7*6a6267a2SDaniel PereiraAqui estão algumas coisas básicas que os desenvolvedores devem fazer se 8*6a6267a2SDaniel Pereiraquiserem ver suas submissões de patches de kernel aceitas mais rapidamente. 9*6a6267a2SDaniel Pereira 10*6a6267a2SDaniel PereiraEstas diretrizes vão além da documentação fornecida em 11*6a6267a2SDaniel Pereira:ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 12*6a6267a2SDaniel Pereirae em outros locais sobre o envio de patches para o kernel Linux. 13*6a6267a2SDaniel Pereira 14*6a6267a2SDaniel PereiraRevise seu código 15*6a6267a2SDaniel Pereira================= 16*6a6267a2SDaniel Pereira 17*6a6267a2SDaniel Pereira1) Se você usar um recurso, faça o #include do arquivo que define/declara 18*6a6267a2SDaniel Pereira esse recurso. Não dependa de outros arquivos de cabeçalho que incluam 19*6a6267a2SDaniel Pereira os que você usa de forma indireta. 20*6a6267a2SDaniel Pereira 21*6a6267a2SDaniel Pereira2) Verifique o estilo geral do seu patch conforme detalhado em 22*6a6267a2SDaniel Pereira :ref:`Documentation//process/coding-style.rst <codingstyle>`. 23*6a6267a2SDaniel Pereira 24*6a6267a2SDaniel Pereira3) Todas as barreiras de memória {por exemplo, ``barrier()``, ``rmb()``, 25*6a6267a2SDaniel Pereira ``wmb()``} precisam de um comentário no código-fonte que explique a 26*6a6267a2SDaniel Pereira lógica do que estão fazendo e o porquê. 27*6a6267a2SDaniel Pereira 28*6a6267a2SDaniel PereiraRevise as alterações do Kconfig 29*6a6267a2SDaniel Pereira=============================== 30*6a6267a2SDaniel Pereira 31*6a6267a2SDaniel Pereira1) Quaisquer novas ou modificadas opções de ``CONFIG`` não bagunçam o 32*6a6267a2SDaniel Pereira menu de configuração e têm 'desativado' (off) como padrão, a menos que 33*6a6267a2SDaniel Pereira atendam aos critérios de exceção documentados em 34*6a6267a2SDaniel Pereira ``Documentation/kbuild/kconfig-language.rst``, atributos de menu: valor 35*6a6267a2SDaniel Pereira padrão. 36*6a6267a2SDaniel Pereira 37*6a6267a2SDaniel Pereira2) Todas as novas opções de ``Kconfig`` possuem texto de ajuda. 38*6a6267a2SDaniel Pereira 39*6a6267a2SDaniel Pereira3) Foram cuidadosamente revisadas com relação às combinações relevantes de 40*6a6267a2SDaniel Pereira ``Kconfig``. Isso é muito difícil de acertar apenas com testes --- exige 41*6a6267a2SDaniel Pereira capacidade de raciocínio. 42*6a6267a2SDaniel Pereira pays off here. 43*6a6267a2SDaniel Pereira 44*6a6267a2SDaniel PereiraForneça documentação 45*6a6267a2SDaniel Pereira==================== 46*6a6267a2SDaniel Pereira 47*6a6267a2SDaniel Pereira1) Inclua :ref:`kernel-doc <kernel_doc>` para documentar as APIs globais 48*6a6267a2SDaniel Pereira do kernel. (Não é obrigatório para funções estáticas, mas também é 49*6a6267a2SDaniel Pereira aceitável nelas.) 50*6a6267a2SDaniel Pereira 51*6a6267a2SDaniel Pereira2) Todas as novas entradas em ``/proc`` devem ser documentadas sob 52*6a6267a2SDaniel Pereira ``Documentation/``. 53*6a6267a2SDaniel Pereira 54*6a6267a2SDaniel Pereira3) Todos os novos parâmetros de inicialização (boot) do kernel devem ser 55*6a6267a2SDaniel Pereira documentados em ``Documentation/admin-guide/kernel-parameters.rst``. 56*6a6267a2SDaniel Pereira 57*6a6267a2SDaniel Pereira4) Todos os novos parâmetros de módulo devem ser documentados com 58*6a6267a2SDaniel Pereira ``MODULE_PARM_DESC()``. 59*6a6267a2SDaniel Pereira 60*6a6267a2SDaniel Pereira5) Todas as novas interfaces com o espaço de usuário (userspace) devem ser 61*6a6267a2SDaniel Pereira documentadas em ``Documentation/ABI/``. Consulte 62*6a6267a2SDaniel Pereira ``Documentation/admin-guide/abi.rst`` (ou ``Documentation/ABI/README``) 63*6a6267a2SDaniel Pereira para obter mais informações. Patches que alteram interfaces de espaço 64*6a6267a2SDaniel Pereira de usuário devem incluir em cópia (CC) linux-api@vger.kernel.org. 65*6a6267a2SDaniel Pereira 66*6a6267a2SDaniel Pereira6) Se quaisquer ioctls forem adicionados pelo patch, atualize também 67*6a6267a2SDaniel Pereira ``Documentation/userspace-api/ioctl/ioctl-number.rst``. 68*6a6267a2SDaniel Pereira 69*6a6267a2SDaniel PereiraVerifique seu código com ferramentas 70*6a6267a2SDaniel Pereira==================================== 71*6a6267a2SDaniel Pereira 72*6a6267a2SDaniel Pereira1) Verifique se há violações triviais com o verificador de estilo de patch 73*6a6267a2SDaniel Pereira antes do envio (``scripts/checkpatch.pl``). Você deve ser capaz de 74*6a6267a2SDaniel Pereira justificar todas as violações que permanecerem no seu patch. 75*6a6267a2SDaniel Pereira 76*6a6267a2SDaniel Pereira2) Faça uma verificação limpa com o sparse. 77*6a6267a2SDaniel Pereira 78*6a6267a2SDaniel Pereira3) Use ``make checkstack`` e corrija quaisquer problemas encontrados por ele. 79*6a6267a2SDaniel Pereira Observe que o ``checkstack`` não aponta problemas explicitamente, mas 80*6a6267a2SDaniel Pereira qualquer função individual que utilize mais de 512 bytes na pilha é uma 81*6a6267a2SDaniel Pereira candidata a alteração. 82*6a6267a2SDaniel Pereira 83*6a6267a2SDaniel PereiraCompile seu código 84*6a6267a2SDaniel Pereira================== 85*6a6267a2SDaniel Pereira 86*6a6267a2SDaniel Pereira1) Compila de forma limpa: 87*6a6267a2SDaniel Pereira 88*6a6267a2SDaniel Pereira a) com as opções de ``CONFIG`` aplicáveis ou modificadas definidas como 89*6a6267a2SDaniel Pereira ``=y``, ``=m`` e ``=n``. Sem avisos/erros do ``gcc``, sem avisos/erros do 90*6a6267a2SDaniel Pereira vinculador (linker). 91*6a6267a2SDaniel Pereira 92*6a6267a2SDaniel Pereira b) Passa em ``allnoconfig``, ``allmodconfig`` 93*6a6267a2SDaniel Pereira 94*6a6267a2SDaniel Pereira c) Compila com sucesso ao usar ``O=builddir`` 95*6a6267a2SDaniel Pereira 96*6a6267a2SDaniel Pereira d) Quaisquer alterações em Documentation/ compilam com sucesso sem novos 97*6a6267a2SDaniel Pereira avisos/erros. Use ``make htmldocs`` ou ``make pdfdocs`` para verificar 98*6a6267a2SDaniel Pereira a compilação e corrigir quaisquer problemas. 99*6a6267a2SDaniel Pereira 100*6a6267a2SDaniel Pereira2) Compila em múltiplas arquiteturas de CPU usando ferramentas locais de 101*6a6267a2SDaniel Pereira compilação cruzada (cross-compile) ou alguma outra fazenda de compilação 102*6a6267a2SDaniel Pereira (build farm). 103*6a6267a2SDaniel Pereira Observe que testar em arquiteturas de diferentes tamanhos de palavra 104*6a6267a2SDaniel Pereira (32 e 64 bits) e diferentes endianness (big- e little-endian) é eficaz 105*6a6267a2SDaniel Pereira para capturar vários problemas de portabilidade decorrentes de falsas 106*6a6267a2SDaniel Pereira suposições sobre o intervalo de quantidade representável, alinhamento 107*6a6267a2SDaniel Pereira de dados ou endianness, entre outros. 108*6a6267a2SDaniel Pereira 109*6a6267a2SDaniel Pereira3) O novo código adicionado foi compilado com ``gcc -W`` (use 110*6a6267a2SDaniel Pereira ``make KCFLAGS=-W``). Isso gerará muito ruído, mas é bom para encontrar 111*6a6267a2SDaniel Pereira bugs como "warning: comparison between signed and unsigned". 112*6a6267a2SDaniel Pereira 113*6a6267a2SDaniel Pereira4) Se o seu código-fonte modificado depender ou usar quaisquer APIs ou 114*6a6267a2SDaniel Pereira recursos do kernel relacionados aos seguintes símbolos do ``Kconfig``, 115*6a6267a2SDaniel Pereira teste múltiplas compilações com os símbolos relacionados do ``Kconfig`` 116*6a6267a2SDaniel Pereira desativados e/ou definidos como ``=m`` (se essa opção estiver disponível) 117*6a6267a2SDaniel Pereira [não todos ao mesmo tempo, apenas combinações variadas/aleatórias deles]: 118*6a6267a2SDaniel Pereira 119*6a6267a2SDaniel Pereira ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, 120*6a6267a2SDaniel Pereira ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``, 121*6a6267a2SDaniel Pereira ``CONFIG_NET``, ``CONFIG_INET=n`` (mas este último com ``CONFIG_NET=y``). 122*6a6267a2SDaniel Pereira 123*6a6267a2SDaniel PereiraTeste seu código 124*6a6267a2SDaniel Pereira================ 125*6a6267a2SDaniel Pereira 126*6a6267a2SDaniel Pereira1) Foi testado com ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``, 127*6a6267a2SDaniel Pereira ``CONFIG_SLUB_DEBUG``, ``CONFIG_DEBUG_PAGEALLOC``, 128*6a6267a2SDaniel Pereira ``CONFIG_DEBUG_MUTEXES``, ``CONFIG_DEBUG_SPINLOCK``, 129*6a6267a2SDaniel Pereira ``CONFIG_DEBUG_ATOMIC_SLEEP``, ``CONFIG_PROVE_RCU`` e 130*6a6267a2SDaniel Pereira ``CONFIG_DEBUG_OBJECTS_RCU_HEAD`` todos habilitados simultaneamente. 131*6a6267a2SDaniel Pereira 132*6a6267a2SDaniel Pereira2) Foi testado em tempo de compilação e de execução com e sem ``CONFIG_SMP`` 133*6a6267a2SDaniel Pereira e ``CONFIG_PREEMPT``. 134*6a6267a2SDaniel Pereira 135*6a6267a2SDaniel Pereira3) Todos os caminhos de código foram executados com todos os recursos de 136*6a6267a2SDaniel Pereira lockdep ativados. 137*6a6267a2SDaniel Pereira 138*6a6267a2SDaniel Pereira4) Foi verificado com a injeção de falhas de pelo menos slab e alocação de 139*6a6267a2SDaniel Pereira páginas. Consulte ``Documentation/fault-injection/``. 140*6a6267a2SDaniel Pereira Se o novo código for substancial, a adição de injeção de falhas específica 141*6a6267a2SDaniel Pereira do subsistema pode ser apropriada. 142*6a6267a2SDaniel Pereira 143*6a6267a2SDaniel Pereira5) Testado com a tag mais recente do linux-next para garantir que ele ainda 144*6a6267a2SDaniel Pereira funcione com todos os outros patches enfileirados e com várias alterações 145*6a6267a2SDaniel Pereira na VM, VFS e outros subsistemas. 146