Fix a problem with r222813; given that we may only operate on interrupt

globals here but clobber %y save and restore the latter.
This commit is contained in:
Marius Strobl 2011-06-07 17:19:14 +00:00
parent cbebc90de0
commit 3bd5692b1f

View File

@ -38,7 +38,8 @@ __FBSDID("$FreeBSD$");
.register %g2, #ignore
.register %g3, #ignore
#define IPI_DONE(r1, r2, r3, r4, r5) \
#define IPI_DONE(r1, r2, r3, r4, r5, r6) \
rd %y, r6 ; \
lduw [PCPU(CPUID)], r2 ; \
mov _NCPUBITS, r3 ; \
mov %g0, %y ; \
@ -50,6 +51,7 @@ __FBSDID("$FreeBSD$");
sub r2, r3, r3 ; \
mov 1, r4 ; \
sllx r4, r3, r4 ; \
wr r6, %y ; \
ATOMIC_CLEAR_LONG(r1, r2, r3, r4)
/*
@ -87,7 +89,7 @@ ENTRY(tl_ipi_spitfire_dcache_page_inval)
2: brgz,pt %g2, 1b
sub %g2, %g4, %g2
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_spitfire_dcache_page_inval)
@ -127,7 +129,7 @@ ENTRY(tl_ipi_spitfire_icache_page_inval)
2: brgz,pt %g2, 1b
sub %g2, %g4, %g2
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_spitfire_icache_page_inval)
@ -158,7 +160,7 @@ ENTRY(tl_ipi_cheetah_dcache_page_inval)
blt,a,pt %xcc, 1b
nop
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_cheetah_dcache_page_inval)
@ -214,7 +216,7 @@ ENTRY(tl_ipi_tlb_page_demap)
stxa %g0, [%g2] ASI_IMMU_DEMAP
flush %g3
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_tlb_page_demap)
@ -257,7 +259,7 @@ ENTRY(tl_ipi_tlb_range_demap)
blt,a,pt %xcc, 1b
nop
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_tlb_range_demap)
@ -281,7 +283,7 @@ ENTRY(tl_ipi_tlb_context_demap)
stxa %g0, [%g1] ASI_IMMU_DEMAP
flush %g3
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_tlb_context_demap)
@ -293,7 +295,7 @@ ENTRY(tl_ipi_stick_rd)
rd %asr24, %g2
stx %g2, [%g1]
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_stick_rd)
@ -305,6 +307,6 @@ ENTRY(tl_ipi_tick_rd)
rd %tick, %g2
stx %g2, [%g1]
IPI_DONE(%g5, %g1, %g2, %g3, %g4)
IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
retry
END(tl_ipi_tick_rd)