OpenCloudOS-Kernel/arch/tile/include/asm
Chris Metcalf 35f059761c tilegx: change how we find the kernel stack
Previously, we used a special-purpose register (SPR_SYSTEM_SAVE_K_0)
to hold the CPU number and the top of the current kernel stack
by using the low bits to hold the CPU number, and using the high
bits to hold the address of the page just above where we'd want
the kernel stack to be.  That way we could initialize a new SP
when first entering the kernel by just masking the SPR value and
subtracting a couple of words.

However, it's actually more useful to be able to place an arbitrary
kernel-top value in the SPR.  This allows us to create a new stack
context (e.g. for virtualization) with an arbitrary top-of-stack VA.
To make this work, we now store the CPU number in the high bits,
above the highest legal VA bit (42 bits in the current tilegx
microarchitecture).  The full 42 bits are thus available to store the
top of stack value.  Getting the current cpu (a relatively common
operation) is still fast; it's now a shift rather than a mask.

We make this change only for tilegx, since tilepro has too few SPR
bits to do this, and we don't need this support on tilepro anyway.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
2013-08-30 11:56:58 -04:00
..
Kbuild tile: support kprobes on tilegx 2013-08-30 11:55:53 -04:00
asm-offsets.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
atomic.h tile: support atomic64_dec_if_positive() 2013-03-22 15:47:00 -04:00
atomic_32.h arch/tile: optimize get_user/put_user and friends 2012-05-25 12:48:23 -04:00
atomic_64.h Disintegrate asm/system.h for Tile 2012-03-28 18:30:03 +01:00
backtrace.h arch/tile: refactor backtracing code 2011-05-02 13:49:14 -04:00
barrier.h Disintegrate asm/system.h for Tile 2012-03-28 18:30:03 +01:00
bitops.h tile: fix bug where fls(0) was not returning 0 2012-05-25 15:00:43 -04:00
bitops_32.h Disintegrate asm/system.h for Tile 2012-03-28 18:30:03 +01:00
bitops_64.h arch/tile: fix gcc 4.6 warnings in <asm/bitops_64.h> 2012-04-02 12:00:15 -04:00
cache.h tilegx pci: support I/O to arbitrarily-cached pages 2012-07-18 16:40:05 -04:00
cacheflush.h tile: convert uses of "inv" to "finv" 2013-07-31 11:51:19 -04:00
checksum.h arch/tile: break out the "csum a long" function to <asm/checksum.h> 2012-07-11 16:04:57 -04:00
cmpxchg.h arch: tile: include: asm: add cmpxchg64() definition 2013-07-17 12:45:38 -04:00
compat.h tile: work around bug in the generic sys_llseek 2013-03-04 11:19:09 -05:00
current.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
delay.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
device.h tile pci: enable IOMMU to support DMA for legacy devices 2012-07-18 16:40:17 -04:00
dma-mapping.h tile PCI RC: add dma_get_required_mask() 2013-08-06 12:56:00 -04:00
dma.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
edac.h drivers/edac: provide support for tile architecture 2011-03-10 13:30:14 -05:00
elf.h tile: support ASLR fully 2013-08-30 11:56:25 -04:00
fixmap.h tile: remove set/clear_fixmap APIs 2013-08-30 11:56:38 -04:00
ftrace.h tile: support ftrace on tilegx 2013-08-30 10:20:13 -04:00
futex.h tile: use proper .align directives on __ex_table sections 2013-08-30 11:56:11 -04:00
hardirq.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hardwall.h UAPI: (Scripted) Disintegrate arch/tile/include/asm 2012-10-09 09:47:47 +01:00
highmem.h highmem: kill all __kmap_atomic() 2012-03-20 21:48:30 +08:00
homecache.h tile: support CONFIG_PREEMPT 2013-08-13 16:26:01 -04:00
hugetlb.h mm/hugetlb: add more arch-defined huge_pte functions 2013-04-29 15:54:33 -07:00
hv_driver.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
hw_irq.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
ide.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
io.h tile: fix some -Wsign-compare warnings 2013-08-30 11:56:50 -04:00
irq.h arch/tile: use 0 for IRQ_RESCHEDULE instead of 1 2012-04-02 12:00:16 -04:00
irqflags.h tile: support CONFIG_PREEMPT 2013-08-13 16:26:01 -04:00
kdebug.h tile: support kprobes on tilegx 2013-08-30 11:55:53 -04:00
kexec.h arch/tile: support kexec() for tilegx 2012-05-25 12:48:25 -04:00
kmap_types.h tile: remove km_type definitions 2012-07-24 15:27:32 +08:00
kprobes.h tile: support kprobes on tilegx 2013-08-30 11:55:53 -04:00
linkage.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
mmu.h tile: implement gettimeofday() via vDSO 2013-08-13 16:26:21 -04:00
mmu_context.h arch/tile: Allow tilegx to build with either 16K or 64K page size 2012-05-25 12:48:24 -04:00
mmzone.h tile: fix some -Wsign-compare warnings 2013-08-30 11:56:50 -04:00
module.h arch/tile: Allow tilegx to build with either 16K or 64K page size 2012-05-25 12:48:24 -04:00
page.h tile: implement gettimeofday() via vDSO 2013-08-13 16:26:21 -04:00
pci.h tile PCI RC: remove stale include of linux/numa.h 2013-08-06 12:56:16 -04:00
percpu.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
pgalloc.h arch/tile: Allow tilegx to build with either 16K or 64K page size 2012-05-25 12:48:24 -04:00
pgtable.h consolidate io_remap_pfn_range definitions 2013-06-29 12:46:35 +04:00
pgtable_32.h arch/tile: Allow tilegx to build with either 16K or 64K page size 2012-05-25 12:48:24 -04:00
pgtable_64.h arch/tile: Allow tilegx to build with either 16K or 64K page size 2012-05-25 12:48:24 -04:00
processor.h tilegx: change how we find the kernel stack 2013-08-30 11:56:58 -04:00
ptrace.h tile: support kprobes on tilegx 2013-08-30 11:55:53 -04:00
sections.h tile: implement gettimeofday() via vDSO 2013-08-13 16:26:21 -04:00
setup.h tile: various console improvements 2013-08-12 14:46:18 -04:00
sigframe.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
signal.h UAPI: (Scripted) Disintegrate arch/tile/include/asm 2012-10-09 09:47:47 +01:00
smp.h smp: introduce a generic on_each_cpu_mask() function 2012-03-28 17:14:35 -07:00
spinlock.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
spinlock_32.h Disintegrate asm/system.h for Tile 2012-03-28 18:30:03 +01:00
spinlock_64.h tile: fix some -Wsign-compare warnings 2013-08-30 11:56:50 -04:00
spinlock_types.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
stack.h arch/tile: various bugs in stack backtracer 2012-04-02 12:12:45 -04:00
string.h tile: optimize strnlen using SIMD instructions 2013-08-01 20:08:51 -04:00
switch_to.h tile: support GENERIC_KERNEL_THREAD and GENERIC_KERNEL_EXECVE 2012-10-20 13:13:29 -04:00
syscall.h tile: move declaration of sys_call_table to <asm/syscall.h> 2013-03-21 15:39:35 -04:00
syscalls.h tile: move declaration of sys_call_table to <asm/syscall.h> 2013-03-21 15:39:35 -04:00
thread_info.h tile: fast-path unaligned memory access for tilegx 2013-08-13 16:04:10 -04:00
tile-desc.h arch/tile: factor out <arch/opcode.h> header 2011-11-03 16:58:54 -04:00
tile-desc_32.h arch/tile: factor out <arch/opcode.h> header 2011-11-03 16:58:54 -04:00
tile-desc_64.h arch/tile: factor out <arch/opcode.h> header 2011-11-03 16:58:54 -04:00
timex.h Disintegrate asm/system.h for Tile 2012-03-28 18:30:03 +01:00
tlb.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
tlbflush.h arch/tile: support multiple huge page sizes dynamically 2012-05-25 12:48:27 -04:00
topology.h tile: Remove SD_PREFER_LOCAL leftover 2012-08-15 13:22:55 +02:00
traps.h tile: fast-path unaligned memory access for tilegx 2013-08-13 16:04:10 -04:00
uaccess.h tile: use proper .align directives on __ex_table sections 2013-08-30 11:56:11 -04:00
unaligned.h tile: improve big-endian support 2013-08-13 16:26:05 -04:00
unistd.h burying unused conditionals 2013-02-14 09:21:15 -05:00
user.h arch/tile: core support for Tilera 32-bit chips. 2010-06-04 17:11:18 -04:00
vdso.h tile: implement gettimeofday() via vDSO 2013-08-13 16:26:21 -04:00
vga.h arch/tile: various header improvements for building drivers 2011-05-04 14:40:54 -04:00