alistair23-linux/arch/powerpc/include/asm
Milton Miller 23d72bfd8f powerpc: Consolidate ipi message mux and demux
Consolidate the mux and demux of ipi messages into smp.c and call
a new smp_ops callback to actually trigger the ipi.

The powerpc architecture code is optimised for having 4 distinct
ipi triggers, which are mapped to 4 distinct messages (ipi many, ipi
single, scheduler ipi, and enter debugger).  However, several interrupt
controllers only provide a single software triggered interrupt that
can be delivered to each cpu.  To resolve this limitation, each smp_ops
implementation created a per-cpu variable that is manipulated with atomic
bitops.  Since these lines will be contended they are optimialy marked as
shared_aligned and take a full cache line for each cpu.  Distro kernels
may have 2 or 3 of these in their config, each taking per-cpu space
even though at most one will be in use.

This consolidation removes smp_message_recv and replaces the single call
actions cases with direct calls from the common message recognition loop.
The complicated debugger ipi case with its muxed crash handling code is
moved to debug_ipi_action which is now called from the demux code (instead
of the multi-message action calling smp_message_recv).

I put a call to reschedule_action to increase the likelyhood of correctly
merging the anticipated scheduler_ipi() hook coming from the scheduler
tree; that single required call can be inlined later.

The actual message decode is a copy of the old pseries xics code with its
memory barriers and cache line spacing, augmented with a per-cpu unsigned
long based on the book-e doorbell code.  The optional data is set via a
callback from the implementation and is passed to the new cause-ipi hook
along with the logical cpu number.  While currently only the doorbell
implemntation uses this data it should be almost zero cost to retrieve and
pass it -- it adds a single register load for the argument from the same
cache line to which we just completed a store and the register is dead
on return from the call.  I extended the data element from unsigned int
to unsigned long in case some other code wanted to associate a pointer.

The doorbell check_self is replaced by a call to smp_muxed_ipi_resend,
conditioned on the CPU_DBELL feature.  The ifdef guard could be relaxed
to CONFIG_SMP but I left it with BOOKE for now.

Also, the doorbell interrupt vector for book-e was not calling irq_enter
and irq_exit, which throws off cpu accounting and causes code to not
realize it is running in interrupt context.  Add the missing calls.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2011-05-19 15:31:03 +10:00
..
iseries
8xx_immap.h tree-wide: fix comment/printk typos 2010-11-01 15:38:34 -04:00
8253pit.h
abs_addr.h Merge commit 'gcl/next' into next 2010-08-04 10:26:03 +10:00
agp.h
asm-compat.h powerpc: Emulate most Book I instructions in emulate_step() 2010-06-22 19:40:29 +10:00
asm-offsets.h
async_tx.h
atomic.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
auxvec.h
backlight.h
bitops.h Fix common misspellings 2011-03-31 11:26:23 -03:00
bitsperlong.h
bootx.h
btext.h
bug.h panic: Allow warnings to set different taint flags 2010-05-19 08:36:48 +01:00
bugs.h
byteorder.h
cache.h Merge branch 'for-35' of git://repo.or.cz/linux-kbuild 2010-06-01 08:55:52 -07:00
cacheflush.h
cell-pmu.h
cell-regs.h
checksum.h powerpc: Add 64bit csum_and_copy_to_user 2010-09-02 14:07:30 +10:00
clk_interface.h
code-patching.h
compat.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm1.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cpm2.h
cputable.h powerpc: Save Come-From Address Register (CFAR) in exception frame 2011-05-04 15:22:09 +10:00
cputhreads.h powerpc: Convert old cpumask API into new one 2011-05-04 15:22:59 +10:00
cputime.h taskstats: use real microsecond granularity for CPU times 2010-10-27 18:03:17 -07:00
current.h
dbdma.h
dbell.h powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
dcr-generic.h
dcr-mmio.h
dcr-native.h
dcr-regs.h
dcr.h
delay.h
device.h powerpc/macio: Ensure all dma routines get copied over 2010-11-29 15:48:21 +11:00
disassemble.h
div64.h
dma-mapping.h powerpc: Implement dma_mmap_coherent() 2011-03-30 10:44:00 +11:00
dma.h
edac.h
eeh.h
eeh_event.h
elf.h powerpc: Use is_32bit_task() helper to test 32-bit binary 2010-09-02 14:07:32 +10:00
emergency-restart.h
emulated_ops.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
errno.h
exception-64e.h
exception-64s.h powerpc: Save Come-From Address Register (CFAR) in exception frame 2011-05-04 15:22:09 +10:00
fb.h
fcntl.h
feature-fixups.h powerpc: Use new CPU feature bit to select 2.06 tlbie 2011-05-04 15:19:26 +10:00
firmware.h powerpc/pseries: Add page coalescing support 2011-05-04 16:02:21 +10:00
fixmap.h
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h powerpc/85xx: add cache-sram support 2010-10-14 00:54:38 -05:00
fsl_gtm.h
fsl_guts.h powerpc: rename immap_86xx.h to fsl_guts.h, and add 85xx support 2010-08-12 14:00:15 +01:00
fsl_lbc.h P4080/mtd: Fix the freescale lbc issue with 36bit mode 2010-10-25 15:41:04 +01:00
ftrace.h
futex.h futex: Sanitize futex ops argument types 2011-03-11 12:23:31 +01:00
gpio.h
grackle.h
hardirq.h powerpc: Convert global "BAD" interrupt to per cpu spurious 2010-02-17 14:02:49 +11:00
heathrow.h
highmem.h mm: stack based kmap_atomic() 2010-10-26 16:52:08 -07:00
hugetlb.h
hvcall.h powerpc/pseries: Add page coalescing support 2011-05-04 16:02:21 +10:00
hvconsole.h
hvcserver.h
hw_breakpoint.h powerpc, hw_breakpoint: Tell generic code we have no instruction breakpoints 2010-06-30 13:54:58 +10:00
hw_irq.h powerpc: Use ARCH_IRQ_INIT_FLAGS 2011-03-02 16:50:24 +11:00
hydra.h Update broken web addresses in arch directory. 2010-10-18 11:03:21 +02:00
i8259.h
ibmebus.h
ide.h
immap_cpm2.h
immap_qe.h powerpc: fix warning when compiling immap_qe.h 2011-01-12 18:02:46 -06:00
io-defs.h
io-workarounds.h powerpc/pci: Make IO workarounds init implicit when first bus is registered 2011-04-27 14:18:31 +10:00
io.h powerpc: Remove ioremap_flags 2011-05-19 14:30:43 +10:00
io_event_irq.h powerpc/pseries: Add support for IO event interrupts 2011-05-06 13:19:01 +10:00
ioctl.h
ioctls.h tty: add TIOCVHANGUP to allow clean tty shutdown of all ttys 2011-02-17 14:16:30 -08:00
iommu.h
ipcbuf.h
ipic.h
irq.h powerpc/irq: Stop exporting irq_map 2011-05-04 15:02:15 +10:00
irq_regs.h
irqflags.h powerpc/ppc64/tracing: Add stack frame to calls of trace_hardirqs_on/off 2011-01-21 14:08:33 +11:00
Kbuild archs: replace unifdef-y with header-y 2010-08-14 22:26:51 +02:00
kdebug.h
kdump.h powerpc: Move kdump default base address to 64MB on 64bit 2010-06-15 15:02:32 +10:00
kexec.h powerpc: Convert old cpumask API into new one 2011-05-04 15:22:59 +10:00
keylargo.h
kgdb.h kgdb,ppc: Individual register get/set for ppc 2010-10-29 13:14:42 -05:00
kmap_types.h kdb: core for kgdb back end (2 of 2) 2010-05-20 21:04:21 -05:00
kprobes.h Fix common misspellings 2011-03-31 11:26:23 -03:00
kvm.h KVM: PPC: Implement Level interrupts on Book3S 2010-10-24 10:52:19 +02:00
kvm_44x.h
kvm_asm.h powerpc: Base support for exceptions using HSRR0/1 2011-04-20 11:03:22 +10:00
kvm_book3s.h KVM: PPC: Implement correct SID mapping on Book3s_32 2010-10-24 10:52:15 +02:00
kvm_book3s_32.h KVM: PPC: Add kvm_book3s_32.h 2010-05-17 12:18:23 +03:00
kvm_book3s_64.h KVM: PPC: Add kvm_book3s_64.h 2010-05-17 12:18:21 +03:00
kvm_book3s_asm.h powerpc: Base support for exceptions using HSRR0/1 2011-04-20 11:03:22 +10:00
kvm_booke.h KVM: PPC: Improve indirect svcpu accessors 2010-05-17 12:18:26 +03:00
kvm_e500.h KVM: PPC E500: fix tlbcfg emulation 2010-03-01 12:36:06 -03:00
kvm_fpu.h powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} 2010-09-02 14:07:32 +10:00
kvm_host.h KVM: PPC: Add book3s_32 tlbie flush acceleration 2010-10-24 10:50:58 +02:00
kvm_para.h KVM: PPC: Move of include to __KERNEL__ section 2010-10-24 10:52:23 +02:00
kvm_ppc.h KVM: PPC: Implement hypervisor interface 2010-10-24 10:50:45 +02:00
libata-portmap.h
linkage.h
local.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2010-03-03 07:34:18 -08:00
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
lppaca.h powerpc: Ensure dtl buffers do not cross 4k boundary 2011-05-19 14:30:41 +10:00
lv1call.h
machdep.h powerpc: Move smp_ops_t from machdep.h to smp.h 2011-05-19 15:31:01 +10:00
macio.h of/device: Replace of_device with platform_device in includes and core code 2010-07-24 09:58:21 -06:00
mc146818rtc.h
mediabay.h
memblock.h memblock: Introduce default allocation limit and use it to replace explicit ones 2010-08-05 12:56:07 +10:00
mman.h
mmu-8xx.h
mmu-40x.h
mmu-44x.h powerpc/47x: Base ppc476 support 2010-05-05 09:11:10 -04:00
mmu-book3e.h powerpc: Rename slb0_limit() to safe_stack_limit() and add Book3E support 2011-05-06 13:32:24 +10:00
mmu-hash32.h
mmu-hash64.h powerpc: Add Initiate Coprocessor Store Word (icswx) support 2011-05-04 15:19:26 +10:00
mmu.h powerpc: Use new CPU feature bit to select 2.06 tlbie 2011-05-04 15:19:26 +10:00
mmu_context.h powerpc: Add Initiate Coprocessor Store Word (icswx) support 2011-05-04 15:19:26 +10:00
mmzone.h powerpc: Add memory_hotplug_max() 2010-11-29 15:48:21 +11:00
module.h module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y 2009-12-15 16:28:34 +10:30
mpc5xxx.h
mpc6xx.h
mpc8xx.h
mpc52xx.h powerpc/5200: add mpc5200_psc_ac97_gpio_reset 2010-08-06 20:49:18 -06:00
mpc52xx_psc.h powerpc/5200: add mpc5200_psc_ac97_gpio_reset 2010-08-06 20:49:18 -06:00
mpc5121.h powerpc/5121: shared DIU framebuffer support 2010-08-01 17:06:44 -06:00
mpc8260.h
mpic.h powerpc: Make MPIC honor the "pic-no-reset" device tree property 2011-03-21 11:01:32 +11:00
msgbuf.h
msi_bitmap.h
mutex.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
nvram.h powerpc/nvram: Generalize code for OS partitions in NVRAM 2011-03-04 18:19:04 +11:00
ohare.h
oprofile_impl.h
paca.h powerpc: Save Come-From Address Register (CFAR) in exception frame 2011-05-04 15:22:09 +10:00
page.h powerpc: ARCH_PFN_OFFSET should be unsigned long 2011-03-30 10:44:07 +11:00
page_32.h dma-mapping: rename ARCH_KMALLOC_MINALIGN to ARCH_DMA_MINALIGN 2010-08-11 08:59:21 -07:00
page_64.h powerpc: Simplify 4k/64k copy_page logic 2011-05-19 14:30:42 +10:00
param.h powerpc: Simplify param.h by including <asm-generic/param.h> 2010-02-03 17:39:48 +11:00
parport.h powerpc: Correct parport interrupt parsing 2010-05-06 16:49:26 +10:00
pasemi_dma.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pci-bridge.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pci.h powerpc/pci: Make both ppc32 and ppc64 use sysdata for pci_controller 2011-02-04 11:46:51 -07:00
percpu.h powerpc: Optimise per cpu accesses on 64bit 2010-07-09 11:28:30 +10:00
perf_event.h perf: Drop the skip argument from perf_arch_fetch_regs_caller 2010-06-08 23:31:27 +02:00
perf_event_fsl_emb.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
perf_event_server.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
pgalloc-32.h
pgalloc-64.h powerpc/mm: Track backing pages allocated by vmemmap_populate() 2010-05-06 16:49:27 +10:00
pgalloc.h
pgtable-ppc32.h mm: remove pte_*map_nested() 2010-10-26 16:52:08 -07:00
pgtable-ppc64-4k.h
pgtable-ppc64-64k.h
pgtable-ppc64.h powerpc/mm: Fix compiler warning in pgtable-ppc64.h [-Wunused-but-set-variable] 2011-05-19 14:30:41 +10:00
pgtable.h powerpc: Add pgprot_writecombine 2011-03-02 16:50:24 +11:00
phyp_dump.h
pmac_feature.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
poll.h
posix_types.h
ppc-opcode.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
ppc-pci.h powerpc/pci: Fix return type of BUID_{HI,LO} macros 2010-10-13 16:19:20 +11:00
ppc4xx.h
ppc_asm.h powerpc: Add more Power7 specific definitions 2011-04-20 11:03:21 +10:00
processor.h powerpc: Per process DSCR + some fixes (try#4) 2011-04-27 14:18:19 +10:00
prom.h of/pci: move of_irq_map_pci() into generic code 2011-02-04 11:46:50 -07:00
ps3.h
ps3av.h
ps3fb.h
ps3gpu.h
ps3stor.h
pSeries_reconfig.h powerpc/pseries: Add page coalescing support 2011-05-04 16:02:21 +10:00
pte-8xx.h
pte-40x.h
pte-44x.h
pte-book3e.h
pte-common.h powerpc: Don't write protect kernel text with CONFIG_DYNAMIC_FTRACE enabled 2011-04-18 13:08:21 +10:00
pte-fsl-booke.h
pte-hash32.h
pte-hash64-4k.h
pte-hash64-64k.h
pte-hash64.h
ptrace.h powerpc/ptrace: Remove BUG_ON when full register set not available 2011-03-21 11:18:14 +11:00
qe.h
qe_ic.h powerpc: qe_ic: Rename get_irq_desc_data and get_irq_desc_chip 2011-03-30 15:38:02 +02:00
reg.h powerpc: Save Come-From Address Register (CFAR) in exception frame 2011-05-04 15:22:09 +10:00
reg_8xx.h
reg_a2.h powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
reg_booke.h powerpc: Add MSR_64BIT 2011-04-27 14:18:43 +10:00
reg_fsl_emb.h powerpc/perf: e500 support 2010-03-05 03:04:08 -06:00
resource.h
rheap.h
rio.h
rtas.h powerpc/pseries: Add RTAS event log v6 definition 2011-05-06 13:18:59 +10:00
rtc.h
rwsem.h rwsem: Move duplicate function prototypes to linux/rwsem.h 2011-01-27 12:30:39 +01:00
scatterlist.h remove needless ISA_DMA_THRESHOLD 2010-08-07 18:15:50 +02:00
scom.h powerpc: Add SCOM infrastructure 2011-04-20 17:01:19 +10:00
seccomp.h
sections.h
sembuf.h
serial.h
setjmp.h
setup.h
sfp-machine.h Revert "endian: #define __BYTE_ORDER" 2010-05-26 08:30:15 -07:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
smp.h powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
smu.h of: kill struct of_device 2010-06-28 12:41:33 -07:00
socket.h
sockios.h
sparsemem.h Revert "powerpc/mm: Bump SECTION_SIZE_BITS from 16MB to 256MB" 2010-04-13 13:54:39 +10:00
spinlock.h powerpc: Rename LWSYNC_ON_SMP to PPC_RELEASE_BARRIER, ISYNC_ON_SMP to PPC_ACQUIRE_BARRIER 2010-02-17 14:03:15 +11:00
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spu.h powerpc/kdump: Move crash_kexec_stop_spus to kdump crash handler 2011-01-21 14:08:36 +11:00
spu_csa.h
spu_info.h
spu_priv1.h Fix common misspellings 2011-03-31 11:26:23 -03:00
sstep.h
stat.h
statfs.h
string.h
suspend.h
swab.h
swiotlb.h
synch.h powerpc: Use lwsync for acquire barrier if CPU supports it 2010-02-17 14:03:16 +11:00
syscall.h powerpc: Use correct ccr bit for syscall error status 2010-03-19 16:38:16 +11:00
syscalls.h improve sys_newuname() for compat architectures 2010-03-12 15:52:32 -08:00
systbl.h powerpc: Wire up new syscalls 2011-03-30 10:44:11 +11:00
system.h powerpc: Remove alloc_maybe_bootmem for zalloc version 2011-05-19 15:30:57 +10:00
tce.h
termbits.h tty: Add EXTPROC support for LINEMODE 2010-08-10 13:47:39 -07:00
termios.h
thread_info.h mm: NUMA aware alloc_thread_info_node() 2011-03-22 17:44:01 -07:00
time.h powerpc: Account time using timebase rather than PURR 2010-09-02 14:07:31 +10:00
timex.h
tlb.h
tlbflush.h powerpc/mm: Standardise on MMU_NO_CONTEXT 2011-04-20 16:59:20 +10:00
topology.h powerpc/pseries: Fix build of topology stuff without CONFIG_NUMA 2011-01-12 10:56:29 +11:00
trace.h
tsi108.h
tsi108_irq.h
tsi108_pci.h
types.h remove dma64_addr_t 2011-03-23 19:47:18 -07:00
uaccess.h
ucc.h
ucc_fast.h
ucc_slow.h
ucontext.h
udbg.h powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
uic.h
unaligned.h
uninorth.h Fix common misspellings 2011-03-31 11:26:23 -03:00
unistd.h powerpc: Wire up new syscalls 2011-03-30 10:44:11 +11:00
user.h
vdso.h
vdso_datapage.h Fix common misspellings 2011-03-31 11:26:23 -03:00
vga.h
vio.h
wsp.h powerpc: Add WSP platform 2011-05-06 13:32:35 +10:00
xics.h powerpc: Consolidate ipi message mux and demux 2011-05-19 15:31:03 +10:00
xilinx_intc.h
xilinx_pci.h
xmon.h
xor.h