From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:35591) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGAJd-0002tg-EX for qemu-devel@nongnu.org; Tue, 18 Oct 2011 10:06:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RGAJc-0003Qn-EF for qemu-devel@nongnu.org; Tue, 18 Oct 2011 10:06:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:6212) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGAJc-0003QV-6J for qemu-devel@nongnu.org; Tue, 18 Oct 2011 10:06:48 -0400 Message-ID: <4E9D87F3.4010901@redhat.com> Date: Tue, 18 Oct 2011 16:06:43 +0200 From: Avi Kivity MIME-Version: 1.0 References: <1318865312-27483-1-git-send-email-benoit.canet@gmail.com> <1318865312-27483-4-git-send-email-benoit.canet@gmail.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 3/7] integratorcp: convert control to memory API List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: =?UTF-8?B?QmVub8OudCBDYW5ldA==?= , qemu-devel@nongnu.org On 10/18/2011 01:44 PM, Peter Maydell wrote: > 2011/10/17 Beno=C3=AEt Canet : > > -static void icp_control_init(uint32_t base) > > +static void icp_control_init(target_phys_addr_t base) > > { > > - int iomemtype; > > + MemoryRegion *io; > > > > - iomemtype =3D cpu_register_io_memory(icp_control_readfn, > > - icp_control_writefn, NULL, > > - DEVICE_NATIVE_ENDIAN); > > - cpu_register_physical_memory(base, 0x00800000, iomemtype); > > + io =3D (MemoryRegion *)g_malloc0(sizeof(MemoryRegion)); > > + memory_region_init_io(io, &icp_control_ops, NULL, > > + "control", 0x00800000); > > + memory_region_add_subregion(get_system_memory(), base, io); > > /* ??? Save/restore. */ > > } > > I didn't spot this the first time round, but this is wrong. > We shouldn't be g_malloc0()ing the MemoryRegion -- it should > be an element in some suitable device struct. > > I think the right thing to do here is probably first to do the > (fairly trivial) conversion of the icp_control code to be a > sysbus device, then do the memory region conversion on top of that. It's not any less wrong than the original code, which also leaked memory. I'll merge it and let any further conversion take place on top. (though g_malloc0() is better replaced by g_new()). --=20 error compiling committee.c: too many arguments to function