]> git.baikalelectronics.ru Git - kernel.git/commit
selinux: de-crapify avc cache stat code generation
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 20 May 2011 01:59:47 +0000 (18:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 20 May 2011 01:59:47 +0000 (18:59 -0700)
commit4512d9fc27ea2b240d84b99abebd8c28ae8caccf
treeb1f13ed2f4bb0bd40f7915a89aafaf449b6145cd
parentebd78f075a203b4af2f5558b29b205ee48932d9b
selinux: de-crapify avc cache stat code generation

You can turn off the avc cache stats, but distributions seem to not do
that (perhaps because several performance tuning how-to's talk about the
avc cache statistics).

Which is sad, because the code it generates is truly horrendous, with
the statistics update being sandwitched between get_cpu/put_cpu which in
turn causes preemption disables etc.  We're talking ten+ instructions
just to increment a per-cpu variable in some pretty hot code.

Fix the craziness by just using 'this_cpu_inc()' instead.  Suddenly we
only need a single 'inc' instruction to increment the statistics.  This
is quite noticeable in the incredibly hot avc_has_perm_noaudit()
function (which triggers all the statistics by virtue of doing an
avc_lookup() call).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
security/selinux/avc.c