Module Name:    src
Committed By:   palle
Date:           Fri Feb  8 20:14:51 UTC 2019

Modified Files:
        src/sys/arch/sparc64/include: cpu.h
        src/sys/arch/sparc64/sparc64: clock.c locore.s

Log Message:
sun4v: initialize %stickcmpr properly when establishing interrupt - fixes issue 
seen on newer sun4v/SPARC-T5 system where the interrupt never fires.


To generate a diff of this commit:
cvs rdiff -u -r1.125 -r1.126 src/sys/arch/sparc64/include/cpu.h
cvs rdiff -u -r1.120 -r1.121 src/sys/arch/sparc64/sparc64/clock.c
cvs rdiff -u -r1.417 -r1.418 src/sys/arch/sparc64/sparc64/locore.s

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc64/include/cpu.h
diff -u src/sys/arch/sparc64/include/cpu.h:1.125 src/sys/arch/sparc64/include/cpu.h:1.126
--- src/sys/arch/sparc64/include/cpu.h:1.125	Wed Aug 22 01:05:23 2018
+++ src/sys/arch/sparc64/include/cpu.h	Fri Feb  8 20:14:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.125 2018/08/22 01:05:23 msaitoh Exp $ */
+/*	$NetBSD: cpu.h,v 1.126 2019/02/08 20:14:50 palle Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -434,6 +434,7 @@ void	switchtoctx_us(int);
 void	switchtoctx_usiii(int);
 void	next_tick(long);
 void	next_stick(long);
+void	next_stick_init(void);
 /* trap.c */
 void	cpu_vmspace_exec(struct lwp *, vaddr_t, vaddr_t);
 int	rwindow_save(struct lwp *);

Index: src/sys/arch/sparc64/sparc64/clock.c
diff -u src/sys/arch/sparc64/sparc64/clock.c:1.120 src/sys/arch/sparc64/sparc64/clock.c:1.121
--- src/sys/arch/sparc64/sparc64/clock.c:1.120	Thu Jul  7 06:55:38 2016
+++ src/sys/arch/sparc64/sparc64/clock.c	Fri Feb  8 20:14:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: clock.c,v 1.120 2016/07/07 06:55:38 msaitoh Exp $ */
+/*	$NetBSD: clock.c,v 1.121 2019/02/08 20:14:51 palle Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -55,7 +55,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.120 2016/07/07 06:55:38 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.121 2019/02/08 20:14:51 palle Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -406,6 +406,7 @@ stickintr_establish(int pil, int (*fun)(
 	ci->ci_tick_increment = ci->ci_system_clockrate[0] / hz;
 
 	s = intr_disable();
+	next_stick_init();
 	next_stick(ci->ci_tick_increment);
 	intr_restore(s);
 }

Index: src/sys/arch/sparc64/sparc64/locore.s
diff -u src/sys/arch/sparc64/sparc64/locore.s:1.417 src/sys/arch/sparc64/sparc64/locore.s:1.418
--- src/sys/arch/sparc64/sparc64/locore.s:1.417	Fri Feb  8 19:45:24 2019
+++ src/sys/arch/sparc64/sparc64/locore.s	Fri Feb  8 20:14:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.417 2019/02/08 19:45:24 palle Exp $	*/
+/*	$NetBSD: locore.s,v 1.418 2019/02/08 20:14:51 palle Exp $	*/
 
 /*
  * Copyright (c) 2006-2010 Matthew R. Green
@@ -7507,6 +7507,21 @@ Lstick_ovflw:
 	retl
 	 wr	%o2, STICK_CMPR
 
+/*
+ * next_stick_init()
+ *
+ * Sets the %stick_cmpr register to the value retrieved from %stick so
+ * next_stick() does not spend too much time in the function when called
+ * for the first time.
+ */
+ENTRY(next_stick_init)
+	rd	STICK, %o0
+	mov	1, %o1		! Mask off high bits of the register
+	sllx	%o1, 63, %o1
+	andn	%o0, %o1, %o0
+	retl
+	 wr	%o0, STICK_CMPR
+
 ENTRY(setjmp)
 	save	%sp, -CC64FSZ, %sp	! Need a frame to return to.
 	flushw

Reply via email to