Linux Kernel patch submission checklist ¸®´ª½º Ä¿³Î ÆÐÄ¡ Á¦Ãâ üũ¸®½ºÆ® ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here are some basic things that developers should do if they want to see their kernel patch submissions accepted more quickly. ÀÌ ¹®¼­´Â Ä¿³Î °³¹ßÀÚµéÀÌ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Ä¿³Î ÆÐÄ¡¸¦ Á¦ÃâÇÒ ¶§ Á¦ÃâÇÑ Ä¿³Î ÆÐÄ¡°¡ ºü¸£°Ô ¹Þ¾Æµé¿©Áö´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¼³¸íÇÑ´Ù. These are all above and beyond the documentation that is provided in Documentation/SubmittingPatches and elsewhere regarding submitting Linux kernel patches. ¿©±â¿¡¼­´Â Documentation/SubmittingPatches³ª ´Ù¸¥ °÷¿¡¼­ ¼³¸íÇÑ ¸®´ª½º Ä¿³Î ÆÐÄ¡ Á¦Ãâ ¹æ¹ý ÀÌ¿ÜÀÇ »çÇ×À» ´Ù·ê °ÍÀÌ´Ù. 1: Builds cleanly with applicable or modified CONFIG options =y, =m, and =n. No gcc warnings/errors, no linker warnings/errors. 1: Ä¿³Î ÄÁÇÇ±× ¿É¼ÇÀ» =y, =m, =n Áß¿¡ ¾î¶°ÇÑ °ÍÀ¸·Î ÇÏ´õ¶óµµ gcc ÄÄÆÄÀÏ, ¸µÅ© Áß¿¡ °æ°í ȤÀº ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. 2: Passes allnoconfig, allmodconfig 2: allnoconfig, allmodconfig ¼³Á¤ ½Ã¿¡µµ ÄÄÆÄÀÏ ½Ã¿¡ °æ°í ȤÀº ¿¡·¯°¡ ¾ø¾î¾ß ÇÑ´Ù. 3: Builds on multiple CPU architectures by using local cross-compile tools or something like PLM at OSDL. 3: OSDLÀÇ PLMÀ̳ª ´Ù¸¥ Å©·Î½º ÄÄÆÄÀÏ ÅøÀ» »ç¿ëÇÏ¿© ´Ù¾çÇÑ CPU »ó¿¡¼­ ºôµå¸¦ Å×½ºÆ® ÇØ¾ß ÇÑ´Ù. 4: ppc64 is a good architecture for cross-compilation checking because it tends to use `unsigned long' for 64-bit quantities. 4: ppc64´Â 'unsigned long'À» 64ºñÆ® º¯¼ö·Î »ç¿ëÇÏ´Â °æÇâÀÌ Àֱ⠶§¹®¿¡ Å©·Î½º ÄÄÆÄÀÏÀ» üũÇϱ⿡ ÁÁÀº ¾ÆÅ°ÅØÃÄÀÌ´Ù. 5: Matches kernel coding style(!) 5: Ä¿³Î ÄÚµù ½ºÅ¸ÀÏÀ» µû¶ó¾ß ÇÑ´Ù. 6: Any new or modified CONFIG options don't muck up the config menu. 6: »õ·Ó°Ô Ãß°¡µÇ°Å³ª ¼öÁ¤µÈ CONFIG ¿É¼ÇÀÌ ±âÁ¸ÀÇ config ¸Þ´º¸¦ ±ú¶ß·Á¼­´Â ¾ÈµÈ´Ù. 7: All new Kconfig options have help text. 7: »õ·Ó°Ô Ãß°¡µÈ ¸ðµç Kconfig ¿É¼ÇÀº µµ¿ò¸»À» Á¦°øÇØ¾ß ÇÑ´Ù. 8: Has been carefully reviewed with respect to relevant Kconfig combinations. This is very hard to get right with testing -- brainpower pays off here. 8: Kconfig Á¶ÇÕÀÌ ÀûÀýÇÏ°Ô ÀÌ·ç¾îÁ³´ÂÁö ÁÖÀÇÇÏ¿© ÃæºÐÇÑ °ËÅ並 ÇØ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº ¸Å¿ì ¾î·Á¿î ÀÛ¾÷À̸ç ÃæºÐÇÑ Å×½ºÆ®¸¦ ÅëÇØ °ËÁõµÇ¾î¾ß ÇÑ´Ù. -- ¶Ù¾î³­ »ç¶÷µéÀÌ ÀÌ ÀÛ¾÷¿¡ ½Ã°£À» ÅõÀÚÇØ¾ß ÇÒ °ÍÀÌ´Ù. 9: Check cleanly with sparse. 9: ¾û¼ºÇÑ ºÎºÐµéÀ» ±ú²ýÇÏ°Ô ¼öÁ¤ÇÑ´Ù. 10: Use 'make checkstack' and 'make namespacecheck' and fix any problems that they find. Note: checkstack does not point out problems explicitly, but any one function that uses more than 512 bytes on the stack is a candidate for change. 10: 'make checkstack'°ú 'make namespacecheck'À» »ç¿ëÇÏ¿© ¹ß°ßµÈ ¹ö±×µéÀ» ¼öÁ¤ÇÑ´Ù. Note: checkstackÀÌ ¸ðµç ¹®Á¦¸¦ ¸í¹éÇÏ°Ô ¹ß°ßÇÏÁö´Â ¸øÇÏÁö¸¸ ½ºÅÃÀ» 512¹ÙÀÌÆ® ÀÌ»ó »ç¿ëÇÏ´Â ÇÔ¼ö¸¦ ¹ß°ßÇÏ¿© ¼öÁ¤Çϵµ·Ï ±Ç°íÇÒ °ÍÀÌ´Ù. 11: Include kernel-doc to document global kernel APIs. (Not required for static functions, but OK there also.) Use 'make htmldocs' or 'make mandocs' to check the kernel-doc and fix any issues. 11: Ä¿³Î API ¹®¼­¸¦ À§ÇÑ kernel-docÀ» ÀÛ¼ºÇÏ¿©¾ß ÇÑ´Ù. (Á¤Àû ÇÔ¼ö¸¦ À§ÇÑ ¹®¼­±îÁö ÀÛ¼ºÇÒ ÇÊ¿ä´Â ¾øÁö¸¸, ÀÛ¼ºÇÏ¿©µµ ¹®Á¦°¡ µÉ °ÍÀº ¾ø´Ù.) kernel-docÀÌ Á¦´ë·Î ÀÛ¼ºµÇ¾ú´ÂÁö üũÇϱâ À§Çؼ­ 'make htmldocs'¿Í 'make mandocs'¸¦ »ç¿ëÇÑ´Ù. 12: Has been tested with CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES, CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP all simultaneously enabled. 12: CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES, CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP ¿É¼ÇÀ» ¸ðµÎ ¼³Á¤ÇÏ¿© Ä¿ÆÄÀÏÇÑ ÈÄ Å×½ºÆ®¸¦ °ÅÃÄ¾ß ÇÑ´Ù. 13: Has been build- and runtime tested with and without CONFIG_SMP and CONFIG_PREEMPT. 13: CONFIG_SMP¿Í CONFIG_PREEMPT¸¦ Æ÷ÇÔÇÑ ºôµå/µ¿ÀÛ Å×½ºÆ®¿Í µÎ ¿É¼ÇÀ» Á¦°ÅÇÑ ºôµå/µ¿ÀÛ Å×½ºÆ® ¸ðµÎ¸¦ ¼öÇàÇØ¾ß ÇÑ´Ù. 14: If the patch affects IO/Disk, etc: has been tested with and without CONFIG_LBD. 14: ¸¸¾à ´ç½ÅÀÌ ÀÛ¼ºÇÑ ÆÐÄ¡°¡ IO/Disk³ª ±× ÀÌ¿ÜÀÇ °Í¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù¸é, CONFIG_LBD¸¦ Æ÷ÇÔÇÑ Å×½ºÆ®¿Í Æ÷ÇÔÇÏÁö ¾Ê´Â Å×½ºÆ®¸¦ ¼öÇàÇ϶ó. 15: All codepaths have been exercised with all lockdep features enabled. 16: All new /proc entries are documented under Documentation/ 16: »õ·Ó°Ô ÀÛ¼ºµÈ ¸ðµç /proc ¿£Æ®¸®µéÀº Documentation µð·ºÅ丮 ¾È¿¡ ¹®¼­È­ÇÑ´Ù. 17: All new kernel boot parameters are documented in Documentation/kernel-parameters.txt. 17: »õ·Ó°Ô ÀÛ¼ºµÈ ¸ðµç Ä¿³Î ºÎÆ® ÆĶó¹ÌÅ͵éÀº Documentation/kernel-parameters.txt ÆÄÀÏ¿¡ ¹®¼­È­ÇÑ´Ù. 18: All new module parameters are documented with MODULE_PARM_DESC() 18: »õ·Ó°Ô ÀÛ¼ºµÈ ¸ðµç ¸ðµâ ÆĶó¹ÌÅ͵éÀº MODULE_PARM_DESC() ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÏ¿© ¹®¼­È­ÇÑ´Ù. 19: All new userspace interfaces are documented in Documentation/ABI/. See Documentation/ABI/README for more information. 19: »õ·Ó°Ô ÀÛ¼ºµÈ ¸ðµç À¯Àú ¿µ¿ª ÀÎÅÍÆäÀ̽ºµéÀº Documentation/ABI/ µð·ºÅ丮¿¡ ¹®¼­È­ÇÑ´Ù. º¸´Ù ÀÚ¼¼ÇÑ »çÇ×Àº Documentation/ABI/README ¹®¼­¸¦ ÂüÁ¶ÇÑ´Ù. 20: Check that it all passes `make headers_check'. 20: 'make headers_check'¸¦ ½ÃÇàÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê´ÂÁö üũÇÑ´Ù. 21: Has been checked with injection of at least slab and page-allocation failures. See Documentation/fault-injection/. If the new code is substantial, addition of subsystem-specific fault injection might be appropriate. 21: 22: Newly-added code has been compiled with `gcc -W' (use "make EXTRA_CFLAGS=-W"). This will generate lots of noise, but is good for finding bugs like "warning: comparison between signed and unsigned". 23: Tested after it has been merged into the -mm patchset to make sure that it still works with all of the other queued patches and various changes in the VM, VFS, and other subsystems. 24: Avoid whitespace damage such as indenting with spaces or whitespace at the end of lines. You can test this by feeding the patch to "git apply --check --whitespace=error-all" 25: Check your patch for general style as detailed in Documentation/CodingStyle. Check for trivial violations with the patch style checker prior to submission (scripts/checkpatch.pl). You should be able to justify all violations that remain in your patch.