All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
@ 2012-08-15  8:14 David Miller
  2012-08-15 23:43 ` David Miller
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: David Miller @ 2012-08-15  8:14 UTC (permalink / raw)
  To: sparclinux


This generates an illegal instruction exception.

This has a long history.  For the first sun4v port of SILO in commit
494770a17eea7192d3242051e76f4da6d838e3a1 ("SILO Niagara/SUN4V
support") this code was removed entirely.

But later this was found to regress older UltraSPARC boxes, so we put
it back in commit bd708e35bdcd8e92cb7c65368f2a356982df7cd8 ("Fix
Ultra10 SILO timer").  But that was wrong too.

The OBP still owns the trap table when SILO runs and it uses the
%tick_cmpr generated interrupt.  This has a bad interraction with how
we use the %tick register in SILO.

SILO first reads the %tick register and remembers this value as the
time base.

Later, we read %tick again, compute the difference, and use this to
calcualte the amount of time elapsed.

OBP's %tick_cmpr interrupt handler is doing something funky, such as
resetting %tick, which makes our timeouts never actually expire.

This issue doesn't exist on sun4v machines, and we absolutely cannot
try to touch the %tick_cmpr register as that generates an illegal
instruction trap on such cpus.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

I just committed this into the SILO git repo.

Debian folks, you really want this propagated into your installer as
soon as possible.  All the install ISOs will crash in SILO on all
sun4v (Niagara) machines unless an explicit SILO boot target is given
on the boot command line.  I used "boot cdrom install" to get around
this.

It triggers any time the timer mechanism is enabled ("timeout=foo" is
specified in silo.conf)

 include/silo.h | 1 +
 second/main.c  | 1 +
 second/misc.c  | 4 +++-
 second/timer.c | 2 +-
 4 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/silo.h b/include/silo.h
index fe5adcb..94d6e31 100644
--- a/include/silo.h
+++ b/include/silo.h
@@ -125,6 +125,7 @@ int strtol (const char *, char **, int);
 int decompress (char *, char *, unsigned char (*)(void), void (*)(void));
 /* main.c */
 extern enum arch architecture;
+extern int sun4v_cpu;
 /* timer.c */
 int init_timer ();
 void close_timer ();
diff --git a/second/main.c b/second/main.c
index 182b263..a45807d 100644
--- a/second/main.c
+++ b/second/main.c
@@ -64,6 +64,7 @@ enum {
     CMD_LS
 } load_cmd;
 enum arch architecture;
+int sun4v_cpu;
 static int timer_status = 0;
 static char *initrd_start;
 static int initrd_size;
diff --git a/second/misc.c b/second/misc.c
index 163738e..d6bcdb1 100644
--- a/second/misc.c
+++ b/second/misc.c
@@ -517,8 +517,10 @@ enum arch silo_get_architecture(void)
 	return sun4d;
     case 'e':
 	return sun4e;
-    case 'u':
     case 'v':
+	sun4v_cpu = 1;
+	/* FALLTHRU */
+    case 'u':
 	return sun4u;
     default:
     	for(i = 0; i < NUM_SUN_MACHINES; i++)
diff --git a/second/timer.c b/second/timer.c
index 51e928e..7f03996 100644
--- a/second/timer.c
+++ b/second/timer.c
@@ -156,7 +156,7 @@ static inline int sun4u_init_timer ()
     }
     if (!foundcpu || !clock_frequency)
         clock_frequency = prom_getint(prom_root_node, "clock-frequency") / 100;
-    if (notimer) {
+    if (notimer && !sun4v_cpu) {
         sun4u_notimer = 1;
         __asm__ __volatile__ ("\t"
         	"rd	%%tick_cmpr, %%g1\n\t"
-- 
1.7.11.2


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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
@ 2012-08-15 23:43 ` David Miller
  2012-08-19 15:41 ` Jurij Smakov
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2012-08-15 23:43 UTC (permalink / raw)
  To: sparclinux

From: David Miller <davem@davemloft.net>
Date: Wed, 15 Aug 2012 01:14:16 -0700 (PDT)

> 
> This generates an illegal instruction exception.

Unfortunately, after some more testing, this needs a follow-on fix,
included below and also committed to SILO git.

Sorry for the confusion.

==========
silo: Don't assume P1275 OBP means sun4u.

It could also mean 'sun4v'.

Code this defensively, so that if (for whatever reason)
we can't get at the 'compatible' property in the root
OBP device node we'll still default to sun4u as previous.

Signed-off-by: David S. Miller <davem@davemloft.net>
---
 second/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/second/misc.c b/second/misc.c
index d6bcdb1..d789723 100644
--- a/second/misc.c
+++ b/second/misc.c
@@ -501,7 +501,7 @@ enum arch silo_get_architecture(void)
         if ((i = prom_searchsiblings(i, "MicroSPARC-IIep")) != 0) {
             return sun4p;
         }
-        return sun4u;
+	buffer[4] = 'u';
     }
     i = prom_getproperty (prom_root_node, "compatability", buffer, 8);
 
-- 
1.7.11.2


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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
  2012-08-15 23:43 ` David Miller
@ 2012-08-19 15:41 ` Jurij Smakov
  2012-08-19 22:24 ` David Miller
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Jurij Smakov @ 2012-08-19 15:41 UTC (permalink / raw)
  To: sparclinux

On Wed, Aug 15, 2012 at 01:14:16AM -0700, David Miller wrote:
> 
> This generates an illegal instruction exception.
> 
> This has a long history.  For the first sun4v port of SILO in commit
> 494770a17eea7192d3242051e76f4da6d838e3a1 ("SILO Niagara/SUN4V
> support") this code was removed entirely.
> 
> But later this was found to regress older UltraSPARC boxes, so we put
> it back in commit bd708e35bdcd8e92cb7c65368f2a356982df7cd8 ("Fix
> Ultra10 SILO timer").  But that was wrong too.
> 
> The OBP still owns the trap table when SILO runs and it uses the
> %tick_cmpr generated interrupt.  This has a bad interraction with how
> we use the %tick register in SILO.
> 
> SILO first reads the %tick register and remembers this value as the
> time base.
> 
> Later, we read %tick again, compute the difference, and use this to
> calcualte the amount of time elapsed.
> 
> OBP's %tick_cmpr interrupt handler is doing something funky, such as
> resetting %tick, which makes our timeouts never actually expire.
> 
> This issue doesn't exist on sun4v machines, and we absolutely cannot
> try to touch the %tick_cmpr register as that generates an illegal
> instruction trap on such cpus.
> 
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
> 
> I just committed this into the SILO git repo.
> 
> Debian folks, you really want this propagated into your installer as
> soon as possible.  All the install ISOs will crash in SILO on all
> sun4v (Niagara) machines unless an explicit SILO boot target is given
> on the boot command line.  I used "boot cdrom install" to get around
> this.
> 
> It triggers any time the timer mechanism is enabled ("timeout=foo" is
> specified in silo.conf)

Thanks, David.

I just uploaded a new silo package (1.4.14+git20120819-1) including 
these fixes to unstable, and would encourage everyone to test it (it 
should appear on the mirrors within a few hours). After a grace period 
of 10 days we are going to arrange for its propagation to testing, 
given that no problems are reported.

Best regards,
-- 
Jurij Smakov                                           jurij@wooyd.org
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC

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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
  2012-08-15 23:43 ` David Miller
  2012-08-19 15:41 ` Jurij Smakov
@ 2012-08-19 22:24 ` David Miller
  2012-08-19 22:29 ` Jurij Smakov
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2012-08-19 22:24 UTC (permalink / raw)
  To: sparclinux

From: Jurij Smakov <jurij@wooyd.org>
Date: Sun, 19 Aug 2012 16:41:42 +0100

> I just uploaded a new silo package (1.4.14+git20120819-1) including 
> these fixes to unstable, and would encourage everyone to test it (it 
> should appear on the mirrors within a few hours). After a grace period 
> of 10 days we are going to arrange for its propagation to testing, 
> given that no problems are reported.

Thanks a lot Jurij.

Just FYI I also pushed a ext4 fix into the SILO tree yesterday
after I received positive feedback from a bug reporter.

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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
                   ` (2 preceding siblings ...)
  2012-08-19 22:24 ` David Miller
@ 2012-08-19 22:29 ` Jurij Smakov
  2012-08-19 22:29 ` David Miller
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Jurij Smakov @ 2012-08-19 22:29 UTC (permalink / raw)
  To: sparclinux

On Sun, Aug 19, 2012 at 03:24:45PM -0700, David Miller wrote:
> From: Jurij Smakov <jurij@wooyd.org>
> Date: Sun, 19 Aug 2012 16:41:42 +0100
> 
> > I just uploaded a new silo package (1.4.14+git20120819-1) including 
> > these fixes to unstable, and would encourage everyone to test it (it 
> > should appear on the mirrors within a few hours). After a grace period 
> > of 10 days we are going to arrange for its propagation to testing, 
> > given that no problems are reported.
> 
> Thanks a lot Jurij.
> 
> Just FYI I also pushed a ext4 fix into the SILO tree yesterday
> after I received positive feedback from a bug reporter.

This fix is included in the latest uploaded version as well.

Best regards,
-- 
Jurij Smakov                                           jurij@wooyd.org
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC

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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
                   ` (3 preceding siblings ...)
  2012-08-19 22:29 ` Jurij Smakov
@ 2012-08-19 22:29 ` David Miller
  2012-09-07  8:33 ` Jurij Smakov
  2012-09-07 16:30 ` David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2012-08-19 22:29 UTC (permalink / raw)
  To: sparclinux

From: Jurij Smakov <jurij@wooyd.org>
Date: Sun, 19 Aug 2012 23:29:05 +0100

> On Sun, Aug 19, 2012 at 03:24:45PM -0700, David Miller wrote:
>> From: Jurij Smakov <jurij@wooyd.org>
>> Date: Sun, 19 Aug 2012 16:41:42 +0100
>> 
>> > I just uploaded a new silo package (1.4.14+git20120819-1) including 
>> > these fixes to unstable, and would encourage everyone to test it (it 
>> > should appear on the mirrors within a few hours). After a grace period 
>> > of 10 days we are going to arrange for its propagation to testing, 
>> > given that no problems are reported.
>> 
>> Thanks a lot Jurij.
>> 
>> Just FYI I also pushed a ext4 fix into the SILO tree yesterday
>> after I received positive feedback from a bug reporter.
> 
> This fix is included in the latest uploaded version as well.

Excellent.

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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
                   ` (4 preceding siblings ...)
  2012-08-19 22:29 ` David Miller
@ 2012-09-07  8:33 ` Jurij Smakov
  2012-09-07 16:30 ` David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: Jurij Smakov @ 2012-09-07  8:33 UTC (permalink / raw)
  To: sparclinux

On Sun, Aug 19, 2012 at 03:29:59PM -0700, David Miller wrote:
> From: Jurij Smakov <jurij@wooyd.org>
> Date: Sun, 19 Aug 2012 23:29:05 +0100
> 
> > On Sun, Aug 19, 2012 at 03:24:45PM -0700, David Miller wrote:
> >> From: Jurij Smakov <jurij@wooyd.org>
> >> Date: Sun, 19 Aug 2012 16:41:42 +0100
> >> 
> >> > I just uploaded a new silo package (1.4.14+git20120819-1) including 
> >> > these fixes to unstable, and would encourage everyone to test it (it 
> >> > should appear on the mirrors within a few hours). After a grace period 
> >> > of 10 days we are going to arrange for its propagation to testing, 
> >> > given that no problems are reported.
> >> 
> >> Thanks a lot Jurij.
> >> 
> >> Just FYI I also pushed a ext4 fix into the SILO tree yesterday
> >> after I received positive feedback from a bug reporter.
> > 
> > This fix is included in the latest uploaded version as well.
> 
> Excellent.

The new silo has propagated to testing and should be used in this 
installer image:

http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/sparc/iso-cd/debian-testing-sparc-netinst.iso

If you could give it a try to confirm that it now boots successfully 
on your machine, it would be appreciated.

Thanks.
-- 
Jurij Smakov                                           jurij@wooyd.org
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC

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

* Re: [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus.
  2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
                   ` (5 preceding siblings ...)
  2012-09-07  8:33 ` Jurij Smakov
@ 2012-09-07 16:30 ` David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2012-09-07 16:30 UTC (permalink / raw)
  To: sparclinux

From: Jurij Smakov <jurij@wooyd.org>
Date: Fri, 7 Sep 2012 09:33:58 +0100

> If you could give it a try to confirm that it now boots successfully 
> on your machine, it would be appreciated.

I'm 3600 miles away from the machine for the next few months so
this isn't practical, sorry.

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

end of thread, other threads:[~2012-09-07 16:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-15  8:14 [PATCH] silo: Don't touch %tick_cmpr on sun4v cpus David Miller
2012-08-15 23:43 ` David Miller
2012-08-19 15:41 ` Jurij Smakov
2012-08-19 22:24 ` David Miller
2012-08-19 22:29 ` Jurij Smakov
2012-08-19 22:29 ` David Miller
2012-09-07  8:33 ` Jurij Smakov
2012-09-07 16:30 ` David Miller

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.