From f96c24256c63e07d37b0b4fed8ea58d7087ae44d Mon Sep 17 00:00:00 2001 From: Jake Burkholder Date: Thu, 19 Jun 2003 05:27:04 +0000 Subject: - Rename the IPI_WAIT macro to IPI_DONE. - Don't require all receivers of ipis to wait for all other receivers, only that the sender wait for all receivers. This should reduce the amount of time spent with interrupts disabled, which may be a cause of ipi timeouts. Discussed with: tmm --- sys/sparc64/sparc64/mp_exception.S | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/sys/sparc64/sparc64/mp_exception.S b/sys/sparc64/sparc64/mp_exception.S index 2ee313a45c6e..eca488258085 100644 --- a/sys/sparc64/sparc64/mp_exception.S +++ b/sys/sparc64/sparc64/mp_exception.S @@ -37,12 +37,9 @@ __FBSDID("$FreeBSD$"); .register %g2, #ignore .register %g3, #ignore -#define IPI_WAIT(r1, r2, r3, r4) \ +#define IPI_DONE(r1, r2, r3, r4) \ lduw [PCPU(CPUMASK)], r4 ; \ - ATOMIC_CLEAR_INT(r1, r2, r3, r4) ; \ -9: lduw [r1], r2 ; \ - brnz,a,pn r2, 9b ; \ - nop + ATOMIC_CLEAR_INT(r1, r2, r3, r4) /* * Invalidate a physical page in the data cache. For UltraSPARC I and II. @@ -80,7 +77,7 @@ ENTRY(tl_ipi_spitfire_dcache_page_inval) 2: brgz,pt %g2, 1b sub %g2, %g4, %g2 - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_spitfire_dcache_page_inval) @@ -121,7 +118,7 @@ ENTRY(tl_ipi_spitfire_icache_page_inval) 2: brgz,pt %g2, 1b sub %g2, %g4, %g2 - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_spitfire_icache_page_inval) @@ -153,7 +150,7 @@ ENTRY(tl_ipi_cheetah_dcache_page_inval) blt,a,pt %xcc, 1b nop - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_cheetah_dcache_page_inval) @@ -208,7 +205,7 @@ ENTRY(tl_ipi_tlb_page_demap) stxa %g0, [%g2] ASI_IMMU_DEMAP membar #Sync - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_tlb_page_demap) @@ -251,7 +248,7 @@ ENTRY(tl_ipi_tlb_range_demap) blt,a,pt %xcc, 1b nop - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_tlb_range_demap) @@ -274,6 +271,6 @@ ENTRY(tl_ipi_tlb_context_demap) stxa %g0, [%g1] ASI_IMMU_DEMAP membar #Sync - IPI_WAIT(%g5, %g1, %g2, %g3) + IPI_DONE(%g5, %g1, %g2, %g3) retry END(tl_ipi_tlb_context_demap) -- cgit v1.3