linux-tracecalls finds all call chains leading to a given function in the Linux kernel, to some arbitrary depth. It consists of two parts - a set of specially prepared cscope databases for the kernel source tree, and a perl program, 'lnxtc.pl', to do the call chain discovery based on the information in the cscope DBs. It works, in part, by expanding function yielding macros and by mangling function names with the name of the file containing the function's definition, prior to creating the cscope files.
http://www.linuxrd.com/~carl/cgi-bin/lnxtc.pl?help
ISO/IEC JTC1/SC22/WG14-ISO/IEC 9899:1999