From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:38878) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SxJZc-0000NQ-Dp for qemu-devel@nongnu.org; Fri, 03 Aug 2012 11:13:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SxJZY-00069r-2o for qemu-devel@nongnu.org; Fri, 03 Aug 2012 11:13:56 -0400 Received: from cantor2.suse.de ([195.135.220.15]:46905 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SxJZX-00069a-PQ for qemu-devel@nongnu.org; Fri, 03 Aug 2012 11:13:52 -0400 Message-ID: <501BEAAC.1040405@suse.de> Date: Fri, 03 Aug 2012 17:13:48 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1343873409-8571-1-git-send-email-david@gibson.dropbear.id.au> <1343873409-8571-3-git-send-email-david@gibson.dropbear.id.au> <501AA071.3030406@suse.de> <20120803023139.GG12733@truffala.fritz.box> In-Reply-To: <20120803023139.GG12733@truffala.fritz.box> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 2/2] pseries: Use new hook to correct reset sequence List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: Igor Mammedov , qemu-devel@nongnu.org, anthony@codemonkey.ws, agraf@suse.de Am 03.08.2012 04:31, schrieb David Gibson: > On Thu, Aug 02, 2012 at 05:44:49PM +0200, Andreas F=E4rber wrote: >> Am 02.08.2012 04:10, schrieb David Gibson: >>> A number of things need to occur during reset of the PAPR paravirtual= ized >>> platform in a specific order. For example, the hash table needs to b= e >>> cleared before the CPUs are reset, so that they initialize their regi= ster >>> state correctly, and the CPUs need to have their main reset called be= fore >>> we set up the entry point state on the boot cpu. We also need to hav= e >>> the main qdev reset happen before the creation and installation of th= e >>> device tree for the new boot, because we need the state of the device= s >>> settled to correctly construct the device tree. >>> >>> Currently reset of pseries is broken in a number of ways, and in othe= r >>> cases works largely by accident. This patch uses the new QEMUMachine = reset >>> hook to correct these problems, by replacing the several existing spa= pr >>> reset hooks with one new machine hook which ensures that the various = stages >>> happen in the correct order. >>> >>> Signed-off-by: David Gibson >>> --- >>> hw/spapr.c | 66 +++++++++++++++++++++++++++++++++-----------------= ---------- >>> 1 file changed, 36 insertions(+), 30 deletions(-) >>> >>> diff --git a/hw/spapr.c b/hw/spapr.c >>> index 2453bae..1e60ec1 100644 >>> --- a/hw/spapr.c >>> +++ b/hw/spapr.c >>> @@ -582,29 +582,22 @@ static void spapr_reset_htab(sPAPREnvironment *= spapr) >>> } >>> } >>> =20 >>> -static void spapr_reset(void *opaque) >>> +static void spapr_reset_cpu(CPUPPCState *env) >>> { >>> - sPAPREnvironment *spapr =3D (sPAPREnvironment *)opaque; >>> - >>> - /* Reset the hash table & recalc the RMA */ >>> - spapr_reset_htab(spapr); >>> - >>> - /* Load the fdt */ >>> - spapr_finalize_fdt(spapr, spapr->fdt_addr, spapr->rtas_addr, >>> - spapr->rtas_size); >>> -} >>> - >>> -static void spapr_cpu_reset(void *opaque) >>> -{ >>> - PowerPCCPU *cpu =3D opaque; >>> - CPUPPCState *env =3D &cpu->env; >>> + PowerPCCPU *cpu =3D container_of(env, PowerPCCPU, env); >> >> NACK. Please don't undo the cleanups I have applied! Functions should >> take a QOM PowerPCCPU, not its internal CPUPPCState. Fields are >> gradually being moved from CPUxxxState into CPUState. >=20 > Um, ok. So how do I iterate the PowerPCCPUs instead of the CPUPPCState= s? You can't, yet. The QOM CPUState part 4 series (that got stalled due to APIC modelling) moved quite some fields to CPUState but not enough to change the first_cpu type despite the really long (74?) series. So the solution here is to iterate the CPUPPCState, call ppc_env_get_cpu() on it and pass that as opaque as before. I could add a cpu_foreach() function though if that helps in the meantime? Either way the idea is to limit the number of places to touch in the upcoming refactorings. Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg