linux/kernel
Herbert Xu a98ce5c6fe Fix synchronize_irq races with IRQ handler
As it is some callers of synchronize_irq rely on memory barriers
to provide synchronisation against the IRQ handlers.  For example,
the tg3 driver does

	tp->irq_sync = 1;
	smp_mb();
	synchronize_irq();

and then in the IRQ handler:

	if (!tp->irq_sync)
		netif_rx_schedule(dev, &tp->napi);

Unfortunately memory barriers only work well when they come in
pairs.  Because we don't actually have memory barriers on the
IRQ path, the memory barrier before the synchronize_irq() doesn't
actually protect us.

In particular, synchronize_irq() may return followed by the
result of netif_rx_schedule being made visible.

This patch (mostly written by Linus) fixes this by using spin
locks instead of memory barries on the synchronize_irq() path.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-10-23 09:01:31 -07:00
..
irq Fix synchronize_irq races with IRQ handler 2007-10-23 09:01:31 -07:00
power trivial copy_data_pages() tidy up 2007-10-20 02:26:04 +02:00
time Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2007-10-19 13:12:46 -07:00
.gitignore
acct.c
audit_tree.c [PATCH] audit: watching subtrees 2007-10-21 02:37:45 -04:00
audit.c [PATCH] audit: watching subtrees 2007-10-21 02:37:45 -04:00
audit.h [PATCH] audit: watching subtrees 2007-10-21 02:37:45 -04:00
auditfilter.c [PATCH] audit: watching subtrees 2007-10-21 02:37:45 -04:00
auditsc.c auditsc: fix kernel-doc param warnings 2007-10-22 19:40:02 -07:00
capability.c Uninline find_pid etc set of functions 2007-10-19 11:53:41 -07:00
cgroup_debug.c
cgroup.c Control groups: Replace "cont" with "cgrp" and other misc renaming 2007-10-19 11:53:43 -07:00
compat.c
configs.c
cpu_acct.c
cpu.c CPU HOTPLUG: avoid hotadd when proper possible_map isn't specified 2007-10-19 11:53:44 -07:00
cpuset.c hotplug cpu: migrate a task within its cpuset 2007-10-19 11:53:44 -07:00
delayacct.c
dma.c
exec_domain.c
exit.c Uninline fork.c/exit.c 2007-10-19 11:53:56 -07:00
extable.c
fork.c Uninline fork.c/exit.c 2007-10-19 11:53:56 -07:00
futex_compat.c Uninline find_task_by_xxx set of functions 2007-10-19 11:53:40 -07:00
futex.c Uninline find_task_by_xxx set of functions 2007-10-19 11:53:40 -07:00
hrtimer.c fix comment: unlock_hrtimer_base is the counterpart of lock_hrtimer_base 2007-10-20 01:56:53 +02:00
itimer.c
kallsyms.c
Kconfig.hz
Kconfig.instrumentation Linux Kernel Markers 2007-10-19 11:53:54 -07:00
Kconfig.preempt
kexec.c Extended crashkernel command line 2007-10-19 11:53:49 -07:00
kfifo.c
kmod.c
kprobes.c
ksysfs.c
kthread.c
latency.c
lockdep_internals.h
lockdep_proc.c
lockdep.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00
Makefile [PATCH] audit: watching subtrees 2007-10-21 02:37:45 -04:00
marker.c Linux Kernel Markers 2007-10-19 11:53:54 -07:00
module.c Linux Kernel Markers 2007-10-19 11:53:54 -07:00
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
notifier.c
ns_cgroup.c
nsproxy.c pid namespaces: allow cloning of new namespace 2007-10-19 11:53:39 -07:00
panic.c trivial comment wording/typo fix regarding taint flags 2007-10-20 00:30:06 +02:00
params.c
pid.c Uninline the task_xid_nr_ns() calls 2007-10-19 11:53:41 -07:00
posix-cpu-timers.c Isolate some explicit usage of task->tgid 2007-10-19 11:53:40 -07:00
posix-timers.c Isolate some explicit usage of task->tgid 2007-10-19 11:53:40 -07:00
printk.c
profile.c
ptrace.c Isolate some explicit usage of task->tgid 2007-10-19 11:53:40 -07:00
rcupdate.c
rcutorture.c
relay.c
resource.c
rtmutex_common.h
rtmutex-debug.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00
rtmutex.h
rwsem.c
sched_debug.c
sched_fair.c
sched_idletask.c
sched_rt.c
sched_stats.h
sched.c sched: don't clear PF_VCPU in scheduler 2007-10-22 12:03:29 +02:00
seccomp.c
signal.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00
softirq.c
softlockup.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00
spinlock.c
srcu.c
stacktrace.c
stop_machine.c
sys_ni.c
sys.c Isolate the explicit usage of signal->pgrp 2007-10-19 11:53:43 -07:00
sysctl_check.c Fix appletalk sysctl entry name 2007-10-22 19:15:59 -07:00
sysctl.c pid namespaces: changes to show virtual ids to user 2007-10-19 11:53:40 -07:00
taskstats.c Fix misspellings of "system", "controller", "interrupt" and "necessary". 2007-10-19 23:10:43 +02:00
time.c
timer.c pid namespaces: changes to show virtual ids to user 2007-10-19 11:53:40 -07:00
tsacct.c
uid16.c
user_namespace.c
user.c
utsname_sysctl.c
utsname.c
wait.c
workqueue.c Use helpers to obtain task pid in printks 2007-10-19 11:53:43 -07:00