linux/arch/powerpc
Emil Medve eda09fbdcd [POWERPC] Optimize counting distinct entries in the relocation sections
When a module has relocation sections with tens of thousands of
entries, counting the distinct/unique entries only (i.e. no
duplicates) at load time can take tens of seconds and up to minutes.
The sore point is the count_relocs() function which is called as part
of the architecture specific module loading processing path:

	-> load_module()			generic
	   -> module_frob_arch_sections()	arch specific
	      -> get_plt_size()		32-bit
	      -> get_stubs_size()	64-bit
		 -> count_relocs()

Here count_relocs is being called to find out how many distinct
targets of R_PPC_REL24 relocations there are, since each distinct
target needs a PLT entry or a stub created for it.

The previous counting algorithm has O(n^2) complexity.  Basically two
solutions were proposed on the e-mail list: a hash based approach and
a sort based approach.

The hash based approach is the fastest (O(n)) but the has it needs
additional memory and for certain corner cases it could take lots of
memory due to the degeneration of the hash.  One such proposal was
submitted here:

http://ozlabs.org/pipermail/linuxppc-dev/2007-June/037641.html

The sort based approach is slower (O(n * log n + n)) but if the
sorting is done "in place" it doesn't need additional memory.
This has O(n + n * log n) complexity with no additional memory
requirements.

This commit implements the in-place sort option.

Signed-off-by: Emil Medve <Emilian.Medve@Freescale.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-12-21 15:05:58 +11:00
..
boot [POWERPC] Use embedded dtc in kernel builds 2007-12-20 16:18:00 +11:00
configs [POWERPC] 83xx: Add MPC837x MDS default kernel configuration 2007-12-11 13:57:18 -06:00
kernel [POWERPC] Optimize counting distinct entries in the relocation sections 2007-12-21 15:05:58 +11:00
lib [POWERPC] rheap: Changes config mechanism 2007-10-16 17:09:21 -06:00
math-emu [POWERPC] Fix handling of stfiwx math emulation 2007-10-16 09:05:24 -05:00
mm [POWERPC] Fake NUMA emulation for PowerPC 2007-12-20 16:11:46 +11:00
oprofile [POWERPC] OProfile: fix cbe pm signal routing problem 2007-12-19 01:00:01 +01:00
platforms [POWERPC] cell/cbe_regs.c: Add missing of_node_put 2007-12-20 17:13:51 +11:00
sysdev [POWERPC] pci32: Add flags modifying the PCI code behaviour 2007-12-20 16:18:07 +11:00
xmon [POWERPC] Update xmon slb code 2007-12-11 13:46:05 +11:00
.gitignore [POWERPC] Add files build to .gitignore 2006-12-04 20:41:29 +11:00
Kconfig Fix boot problem with iSeries lacking hugepage support 2007-11-29 09:24:51 -08:00
Kconfig.debug [POWERPC] Early debug forces console log level to max 2007-12-11 15:43:35 +11:00
Makefile [POWERPC] Implement 'make bootwrapper_install' 2007-12-06 14:44:30 +11:00