linux/arch/mips/include/asm
Corey Minyard 9fef686863 MIPS: Make SAVE_SOME more standard
Modify the SAVE_SOME macro to look more like a standard
function, doing the arithmetic for the frame on the SP
register instead of copying it from K1, and by saving
the stored EPC from the RA.  This lets the get_frame_info()
function process this function like any other.  It also
remove an instruction or two from the kernel entry,
making it more efficient.

unwind_stack_by_address() has special handling for
the top of the interrupt stack, but without this change
unwinding will still fail if you get an interrupt while
handling an interrupt and try to do a traceback from
the second interrupt.

This change modifies the get_saved_sp macro to
optionally store the fetched value right into sp and store the
old SP value into K0.  Then it's just a matter of subtracting
the frame from SP and storing the old SP from K0.

This required changing the DADDI workaround a bit, since K0
holds the SP, we had to use K1 for AT.  But it eliminated
some of the special handling for the DADDI workaround.

Saving the RA register was moved up to before fetching the
CP0_EPC register, so the CP0_EPC register could be stored
into RA and the saved.  This lets the traceback code know
where RA is actually stored.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16991/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2017-09-06 11:01:26 +02:00
..
dec
emma
fw MIPS: Malta: Remove fw_memblock_t abstraction 2015-11-11 08:35:45 +01:00
ip32
lasat
mach-ar7 MIPS: Remove all the uses of custom gpio.h 2015-09-03 12:08:02 +02:00
mach-ath25 MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-ath79 irqchip/ath79-cpu: Move the CPU IRQ driver from arch/mips/ath79/ 2016-02-17 13:47:19 +00:00
mach-au1x00 MIPS: Alchemy: update cpu feature overrides 2017-08-29 15:21:53 +02:00
mach-bcm47xx MIPS: BCM47XX: Add Luxul devices to the database 2017-01-25 02:51:12 +01:00
mach-bcm63xx MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-bmips MIPS: BMIPS: Add BCM6358 support 2016-05-13 14:02:09 +02:00
mach-cavium-octeon MIPS: Octeon: Expose support for mips32r1, mips32r2 and mips64r1 2017-08-29 15:21:52 +02:00
mach-cobalt MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-db1x00
mach-dec MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-emma2rh
mach-generic MIPS: generic: Set RTC_ALWAYS_BCD to 0 2017-06-28 12:22:41 +02:00
mach-ip22 MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-ip27 MIPS: NUMA: Remove the unused parent_node() macro 2017-08-29 15:21:51 +02:00
mach-ip28 MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-ip32 MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-jazz
mach-jz4740 Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2017-07-15 10:59:54 -07:00
mach-lantiq MIPS: lantiq: remove ltq_reset_cause() and ltq_boot_select() 2017-09-04 21:19:02 +02:00
mach-lasat
mach-loongson32 MIPS: Loongson1: Add watchdog support for Loongson1 board 2017-01-03 16:34:42 +01:00
mach-loongson64 MIPS: NUMA: Remove the unused parent_node() macro 2017-08-29 15:21:51 +02:00
mach-malta MIPS: Add definitions of SegCtl registers and use them 2016-05-28 12:35:04 +02:00
mach-netlogic MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-paravirt MIPS: paravirt: Fix undefined reference to smp_bootstrap 2016-09-13 16:45:15 +02:00
mach-pic32 MIPS: Add support for PIC32MZDA platform 2016-01-24 02:53:28 +01:00
mach-pistachio MIPS: Remove all the uses of custom gpio.h 2015-09-03 12:08:02 +02:00
mach-pmcs-msp71xx
mach-pnx833x
mach-ralink MIPS: ralink: Fix build error due to missing header 2017-07-18 23:59:18 +02:00
mach-rc32434 MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-rm MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-sibyte MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-tx39xx
mach-tx49xx MIPS16e2: Provide feature overrides for non-MIPS16 systems 2017-07-11 14:13:06 +02:00
mach-vr41xx
mach-xilfpga MIPS: xilfpga: Add mipsfpga platform code 2015-11-11 08:38:44 +01:00
mips-boards irqchip: mips-gic: Move various definitions to the driver 2017-09-04 13:53:14 +02:00
netlogic MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
octeon MIPS: Octeon: Allow access to CIU3 IRQ domains. 2017-09-04 21:19:03 +02:00
pci MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
sgi MIPS: IP22/IP28: Fix typo 2016-05-28 12:35:08 +02:00
sibyte MIPS: BCM1480: bcm1480_regs.h: strip redundant comments 2016-05-13 14:02:13 +02:00
sn MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
txx9
vr41xx
xtalk MIPS: Xtalk: Update xwidget.h with known Xtalk device numbers 2015-06-21 21:54:21 +02:00
abi.h signals: Prepare to split out <linux/signal_types.h> from <linux/signal.h> 2017-03-02 08:42:37 +01:00
addrspace.h MIPS: Adjust MIPS64 CAC_BASE to reflect Config.K0 2016-10-06 18:02:35 +02:00
amon.h
arch_hweight.h
asm-eva.h
asm-offsets.h
asm-prototypes.h MIPS: Fix modversioning of _mcount symbol 2017-04-12 15:13:53 +02:00
asm.h MIPS: End asm function prologue macros with .insn 2017-01-03 16:34:49 +01:00
asmmacro-32.h Merge branch '4.1-fp' into mips-for-linux-next 2015-04-13 16:01:37 +02:00
asmmacro-64.h
asmmacro.h MIPS: Add a missing ".set pop" in an early commit 2016-09-13 17:25:11 +02:00
atomic.h locking/atomic, arch/mips: Convert to _relaxed atomics 2016-06-16 10:48:34 +02:00
barrier.h MIPS: Barrier: Add definitions of SYNC stype values 2016-10-04 16:13:57 +02:00
bcache.h MIPS: Introduce API for enabling & disabling L2 prefetch 2015-10-26 09:49:41 +01:00
bitops.h MIPS: Move definitions for 32/64-bit agonstic inline assembler to new file. 2016-05-09 12:00:05 +02:00
bitrev.h MIPS: Implement __arch_bitrev* using bitswap for MIPSr6 2016-05-13 14:02:17 +02:00
bmips-spaces.h MIPS: BMIPS: Define BMIPS_FIXADDR_TOP in asm/bmips-spaces.h 2015-06-21 21:53:30 +02:00
bmips.h MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
bootinfo.h MIPS: platform: Allow for DTB to be moved during kernel relocation 2017-01-03 16:34:45 +01:00
branch.h MIPS: Fix unaligned PC interpretation in `compute_return_epc' 2017-06-29 02:42:26 +02:00
break.h
bug.h
bugs.h
cache.h Revert "MIPS: Don't unnecessarily include kmalloc.h into <asm/cache.h>." 2017-08-07 12:01:17 +02:00
cacheflush.h MIPS: c-r4k: Split user/kernel flush_icache_range() 2016-10-04 16:13:57 +02:00
cacheops.h MIPS: Loongson: Add Loongson-3A R2 basic support 2016-05-13 14:02:14 +02:00
cdmm.h MIPS: CDMM: Add builtin_mips_cdmm_driver() macro 2015-11-05 11:15:41 +01:00
cevt-r4k.h MIPS: cevt-r4k: Migrate to new 'set-state' interface 2015-09-03 12:07:52 +02:00
checksum.h new helper: uaccess_kernel() 2017-03-28 16:43:25 -04:00
clock.h
clocksource.h MIPS: VDSO: Add implementations of gettimeofday() and clock_gettime() 2015-11-11 08:36:41 +01:00
cmp.h
cmpxchg.h MIPS: cmpxchg: Rearrange __xchg() arguments to match xchg() 2017-06-29 02:42:25 +02:00
compat-signal.h Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
compat.h MIPS: Clean up compat_siginfo_t 2015-11-12 11:35:47 +01:00
compiler.h
cop2.h
cpu-features.h MIPS: Introduce cpu_tcache_line_size 2017-08-08 00:02:27 +02:00
cpu-info.h MIPS: Add CPU cluster number accessors 2017-08-30 00:57:27 +02:00
cpu-type.h MIPS: Remove unused R6000 support 2017-08-29 15:21:51 +02:00
cpu.h MIPS: Remove unused R6000 support 2017-08-29 15:21:51 +02:00
cpufeature.h MIPS: Enable GENERIC_CPU_AUTOPROBE 2017-04-10 11:56:04 +02:00
debug.h MIPS: Declare mips_debugfs_dir in a header 2015-10-26 09:49:42 +01:00
delay.h
device.h treewide: Move dma_ops from struct dev_archdata into struct device 2017-01-24 12:23:35 -05:00
div64.h
dma-coherence.h MIPS: Support per-device DMA coherence 2016-10-06 18:02:01 +02:00
dma-mapping.h treewide: Consolidate get_dma_ops() implementations 2017-01-24 12:23:35 -05:00
dma.h
ds1287.h
dsemul.h MIPS: Use per-mm page to execute branch delay slot instructions 2016-08-02 09:28:53 +02:00
dsp.h
edac.h EDAC: Cleanup atomic_scrub mess 2015-05-28 15:31:53 +02:00
elf.h sched/headers: Prepare to remove the <linux/mm_types.h> dependency from <linux/sched.h> 2017-03-02 08:42:37 +01:00
errno.h
eva.h
exec.h
extable.h mips: separate extable.h, switch module.h to it 2016-10-05 18:36:18 -04:00
fb.h
fixmap.h
floppy.h MIPS: Don't use dma_cache_sync to implement fd_cacheflush 2017-08-30 00:57:29 +02:00
fpregdef.h
fpu_emulator.h MIPS: math-emu: Add FP emu debugfs stats for individual instructions 2017-08-29 15:21:57 +02:00
fpu.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2017-04-06 13:16:34 -07:00
ftrace.h
futex.h
gio_device.h
gt64120.h
hardirq.h
hazards.h MIPS: hazards.h: Fix typo 2016-05-28 12:35:06 +02:00
highmem.h MIPS: highmem: ensure that we don't use more than one page for PTEs 2017-06-08 14:51:58 +02:00
hpet.h
hugetlb.h mm/hugetlb: remove arch_prepare/release_hugepage from arch headers 2015-06-25 17:00:35 -07:00
hw_irq.h
i8259.h MIPS: IRQ: Remove useless i8259_of_init() prototype. 2017-01-03 16:34:48 +01:00
ide.h
idle.h
inst.h
io.h MIPS: Add __ioread64_copy 2017-09-04 13:53:14 +02:00
irq_cpu.h
irq_gt641xx.h
irq_regs.h MIPS: Select CONFIG_HANDLE_DOMAIN_IRQ and make it work. 2016-05-13 14:01:40 +02:00
irq.h MIPS: Fix minimum alignment requirement of IRQ stack 2017-07-11 14:13:06 +02:00
irqflags.h MIPS: Loongson-3: Introduce CONFIG_LOONGSON3_ENHANCEMENT 2016-05-13 14:02:15 +02:00
isadep.h
jazz.h
jazzdma.h
jump_label.h locking/static_keys: Add a new static_key interface 2015-08-03 11:34:15 +02:00
Kbuild MIPS: Use queued spinlocks (qspinlock) 2017-06-29 02:42:26 +02:00
kdebug.h MIPS: Add uprobes support. 2015-09-03 12:08:05 +02:00
kexec.h mips/panic: replace smp_send_stop() with kdump friendly version in panic path 2016-10-11 15:06:32 -07:00
kgdb.h MIPS: Get rid of 'kgdb_early_setup' cruft. 2015-06-21 21:54:10 +02:00
kmap_types.h
kprobes.h MIPS: kprobes: flush_insn_slot should flush only if probe initialised 2017-06-08 15:42:05 +02:00
kvm_host.h kvm: make KVM_COALESCED_MMIO_PAGE_OFFSET public 2017-04-07 16:49:01 +02:00
kvm_para.h
linkage.h MIPS: Remove "__weak" definition from arch-specific linkage.h 2015-09-03 12:07:39 +02:00
llsc.h MIPS: Move definitions for 32/64-bit agonstic inline assembler to new file. 2016-05-09 12:00:05 +02:00
local.h
m48t37.h
maar.h MIPS: Separate MAAR V bit into VL and VH for XPA 2017-03-28 14:49:01 +01:00
machine.h MIPS: generic: Abstract FDT fixup application 2017-06-28 12:22:41 +02:00
mc146818-time.h
mc146818rtc.h
mips_machine.h
mips_mt.h MIPS: MT: Fix typo 2016-05-28 12:35:07 +02:00
mips-cm.h MIPS: CPS: Cluster support for topology functions 2017-08-30 00:57:28 +02:00
mips-cpc.h MIPS: CPS: Have asm/mips-cps.h include CM & CPC headers 2017-08-30 00:57:27 +02:00
mips-cps.h MIPS: GIC: Introduce asm/mips-gic.h with accessor functions 2017-08-30 14:03:40 +02:00
mips-gic.h irqchip: mips-gic: Move gic_get_c0_*_int() to asm/mips-gic.h 2017-09-04 13:53:14 +02:00
mips-r2-to-r6-emul.h MIPS: traps: Correct the SIGTRAP debug ABI in do_watch' and do_trap_or_bp' 2016-04-03 12:32:09 +02:00
mipsmtregs.h
mipsprom.h
mipsregs.h MIPS: Add accessor & bit definitions for GlobalNumber 2017-08-30 00:57:26 +02:00
mmu_context.h sched/headers: Prepare to remove the <linux/mm_types.h> dependency from <linux/sched.h> 2017-03-02 08:42:37 +01:00
mmu.h MIPS: Use per-mm page to execute branch delay slot instructions 2016-08-02 09:28:53 +02:00
mmzone.h
module.h MIPS: Remove unused R6000 support 2017-08-29 15:21:51 +02:00
msa.h MIPS: Fix MSA asm warnings in control reg accessors 2016-07-24 12:45:00 +02:00
msc01_ic.h
nile4.h
paccess.h
page.h treewide: replace config_enabled() with IS_ENABLED() (2nd round) 2016-08-26 17:39:35 -07:00
pci.h MIPS: PCI: Remove unused busn_offset 2017-05-18 15:39:19 -05:00
perf_event.h
pgalloc.h MIPS: do not use __GFP_REPEAT for order-0 request 2017-07-12 16:26:03 -07:00
pgtable-32.h MIPS: mm: adjust PKMAP location 2017-06-08 14:51:58 +02:00
pgtable-64.h MIPS: Add 48-bit VA space (and 4-level page tables) for 4K pages. 2017-04-10 11:56:06 +02:00
pgtable-bits.h MIPS: Allow RIXI to be used on non-R2 or R6 cores 2016-05-13 15:30:25 +02:00
pgtable.h mm: move phys_mem_access_prot_allowed() declaration to pgtable.h 2016-10-07 18:46:29 -07:00
pm-cps.h MIPS: pm-cps: Add MIPSr6 CPU support 2016-10-04 16:13:57 +02:00
pm.h
pmon.h
prefetch.h
processor.h locking/core: Provide common cpu_relax_yield() definition 2016-11-17 08:17:36 +01:00
prom.h MIPS: prepare for user enabling of CONFIG_OF 2015-06-21 21:54:14 +02:00
ptrace.h MIPS: ptrace: Fix regs_return_value for kernel context 2016-10-12 14:34:45 +02:00
r4k-timer.h
r4kcache.h new helper: uaccess_kernel() 2017-03-28 16:43:25 -04:00
reboot.h
reg.h
regdef.h
rtlx.h
seccomp.h tree-wide: replace config_enabled() with IS_ENABLED() 2016-08-04 08:50:07 -04:00
setup.h MIPS: KVM: Don't hardcode restored HWREna 2016-06-15 23:58:31 +02:00
sgialib.h
sgiarcs.h MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
shmparam.h
sigcontext.h
signal.h Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2016-08-06 09:13:11 -04:00
sim.h
smp-cps.h MIPS: smp-cps: Pull boot config retrieval out of mips_cps_boot_vpes 2016-05-13 14:01:50 +02:00
smp-ops.h MIPS: CPS: Have asm/mips-cps.h include CM & CPC headers 2017-08-30 00:57:27 +02:00
smp.h MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
sni.h
socket.h
sparsemem.h
spinlock_types.h MIPS: Use queued spinlocks (qspinlock) 2017-06-29 02:42:26 +02:00
spinlock.h MIPS: Use queued spinlocks (qspinlock) 2017-06-29 02:42:26 +02:00
spram.h
stackframe.h MIPS: Make SAVE_SOME more standard 2017-09-06 11:01:26 +02:00
stackprotector.h
stacktrace.h
string.h
switch_to.h MIPS: Cleanup LLBit handling in switch_to 2017-01-03 16:34:42 +01:00
syscall.h MIPS: Correct forced syscall errors 2017-07-11 14:13:06 +02:00
termios.h Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
thread_info.h MIPS: Remove r2_emul_return from struct thread_info 2017-01-03 16:34:41 +01:00
time.h MIPS: Remove "weak" from get_c0_compare_int() declaration 2015-09-03 12:07:38 +02:00
timex.h
tlb.h MIPS: asm/tlb.h: Add UNIQUE_GUEST_ENTRYHI() macro 2017-03-28 14:49:30 +01:00
tlbdebug.h MIPS: Refactor dumping of TLB registers for r3k/r4k 2015-09-03 12:07:45 +02:00
tlbex.h MIPS: Export some tlbex internals for KVM to use 2017-02-03 15:19:01 +00:00
tlbflush.h
tlbmisc.h
topology.h MIPS: Abstract CPU core & VP(E) ID access through accessor functions 2017-08-30 00:57:26 +02:00
traps.h
txx9irq.h MIPS/IRQCHIP: Move irq_chip from arch/mips to drivers/irqchip. 2015-06-21 21:52:50 +02:00
txx9pio.h
txx9tmr.h
types.h
uaccess.h Merge branch 'work.uaccess-unaligned' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2017-07-15 11:17:52 -07:00
uasm.h MIPS: Add some instructions to uasm. 2017-06-28 12:22:39 +02:00
unistd.h trim __ARCH_WANT_SYS_OLD_GETRLIMIT 2017-05-27 15:38:02 -04:00
uprobes.h uprobes: remove function declarations from arch/{mips,s390} 2016-10-07 18:46:30 -07:00
vdso.h MIPS: VDSO: Fix conversions in do_monotonic()/do_monotonic_coarse() 2017-06-29 02:42:29 +02:00
vga.h
vpe.h MIPS: MT: Remove "weak" from vpe_run() declaration 2015-08-26 15:23:40 +02:00
war.h
watch.h MIPS: Fix watchpoint restoration 2016-05-09 12:00:02 +02:00
wbflush.h
yamon-dt.h MIPS: generic/yamon-dt: Support > 256MB of RAM 2017-06-28 12:22:41 +02:00