Messages in this thread | | | Subject | [Announce] Aiaiai | From | Artem Bityutskiy <> | Date | Wed, 28 Mar 2012 18:09:16 +0300 |
| |
Hi,
I here is a tool which I find very helpful for subsystem maintainers and individual developers. This tool checks patches or patch-sets using various existing tools and reports new issues.
The main thing it does is: 1. Build the kernel before the patch and after the patch 2. Compare 2 build logs 3. Report about _new_ gcc warnings, coccinelle/spatch/smatch/cppcheck complaints.
For example, you can feed Aiaiai a patch-set, and it may report something like this:
--------------------------------------------------------------------------------
1 Successfully built configuration "my_defconfig,i386", results: 2 3 --- before_patching.log 4 +++ after_patching.log 5 @@ @@ 6 -drivers/staging/cruft/my_drv.c: In function ‘my_pool_destroy’: 7 -drivers/staging/cruft/my_drv.c:165:22: warning: variable ‘test1’ set but not used [-Wunused-but-set-variable] 8 @@ @@ 9 +drivers/staging/cruft/my_drv.c: In function ‘my_event_handler’: 10 +drivers/staging/cruft/my_drv.c:311:36: warning: unused variable ‘reg’ [-Wunused-variable] 11 +drivers/staging/cruft/my_drv.c:1001:1-7: preceding lock on line 837 [coccinelle] 12 +drivers/staging/cruft/my_drv.c:834 my_int_data(12) warn: variable dereferenced before check 'priv' (see line 827) [smatch]
--------------------------------------------------------------------------------
Line 1 says that configuration my_defconfig for architecture i386 has been built, so the patch-set is at least compilable.
Starting from line 3 we have a diff of 2 build logs - before and after patching.
Lines 6 and 7 tell that the patch-set eliminated a warning - which is very welcome.
Lines 9 and 10 tell that the patch-set introduced a gcc warning - not good.
Line 11 tells that the patch made coccinelle complain about locking - worth checking as coccinelle scripts we have in the kernel are rather high quality.
Line 12 tells that smatch has a complaint - also worth looking if this is a false-positive or not.
Additionally, Aiaiai runs the bisectability tests when the patch-set contains more than one patch. It applies patches one-by-one and compiles at each step, and will report if compilation breaks.
Aiaiai also checks if the patch changes a defconfig file, and if it does, it will verify that it is changed properly (make savedefconfig was used).
And Aiaiai also runs checkpatch.pl for the whole patch-set (squashed) and every individual patch.
Aiaiai also includes scripts which may be used to attach it to an e-mail address, so that when you can send patches to this e-mail address, and it will respond with test results.
E.g., I use Aiaiai to verify incoming patches for the MTD subsystem since recently. I have small helper scripts which run Aiaiai for several configurations and architectures (i386, x86_64, ia64, ppc64, arm, mips). This makes me feel "safe" when I apply patches to my l2-mtd.git' tree. I do this also for UBIFS and UBI now.
The README file contains more information: http://git.infradead.org/users/dedekind/aiaiai.git/blob/refs/heads/master:/README
Sorry if this stuff is not very user-friendly - feel free to ask questions and send patches.
You can find Aiaiai here: git://git.infradead.org/users/dedekind/aiaiai.git Gitweb: http://git.infradead.org/users/dedekind/aiaiai.git
Credits: * Intel and my colleagues * Kirill Shutemov - he started writing this stuff, review, gave ideas, etc * AltLinux guys for libshell (git://git.altlinux.org/people/ldv/packages/libshell.git) * Al Viro for the remapper (git://git.kernel.org/pub/scm/linux/kernel/git/viro/remap.git) * Julia Lawall for amending coccinelle kernel patches to meet Aiaiai needs * Dan Carpenter for amending smatch to meet Aiaiai needs * Eric Melski for the serialize-log idea
-- Best Regards, Artem Bityutskiy [unhandled content-type:application/pgp-signature] | |