Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/arch/powerpc/powerpc
On Wed, Feb 05, 2020 at 12:46:57PM +0900, Rin Okuyama wrote:
> Hi,
>
> On 2019/12/06 5:55, Andrew Doran wrote:
> > Module Name: src
> > Committed By: ad
> > Date: Thu Dec 5 20:55:24 UTC 2019
> >
> > Modified Files:
> > src/sys/arch/powerpc/powerpc: powerpc_machdep.c
> >
> > Log Message:
> > Need to call userret() from cpu_ast().
> >
> >
> > To generate a diff of this commit:
> > cvs rdiff -u -r1.74 -r1.75 src/sys/arch/powerpc/powerpc/powerpc_machdep.c
> >
> > Please note that diffs are not public domain; they are subject to the
> > copyright notices on the relevant files.
> >
> >
> > Modified files:
> >
> > Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c
> > diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.74 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.75
> > --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.74 Sat Nov 23 19:40:36 2019
> > +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Thu Dec 5 20:55:24 2019
> > @@ -1,4 +1,4 @@
> > -/* $NetBSD: powerpc_machdep.c,v 1.74 2019/11/23 19:40:36 ad Exp $ */
> > +/* $NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $ */
> > /*
> > * Copyright (C) 1995, 1996 Wolfgang Solfrank.
> > @@ -32,7 +32,7 @@
> > */
> > #include <sys/cdefs.h>
> > -__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.74 2019/11/23 19:40:36 ad Exp $");
> > +__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $");
> > #include "opt_altivec.h"
> > #include "opt_ddb.h"
> > @@ -373,6 +373,8 @@ void
> > cpu_ast(struct lwp *l, struct cpu_info *ci)
> > {
> > l->l_md.md_astpending = 0; /* we are about to do it */
> > + __insn_barrier();
> > + userret(l, l->l_md.md_utf);
> > if (l->l_pflag & LP_OWEUPC) {
> > l->l_pflag &= ~LP_OWEUPC;
> > @@ -400,7 +402,7 @@ cpu_need_resched(struct cpu_info *ci, st
> > cpu_send_ipi(cpu_index(ci), IPI_AST);
> > #endif
> > } else {
> > - l->l_md.md_astpending = 1; /* force call to ast() */
> > + l->l_md.md_astpending = 1; /* force call to cpu_ast() */
> > }
> > }
> >
>
> This commit makes userret() called twice with AST; cpu_ast() is
> invoked from
>
> booke/trap.c,
> https://nxr.netbsd.org/xref/src/sys/arch/powerpc/booke/trap.c#815
>
> ibm4xx/trap.c, and
> https://nxr.netbsd.org/xref/src/sys/arch/powerpc/ibm4xx/trap.c#276
>
> powerpc/trap.c.
> https://nxr.netbsd.org/xref/src/sys/arch/powerpc/powerpc/trap.c#348
>
> For all cases, userret() is called afterward. (Precisely speaking,
> for ibm4xx, mi_userret(9) is used instead. This should probably be
> replaced by userret().)
>
> Also, other ports test (l->l_pflag & LP_OWEUPC) before mi_userret(9).
I corrected the cpu_ast() case. Yes it's curious why ibm4xx calls
mi_userret() directly; that seems wrong (I have not changed it though). I
think it definitely makes more sense to deal with OWEUPC before userret().
Andrew
> Thanks,
> rin
Home |
Main Index |
Thread Index |
Old Index