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

Reply via email to