From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57652) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SUgjQ-0002HO-Ml for qemu-devel@nongnu.org; Wed, 16 May 2012 12:05:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SUgjL-0002yv-KC for qemu-devel@nongnu.org; Wed, 16 May 2012 12:05:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:4113) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SUgjL-0002yd-CJ for qemu-devel@nongnu.org; Wed, 16 May 2012 12:05:39 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4GG5bAQ032491 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 16 May 2012 12:05:37 -0400 Received: from nial.usersys.redhat.com (dhcp-1-247.brq.redhat.com [10.34.1.247]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q4GG5a9E007424 for ; Wed, 16 May 2012 12:05:36 -0400 Message-ID: <4FB3D04F.3010605@redhat.com> Date: Wed, 16 May 2012 18:05:35 +0200 From: Igor Mammedov MIME-Version: 1.0 References: <1336608892-30501-1-git-send-email-afaerber@suse.de> <1336608892-30501-74-git-send-email-afaerber@suse.de> <4FACF766.7050005@suse.de> <4FB39F3F.5030603@redhat.com> <4FB3A51E.7060200@suse.de> In-Reply-To: <4FB3A51E.7060200@suse.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH next v2 73/74] linux-user: Use cpu_reset() after cpu_init() / cpu_copy() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On 05/16/2012 03:01 PM, Andreas F=C3=A4rber wrote: > Am 16.05.2012 14:36, schrieb Igor Mammedov: >> On 05/11/2012 01:26 PM, Andreas F=C3=A4rber wrote: >>> Am 11.05.2012 13:22, schrieb Peter Maydell: >>>> On 10 May 2012 01:14, Andreas F=C3=A4rber wrote: >>>>> Eliminates cpu_state_reset() usage. >>>>> >>>>> Signed-off-by: Andreas F=C3=A4rber >>>>> --- >>>>> linux-user/main.c | 2 +- >>>>> linux-user/syscall.c | 2 +- >>>>> 2 files changed, 2 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/linux-user/main.c b/linux-user/main.c >>>>> index 191b750..49108b8 100644 >>>>> --- a/linux-user/main.c >>>>> +++ b/linux-user/main.c >>>>> @@ -3405,7 +3405,7 @@ int main(int argc, char **argv, char **envp) >>>>> exit(1); >>>>> } >>>>> #if defined(TARGET_I386) || defined(TARGET_SPARC) || >>>>> defined(TARGET_PPC) >>>>> - cpu_state_reset(env); >>>>> + cpu_reset(ENV_GET_CPU(env)); >>>>> #endif >>>>> >>>>> thread_env =3D env; >>>>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >>>>> index 20d2a74..539af3f 100644 >>>>> --- a/linux-user/syscall.c >>>>> +++ b/linux-user/syscall.c >>>>> @@ -4262,7 +4262,7 @@ static int do_fork(CPUArchState *env, unsigne= d >>>>> int flags, abi_ulong newsp, >>>>> /* we create a new CPU instance. */ >>>>> new_env =3D cpu_copy(env); >>>>> #if defined(TARGET_I386) || defined(TARGET_SPARC) || >>>>> defined(TARGET_PPC) >>>>> - cpu_state_reset(new_env); >>>>> + cpu_reset(ENV_GET_CPU(new_env)); >>>>> #endif >>>>> /* Init regs that differ from the parent. */ >>>>> cpu_clone_regs(new_env, newsp); >>>>> -- >>>> >>>> Do you have any plans to try to rationalise the handling of reset >>>> so that we consistently either do or don't reset the cpu here, >>>> rather than having it done based on a TARGET_* ifdef ? >>> >>> Igor had an RFC for x86; sparc and ppc reset I haven't looked into ye= t. >>> Cc'ing Alex and Blue. >> I'll rebase RFC for x86 and post patches today and will remove it from= here >> by the last patch in patchset so that when this patch applied we could >> remove >> unnecessary call. >> So ACK for target-i386 here. > > Since back then Peter and I have discussed whether we can rather just > remove the #ifdef here and reset for all targets. > > Unfortunately I'm still not clear about some patches that stand in the > way of ObjectClass::realize - if cpu_reset() is moved to realizefn for > all targets then we can just call realize here. 1. I'd like to have cpu_reset in realizefn - which is kind of equivalent of cpu power-on, after which cpu should be in known state (i.e. the state after reset, at least for target-i386). 2. cpu_reset in realizefn as well will free us from calling cpu_reset in device_add when implementing hotplug and will allow to remove it from hw/pc.c. 3. regarding exec.c:cpu_copy and do_fork on target-i386 cpu_copy first creates cpu then copies all over it CPUArchState of orig= inal cpu perserving only cpu_index. It's beyond my understanding why anyone would/need do this. So I'll not touch cpu_reset in do_fork since I haven't a clue what's going on. Albeit adding cpu_reset in realizefn shouldn't break anything= here. > > Actually, all we'd need is ObjectClass::realize field, so I'm > considering extracting the intersection between Paolo and me, stick a > CPU-specific wrapper method on top as requested by Anthony and then we > can move ahead here... > > Andreas > --=20 ----- Igor