> Date: Sat, 24 Jan 2015 10:47:59 +1000 > From: David Gwynne <[email protected]> > > Lots of other things would have to change when that happens too. Until then > I'll take any latency improvement I can get.
The difference is noticable? Note that intr_disestablish() uses an atomic operation to clear bits. That one is necessary. And I think that means we have to use atomic operations everywhere to modify ci_ipending. > On 24 Jan 2015 12:40 am, "Mark Kettenis" <[email protected]> wrote: > > > > Date: Fri, 23 Jan 2015 22:52:37 +1000 > > > From: David Gwynne <[email protected]> > > > > > > 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? > > > > Hmm, but it will need to be if we ever want to have the ability to > > schedule softinterrupts on different CPUs. > > > > > 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)); > > > } > > > > > > > >
