OpenCloudOS-Kernel/arch/openrisc/kernel
Stafford Horne ae15a41a64 openrisc: entry: Fix delay slot exception detection
Originally in patch e6d20c55a4 ("openrisc: entry: Fix delay slot
detection") I fixed delay slot detection, but only for QEMU.  We missed
that hardware delay slot detection using delay slot exception flag (DSX)
was still broken.  This was because QEMU set the DSX flag in both
pre-exception supervision register (ESR) and supervision register (SR)
register, but on real hardware the DSX flag is only set on the SR
register during exceptions.

Fix this by carrying the DSX flag into the SR register during exception.
We also update the DSX flag read locations to read the value from the SR
register not the pt_regs SR register which represents ESR.  The ESR
should never have the DSX flag set.

In the process I updated/removed a few comments to match the current
state.  Including removing a comment saying that the DSX detection logic
was inefficient and needed to be rewritten.

I have tested this on QEMU with a patch ensuring it matches the hardware
specification.

Link: https://lists.gnu.org/archive/html/qemu-devel/2018-07/msg00000.html
Fixes: e6d20c55a4 ("openrisc: entry: Fix delay slot detection")
Signed-off-by: Stafford Horne <shorne@gmail.com>
2018-07-01 16:48:24 +09:00
..
.gitignore openrisc: Add .gitignore 2017-02-25 04:14:36 +09:00
Makefile OpenRISC updates for v4.15 2017-11-13 12:12:00 -08:00
asm-offsets.c openrisc: use kbuild.h instead of defining macros in asm-offset.c 2012-10-25 15:54:33 +02:00
dma.c dma-debug: move initialization to common code 2018-05-08 13:02:42 +02:00
entry.S openrisc: entry: Fix delay slot exception detection 2018-07-01 16:48:24 +09:00
head.S openrisc: entry: Fix delay slot exception detection 2018-07-01 16:48:24 +09:00
irq.c openrisc: Get rid of handle_IRQ 2014-09-03 13:11:02 +00:00
module.c openrisc: Refactor 16-bit constant relocation 2013-11-05 16:27:55 +01:00
or32_ksyms.c openrisc: Switch to use export.h instead of module.h 2017-05-15 22:02:33 +09:00
process.c OpenRISC fixes for 4.13 2017-07-07 13:58:49 -07:00
prom.c openrisc: remove unnecessary prom.c includes 2013-10-09 11:39:01 -05:00
ptrace.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/task_stack.h> 2017-03-02 08:42:36 +01:00
setup.c openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
signal.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
smp.c openrisc: fix possible deadlock scenario during timer sync 2017-11-03 14:01:17 +09:00
stacktrace.c openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00
sync-timer.c openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
sys_call_table.c OpenRISC: System calls 2011-07-22 18:46:34 +02:00
time.c openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
traps.c openrisc: entry: Fix delay slot exception detection 2018-07-01 16:48:24 +09:00
unwinder.c openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00
vmlinux.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vmlinux.lds.S openrisc: Make THREAD_SIZE available to vmlinux.lds 2018-01-09 23:21:02 +00:00