diff options
-rw-r--r-- | sys/amd64/amd64/apic_vector.S | 5 | ||||
-rw-r--r-- | sys/i386/i386/apic_vector.s | 5 |
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: |