summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/apic_vector.S5
-rw-r--r--sys/i386/i386/apic_vector.s5
2 files changed, 6 insertions, 4 deletions
diff --git a/sys/amd64/amd64/apic_vector.S b/sys/amd64/amd64/apic_vector.S
index 5d7685b..2e7e445 100644
--- a/sys/amd64/amd64/apic_vector.S
+++ b/sys/amd64/amd64/apic_vector.S
@@ -297,10 +297,11 @@ IDTVEC(cpustop)
test %eax, %eax
jnz 2f
- movq cpustop_restartfunc, %rax
+ xorq %rax, %rax
+ lock
+ xchgq cpustop_restartfunc, %rax
testq %rax, %rax
jz 2f
- movq $0, cpustop_restartfunc /* One-shot */
call *%rax
2:
diff --git a/sys/i386/i386/apic_vector.s b/sys/i386/i386/apic_vector.s
index 99b765f..e8f6f9d 100644
--- a/sys/i386/i386/apic_vector.s
+++ b/sys/i386/i386/apic_vector.s
@@ -340,10 +340,11 @@ IDTVEC(cpustop)
test %eax, %eax
jnz 2f
- movl CNAME(cpustop_restartfunc), %eax
+ xorl %eax, %eax
+ lock
+ xchgl CNAME(cpustop_restartfunc), %eax
test %eax, %eax
jz 2f
- movl $0, CNAME(cpustop_restartfunc) /* One-shot */
call *%eax
2:
OpenPOWER on IntegriCloud