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));
}