NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: port-vax/55415: vax no longer preempts in a timely fashion
The following reply was made to PR port-vax/55415; it has been noted by GNATS.
From: oster%netbsd.org@localhost
To: gnats-bugs%netbsd.org@localhost, port-vax-maintainer%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, oster%netbsd.org@localhost
Cc:
Subject: Re: port-vax/55415: vax no longer preempts in a timely fashion
Date: Thu, 30 Jul 2020 11:37:20 -0600
On 6/26/20 12:55 AM, Anders Magnusson wrote:
> The following reply was made to PR port-vax/55415; it has been noted by GNATS.
>
> From: Anders Magnusson <ragge%tethuvudet.se@localhost>
> To: gnats-bugs%netbsd.org@localhost, port-vax-maintainer%netbsd.org@localhost,
> gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, oster%netbsd.org@localhost
> Cc:
> Subject: Re: port-vax/55415: vax no longer preempts in a timely fashion
> Date: Fri, 26 Jun 2020 08:54:15 +0200
>
> Den 2020-06-25 kl. 17:00, skrev Greg Oster:
> > The following reply was made to PR port-vax/55415; it has been noted by GNATS.
> >
> > From: Greg Oster <oster%netbsd.org@localhost>
> > To: gnats-bugs%netbsd.org@localhost
> > Cc:
> > Subject: Re: port-vax/55415: vax no longer preempts in a timely fashion
> > Date: Thu, 25 Jun 2020 08:55:50 -0600
> >
> > On 6/25/20 3:15 AM, Anders Magnusson wrote:
> > > The following reply was made to PR port-vax/55415; it has been noted by GNATS.
> > >
> > > From: Anders Magnusson <ragge%tethuvudet.se@localhost>
> > > To: gnats-bugs%netbsd.org@localhost
> > > Cc:
> > > Subject: Re: port-vax/55415: vax no longer preempts in a timely fashion
> > > Date: Thu, 25 Jun 2020 11:10:42 +0200
> > >
> > > Will it work if you only restore the removed line in cpu.h?
> >
> > Yes, yes it does! So it's just one line that needs to be restored to
> > get things working properly.
> >
> Great!
>
> The other missing line should not be needed as I understand the code in
> sched_resched_cpu().
> ci_want_resched should always be set already when cpu_need_resched() is
> called.
>
> I'll try to fire up my 4000/90 this weekend and see if I can find this bug.
>
I've done a bit more debugging... What I'm seeing is that in
kern_runq.c:sched_resched_cpu() the call to cpu_need_resched(ci, l, f)
happens, cpu_need_resched() sets up the AST. Except it's only once in a
while that the trap with the AST fires, userret() gets called, and
preemption happens! Sometimes the trap with AST fires once, and not
again... sometimes it fires 5 times in a row, and then misses.... but I
don't know why an AST that has been posted would subsequently get missed
sometimes....
So it's able to hit a situation where cpu_need_resched() is called, but
the corresponding AST never fires. The loop in sched_resched_cpu() that
sets ci->ci_want_resched keeps thinking (correctly!) that the AST has
already been setup, and so doesn't try to call cpu_need_resched() again.
When it gets 'stuck' like this, we never see an AST until the process
completes. (nor do we see preemption until the process completes.)
That seems to be because if I check the AST status with:
if (mfpr(PR_ASTLVL) != AST_OK)
that condition is always true... (meaning the AST is not setup...)
Any ideas on how an AST can just 'disappear'? (I'm using the same
mfpr() check right after the mtpr() setting of PR_ASTLVL, and there it
thinks it's set just fine... so how does it go missing a few moments
after????)
Later...
Greg Oster
Home |
Main Index |
Thread Index |
Old Index