Message ID | alpine.DEB.2.21.2203041838380.47558@angie.orcam.me.uk (mailing list archive) |
---|---|
State | Accepted |
Commit | 244eae91a94c6dab82b3232967d10eeb9dfa21c6 |
Headers | show |
Series | DEC: Limit PMAX memory probing to R3k systems | expand |
On Fri, Mar 04, 2022 at 08:16:23PM +0000, Maciej W. Rozycki wrote: > Recent tightening of the opcode table in binutils so as to consistently > disallow the assembly or disassembly of CP0 instructions not supported > by the processor architecture chosen has caused a regression like below: > > arch/mips/dec/prom/locore.S: Assembler messages: > arch/mips/dec/prom/locore.S:29: Error: opcode not supported on this processor: r4600 (mips3) `rfe' > > in a piece of code used to probe for memory with PMAX DECstation models, > which have non-REX firmware. Those computers always have an R2000 CPU > and consequently the exception handler used in memory probing uses the > RFE instruction, which those processors use. > > While adding 64-bit support this code was correctly excluded for 64-bit > configurations, however it should have also been excluded for irrelevant > 32-bit configurations. Do this now then, and only enable PMAX memory > probing for R3k systems. > > Reported-by: Jan-Benedict Glaw <jbglaw@lug-owl.de> > Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> > Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") > Cc: stable@vger.kernel.org # v2.6.12+ > --- > Hi, > > I'm assuming this won't go back beyond commit 2a11c8ea20bf ("kconfig: > Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE()") or any backport > will have to be rewritten to avoid IS_ENABLED. > > The original actual change named to fix ought to be commit dd82ef87e4c9 > ("PROM interface rework to support a 64-bit kernel.") from the LMO repo: > <https://git.kernel.org/pub/scm/linux/kernel/git/ralf/linux.git/commit/?id=dd82ef87e4c9>, > which introduced the `prom_is_rex' macro, which guards this code. Said > commit predates the history of our main repository though. > > This change has actually been verified at runtime with a PMIN system > (effectively a PMAX, but with a slower R2000 CPU) and a 4MAX+ system (an > R4400SC-based machine), and naturally throughout the three possible build > configurations: R3k, R4k/32-bit, R4k/64-bit. > > It took longer than expected, but oh well... Sorry for the inconvenience > caused. > > Please apply, > > Maciej > --- > arch/mips/dec/prom/Makefile | 2 +- > arch/mips/include/asm/dec/prom.h | 15 +++++---------- > 2 files changed, 6 insertions(+), 11 deletions(-) applied to mips-next. Thomas.
Index: linux-macro/arch/mips/dec/prom/Makefile =================================================================== --- linux-macro.orig/arch/mips/dec/prom/Makefile +++ linux-macro/arch/mips/dec/prom/Makefile @@ -6,4 +6,4 @@ lib-y += init.o memory.o cmdline.o identify.o console.o -lib-$(CONFIG_32BIT) += locore.o +lib-$(CONFIG_CPU_R3000) += locore.o Index: linux-macro/arch/mips/include/asm/dec/prom.h =================================================================== --- linux-macro.orig/arch/mips/include/asm/dec/prom.h +++ linux-macro/arch/mips/include/asm/dec/prom.h @@ -43,16 +43,11 @@ */ #define REX_PROM_MAGIC 0x30464354 -#ifdef CONFIG_64BIT - -#define prom_is_rex(magic) 1 /* KN04 and KN05 are REX PROMs. */ - -#else /* !CONFIG_64BIT */ - -#define prom_is_rex(magic) ((magic) == REX_PROM_MAGIC) - -#endif /* !CONFIG_64BIT */ - +/* KN04 and KN05 are REX PROMs, so only do the check for R3k systems. */ +static inline bool prom_is_rex(u32 magic) +{ + return !IS_ENABLED(CONFIG_CPU_R3000) || magic == REX_PROM_MAGIC; +} /* * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and
Recent tightening of the opcode table in binutils so as to consistently disallow the assembly or disassembly of CP0 instructions not supported by the processor architecture chosen has caused a regression like below: arch/mips/dec/prom/locore.S: Assembler messages: arch/mips/dec/prom/locore.S:29: Error: opcode not supported on this processor: r4600 (mips3) `rfe' in a piece of code used to probe for memory with PMAX DECstation models, which have non-REX firmware. Those computers always have an R2000 CPU and consequently the exception handler used in memory probing uses the RFE instruction, which those processors use. While adding 64-bit support this code was correctly excluded for 64-bit configurations, however it should have also been excluded for irrelevant 32-bit configurations. Do this now then, and only enable PMAX memory probing for R3k systems. Reported-by: Jan-Benedict Glaw <jbglaw@lug-owl.de> Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org # v2.6.12+ --- Hi, I'm assuming this won't go back beyond commit 2a11c8ea20bf ("kconfig: Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE()") or any backport will have to be rewritten to avoid IS_ENABLED. The original actual change named to fix ought to be commit dd82ef87e4c9 ("PROM interface rework to support a 64-bit kernel.") from the LMO repo: <https://git.kernel.org/pub/scm/linux/kernel/git/ralf/linux.git/commit/?id=dd82ef87e4c9>, which introduced the `prom_is_rex' macro, which guards this code. Said commit predates the history of our main repository though. This change has actually been verified at runtime with a PMIN system (effectively a PMAX, but with a slower R2000 CPU) and a 4MAX+ system (an R4400SC-based machine), and naturally throughout the three possible build configurations: R3k, R4k/32-bit, R4k/64-bit. It took longer than expected, but oh well... Sorry for the inconvenience caused. Please apply, Maciej --- arch/mips/dec/prom/Makefile | 2 +- arch/mips/include/asm/dec/prom.h | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) linux-dec-locore-r3000.diff