qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH RFC qom-cpu] linux-user: Avoid conditional cpu_r


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH RFC qom-cpu] linux-user: Avoid conditional cpu_reset()
Date: Wed, 10 Jul 2013 16:02:14 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Jul 10, 2013 at 07:51:32PM +0100, Peter Maydell wrote:
> On 10 July 2013 19:43, Eduardo Habkost <address@hidden> wrote:
> > On Wed, Jul 10, 2013 at 06:30:38PM +0200, Andreas Färber wrote:
> >> Some CPUs reset as part of cpu_init(), some others were reset
> >> afterwards, some not at all. While some targets didn't implement a
> >> cpu_[state_]reset() function, QOM cpu_reset() is always available.
> >> There's nothing wrong with resetting twice on startup, so drop
> >> the #ifdef.
> >>
> >> Suggested-by: Peter Maydell <address@hidden>
> >> Signed-off-by: Andreas Färber <address@hidden>
> >> Cc: Eduardo Habkost <address@hidden>
> >> ---
> >>  This had been discussed as a possible cleanup for the #ifdef.
> >>  I am uncertain whether we should do this since it hides the TODO item
> >>  of investigating ppc and sparc CPU reset.
> >>
> >>  linux-user/main.c | 2 --
> >>  1 file changed, 2 deletions(-)
> >>
> >> diff --git a/linux-user/main.c b/linux-user/main.c
> >> index 7f15d3d..e904d8c 100644
> >> --- a/linux-user/main.c
> >> +++ b/linux-user/main.c
> >> @@ -3637,9 +3637,7 @@ int main(int argc, char **argv, char **envp)
> >>          fprintf(stderr, "Unable to find CPU definition\n");
> >>          exit(1);
> >>      }
> >> -#if defined(TARGET_SPARC) || defined(TARGET_PPC)
> >>      cpu_reset(ENV_GET_CPU(env));
> >> -#endif
> >
> > Most of the cpu_reset() implementations I have looked at (including
> > sparc) contain something like:
> >
> >     memset(env, 0, offsetof(CPUXXXState, breakpoints));
> >
> > Isn't this clearing userspace registers that are not supposed to be
> > touched by clone()?
> 
> You're thinking about the other cpu_reset() -- this one is in
> main.c and happens only for the main thread, immediately
> after we've created that thread's CPU, and before we set up
> its registers for initial program start. The cpu_reset()
> that sometimes happens in the clone() path is in syscall.c
> (and is addressed by patch
> http://patchwork.ozlabs.org/patch/257232/ )

Oh, nevermind. We discussed do_fork() for so long that I didn't even
notice we had _another_ cpu_reset() #ifdef on main.c.

In this case the patch looks simple and safe, to me.

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]