From: "Maciej W. Rozycki" <macro@mips.com>
To: Fredrik Noring <noring@nocrew.org>
Cc: "Jürgen Urban" <JuergenUrban@gmx.de>, linux-mips@linux-mips.org
Subject: Re: [RFC] MIPS: R5900: Workaround exception NOP execution bug (FLX05)
Date: Mon, 12 Feb 2018 09:28:59 +0000 [thread overview]
Message-ID: <alpine.DEB.2.00.1802111239380.3553@tp.orcam.me.uk> (raw)
In-Reply-To: <20180211075608.GC2222@localhost.localdomain>
On Sat, 10 Feb 2018, Fredrik Noring wrote:
> For the R5900, there are cases in which the first two instructions
> in an exception handler are executed as NOP instructions, when
> certain exceptions occur and then a bus error occurs immediately
> before jumping to the exception handler (FLX05).
>
> The corrective measure is to place NOP in the first two instruction
> locations in all exception handlers.
Well, but it would help if you only patched the handlers which are
actually used by the R5900 (and only the handlers and not other code).
> diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
> index c7b64f4a8ad3..4008298c1880 100644
> --- a/arch/mips/kernel/genex.S
> +++ b/arch/mips/kernel/genex.S
> @@ -62,6 +66,8 @@ NESTED(except_vec3_r4000, 0, sp)
> .set arch=r4000
> .set noat
> #ifdef CONFIG_CPU_R5900
> + nop
> + nop
> sync.p
> #endif
> mfc0 k1, CP0_CAUSE
This hunk makes no sense, the R5900 does not have virtual coherency
exceptions and therefore makes no use of this handler.
> @@ -174,6 +180,10 @@ LEAF(__r4k_wait)
> .align 5
> BUILD_ROLLBACK_PROLOGUE handle_int
> NESTED(handle_int, PT_SIZE, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry, this is jumped to from
`except_vec3_generic' via the `exception_handlers' dispatcher.
> @@ -275,6 +285,10 @@ NESTED(handle_int, PT_SIZE, sp)
> * to fit into space reserved for the exception handler.
> */
> NESTED(except_vec4, 0, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
> 1: j 1b /* Dummy, will be replaced */
> END(except_vec4)
This is not going to work as per the comment. See `set_except_vector'.
> @@ -285,6 +299,10 @@ NESTED(except_vec4, 0, sp)
> * unconditional jump to this vector.
> */
> NESTED(except_vec_ejtag_debug, 0, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry and can only be jumped to from the
firmware, redirected from the 0xffffffffbfc00480 hardwired EJTAG exception
entry point (not supported by the R5900 anyway).
> @@ -300,6 +318,10 @@ NESTED(except_vec_ejtag_debug, 0, sp)
> */
> BUILD_ROLLBACK_PROLOGUE except_vec_vi
> NESTED(except_vec_vi, 0, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is an exception handler entry template for vectored interrupts,
which are not supported by the R5900.
> @@ -319,6 +341,10 @@ EXPORT(except_vec_vi_end)
> * Complete the register saves and invoke the handler which is passed in $v0
> */
> NESTED(except_vec_vi_handler, 0, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry and is called from vectored
interrupt handlers.
> @@ -378,6 +404,10 @@ NESTED(except_vec_vi_handler, 0, sp)
> NESTED(ejtag_debug_handler, PT_SIZE, sp)
> .set push
> .set noat
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry, this can only be reached from one
of the dispatchers scattered throughout the arch/mips/ tree.
> @@ -424,6 +454,10 @@ EXPORT(ejtag_debug_buffer)
> * unconditional jump to this vector.
> */
> NESTED(except_vec_nmi, 0, sp)
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry and can only be jumped to from the
firmware, redirected from the 0xffffffffbfc00000 hardwired NMI exception
entry point.
> @@ -436,6 +470,10 @@ NESTED(nmi_handler, PT_SIZE, sp)
> .cfi_signal_frame
> .set push
> .set noat
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry, this can only be reached from one
of the dispatchers scattered throughout the arch/mips/ tree.
> @@ -521,6 +559,10 @@ NESTED(nmi_handler, PT_SIZE, sp)
> NESTED(handle_\exception, PT_SIZE, sp)
> .cfi_signal_frame
> .set noat
> +#ifdef CONFIG_CPU_R5900
> + nop
> + nop
> +#endif
This is not an exception handler entry, this is jumped to from
`except_vec3_generic' via the `exception_handlers' dispatcher.
> diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
> index 89b425646647..e56f988b5c20 100644
> --- a/arch/mips/kernel/scall32-o32.S
> +++ b/arch/mips/kernel/scall32-o32.S
> @@ -30,6 +30,18 @@ NESTED(handle_sys, PT_SIZE, sp)
> .set noat
> #ifdef CONFIG_CPU_R5900
> /*
> + * For the R5900, there are cases in which the first two instructions
> + * in an exception handler are executed as NOP instructions, when
> + * certain exceptions occur and then a bus error occurs immediately
> + * before jumping to the exception handler (FLX05).
> + *
> + * The corrective measure is to place NOP in the first two instruction
> + * locations in all exception handlers.
> + */
> + nop
> + nop
> +
> + /*
Likewise.
> diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
> index a18b013fd887..fc7ec8f9eed8 100644
> --- a/arch/mips/mm/tlbex.c
> +++ b/arch/mips/mm/tlbex.c
> @@ -2049,6 +2054,11 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
> {
> struct work_registers wr = build_get_work_registers(p);
>
> +#ifdef CONFIG_CPU_R5900
> + uasm_i_nop(p);
> + uasm_i_nop(p);
> +#endif
> +
Likewise.
IOW the only places that look relevant to me are: `except_vec3_generic',
`build_r4000_tlb_refill_handler' and `set_except_vector'. Please update
your change accordingly.
Maciej
next prev parent reply other threads:[~2018-02-12 9:32 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-27 13:23 [PATCH] MIPS: Add basic R5900 support Fredrik Noring
2017-08-28 13:53 ` Ralf Baechle
2017-08-28 17:11 ` Maciej W. Rozycki
2017-08-29 17:33 ` Fredrik Noring
2017-08-29 17:24 ` Maciej W. Rozycki
2017-08-29 17:24 ` Maciej W. Rozycki
2017-08-30 13:23 ` Fredrik Noring
2017-08-31 15:11 ` Maciej W. Rozycki
2017-08-31 15:11 ` Maciej W. Rozycki
2017-09-02 10:28 ` Fredrik Noring
2017-09-09 10:13 ` Maciej W. Rozycki
2017-09-09 10:13 ` Maciej W. Rozycki
2017-09-11 5:21 ` Maciej W. Rozycki
2017-09-11 5:21 ` Maciej W. Rozycki
2017-09-12 17:59 ` Fredrik Noring
2017-09-15 11:12 ` Maciej W. Rozycki
2017-09-15 11:12 ` Maciej W. Rozycki
2017-09-15 13:19 ` Fredrik Noring
2017-09-15 18:28 ` Maciej W. Rozycki
2017-09-15 18:28 ` Maciej W. Rozycki
2017-09-02 14:10 ` [PATCH v2] " Fredrik Noring
2017-09-11 5:18 ` Maciej W. Rozycki
2017-09-11 5:18 ` Maciej W. Rozycki
2017-09-11 15:17 ` Fredrik Noring
2017-09-14 13:50 ` Maciej W. Rozycki
2017-09-14 13:50 ` Maciej W. Rozycki
2017-09-16 13:34 ` Fredrik Noring
2017-09-18 17:05 ` Maciej W. Rozycki
2017-09-18 17:05 ` Maciej W. Rozycki
2017-09-18 19:24 ` Fredrik Noring
2017-09-19 12:44 ` Maciej W. Rozycki
2017-09-19 12:44 ` Maciej W. Rozycki
2017-09-20 14:54 ` Fredrik Noring
2017-09-26 11:50 ` Maciej W. Rozycki
2017-09-26 11:50 ` Maciej W. Rozycki
2017-09-27 17:21 ` Fredrik Noring
2017-09-28 12:13 ` Maciej W. Rozycki
2017-09-28 12:13 ` Maciej W. Rozycki
2017-09-30 6:56 ` Fredrik Noring
2017-10-02 9:05 ` Maciej W. Rozycki
2017-10-02 9:05 ` Maciej W. Rozycki
2017-10-02 16:33 ` Fredrik Noring
2017-10-29 17:20 ` Fredrik Noring
2017-11-10 23:34 ` Maciej W. Rozycki
2017-11-10 23:34 ` Maciej W. Rozycki
2017-11-11 16:04 ` Fredrik Noring
2018-01-29 20:27 ` Fredrik Noring
2018-01-31 23:01 ` Maciej W. Rozycki
2018-02-11 7:29 ` [RFC] MIPS: R5900: Workaround for the short loop bug Fredrik Noring
2018-02-12 9:25 ` Maciej W. Rozycki
2018-02-12 15:22 ` Fredrik Noring
2018-02-11 7:46 ` [RFC] MIPS: R5900: Use SYNC.L for data cache and SYNC.P for instruction cache Fredrik Noring
2018-02-11 7:56 ` [RFC] MIPS: R5900: Workaround exception NOP execution bug (FLX05) Fredrik Noring
2018-02-12 9:28 ` Maciej W. Rozycki [this message]
2018-02-15 19:15 ` [RFC v2] " Fredrik Noring
2018-02-15 20:49 ` Maciej W. Rozycki
2018-02-17 11:16 ` Fredrik Noring
2018-02-17 11:57 ` Maciej W. Rozycki
2018-02-17 13:38 ` Fredrik Noring
2018-02-17 15:03 ` Maciej W. Rozycki
2018-02-17 20:04 ` Fredrik Noring
2018-02-20 14:09 ` Maciej W. Rozycki
2018-02-22 17:04 ` Fredrik Noring
2018-02-18 8:47 ` Fredrik Noring
2018-02-20 14:41 ` Maciej W. Rozycki
2018-02-22 17:27 ` Fredrik Noring
2018-02-11 8:01 ` [RFC] MIPS: R5900: Workaround for CACHE instruction near branch delay slot Fredrik Noring
2018-02-11 11:16 ` Aw: " "Jürgen Urban"
2018-02-11 8:09 ` [RFC] MIPS: R5900: The ERET instruction has issues with delay slot and CACHE Fredrik Noring
2018-02-11 11:07 ` Aw: " "Jürgen Urban"
2018-02-11 8:29 ` [RFC] MIPS: R5900: Use mandatory SYNC.L in exception handlers Fredrik Noring
2018-02-11 10:33 ` Aw: " "Jürgen Urban"
2018-02-12 9:22 ` Maciej W. Rozycki
2018-02-12 9:22 ` Maciej W. Rozycki
2018-02-18 10:30 ` Fredrik Noring
2018-02-17 14:43 ` [RFC] MIPS: R5900: Workaround for saving and restoring FPU registers Fredrik Noring
2018-02-17 15:18 ` Maciej W. Rozycki
2018-02-17 17:47 ` Fredrik Noring
2018-02-17 19:33 ` Maciej W. Rozycki
2018-02-18 9:26 ` [RFC] MIPS: R5900: Workaround where MSB must be 0 for the instruction cache Fredrik Noring
2018-02-18 11:08 ` [RFC] MIPS: R5900: Add mandatory SYNC.P to all M[FT]C0 instructions Fredrik Noring
2018-03-03 12:26 ` [RFC] MIPS: PS2: Interrupt request (IRQ) support Fredrik Noring
2018-03-03 13:09 ` Maciej W. Rozycki
2018-03-03 14:14 ` Fredrik Noring
2018-04-09 15:51 ` Fredrik Noring
2018-03-18 10:45 ` Fredrik Noring
2018-03-19 19:15 ` Thomas Gleixner
2018-06-18 18:52 ` [RFC v2] " Fredrik Noring
2017-10-30 17:55 ` [PATCH v2] MIPS: Add basic R5900 support Fredrik Noring
2017-11-24 10:26 ` Maciej W. Rozycki
2017-11-24 10:26 ` Maciej W. Rozycki
2017-11-24 10:39 ` Maciej W. Rozycki
2017-11-24 10:39 ` Maciej W. Rozycki
2017-09-20 14:07 ` Fredrik Noring
2017-09-21 21:07 ` Maciej W. Rozycki
2017-09-21 21:07 ` Maciej W. Rozycki
2017-09-22 16:37 ` Fredrik Noring
2017-09-22 16:37 ` Fredrik Noring
2017-09-29 23:55 ` Maciej W. Rozycki
2017-09-29 23:55 ` Maciej W. Rozycki
2017-09-30 18:26 ` Fredrik Noring
2017-10-02 9:11 ` Maciej W. Rozycki
2017-10-02 9:11 ` Maciej W. Rozycki
2017-10-03 19:49 ` Fredrik Noring
2017-10-05 19:04 ` Fredrik Noring
2017-10-06 20:28 ` Fredrik Noring
2017-10-15 16:39 ` Fredrik Noring
2017-10-17 12:23 ` Maciej W. Rozycki
2017-10-17 12:23 ` Maciej W. Rozycki
2017-10-21 18:00 ` Fredrik Noring
2017-10-23 16:10 ` Maciej W. Rozycki
2017-10-23 16:10 ` Maciej W. Rozycki
2017-09-21 18:11 ` Paul Burton
2017-09-21 18:11 ` Paul Burton
2017-09-21 19:48 ` Maciej W. Rozycki
2017-09-21 19:48 ` Maciej W. Rozycki
2017-10-29 18:42 ` Fredrik Noring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.00.1802111239380.3553@tp.orcam.me.uk \
--to=macro@mips.com \
--cc=JuergenUrban@gmx.de \
--cc=linux-mips@linux-mips.org \
--cc=noring@nocrew.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.