mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU
@ 2026-10-21 19:02 Imre Kaloz
  2026-10-22 19:07 ` Maciej W. Rozycki
  0 siblings, 1 reply; 4+ messages in thread
From: Imre Kaloz @ 2026-10-21 19:02 UTC (permalink / raw)
  To: Thomas Bogendoerfer, linux-mips; +Cc: stable, linux-kernel

The hub flips the low 128K of the CKSEG1 (attribute 0) uncached alias
per CPU slice, and the cache error vector is fetched through it.
trap_init() writes the vector through TO_UNCAC(), which is not flipped,
so only slice 0 sees it. Copy it to each secondary CPU's slot as it
comes up.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Signed-off-by: Imre Kaloz <kaloz@kernel.org>
---
 arch/mips/sgi-ip27/ip27-smp.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
index 62733e049570..0fef66b86959 100644
--- a/arch/mips/sgi-ip27/ip27-smp.c
+++ b/arch/mips/sgi-ip27/ip27-smp.c
@@ -7,11 +7,13 @@
  * Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
  */
 #include <linux/init.h>
+#include <linux/string.h>
 #include <linux/sched.h>
 #include <linux/sched/task_stack.h>
 #include <linux/topology.h>
 #include <linux/nodemask.h>
 
+#include <asm/addrspace.h>
 #include <asm/page.h>
 #include <asm/processor.h>
 #include <asm/ptrace.h>
@@ -133,6 +135,18 @@ static void ip27_init_cpu(void)
 	per_cpu_init();
 }
 
+static void ip27_init_secondary(void)
+{
+	/*
+	 * The hub flips the low 128K of the attribute 0 uncached alias per
+	 * CPU slice and the cache error vector is fetched through that alias,
+	 * so the copy trap_init() made through TO_UNCAC() only serves slice 0.
+	 */
+	memcpy((void *)CKSEG1ADDR(0x100), (void *)TO_UNCAC(0x100), 0x80);
+
+	ip27_init_cpu();
+}
+
 static void ip27_smp_finish(void)
 {
 	hub_rt_clock_event_init();
@@ -182,7 +196,7 @@ static void __init ip27_prepare_cpus(unsigned int max_cpus)
 const struct plat_smp_ops ip27_smp_ops = {
 	.send_ipi_single	= ip27_send_ipi_single,
 	.send_ipi_mask		= ip27_send_ipi_mask,
-	.init_secondary		= ip27_init_cpu,
+	.init_secondary		= ip27_init_secondary,
 	.smp_finish		= ip27_smp_finish,
 	.boot_secondary		= ip27_boot_secondary,
 	.smp_setup		= ip27_smp_setup,

base-commit: 24a19b953e2a3d0ea5a8c4951a0ab8f32720c907
-- 
2.47.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU
  2026-10-21 19:02 [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU Imre Kaloz
@ 2026-10-22 19:07 ` Maciej W. Rozycki
  2026-10-24  9:51   ` Thomas Bogendoerfer
  0 siblings, 1 reply; 4+ messages in thread
From: Maciej W. Rozycki @ 2026-10-22 19:07 UTC (permalink / raw)
  To: Imre Kaloz; +Cc: Thomas Bogendoerfer, linux-mips, linux-kernel

On Wed, 21 Oct 2026, Imre Kaloz wrote:

> diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
> index 62733e049570..0fef66b86959 100644
> --- a/arch/mips/sgi-ip27/ip27-smp.c
> +++ b/arch/mips/sgi-ip27/ip27-smp.c
> @@ -133,6 +135,18 @@ static void ip27_init_cpu(void)
>  	per_cpu_init();
>  }
>  
> +static void ip27_init_secondary(void)
> +{
> +	/*
> +	 * The hub flips the low 128K of the attribute 0 uncached alias per
> +	 * CPU slice and the cache error vector is fetched through that alias,
> +	 * so the copy trap_init() made through TO_UNCAC() only serves slice 0.
> +	 */
> +	memcpy((void *)CKSEG1ADDR(0x100), (void *)TO_UNCAC(0x100), 0x80);

 This just copies instructions between the same physical memory locations, 
from an XKPHYS mapping to its corresponding KSEG1 mapping, i.e. the bus 
addresses are the same, so please give a more elaborate explanation how 
this is supposed to work.  I guess I'm just missing something, but that 
has to be obvious from the contribution itself, also for other people that 
may come across this change in the repo in the future.

 Also, please don't cc stable with submissions targeting mainline, fixes 
will be picked up for backporting based on the Cc: tag in the commit 
description.

  Maciej

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU
  2026-10-22 19:07 ` Maciej W. Rozycki
@ 2026-10-24  9:51   ` Thomas Bogendoerfer
  2026-10-25  5:33     ` Maciej W. Rozycki
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Bogendoerfer @ 2026-10-24  9:51 UTC (permalink / raw)
  To: Maciej W. Rozycki; +Cc: Imre Kaloz, linux-mips, linux-kernel

On Thu, Oct 22, 2026 at 08:07:47PM +0100, Maciej W. Rozycki wrote:
> On Wed, 21 Oct 2026, Imre Kaloz wrote:
> 
> > diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
> > index 62733e049570..0fef66b86959 100644
> > --- a/arch/mips/sgi-ip27/ip27-smp.c
> > +++ b/arch/mips/sgi-ip27/ip27-smp.c
> > @@ -133,6 +135,18 @@ static void ip27_init_cpu(void)
> >  	per_cpu_init();
> >  }
> >  
> > +static void ip27_init_secondary(void)
> > +{
> > +	/*
> > +	 * The hub flips the low 128K of the attribute 0 uncached alias per
> > +	 * CPU slice and the cache error vector is fetched through that alias,
> > +	 * so the copy trap_init() made through TO_UNCAC() only serves slice 0.
> > +	 */
> > +	memcpy((void *)CKSEG1ADDR(0x100), (void *)TO_UNCAC(0x100), 0x80);
> 
>  This just copies instructions between the same physical memory locations, 
> from an XKPHYS mapping to its corresponding KSEG1 mapping, i.e. the bus 

IP27 is special here:

/*
 * IP27 uses the R10000's uncached attribute feature.  Attribute 3 selects
 * uncached memory addressing. Hide the definitions on 32-bit compilation
 * of the compat-vdso code.
 */
#ifdef CONFIG_64BIT
#define HSPEC_BASE              _AC(0x9000000000000000, UL)
#define IO_BASE                 _AC(0x9200000000000000, UL)
#define MSPEC_BASE              _AC(0x9400000000000000, UL)
#define UNCAC_BASE              _AC(0x9600000000000000, UL)
#define CAC_BASE                _AC(0xa800000000000000, UL)
#endif

Hub ASIC uses the extra address bits, so the physiacl address is not the same.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU
  2026-10-24  9:51   ` Thomas Bogendoerfer
@ 2026-10-25  5:33     ` Maciej W. Rozycki
  0 siblings, 0 replies; 4+ messages in thread
From: Maciej W. Rozycki @ 2026-10-25  5:33 UTC (permalink / raw)
  To: Thomas Bogendoerfer; +Cc: Imre Kaloz, linux-mips, linux-kernel

On Sat, 24 Oct 2026, Thomas Bogendoerfer wrote:

> > > diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
> > > index 62733e049570..0fef66b86959 100644
> > > --- a/arch/mips/sgi-ip27/ip27-smp.c
> > > +++ b/arch/mips/sgi-ip27/ip27-smp.c
> > > @@ -133,6 +135,18 @@ static void ip27_init_cpu(void)
> > >  	per_cpu_init();
> > >  }
> > >  
> > > +static void ip27_init_secondary(void)
> > > +{
> > > +	/*
> > > +	 * The hub flips the low 128K of the attribute 0 uncached alias per
> > > +	 * CPU slice and the cache error vector is fetched through that alias,
> > > +	 * so the copy trap_init() made through TO_UNCAC() only serves slice 0.
> > > +	 */
> > > +	memcpy((void *)CKSEG1ADDR(0x100), (void *)TO_UNCAC(0x100), 0x80);
> > 
> >  This just copies instructions between the same physical memory locations, 
> > from an XKPHYS mapping to its corresponding KSEG1 mapping, i.e. the bus 
> 
> IP27 is special here:
> 
> /*
>  * IP27 uses the R10000's uncached attribute feature.  Attribute 3 selects
>  * uncached memory addressing. Hide the definitions on 32-bit compilation
>  * of the compat-vdso code.
>  */
> #ifdef CONFIG_64BIT
> #define HSPEC_BASE              _AC(0x9000000000000000, UL)
> #define IO_BASE                 _AC(0x9200000000000000, UL)
> #define MSPEC_BASE              _AC(0x9400000000000000, UL)
> #define UNCAC_BASE              _AC(0x9600000000000000, UL)
> #define CAC_BASE                _AC(0xa800000000000000, UL)
> #endif
> 
> Hub ASIC uses the extra address bits, so the physiacl address is not the same.

 Fair enough, though I think that the use of the R10k's uncached attribute 
driven on the bus for what I gather is each CPU's local memory (?) will 
best be documented more clearly through the change (i.e. in the commit 
description and with ip27_init_secondary()).

  Maciej

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-25  5:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-21 19:02 [PATCH] MIPS: SGI-IP27: Install the cache error vector on every CPU Imre Kaloz
2026-10-22 19:07 ` Maciej W. Rozycki
2026-10-24  9:51   ` Thomas Bogendoerfer
2026-10-25  5:33     ` Maciej W. Rozycki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®