Index: sys/arch/sparc64/sparc64/ipifuncs.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/ipifuncs.c,v retrieving revision 1.54 diff -u -r1.54 ipifuncs.c --- sys/arch/sparc64/sparc64/ipifuncs.c 3 Jan 2015 11:22:14 -0000 1.54 +++ sys/arch/sparc64/sparc64/ipifuncs.c 3 Jan 2015 18:52:01 -0000 @@ -84,8 +84,9 @@ void sparc64_ipi_blast_dcache(void *, void *); void sparc64_ipi_ccall(void *, void *); -/* Function pointer for use in smp_tlb_flush() - setup in sparc64_ipi_init() */ +/* Function pointers to be setup in sparc64_ipi_init() */ static ipifunc_t smp_tlb_flush_pte_func = NULL; +static ipifunc_t sparc64_ipi_dcache_flush_page_func = NULL; /* * Process cpu stop-self event. @@ -180,12 +181,21 @@ * Prepare cpu type dependent function pointers */ - if (CPU_ISSUN4V) + if (CPU_ISSUN4V) { smp_tlb_flush_pte_func = sparc64_ipi_flush_pte_sun4v; - else if (CPU_IS_USIII_UP()) + sparc64_ipi_dcache_flush_page_func = + sparc64_ipi_dcache_flush_page_sun4v; + } + else if (CPU_IS_USIII_UP()) { smp_tlb_flush_pte_func = sparc64_ipi_flush_pte_usiii; - else + sparc64_ipi_dcache_flush_page_func = + sparc64_ipi_dcache_flush_page_usiii; + } + else { smp_tlb_flush_pte_func = sparc64_ipi_flush_pte_us; + sparc64_ipi_dcache_flush_page_func = + sparc64_ipi_dcache_flush_page_us; + } if (CPU_ISSUN4V) sparc64_send_ipi = sparc64_send_ipi_sun4v; @@ -476,16 +486,7 @@ void smp_dcache_flush_page_cpuset(paddr_t pa, sparc64_cpuset_t activecpus) { - ipifunc_t func; - - if (CPU_ISSUN4V) - func = sparc64_ipi_dcache_flush_page_sun4v; - else if (CPU_IS_USIII_UP()) - func = sparc64_ipi_dcache_flush_page_usiii; - else - func = sparc64_ipi_dcache_flush_page_us; - - sparc64_multicast_ipi(activecpus, func, pa, dcache_line_size); + sparc64_multicast_ipi(activecpus, sparc64_ipi_dcache_flush_page_func, pa, dcache_line_size); sp_dcache_flush_page(pa); }