From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42985 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PqXTx-0001nU-4e for qemu-devel@nongnu.org; Fri, 18 Feb 2011 16:03:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PqXTv-0006cy-Nz for qemu-devel@nongnu.org; Fri, 18 Feb 2011 16:03:17 -0500 Received: from e36.co.us.ibm.com ([32.97.110.154]:32839) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PqXTv-0006cK-FO for qemu-devel@nongnu.org; Fri, 18 Feb 2011 16:03:15 -0500 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e36.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id p1IKvxiq010001 for ; Fri, 18 Feb 2011 13:57:59 -0700 Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p1IL35oY112454 for ; Fri, 18 Feb 2011 14:03:05 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p1IL35nK006069 for ; Fri, 18 Feb 2011 14:03:05 -0700 Received: from [9.59.241.154] (d941e-10.watson.ibm.com [9.59.241.154]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p1IL35Yw006039 for ; Fri, 18 Feb 2011 14:03:05 -0700 Message-ID: <4D5EDE88.9010407@linux.vnet.ibm.com> Date: Fri, 18 Feb 2011 16:03:04 -0500 From: Stefan Berger MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 1/5] Add TPM 1.2 device interface References: <1298043215-10083-1-git-send-email-andreas.niederl@iaik.tugraz.at> <1298043215-10083-2-git-send-email-andreas.niederl@iaik.tugraz.at> In-Reply-To: <1298043215-10083-2-git-send-email-andreas.niederl@iaik.tugraz.at> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On 02/18/2011 10:33 AM, Andreas Niederl wrote: > + > +static const VMStateDescription vmstate_loc = { > + .name = "loc", > + .version_id = 0, > + .fields = (VMStateField []) { > + VMSTATE_UINT32(state, TPMLocality), > + VMSTATE_UINT32(inte, TPMLocality), > + VMSTATE_UINT32(ints, TPMLocality), > + VMSTATE_UINT8(access, TPMLocality), > + VMSTATE_UINT8(sts, TPMLocality), > + VMSTATE_END_OF_LIST() > + } > +}; > + > +static const VMStateDescription vmstate_tpm = { > + .name = "tpm", > + .version_id = 0, > + .minimum_version_id = 0, > + .minimum_version_id_old = 0, > + .pre_save = tpm_pre_save, > + .fields = (VMStateField []) { > + VMSTATE_UINT32(irq, TPMState), > + VMSTATE_UINT32(offset, TPMState), > + VMSTATE_BUFFER(buf, TPMState), > + VMSTATE_UINT8( active_locty, TPMState), > + VMSTATE_UINT8(aborting_locty, TPMState), > + VMSTATE_UINT8( next_locty, TPMState), > + VMSTATE_STRUCT_ARRAY(loc, TPMState, NUM_LOCALITIES, 0, > + vmstate_loc, TPMLocality), Here you are pointing to the above vmstate_loc ... > + VMSTATE_END_OF_LIST() > + } > +}; > + > +/* > + > + vmstate_register(&dev->qdev, 1,&vmstate_tpm, s); > + for (i = 0; i< NUM_LOCALITIES; i++) { > + vmstate_register(&dev->qdev, 1,&vmstate_loc,&s->loc[i]); ... here you are (again) registering the localities ... > + } > + > + isa_init_irq(dev,&s->pic, isairq); > + s->irq = isairq; > + > + iomem = cpu_register_io_memory(tis_readfn, tis_writefn, s, > + DEVICE_LITTLE_ENDIAN); > + cpu_register_physical_memory(TIS_ADDR_BASE, > + 0x1000 * NUM_LOCALITIES, iomem); > + > + s->poll_timer = qemu_new_timer(vm_clock, tis_poll_timer, s); > + > + return 0; > +} > + > +static void qdev_tpm_reset(DeviceState *dev) > +{ > + TPMState *s = DO_UPCAST(TPMState, dev.qdev, dev); > + tpm_reset(s); > +} > + > +static ISADeviceInfo tpm_info = { > + .init = tpm_init, > + .qdev.name = "tpm", > + .qdev.desc = "TPM TIS Interface", > + .qdev.size = sizeof (TPMState), > + .qdev.vmsd =&vmstate_tpm, ... and here you're pointing to vmstate_tpm, which was also registered above using + + vmstate_register(&dev->qdev, 1,&vmstate_tpm, s); Are you sure this is necessary? In my implementation I only have the qdev.vmsd set and need not explicitly use vmstate_register(). Aren't you writing the state two times if you do that? Stefan