1
linux/arch/x86/include/asm
Peter Zijlstra 925d519ab8 perf_counter: unify and fix delayed counter wakeup
While going over the wakeup code I noticed delayed wakeups only work
for hardware counters but basically all software counters rely on
them.

This patch unifies and generalizes the delayed wakeup to fix this
issue.

Since we're dealing with NMI context bits here, use a cmpxchg() based
single link list implementation to track counters that have pending
wakeups.

[ This should really be generic code for delayed wakeups, but since we
  cannot use cmpxchg()/xchg() in generic code, I've let it live in the
  perf_counter code. -- Eric Dumazet could use it to aggregate the
  network wakeups. ]

Furthermore, the x86 method of using TIF flags was flawed in that its
quite possible to end up setting the bit on the idle task, loosing the
wakeup.

The powerpc method uses per-cpu storage and does appear to be
sufficient.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Paul Mackerras <paulus@samba.org>
Orig-LKML-Reference: <20090330171023.153932974@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-04-06 09:30:36 +02:00
..
uv sgi-gru: add macros for using the UV hub to send interrupts 2009-04-02 19:05:05 -07:00
visws
xen Merge branches 'x86/apic', 'x86/asm', 'x86/cleanups', 'x86/debug', 'x86/kconfig', 'x86/mm', 'x86/ptrace', 'x86/setup' and 'x86/urgent'; commit 'v2.6.29-rc8' into x86/core 2009-03-14 16:25:40 +01:00
a.out-core.h
a.out.h
acpi.h
aes.h
agp.h
alternative-asm.h
alternative.h
amd_iommu_types.h
amd_iommu.h
apic.h Revert "x86: don't compile vsmp_64 for 32bit" 2009-03-25 21:34:28 +01:00
apicdef.h
apicnum.h
apm.h
asm.h
atomic_32.h
atomic_64.h
atomic.h
auxvec.h
bios_ebda.h
bitops.h
boot.h x86: remove zImage support 2009-03-11 11:00:00 -07:00
bootparam.h
bug.h
bugs.h
byteorder.h
cache.h
cacheflush.h Merge branch 'tracing/core-v2' into tracing-for-linus 2009-04-02 00:49:02 +02:00
calgary.h
calling.h
checksum_32.h
checksum_64.h
checksum.h
cmpxchg_32.h
cmpxchg_64.h
cmpxchg.h
compat.h
cpu_debug.h x86: cpu_debug add support for various AMD CPUs 2009-03-14 18:07:58 +01:00
cpu.h
cpufeature.h
cpumask.h x86: unify cpu_callin_mask/cpu_callout_mask/cpu_initialized_mask/cpu_sibling_setup_mask 2009-03-13 14:49:54 +10:30
cputime.h
current.h
debugreg.h
delay.h
desc_defs.h
desc.h x86: cpu architecture debug code, build fix, cleanup 2009-03-11 14:52:03 +01:00
device.h
div64.h
dma-mapping.h dma-debug: x86 architecture bindings 2009-03-17 12:56:46 +01:00
dma.h
dmi.h x86/dmi: fix dmi_alloc() section mismatches 2009-03-23 17:20:50 +01:00
do_timer.h
ds.h
dwarf2.h
e820.h x86: e820 fix various signedness issues in setup.c and e820.c 2009-03-23 15:02:05 +05:30
edac.h
efi.h x86: EFI: Back efi_ioremap with init_memory_mapping instead of FIX_MAP 2009-03-04 19:20:16 +01:00
elf.h
emergency-restart.h
entry_arch.h x86: UV, SGI RTC: add generic system vector 2009-03-04 20:25:37 +01:00
errno.h
fb.h
fcntl.h
fixmap.h Merge branch 'core/percpu' into percpu-cpumask-x86-for-linus-2 2009-03-27 17:28:43 +01:00
floppy.h
frame.h
ftrace.h tracing/syscalls: support for syscalls tracing on x86 2009-03-13 16:57:42 +01:00
futex.h
gart.h
genapic.h
geode.h
gpio.h
hardirq.h Merge branch 'linus' into perfcounters/core-v2 2009-04-06 09:02:57 +02:00
highmem.h x86: unify kmap_atomic_pfn() and iomap_atomic_prot_pfn() 2009-03-11 15:47:46 +01:00
hpet.h
hugetlb.h
hw_irq.h Merge branch 'linus' into perfcounters/core-v2 2009-04-06 09:02:57 +02:00
hypertransport.h
hypervisor.h
i387.h x86, math-emu: fix init_fpu for task != current 2009-03-04 20:33:16 +01:00
i8253.h
i8259.h
ia32_unistd.h
ia32.h generic compat_sys_ustat 2009-03-27 14:43:57 -04:00
idle.h
init.h x86: move function and variable declarations to asm/init.h 2009-03-05 14:17:18 +01:00
io_32.h
io_64.h
io_apic.h x86, ioapic: Fix non atomic allocation with interrupts disabled 2009-03-17 15:45:29 -07:00
io.h
ioctl.h
ioctls.h
iomap.h
iommu.h
ipcbuf.h
ipi.h
irq_regs.h
irq_remapping.h x86, x2apic: fix clear_local_APIC() in the presence of x2apic 2009-03-17 15:43:51 -07:00
irq_vectors.h x86: UV, SGI RTC: add generic system vector 2009-03-04 20:25:37 +01:00
irq.h x86: UV, SGI RTC: add generic system vector 2009-03-04 20:25:37 +01:00
irqflags.h
ist.h
k8.h
Kbuild
kdebug.h
kexec.h x86, kexec: x86_64: add kexec jump support for x86_64 2009-03-10 18:13:25 -07:00
kgdb.h
kmap_types.h
kprobes.h
kvm_host.h KVM: Report IRQ injection status to userspace. 2009-03-24 11:03:11 +02:00
kvm_para.h
kvm_x86_emulate.h
kvm.h KVM: Avoid using CONFIG_ in userspace visible headers 2009-03-24 11:03:06 +02:00
ldt.h
lguest_hcall.h lguest: use KVM hypercalls 2009-03-30 21:55:24 +10:30
lguest.h
linkage.h x86: shrink __ALIGN and __ALIGN_STR definitions 2009-03-11 12:39:28 +01:00
local.h
mach_timer.h
mach_traps.h
math_emu.h
mc146818rtc.h
mca_dma.h
mca.h
mce.h
microcode.h
mman.h
mmconfig.h
mmu_context.h
mmu.h
mmx.h
mmzone_32.h
mmzone_64.h
mmzone.h
module.h
mpspec_def.h
mpspec.h
msgbuf.h
msidef.h x86, x2apic: enable fault handling for intr-remapping 2009-03-17 15:38:59 -07:00
msr-index.h Merge branch 'linus' into x86/core 2009-03-28 22:27:45 +01:00
msr.h
mtrr.h
mutex_32.h
mutex_64.h
mutex.h
nmi.h
nops.h
numa_32.h
numa_64.h
numa.h
numaq.h
olpc.h
page_32_types.h x86-32: compute initial mapping size more accurately 2009-03-14 17:23:47 -07:00
page_32.h
page_64_types.h
page_64.h
page_types.h x86: clean up old gcc warnings 2009-03-05 14:50:55 +01:00
page.h
param.h
paravirt.h x86: with the last user gone, remove set_pte_present 2009-03-19 14:04:19 +01:00
parport.h
pat.h x86: clean up old gcc warnings 2009-03-05 14:50:55 +01:00
pci_64.h x86/dma: unify definition of pci_unmap_addr* and pci_unmap_len macros 2009-04-03 13:13:45 +02:00
pci_x86.h
pci-direct.h
pci-functions.h
pci.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask 2009-04-05 10:33:07 -07:00
percpu.h percpu: make x86 addr <-> pcpu ptr conversion macros generic 2009-03-10 16:27:48 +09:00
perf_counter.h perf_counter: unify and fix delayed counter wakeup 2009-04-06 09:30:36 +02:00
pgalloc.h
pgtable_32_types.h x86-32: use specific __vmalloc_start_set flag in __virt_addr_valid 2009-03-05 14:53:10 +01:00
pgtable_32.h x86-32: use brk segment for allocating initial kernel pagetable 2009-03-14 17:23:47 -07:00
pgtable_64_types.h
pgtable_64.h
pgtable_types.h x86: move init_memory_mapping() to common mm/init.c, build fix on 32-bit PAE 2009-03-05 14:39:03 +01:00
pgtable-2level_types.h
pgtable-2level.h x86: with the last user gone, remove set_pte_present 2009-03-19 14:04:19 +01:00
pgtable-3level_types.h
pgtable-3level.h x86: with the last user gone, remove set_pte_present 2009-03-19 14:04:19 +01:00
pgtable.h x86: with the last user gone, remove set_pte_present 2009-03-19 14:04:19 +01:00
poll.h
posix_types_32.h
posix_types_64.h
posix_types.h
prctl.h
processor-cyrix.h
processor-flags.h
processor.h Merge branch 'linus' into cpumask-for-linus 2009-03-30 23:53:32 +02:00
proto.h
ptrace-abi.h
ptrace.h
pvclock-abi.h
pvclock.h
rdc321x_defs.h
reboot_fixups.h
reboot.h
required-features.h
resource.h
resume-trace.h
rio.h
rtc.h
rwlock.h
rwsem.h
scatterlist.h
seccomp_32.h
seccomp_64.h
seccomp.h
sections.h x86: add brk allocation for very, very early allocations 2009-03-14 15:37:14 -07:00
segment.h
sembuf.h
serial.h
setup_arch.h
setup.h x86: headers cleanup - setup.h 2009-03-26 18:29:49 +01:00
shmbuf.h
shmparam.h
sigcontext32.h
sigcontext.h
sigframe.h
siginfo.h
signal.h
smp.h x86: arch_send_call_function_ipi_mask 2009-03-13 14:49:51 +10:30
smpboot_hooks.h
socket.h
sockios.h
sparsemem.h
spinlock_types.h
spinlock.h Allow rwlocks to re-enable interrupts 2009-04-02 19:05:11 -07:00
srat.h
stackprotector.h
stacktrace.h
stat.h
statfs.h
string_32.h
string_64.h
string.h
suspend_32.h pm: cleanup includes 2009-04-01 08:59:16 -07:00
suspend_64.h
suspend.h
svm.h KVM: SVM: Move EFER and MSR constants to generic x86 code 2009-03-24 11:02:46 +02:00
swab.h
swiotlb.h
sync_bitops.h
sys_ia32.h generic compat_sys_ustat 2009-03-27 14:43:57 -04:00
syscall.h
syscalls.h
system_64.h
system.h
tce.h
termbits.h
termios.h
therm_throt.h
thread_info.h perf_counter: unify and fix delayed counter wakeup 2009-04-06 09:30:36 +02:00
time.h
timer.h x86: fix mismerge in arch/x86/include/asm/timer.h 2009-03-30 10:10:49 -07:00
timex.h
tlb.h
tlbflush.h
topology.h Merge branch 'cpumask-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-03-31 13:33:50 +10:30
trampoline.h
traps.h
tsc.h
types.h
uaccess_32.h
uaccess_64.h
uaccess.h
ucontext.h
unaligned.h
unistd_32.h Merge branch 'linus' into perfcounters/core-v2 2009-04-06 09:02:57 +02:00
unistd_64.h Merge branch 'linus' into perfcounters/core-v2 2009-04-06 09:02:57 +02:00
unistd.h
user32.h
user_32.h
user_64.h
user.h
vdso.h
vga.h
vgtod.h
virtext.h KVM: SVM: Move EFER and MSR constants to generic x86 code 2009-03-24 11:02:46 +02:00
vm86.h
vmi_time.h
vmi.h
vmware.h
vmx.h KVM: x86: Virtualize debug registers 2009-03-24 11:02:49 +02:00
vsyscall.h
xcr.h
xor_32.h
xor_64.h
xor.h
xsave.h