diff options
author | jake <jake@FreeBSD.org> | 2003-06-19 05:27:04 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2003-06-19 05:27:04 +0000 |
commit | b7443e8befb7e2364b9e1670650819a5b86f5327 (patch) | |
tree | d8bb955f8f2df7827e04b8467b0aff23ae85e25f | |
parent | ddf3836c5b65cd677fd8abd69b7c1fa8b96ad068 (diff) | |
download | FreeBSD-src-b7443e8befb7e2364b9e1670650819a5b86f5327.zip FreeBSD-src-b7443e8befb7e2364b9e1670650819a5b86f5327.tar.gz |
- 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
-rw-r--r-- | sys/sparc64/sparc64/mp_exception.S | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/sys/sparc64/sparc64/mp_exception.S b/sys/sparc64/sparc64/mp_exception.S index 2ee313a..eca4882 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) |