qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 2/3] s390: Add CPU reset handler


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH 2/3] s390: Add CPU reset handler
Date: Fri, 4 Jan 2013 15:11:42 +0100

On 04.01.2013, at 15:09, Jens Freimann wrote:

> On Thu, Jan 03, 2013 at 01:55:19PM +0100, Alexander Graf wrote:
>> 
>> On 18.12.2012, at 18:50, Jens Freimann wrote:
>> 
>>> Add a CPU reset handler to have all CPUs in a PoP compliant
>>> state.
>>> 
>>> Signed-off-by: Jens Freimann <address@hidden>
>>> 
>>> ---
>>> v2 -> v3:
>>> * remove FIXME
>>> * separate parent reset from local reset by adding a while line
>>> * use defines for register reset values
>>> 
>>> v1 -> v2:
>>> * move setting of control registers and psa to s390_cpu_reset
>>> and call it from the new s390_machine_cpu_reset_cb()
>>> This makes it more similar to how it is done on x86
>>> * in s390_cpu_reset() set env->halted state of cpu after
>>> the memset. This is needed to keep our s390_cpu_running
>>> counter in sync when s390_cpu_reset is called via the
>>> qemu_devices_reset path
>>> * set env->halted state in s390_cpu_initfn to 1 to avoid
>>> decrementing the cpu counter during first reset
>>> ---
>>> target-s390x/cpu.c | 35 +++++++++++++++++++++++++++++++++--
>>> target-s390x/kvm.c |  9 ++++++++-
>>> 2 files changed, 41 insertions(+), 3 deletions(-)
>>> 
>>> diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c
>>> index 619b202..58e412a 100644
>>> --- a/target-s390x/cpu.c
>>> +++ b/target-s390x/cpu.c
>>> @@ -4,6 +4,7 @@
>>> * Copyright (c) 2009 Ulrich Hecht
>>> * Copyright (c) 2011 Alexander Graf
>>> * Copyright (c) 2012 SUSE LINUX Products GmbH
>>> + * Copyright (c) 2012 IBM Corp.
>>> *
>>> * This library is free software; you can redistribute it and/or
>>> * modify it under the terms of the GNU Lesser General Public
>>> @@ -18,12 +19,19 @@
>>> * You should have received a copy of the GNU Lesser General Public
>>> * License along with this library; if not, see
>>> * <http://www.gnu.org/licenses/lgpl-2.1.html>
>>> + * Contributions after 2012-12-11 are licensed under the terms of the
>>> + * GNU GPL, version 2 or (at your option) any later version.
>>> + *
>>> */
>>> 
>>> #include "cpu.h"
>>> +#include "hw/hw.h"
>> 
>> Also, have you verified that this doesn't break s390x-linux-user?
> 
> I verified s390x-linux-user still builds. 
> 
>>> #include "qemu-common.h"
>>> #include "qemu-timer.h"
>>> 
>>> +#define IPL_PSW_MASK    0x0000000180000000ULL
>>> +#define CR0_RESET       0xE0UL
>>> +#define CR14_RESET      0xC2000000UL;
>>> 
>>> /* CPUClass::reset() */
>>> static void s390_cpu_reset(CPUState *s)
>>> @@ -37,12 +45,30 @@ static void s390_cpu_reset(CPUState *s)
>>>        log_cpu_state(env, 0);
>>>    }
>>> 
>>> +    s390_del_running_cpu(env);
>>> +
>>>    scc->parent_reset(s);
>>> 
>>>    memset(env, 0, offsetof(CPUS390XState, breakpoints));
>>> -    /* FIXME: reset vector? */
>>> +
>>> +    /* architectured initial values for CR 0 and 14 */
>>> +    env->cregs[0] = CR0_RESET;
>>> +    env->cregs[14] = CR14_RESET;
>>> +    /* set to z/Architecture mode */
>>> +    env->psw.mask = IPL_PSW_MASK;
>> 
>> In fact this one is correct for CONFIG_USER_ONLY.
>> 
>>> +    env->psa = 0;
>>> +    /* set halted to 1 to make sure we can add the cpu in
>>> +     * s390_ipl_cpu code, where env->halted is set back to 0
>>> +     * after incrementing the cpu counter */
>>> +    env->halted = 1;
>> 
>> While this again probably breaks s390x-linux-user, no?
> 
> It still builds fine, if that's what you mean? env->halted is
> not within an #ifdef !CONFIG_USER_ONLY clause.

Does it run? Or does the vcpu come up halted and never gets around to execute 
code?


Alex




reply via email to

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