0001 .. include:: ../disclaimer-ita.rst
0002
0003 :Original: :ref:`Documentation/process/submit-checklist.rst <submitchecklist>`
0004 :Translator: Federico Vaga <federico.vaga@vaga.pv.it>
0005
0006 .. _it_submitchecklist:
0007
0008 Lista delle verifiche da fare prima di inviare una patch per il kernel Linux
0009 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0010
0011 Qui troverete una lista di cose che uno sviluppatore dovrebbe fare per
0012 vedere le proprie patch accettate più rapidamente.
0013
0014 Tutti questi punti integrano la documentazione fornita riguardo alla
0015 sottomissione delle patch, in particolare
0016 :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`.
0017
0018 1) Se state usando delle funzionalità del kernel allora includete (#include)
0019 i file che le dichiarano/definiscono. Non dipendente dal fatto che un file
0020 d'intestazione include anche quelli usati da voi.
0021
0022 2) Compilazione pulita:
0023
0024 a) con le opzioni ``CONFIG`` negli stati ``=y``, ``=m`` e ``=n``. Nessun
0025 avviso/errore di ``gcc`` e nessun avviso/errore dal linker.
0026
0027 b) con ``allnoconfig``, ``allmodconfig``
0028
0029 c) quando si usa ``O=builddir``
0030
0031 d) Qualsiasi modifica in Documentation/ deve compilare con successo senza
0032 avvisi o errori. Usare ``make htmldocs`` o ``make pdfdocs`` per verificare
0033 e correggere i problemi
0034
0035 3) Compilare per diverse architetture di processore usando strumenti per
0036 la cross-compilazione o altri.
0037
0038 4) Una buona architettura per la verifica della cross-compilazione è la ppc64
0039 perché tende ad usare ``unsigned long`` per le quantità a 64-bit.
0040
0041 5) Controllate lo stile del codice della vostra patch secondo le direttive
0042 scritte in :ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`.
0043 Prima dell'invio della patch, usate il verificatore di stile
0044 (``script/checkpatch.pl``) per scovare le violazioni più semplici.
0045 Dovreste essere in grado di giustificare tutte le violazioni rimanenti nella
0046 vostra patch.
0047
0048 6) Le opzioni ``CONFIG``, nuove o modificate, non scombussolano il menu
0049 di configurazione e sono preimpostate come disabilitate a meno che non
0050 soddisfino i criteri descritti in ``Documentation/kbuild/kconfig-language.rst``
0051 alla punto "Voci di menu: valori predefiniti".
0052
0053 7) Tutte le nuove opzioni ``Kconfig`` hanno un messaggio di aiuto.
0054
0055 8) La patch è stata accuratamente revisionata rispetto alle più importanti
0056 configurazioni ``Kconfig``. Questo è molto difficile da fare
0057 correttamente - un buono lavoro di testa sarà utile.
0058
0059 9) Verificare con sparse.
0060
0061 10) Usare ``make checkstack`` e correggere tutti i problemi rilevati.
0062
0063 .. note::
0064
0065 ``checkstack`` non evidenzia esplicitamente i problemi, ma una funzione
0066 che usa più di 512 byte sullo stack è una buona candidata per una
0067 correzione.
0068
0069 11) Includete commenti :ref:`kernel-doc <kernel_doc>` per documentare API
0070 globali del kernel. Usate ``make htmldocs`` o ``make pdfdocs`` per
0071 verificare i commenti :ref:`kernel-doc <kernel_doc>` ed eventualmente
0072 correggerli.
0073
0074 12) La patch è stata verificata con le seguenti opzioni abilitate
0075 contemporaneamente: ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``,
0076 ``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``,
0077 ``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP``,
0078 ``CONFIG_PROVE_RCU`` e ``CONFIG_DEBUG_OBJECTS_RCU_HEAD``.
0079
0080 13) La patch è stata compilata e verificata in esecuzione con, e senza,
0081 le opzioni ``CONFIG_SMP`` e ``CONFIG_PREEMPT``.
0082
0083 14) Se la patch ha effetti sull'IO dei dischi, eccetera: allora dev'essere
0084 verificata con, e senza, l'opzione ``CONFIG_LBDAF``.
0085
0086 15) Tutti i percorsi del codice sono stati verificati con tutte le funzionalità
0087 di lockdep abilitate.
0088
0089 16) Tutti i nuovi elementi in ``/proc`` sono documentati in ``Documentation/``.
0090
0091 17) Tutti i nuovi parametri d'avvio del kernel sono documentati in
0092 ``Documentation/admin-guide/kernel-parameters.rst``.
0093
0094 18) Tutti i nuovi parametri dei moduli sono documentati con ``MODULE_PARM_DESC()``.
0095
0096 19) Tutte le nuove interfacce verso lo spazio utente sono documentate in
0097 ``Documentation/ABI/``. Leggete ``Documentation/ABI/README`` per maggiori
0098 informazioni. Le patch che modificano le interfacce utente dovrebbero
0099 essere inviate in copia anche a linux-api@vger.kernel.org.
0100
0101 20) La patch è stata verificata con l'iniezione di fallimenti in slab e
0102 nell'allocazione di pagine. Vedere ``Documentation/fault-injection/``.
0103
0104 Se il nuovo codice è corposo, potrebbe essere opportuno aggiungere
0105 l'iniezione di fallimenti specifici per il sottosistema.
0106
0107 21) Il nuovo codice è stato compilato con ``gcc -W`` (usate
0108 ``make KCFLAGS=-W``). Questo genererà molti avvisi, ma è ottimo
0109 per scovare bachi come "warning: comparison between signed and unsigned".
0110
0111 22) La patch è stata verificata dopo essere stata inclusa nella serie di patch
0112 -mm; questo al fine di assicurarsi che continui a funzionare assieme a
0113 tutte le altre patch in coda e i vari cambiamenti nei sottosistemi VM, VFS
0114 e altri.
0115
0116 23) Tutte le barriere di sincronizzazione {per esempio, ``barrier()``,
0117 ``rmb()``, ``wmb()``} devono essere accompagnate da un commento nei
0118 sorgenti che ne spieghi la logica: cosa fanno e perché.
0119
0120 24) Se la patch aggiunge nuove chiamate ioctl, allora aggiornate
0121 ``Documentation/userspace-api/ioctl/ioctl-number.rst``.
0122
0123 25) Se il codice che avete modificato dipende o usa una qualsiasi interfaccia o
0124 funzionalità del kernel che è associata a uno dei seguenti simboli
0125 ``Kconfig``, allora verificate che il kernel compili con diverse
0126 configurazioni dove i simboli sono disabilitati e/o ``=m`` (se c'è la
0127 possibilità) [non tutti contemporaneamente, solo diverse combinazioni
0128 casuali]:
0129
0130 ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``,
0131 ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``,
0132 ``CONFIG_NET``, ``CONFIG_INET=n`` (ma l'ultimo con ``CONFIG_NET=y``).