| .. include:: ../disclaimer-ita.rst |
| |
| :Original: :ref:`Documentation/process/submit-checklist.rst <submitchecklist>` |
| :Translator: Federico Vaga <federico.vaga@vaga.pv.it> |
| |
| .. _it_submitchecklist: |
| |
| Lista delle verifiche da fare prima di inviare una patch per il kernel Linux |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Qui troverete una lista di cose che uno sviluppatore dovrebbe fare per |
| vedere le proprie patch accettate più rapidamente. |
| |
| Tutti questi punti integrano la documentazione fornita riguardo alla |
| sottomissione delle patch, in particolare |
| :ref:`Documentation/translations/it_IT/process/submitting-patches.rst <it_submittingpatches>`. |
| |
| 1) Se state usando delle funzionalità del kernel allora includete (#include) |
| i file che le dichiarano/definiscono. Non dipendente dal fatto che un file |
| d'intestazione include anche quelli usati da voi. |
| |
| 2) Compilazione pulita: |
| |
| a) con le opzioni ``CONFIG`` negli stati ``=y``, ``=m`` e ``=n``. Nessun |
| avviso/errore di ``gcc`` e nessun avviso/errore dal linker. |
| |
| b) con ``allnoconfig``, ``allmodconfig`` |
| |
| c) quando si usa ``O=builddir`` |
| |
| d) Qualsiasi modifica in Documentation/ deve compilare con successo senza |
| avvisi o errori. Usare ``make htmldocs`` o ``make pdfdocs`` per verificare |
| e correggere i problemi |
| |
| 3) Compilare per diverse architetture di processore usando strumenti per |
| la cross-compilazione o altri. |
| |
| 4) Una buona architettura per la verifica della cross-compilazione è la ppc64 |
| perché tende ad usare ``unsigned long`` per le quantità a 64-bit. |
| |
| 5) Controllate lo stile del codice della vostra patch secondo le direttive |
| scritte in :ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`. |
| Prima dell'invio della patch, usate il verificatore di stile |
| (``script/checkpatch.pl``) per scovare le violazioni più semplici. |
| Dovreste essere in grado di giustificare tutte le violazioni rimanenti nella |
| vostra patch. |
| |
| 6) Le opzioni ``CONFIG``, nuove o modificate, non scombussolano il menu |
| di configurazione e sono preimpostate come disabilitate a meno che non |
| soddisfino i criteri descritti in ``Documentation/kbuild/kconfig-language.rst`` |
| alla punto "Voci di menu: valori predefiniti". |
| |
| 7) Tutte le nuove opzioni ``Kconfig`` hanno un messaggio di aiuto. |
| |
| 8) La patch è stata accuratamente revisionata rispetto alle più importanti |
| configurazioni ``Kconfig``. Questo è molto difficile da fare |
| correttamente - un buono lavoro di testa sarà utile. |
| |
| 9) Verificare con sparse. |
| |
| 10) Usare ``make checkstack`` e correggere tutti i problemi rilevati. |
| |
| .. note:: |
| |
| ``checkstack`` non evidenzia esplicitamente i problemi, ma una funzione |
| che usa più di 512 byte sullo stack è una buona candidata per una |
| correzione. |
| |
| 11) Includete commenti :ref:`kernel-doc <kernel_doc>` per documentare API |
| globali del kernel. Usate ``make htmldocs`` o ``make pdfdocs`` per |
| verificare i commenti :ref:`kernel-doc <kernel_doc>` ed eventualmente |
| correggerli. |
| |
| 12) La patch è stata verificata con le seguenti opzioni abilitate |
| contemporaneamente: ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``, |
| ``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``, |
| ``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP``, |
| ``CONFIG_PROVE_RCU`` e ``CONFIG_DEBUG_OBJECTS_RCU_HEAD``. |
| |
| 13) La patch è stata compilata e verificata in esecuzione con, e senza, |
| le opzioni ``CONFIG_SMP`` e ``CONFIG_PREEMPT``. |
| |
| 14) Se la patch ha effetti sull'IO dei dischi, eccetera: allora dev'essere |
| verificata con, e senza, l'opzione ``CONFIG_LBDAF``. |
| |
| 15) Tutti i percorsi del codice sono stati verificati con tutte le funzionalità |
| di lockdep abilitate. |
| |
| 16) Tutti i nuovi elementi in ``/proc`` sono documentati in ``Documentation/``. |
| |
| 17) Tutti i nuovi parametri d'avvio del kernel sono documentati in |
| ``Documentation/admin-guide/kernel-parameters.rst``. |
| |
| 18) Tutti i nuovi parametri dei moduli sono documentati con ``MODULE_PARM_DESC()``. |
| |
| 19) Tutte le nuove interfacce verso lo spazio utente sono documentate in |
| ``Documentation/ABI/``. Leggete ``Documentation/ABI/README`` per maggiori |
| informazioni. Le patch che modificano le interfacce utente dovrebbero |
| essere inviate in copia anche a linux-api@vger.kernel.org. |
| |
| 20) La patch è stata verificata con l'iniezione di fallimenti in slab e |
| nell'allocazione di pagine. Vedere ``Documentation/fault-injection/``. |
| |
| Se il nuovo codice è corposo, potrebbe essere opportuno aggiungere |
| l'iniezione di fallimenti specifici per il sottosistema. |
| |
| 21) Il nuovo codice è stato compilato con ``gcc -W`` (usate |
| ``make KCFLAGS=-W``). Questo genererà molti avvisi, ma è ottimo |
| per scovare bachi come "warning: comparison between signed and unsigned". |
| |
| 22) La patch è stata verificata dopo essere stata inclusa nella serie di patch |
| -mm; questo al fine di assicurarsi che continui a funzionare assieme a |
| tutte le altre patch in coda e i vari cambiamenti nei sottosistemi VM, VFS |
| e altri. |
| |
| 23) Tutte le barriere di sincronizzazione {per esempio, ``barrier()``, |
| ``rmb()``, ``wmb()``} devono essere accompagnate da un commento nei |
| sorgenti che ne spieghi la logica: cosa fanno e perché. |
| |
| 24) Se la patch aggiunge nuove chiamate ioctl, allora aggiornate |
| ``Documentation/userspace-api/ioctl/ioctl-number.rst``. |
| |
| 25) Se il codice che avete modificato dipende o usa una qualsiasi interfaccia o |
| funzionalità del kernel che è associata a uno dei seguenti simboli |
| ``Kconfig``, allora verificate che il kernel compili con diverse |
| configurazioni dove i simboli sono disabilitati e/o ``=m`` (se c'è la |
| possibilità) [non tutti contemporaneamente, solo diverse combinazioni |
| casuali]: |
| |
| ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, |
| ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``, |
| ``CONFIG_NET``, ``CONFIG_INET=n`` (ma l'ultimo con ``CONFIG_NET=y``). |