compat_ioctl: simplify lookup table
authorArnd Bergmann <arnd@arndb.de>
Thu, 5 Nov 2009 18:52:55 +0000 (19:52 +0100)
committerArnd Bergmann <arnd@arndb.de>
Thu, 10 Dec 2009 21:52:11 +0000 (22:52 +0100)
commit661f627da98c0647bcc002ef35e5441fb3ce667c
tree0820ff0d1734edb252c0073babf7806614a8fa55
parent789f0f89118a80a3ff5309371e5820f623ed2a53
compat_ioctl: simplify lookup table

The compat_ioctl table now only contains entries for
COMPATIBLE_IOCTL, so we only need to know if a number
is listed in it or now.

As an optimization, we hash the table entries with a
reversible transformation to get a more uniform distribution
over it, sort the table at startup and then guess the
position in the table when an ioctl number gets called
to do a linear search from there.

With the current set of ioctl numbers and the chosen
transformation function, we need an average of four
steps to find if a number is in the set, all of the
accesses within one or two cache lines.

This at least as good as the previous hash table
approach but saves 8.5 kb of kernel memory.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
fs/compat_ioctl.c