[PATCH] out-of-line locks / generic
commit50658d3358fa5127fa50c4301dbbb688b9b5e21a
authorZwane Mwaikambo <zwane@linuxpower.ca>
Sat, 4 Sep 2004 09:18:26 +0000 (4 02:18 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 4 Sep 2004 09:18:26 +0000 (4 02:18 -0700)
treeea9a71e519c6d51586bc6aa886d773ad5a857712
parent02f4290357f5329296a0a8101cf061e8715beae5
[PATCH] out-of-line locks / generic

This patch achieves out of line spinlocks by creating kernel/spinlock.c
and using the _raw_* inline locking functions.

Now, as much as this is supposed to be arch agnostic, there was still a
fair amount of rummaging about in archs, mostly for the cases where the
arch already has out of line locks and i wanted to avoid the extra call,
saving that extra call also makes lock profiling easier.  PPC32/64 was
an example of such an arch and i have added the necessary profile_pc()
function as an example.

Size differences are with CONFIG_PREEMPT enabled since we wanted to
determine how much could be saved by moving that lot out of line too.

ppc64 = 259897 bytes:
   text    data     bss     dec     hex filename
5489808 1962724  709064 8161596  7c893c vmlinux-after
5749577 1962852  709064 8421493  808075 vmlinux-before

sparc64 = 193368 bytes:
  text    data     bss     dec     hex filename
3472037  633712  308920 4414669  435ccd vmlinux-after
3665285  633832  308920 4608037  465025 vmlinux-before

i386 = 416075 bytes
   text    data     bss     dec     hex filename
5808371  867442  326864 7002677  6ada35 vmlinux-after
6221254  870634  326864 7418752  713380 vmlinux-before

x86-64 = 282446 bytes
   text    data     bss     dec     hex filename
4598025 1450644  523632 6572301  64490d vmlinux-after
4881679 1449436  523632 6854747  68985b vmlinux-before

It has been compile tested (UP, SMP, PREEMPT) on i386, x86-64, sparc,
sparc64, ppc64, ppc32 and runtime tested on i386, x86-64 and sparc64.

Signed-off-by: Zwane Mwaikambo <zwane@fsmlabs.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/oprofile/timer_int.c
include/asm-generic/vmlinux.lds.h
include/linux/spinlock.h
kernel/Makefile
kernel/spinlock.c [new file with mode: 0644]