Linus Torvalds
a08727bae7
Make workqueue bit operations work on "atomic_long_t"
...
On architectures where the atomicity of the bit operations is handled by
external means (ie a separate spinlock to protect concurrent accesses),
just doing a direct assignment on the workqueue data field (as done by
commit 4594bf159f ) can cause the
assignment to be lost due to lack of serialization with the bitops on
the same word.
So we need to serialize the assignment with the locks on those
architectures (notably older ARM chips, PA-RISC and sparc32).
So rather than using an "unsigned long", let's use "atomic_long_t",
which already has a safe assignment operation (atomic_long_set()) on
such architectures.
This requires that the atomic operations use the same atomicity locks as
the bit operations do, but that is largely the case anyway. Sparc32
will probably need fixing.
Architectures (including modern ARM with LL/SC) that implement sane
atomic operations for SMP won't see any of this matter.
Cc: Russell King <rmk+lkml@arm.linux.org.uk>
Cc: David Howells <dhowells@redhat.com>
Cc: David Miller <davem@davemloft.com>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Linux Arch Maintainers <linux-arch@vger.kernel.org>
Cc: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-16 09:53:50 -08:00
..
irq
[PATCH] CPEI gets warning at kernel/irq/migration.c:27/move_masked_irq()
2006-12-08 08:28:37 -08:00
power
Driver core: deprecate PM_LEGACY, default it to N
2006-12-13 15:38:46 -08:00
time
[PATCH] clocksource: small cleanup
2006-12-10 09:57:22 -08:00
.gitignore
acct.c
[PATCH] kernel: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:42 -08:00
audit.c
[PATCH] Add include/linux/freezer.h and move definitions from sched.h
2006-12-07 08:39:27 -08:00
audit.h
auditfilter.c
[PATCH] kernel core: replace kmalloc+memset with kzalloc
2006-12-07 08:39:41 -08:00
auditsc.c
[PATCH] struct path: convert kernel
2006-12-08 08:28:46 -08:00
capability.c
compat.c
configs.c
[PATCH] struct seq_operations and struct file_operations constification
2006-12-07 08:39:46 -08:00
cpu.c
[PATCH] suspend: don't change cpus_allowed for task initiating the suspend
2006-12-07 08:39:28 -08:00
cpuset.c
[PATCH] cpuset: rework cpuset_zone_allowed api
2006-12-13 09:05:49 -08:00
delayacct.c
[PATCH] slab: remove kmem_cache_t
2006-12-07 08:39:25 -08:00
dma.c
[PATCH] struct seq_operations and struct file_operations constification
2006-12-07 08:39:46 -08:00
exec_domain.c
exit.c
[PATCH] fdtable: Remove the free_files field
2006-12-10 09:57:22 -08:00
extable.c
fork.c
[PATCH] Optimize D-cache alias handling on fork
2006-12-13 09:27:08 -08:00
futex.c
[PATCH] kernel: change uses of f_{dentry, vfsmnt} to use f_path
2006-12-08 08:28:42 -08:00
futex_compat.c
hrtimer.c
itimer.c
kallsyms.c
[PATCH] move kallsyms data to .rodata
2006-12-08 08:28:37 -08:00
Kconfig.hz
[PATCH] HZ: 300Hz support
2006-12-07 08:39:36 -08:00
Kconfig.preempt
kexec.c
Merge branch 'release' of master.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6
2006-12-07 15:39:22 -08:00
kfifo.c
kmod.c
[PATCH] rename struct namespace to struct mnt_namespace
2006-12-08 08:28:51 -08:00
kprobes.c
[PATCH] kprobes: enable booster on the preemptible kernel
2006-12-07 08:39:38 -08:00
ksysfs.c
kthread.c
latency.c
lockdep.c
[PATCH] lockdep: fix possible races while disabling lock-debugging
2006-12-13 09:05:50 -08:00
lockdep_internals.h
[PATCH] lockdep: more chains
2006-12-07 08:39:43 -08:00
lockdep_proc.c
[PATCH] struct seq_operations and struct file_operations constification
2006-12-07 08:39:46 -08:00
Makefile
Remove stack unwinder for now
2006-12-15 08:47:51 -08:00
module.c
Driver core: show "initstate" of module
2006-12-13 15:38:45 -08:00
mutex-debug.c
[PATCH] lockdep: show more details about self-test failures
2006-12-07 08:39:43 -08:00
mutex-debug.h
mutex.c
[PATCH] lockdep: avoid lockdep warning in md
2006-12-08 08:28:39 -08:00
mutex.h
nsproxy.c
[PATCH] Revert "[PATCH] identifier to nsproxy"
2006-12-13 09:05:47 -08:00
panic.c
params.c
pid.c
[PATCH] add child reaper to pid_namespace
2006-12-08 08:28:52 -08:00
posix-cpu-timers.c
posix-timers.c
[PATCH] slab: remove kmem_cache_t
2006-12-07 08:39:25 -08:00
printk.c
[PATCH] add ignore_loglevel boot option
2006-12-07 08:39:47 -08:00
profile.c
[PATCH] struct seq_operations and struct file_operations constification
2006-12-07 08:39:46 -08:00
ptrace.c
rcupdate.c
[PATCH] rcu: add a prefetch() in rcu_do_batch()
2006-12-07 08:39:40 -08:00
rcutorture.c
[PATCH] Add Sparse annotations to SRCU wrapper functions in rcutorture
2006-12-07 08:39:44 -08:00
relay.c
[PATCH] Fix numerous kcalloc() calls, convert to kzalloc()
2006-12-13 09:05:52 -08:00
resource.c
[PATCH] struct seq_operations and struct file_operations constification
2006-12-07 08:39:46 -08:00
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
[PATCH] Add include/linux/freezer.h and move definitions from sched.h
2006-12-07 08:39:27 -08:00
rtmutex.c
rtmutex.h
rtmutex_common.h
rwsem.c
sched.c
[PATCH] lockdep: print irq-trace info on asserts
2006-12-13 09:05:50 -08:00
seccomp.c
signal.c
[PATCH] PM: Fix freezing of stopped tasks
2006-12-13 09:05:49 -08:00
softirq.c
[PATCH] softirq: remove BUG_ONs which can incorrectly trigger
2006-12-07 08:39:43 -08:00
softlockup.c
spinlock.c
srcu.c
stacktrace.c
stop_machine.c
sys.c
[PATCH] sys_setpgid: eliminate unnecessary do_each_task_pid(PIDTYPE_PGID)
2006-12-08 08:28:52 -08:00
sys_ni.c
sysctl.c
[PATCH] debug: add sysrq_always_enabled boot option
2006-12-13 09:05:50 -08:00
taskstats.c
[PATCH] taskstats: cleanup reply assembling
2006-12-07 08:39:34 -08:00
time.c
timer.c
[PATCH] Optimize calc_load()
2006-12-13 09:05:55 -08:00
tsacct.c
[PATCH] io-accounting: via taskstats
2006-12-10 09:55:41 -08:00
uid16.c
user.c
[PATCH] slab: remove kmem_cache_t
2006-12-07 08:39:25 -08:00
utsname.c
wait.c
workqueue.c
Make workqueue bit operations work on "atomic_long_t"
2006-12-16 09:53:50 -08:00