aha/include/linux
Ingo Molnar fb1c8f93d8 [PATCH] spinlock consolidation
This patch (written by me and also containing many suggestions of Arjan van
de Ven) does a major cleanup of the spinlock code.  It does the following
things:

 - consolidates and enhances the spinlock/rwlock debugging code

 - simplifies the asm/spinlock.h files

 - encapsulates the raw spinlock type and moves generic spinlock
   features (such as ->break_lock) into the generic code.

 - cleans up the spinlock code hierarchy to get rid of the spaghetti.

Most notably there's now only a single variant of the debugging code,
located in lib/spinlock_debug.c.  (previously we had one SMP debugging
variant per architecture, plus a separate generic one for UP builds)

Also, i've enhanced the rwlock debugging facility, it will now track
write-owners.  There is new spinlock-owner/CPU-tracking on SMP builds too.
All locks have lockup detection now, which will work for both soft and hard
spin/rwlock lockups.

The arch-level include files now only contain the minimally necessary
subset of the spinlock code - all the rest that can be generalized now
lives in the generic headers:

 include/asm-i386/spinlock_types.h       |   16
 include/asm-x86_64/spinlock_types.h     |   16

I have also split up the various spinlock variants into separate files,
making it easier to see which does what. The new layout is:

   SMP                         |  UP
   ----------------------------|-----------------------------------
   asm/spinlock_types_smp.h    |  linux/spinlock_types_up.h
   linux/spinlock_types.h      |  linux/spinlock_types.h
   asm/spinlock_smp.h          |  linux/spinlock_up.h
   linux/spinlock_api_smp.h    |  linux/spinlock_api_up.h
   linux/spinlock.h            |  linux/spinlock.h

/*
 * here's the role of the various spinlock/rwlock related include files:
 *
 * on SMP builds:
 *
 *  asm/spinlock_types.h: contains the raw_spinlock_t/raw_rwlock_t and the
 *                        initializers
 *
 *  linux/spinlock_types.h:
 *                        defines the generic type and initializers
 *
 *  asm/spinlock.h:       contains the __raw_spin_*()/etc. lowlevel
 *                        implementations, mostly inline assembly code
 *
 *   (also included on UP-debug builds:)
 *
 *  linux/spinlock_api_smp.h:
 *                        contains the prototypes for the _spin_*() APIs.
 *
 *  linux/spinlock.h:     builds the final spin_*() APIs.
 *
 * on UP builds:
 *
 *  linux/spinlock_type_up.h:
 *                        contains the generic, simplified UP spinlock type.
 *                        (which is an empty structure on non-debug builds)
 *
 *  linux/spinlock_types.h:
 *                        defines the generic type and initializers
 *
 *  linux/spinlock_up.h:
 *                        contains the __raw_spin_*()/etc. version of UP
 *                        builds. (which are NOPs on non-debug, non-preempt
 *                        builds)
 *
 *   (included on UP-non-debug builds:)
 *
 *  linux/spinlock_api_up.h:
 *                        builds the _spin_*() APIs.
 *
 *  linux/spinlock.h:     builds the final spin_*() APIs.
 */

All SMP and UP architectures are converted by this patch.

arm, i386, ia64, ppc, ppc64, s390/s390x, x64 was build-tested via
crosscompilers.  m32r, mips, sh, sparc, have not been tested yet, but should
be mostly fine.

From: Grant Grundler <grundler@parisc-linux.org>

  Booted and lightly tested on a500-44 (64-bit, SMP kernel, dual CPU).
  Builds 32-bit SMP kernel (not booted or tested).  I did not try to build
  non-SMP kernels.  That should be trivial to fix up later if necessary.

  I converted bit ops atomic_hash lock to raw_spinlock_t.  Doing so avoids
  some ugly nesting of linux/*.h and asm/*.h files.  Those particular locks
  are well tested and contained entirely inside arch specific code.  I do NOT
  expect any new issues to arise with them.

 If someone does ever need to use debug/metrics with them, then they will
  need to unravel this hairball between spinlocks, atomic ops, and bit ops
  that exist only because parisc has exactly one atomic instruction: LDCW
  (load and clear word).

From: "Luck, Tony" <tony.luck@intel.com>

   ia64 fix

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Arjan van de Ven <arjanv@infradead.org>
Signed-off-by: Grant Grundler <grundler@parisc-linux.org>
Cc: Matthew Wilcox <willy@debian.org>
Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
Signed-off-by: Mikael Pettersson <mikpe@csd.uu.se>
Signed-off-by: Benoit Boissinot <benoit.boissinot@ens-lyon.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-09-10 10:06:21 -07:00
..
byteorder
dvb
hdlc
isdn
lockd
mmc [MMC] Ensure correct mmc_priv() behaviour 2005-09-08 22:46:00 +01:00
mtd
netfilter
netfilter_arp
netfilter_bridge
netfilter_ipv4 [NETFILTER]: kill __ip_ct_expect_unlink_destroy 2005-09-06 15:10:46 -07:00
netfilter_ipv6
nfsd
raid [PATCH] md: add write-intent-bitmap support to raid5 2005-09-09 16:39:12 -07:00
sunrpc
tc_act
tc_ematch
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi.h
adb.h
adfs_fs.h
adfs_fs_i.h
adfs_fs_sb.h
affs_fs.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio.h
aio_abi.h
amifd.h
amifdreg.h
amigaffs.h
apm_bios.h
arcdevice.h
arcfb.h
ata.h Merge /spare/repo/linux-2.6/ 2005-08-29 15:59:42 -04:00
atalk.h
atm.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
atmmpc.h
atmppp.h
atmsap.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
atmsvc.h
attribute_container.h
audit.h
auto_fs.h
auto_fs4.h
auxvec.h
awe_voice.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h [PATCH] bfs: fix endianness, signedness; add trivial bugfix 2005-09-09 13:57:32 -07:00
binfmts.h
bio.h
bit_spinlock.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
bitmap.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bitops.h
blkdev.h
blkpg.h
blockgroup_lock.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bootmem.h
bpqether.h
buffer_head.h [PATCH] page_uptodate locking scalability 2005-07-07 18:23:45 -07:00
cache.h
capability.h
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
chio.h
circ_buf.h
cobalt-nvram.h
coda.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_proc.h
coda_psdev.h
coff.h
com20020.h
compat.h [PATCH] compat: be more consistent about [ug]id_t 2005-09-07 16:57:19 -07:00
compat_ioctl.h [SPARC64/COMPAT]: Add some compat ioctl for ppdev 2005-07-04 13:23:45 -07:00
compiler-gcc.h
compiler-gcc2.h
compiler-gcc3.h
compiler-gcc4.h
compiler-intel.h
compiler.h
completion.h
comstats.h
concap.h
config.h
console.h
console_struct.h
consolemap.h
cpu.h
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs.h
cramfs_fs_sb.h
crash_dump.h
crc-ccitt.h
crc16.h
crc32.h
crc32c.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
crypto.h
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dccp.h [DCCP] Introduce dccp_timestamp 2005-09-09 02:38:35 -03:00
dcookies.h
debugfs.h
delay.h
devfs_fs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
devfs_fs_kernel.h
device-mapper.h
device.h
devpts_fs.h
dio.h
dirent.h
divert.h
dm-ioctl.h
dm9000.h
dma-mapping.h
dmapool.h
dmi.h [PATCH] dmi: add onboard devices discovery 2005-09-07 16:57:44 -07:00
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1286.h
dtlk.h
edd.h
eeprom.h
efi.h
efs_dir.h
efs_fs.h
efs_fs_i.h
efs_fs_sb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
efs_vh.h
eisa.h
elevator.h
elf-fdpic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
elf.h
elfcore.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h
eventpoll.h
ext2_fs.h
ext2_fs_sb.h
ext3_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_jbd.h
fadvise.h
fb.h [PATCH] fbcon: Break up bit_putcs into its component functions 2005-09-09 14:03:41 -07:00
fcdevice.h
fcntl.h
fd.h
fd1772.h
fddidevice.h
fdreg.h
file.h [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
filter.h
firmware.h
flat.h
font.h
fs.h [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
fs_struct.h
fsl_devices.h
fsnotify.h
ftape-header-segment.h
ftape-vendors.h
ftape.h
fuse.h [PATCH] FUSE: add fsync operation for directories 2005-09-09 14:03:47 -07:00
futex.h
gameport.h
gen_stats.h
genalloc.h
generic_serial.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
genhd.h
gfp.h
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hiddev.h
highmem.h
highuid.h
hippidevice.h
hpet.h
hpfs_fs.h
hugetlb.h
hwmon-sysfs.h
hwmon-vid.h
hwmon.h
hysdn_if.h
i2c-algo-bit.h
i2c-algo-ite.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
i2c-algo-sibyte.h
i2c-dev.h
i2c-id.h
i2c-isa.h
i2c-pxa.h
i2c.h [PATCH] I2C: Drop the I2C_ACK_TEST ioctl 2005-09-05 09:26:56 -07:00
i2o-dev.h
i2o.h
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
if.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_ltalk.h
if_packet.h
if_plip.h
if_ppp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h
if_tun.h
if_tunnel.h
if_vlan.h
if_wanpipe.h
if_wanpipe_common.h
igmp.h [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
in.h
in6.h
in_route.h
inet.h
inet_diag.h
inetdevice.h
init.h
init_task.h [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
initrd.h
inotify.h
input.h
interrupt.h
ioc4.h
ioctl.h
ioctl32.h
ioport.h
ioprio.h
ip.h
ip6_tunnel.h
ip_mp_alg.h
ipc.h
ipmi.h
ipmi_msgdefs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ipmi_smi.h
ipsec.h
ipv6.h
ipv6_route.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ipx.h
irda.h
irq.h
irq_cpustat.h
isapnp.h
isdn.h
isdn_divertif.h
isdn_ppp.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ite_gpio.h
ixjuser.h
jbd.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
jffs.h
jffs2.h
jffs2_fs_i.h
jffs2_fs_sb.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h
kbd_diacr.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kbd_kern.h
kd.h
kdev_t.h
kernel.h
kernel_stat.h
kernelcapi.h
kexec.h
key-ui.h
key.h
keyboard.h
keyctl.h
kfifo.h
klist.h
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject.h
kobject_uevent.h
kprobes.h
kref.h
kthread.h
lapb.h
lcd.h
libata.h
libps2.h
limits.h
linkage.h
linux_logo.h
list.h
llc.h
loop.h
lp.h
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
mempolicy.h [PATCH] PCI: Run PCI driver initialization on local node 2005-09-08 14:57:23 -07:00
mempool.h
meye.h
mii.h This patch adds a PHY Abstraction Layer to the Linux Kernel, enabling 2005-07-30 19:31:23 -04:00
minix_fs.h
miscdevice.h
mm.h
mm_inline.h
mman.h
mmtimer.h
mmzone.h
mod_devicetable.h
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
mtio.h
mv643xx.h
n_r3964.h
namei.h
namespace.h
nbd.h
ncp.h
ncp_fs.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_mount.h
ncp_no.h
net.h
netdevice.h
netfilter.h
netfilter_arp.h
netfilter_bridge.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter_logging.h
netlink.h
netpoll.h
netrom.h
nfs.h
nfs2.h
nfs3.h
nfs4.h
nfs4_acl.h
nfs4_mount.h
nfs_fs.h
nfs_fs_i.h
nfs_fs_sb.h [PATCH] NFS: Add support for NFSv3 ACLs 2005-06-22 16:07:24 -04:00
nfs_idmap.h
nfs_mount.h [PATCH] NFS: Add support for NFSv3 ACLs 2005-06-22 16:07:24 -04:00
nfs_page.h
nfs_xdr.h
nfsacl.h
nfsd_idmap.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h [BRIDGE]: features change notification 2005-05-29 14:13:47 -07:00
nubus.h
numa.h
nvram.h
openprom_fs.h
oprofile.h
page-flags.h
pagemap.h
pagevec.h
param.h
parport.h
parport_pc.h
parser.h
patchkey.h
pci-acpi.h
pci.h Remove "must_check" attributes in PCI-land 2005-09-09 15:43:46 -07:00
pci_ids.h [PATCH] net: add driver for the NIC on Cell Blades 2005-09-06 22:17:49 -04:00
pci_regs.h [PATCH] PCI: restore BAR values after D3hot->D0 for devices that need it 2005-09-08 14:57:24 -07:00
pcieport_if.h
percpu.h
percpu_counter.h
personality.h
pfkeyv2.h
pg.h
phonedev.h
phy.h
pid.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform.h
pm.h
pmu.h
pnp.h
pnpbios.h
poll.h
posix-timers.h
posix_acl.h
posix_acl_xattr.h [PATCH] remove <linux/xattr_acl.h> 2005-06-23 09:45:33 -07:00
posix_types.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ppdev.h
ppp-comp.h
ppp_channel.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ppp_defs.h
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h
profile.h
ps2esdi.h
ptrace.h
qic117.h
qnx4_fs.h
qnxtypes.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
raid_class.h
ramfs.h
random.h
raw.h
rbtree.h
rcupdate.h [PATCH] files: fix rcu initializers 2005-09-09 13:57:54 -07:00
rcuref.h [PATCH] files: rcuref APIs 2005-09-09 13:57:54 -07:00
reboot.h
reboot_fixups.h
reiserfs_acl.h
reiserfs_fs.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_xattr.h
relayfs_fs.h
resource.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc.h
rtnetlink.h [NETLINK]: Convert netlink users to use group numbers instead of bitmasks 2005-08-29 16:00:54 -07:00
rwsem-spinlock.h
rwsem.h
sc26198.h
scatterlist.h
scc.h
sched.h [PATCH] Prefetch kernel stacks to speed up context switch 2005-09-09 13:57:31 -07:00
sctp.h
scx200.h
scx200_gpio.h
sdla.h
sdla_asy.h
sdla_chdlc.h
sdla_fr.h
sdla_ppp.h
sdla_x25.h
sdladrv.h
sdlapci.h
sdlasfm.h
seccomp.h
securebits.h
security.h [PATCH] remove the inode_post_link and inode_post_rename LSM hooks 2005-09-09 13:57:28 -07:00
selection.h
selinux_netlink.h
sem.h
seq_file.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
seqlock.h
serial.h [ARM] 2866/1: add i.MX set_mctrl / get_mctrl functions 2005-08-31 21:48:47 +01:00
serial167.h
serial_8250.h
serial_core.h Fix up ARM serial driver compile failure 2005-09-08 14:47:12 -07:00
serial_reg.h
serialP.h
serio.h
shm.h
shmem_fs.h
signal.h
skbuff.h
slab.h
smb.h
smb_fs.h
smb_fs_i.h
smb_fs_sb.h
smb_mount.h
smbno.h
smp.h
smp_lock.h
snmp.h
socket.h
sockios.h
som.h
sonet.h
sonypi.h [PATCH] sonypi SPIC initialisation fix 2005-09-07 16:57:24 -07:00
sort.h
sound.h
soundcard.h
spinlock.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock_api_smp.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock_api_up.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock_types.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock_types_up.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock_up.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
stallion.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
stat.h
statfs.h
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
swap.h
swapops.h
synclink.h
sys.h
syscalls.h
sysctl.h
sysdev.h
sysfs.h
sysrq.h
sysv_fs.h
tcp.h [ICSK]: Move TCP congestion avoidance members to icsk 2005-08-29 15:56:18 -07:00
telephony.h
termios.h
textsearch.h
textsearch_fsm.h
thread_info.h
threads.h
ticable.h
time.h
timer.h [PATCH] timer initialization cleanup: DEFINE_TIMER 2005-09-09 14:03:48 -07:00
times.h
timex.h
tiocl.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tty.h [PATCH] vesafb: Add blanking support 2005-09-09 13:57:58 -07:00
tty_driver.h
tty_flip.h
tty_ldisc.h
types.h
udf_fs.h
udf_fs_i.h
udf_fs_sb.h
udp.h
ufs_fs.h
ufs_fs_i.h
ufs_fs_sb.h
uinput.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h
usb.h [PATCH] USB: URB_ASYNC_UNLINK flag removed from the kernel 2005-09-08 16:23:04 -07:00
usb_cdc.h
usb_ch9.h
usb_gadget.h
usb_gadgetfs.h
usb_input.h
usb_isp116x.h [PATCH] USB: isp116x-hcd: remove clock() and reset() 2005-09-08 16:22:48 -07:00
usb_otg.h
usb_sl811.h
usbdevice_fs.h
user.h
utime.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
videodev.h [PATCH] v4l: common part Updates and tuner additions 2005-09-09 13:57:49 -07:00
videodev2.h [PATCH] v4l: common part Updates and tuner additions 2005-09-09 13:57:49 -07:00
videotext.h
vmalloc.h
vt.h
vt_buffer.h
vt_kern.h
wait.h
wanpipe.h
wanrouter.h
watchdog.h
wavefront.h
wireless.h
workqueue.h
writeback.h
x25.h [X25]: Fast select with no restriction on response 2005-06-22 22:16:17 -07:00
xattr.h
xfrm.h
yam.h
zconf.h
zftape.h
zlib.h Add fakey 'deflateBound()' function to the in-kernel zlib routines 2005-08-06 09:39:57 -07:00
zorro.h
zorro_ids.h
zutil.h