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