Module Name:    src
Committed By:   palle
Date:           Sun Nov  2 19:40:06 UTC 2014

Modified Files:
        src/sys/arch/sparc64/sparc64: ipifuncs.c mp_subr.S

Log Message:
sun4v: Implement missing sparc64_ipi_dcache_flush_page_xxx() function. ok 
martin@


To generate a diff of this commit:
cvs rdiff -u -r1.50 -r1.51 src/sys/arch/sparc64/sparc64/ipifuncs.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sparc64/sparc64/mp_subr.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/sparc64/ipifuncs.c
diff -u src/sys/arch/sparc64/sparc64/ipifuncs.c:1.50 src/sys/arch/sparc64/sparc64/ipifuncs.c:1.51
--- src/sys/arch/sparc64/sparc64/ipifuncs.c:1.50	Sun Jun  8 17:33:24 2014
+++ src/sys/arch/sparc64/sparc64/ipifuncs.c	Sun Nov  2 19:40:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipifuncs.c,v 1.50 2014/06/08 17:33:24 palle Exp $ */
+/*	$NetBSD: ipifuncs.c,v 1.51 2014/11/02 19:40:06 palle Exp $ */
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.50 2014/06/08 17:33:24 palle Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.51 2014/11/02 19:40:06 palle Exp $");
 
 #include "opt_ddb.h"
 
@@ -85,6 +85,9 @@ void	sparc64_ipi_flush_pte_sun4v(void *,
 #endif
 void	sparc64_ipi_dcache_flush_page_us(void *, void *);
 void	sparc64_ipi_dcache_flush_page_usiii(void *, void *);
+#ifdef SUN4V
+void	sparc64_ipi_dcache_flush_page_sun4v(void *, void *);
+#endif
 void	sparc64_ipi_blast_dcache(void *, void *);
 void	sparc64_ipi_ccall(void *, void *);
 
@@ -491,7 +494,13 @@ smp_dcache_flush_page_cpuset(paddr_t pa,
 {
 	ipifunc_t func;
 
+#ifdef SUN4V
+	if (CPU_ISSUN4V)
+		func = sparc64_ipi_dcache_flush_page_sun4v;
+	else if (CPU_IS_USIII_UP())
+#else		
 	if (CPU_IS_USIII_UP())
+#endif		
 		func = sparc64_ipi_dcache_flush_page_usiii;
 	else
 		func = sparc64_ipi_dcache_flush_page_us;

Index: src/sys/arch/sparc64/sparc64/mp_subr.S
diff -u src/sys/arch/sparc64/sparc64/mp_subr.S:1.7 src/sys/arch/sparc64/sparc64/mp_subr.S:1.8
--- src/sys/arch/sparc64/sparc64/mp_subr.S:1.7	Wed Sep 24 18:32:10 2014
+++ src/sys/arch/sparc64/sparc64/mp_subr.S	Sun Nov  2 19:40:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mp_subr.S,v 1.7 2014/09/24 18:32:10 palle Exp $	*/
+/*	$NetBSD: mp_subr.S,v 1.8 2014/11/02 19:40:06 palle Exp $	*/
 
 /*
  * Copyright (c) 2006-2010 Matthew R. Green
@@ -389,9 +389,10 @@ ENTRY(sparc64_ipi_drop_fpstate)
 	 nop
 
 /*
- * IPI handler to drop the current FPU state.
+ * Flush data cache page.
  * void sparc64_ipi_dcache_flush_page_usiii(paddr_t pa, int line_size)
  * void sparc64_ipi_dcache_flush_page_us(paddr_t pa, int line_size)
+ * void sparc64_ipi_dcache_flush_page_sun4v(paddr_t pa, int line_size)
  *
  * On entry:
  *	%g2 = pa
@@ -447,4 +448,21 @@ ENTRY(sparc64_ipi_dcache_flush_page_us)
 	ba,a	ret_from_intr_vector
 	 nop
 
+#ifdef SUN4V
+ENTRY(sparc64_ipi_dcache_flush_page_sun4v)
+	set	NBPG, %o1
+	call	hv_mem_sync
+	 mov	%g2, %o0
+	cmp	%o0, 0
+	be,pt	%icc, 1f
+	 nop
+	sir				! crash if hv-call fails
+1:
+	sethi	%hi(KERNBASE), %g5
+	flush	%g5
+	membar	#Sync
+	ba,a	ret_from_intr_vector
+	 nop
+#endif
+		
 #endif

Reply via email to