when a softint gets scheduled, we set a bit in the current cpus
cpu_info structure. that doesnt have to be an interlocked operation
to be locally atomic.

ok?

Index: arch/amd64/amd64/intr.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/intr.c,v
retrieving revision 1.40
diff -u -p -r1.40 intr.c
--- arch/amd64/amd64/intr.c     6 Jan 2015 12:50:47 -0000       1.40
+++ arch/amd64/amd64/intr.c     23 Jan 2015 12:50:20 -0000
@@ -721,6 +721,6 @@ softintr(int sir)
 {
        struct cpu_info *ci = curcpu();
 
-       __asm volatile("lock; orq %1, %0" :
+       __asm volatile("orq %1, %0" :
            "=m"(ci->ci_ipending) : "ir" (1UL << sir));
 }

Reply via email to