* Amarnath Valluri (amarnath.vall...@intel.com) wrote: > On Tue, 2017-07-25 at 20:18 -0400, Stefan Berger wrote: > > On 07/18/2017 04:49 AM, Amarnath Valluri wrote: > > > diff --git a/hw/tpm/Makefile.objs b/hw/tpm/Makefile.objs > > > index 64cecc3..41f0b7a 100644 > > > --- a/hw/tpm/Makefile.objs > > > +++ b/hw/tpm/Makefile.objs > > > @@ -1,2 +1,3 @@ > > > common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o > > > common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o tpm_util.o > > > +common-obj-$(CONFIG_TPM_EMULATOR) += tpm_emulator.o tpm_util.o > > > diff --git a/hw/tpm/tpm_emulator.c b/hw/tpm/tpm_emulator.c > > > new file mode 100644 > > > index 0000000..c90914c > > > --- /dev/null > > > +++ b/hw/tpm/tpm_emulator.c > > > @@ -0,0 +1,973 @@ > > > +/* > > > + * emulator TPM driver > > > + * > > > + * Copyright (c) 2017 Intel Corporation > > > + * Author: Amarnath Valluri <amarnath.vall...@intel.com> > > > + * > > > + * Copyright (c) 2010 - 2013 IBM Corporation > > > + * Authors: > > > + * Stefan Berger <stef...@us.ibm.com> > > > + * > > > + * Copyright (C) 2011 IAIK, Graz University of Technology > > > + * Author: Andreas Niederl > > > + * > > > + * This library is free software; you can redistribute it and/or > > > + * modify it under the terms of the GNU Lesser General Public > > > + * License as published by the Free Software Foundation; either > > > + * version 2 of the License, or (at your option) any later version. > > > + * > > > + * This library is distributed in the hope that it will be useful, > > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + * Lesser General Public License for more details. > > > + * > > > + * 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/> > > > + * > > > + */ > > > + > > > +#include "qemu/osdep.h" > > > +#include "qemu/error-report.h" > > > +#include "qemu/sockets.h" > > > +#include "io/channel-socket.h" > > > +#include "sysemu/tpm_backend.h" > > > +#include "tpm_int.h" > > > +#include "hw/hw.h" > > > +#include "hw/i386/pc.h" > > > +#include "tpm_util.h" > > > +#include "tpm_ioctl.h" > > > +#include "migration/migration.h" > > > +#include "qapi/error.h" > > > + > > > +#include <fcntl.h> > > > +#include <sys/types.h> > > > +#include <sys/stat.h> > > > +#include <stdio.h> > > > + > > > +#define DEBUG_TPM 0 > > > + > > > +#define DPRINT(fmt, ...) do { \ > > > + if (DEBUG_TPM) { \ > > > + fprintf(stderr, fmt, ## __VA_ARGS__); \ > > > + } \ > > > +} while (0); > > > + > > > +#define DPRINTF(fmt, ...) DPRINT("tpm-emulator: "fmt"\n", __VA_ARGS__) > > > + > > > +#define TYPE_TPM_EMULATOR "tpm-emulator" > > > +#define TPM_EMULATOR(obj) \ > > > + OBJECT_CHECK(TPMEmulator, (obj), TYPE_TPM_EMULATOR) > > > + > > > +static const TPMDriverOps tpm_emulator_driver; > > > + > > > +/* data structures */ > > > +typedef struct TPMEmulator { > > > + TPMBackend parent; > > > + > > > + TPMEmulatorOptions *ops; > > > + QIOChannel *data_ioc; > > > + QIOChannel *ctrl_ioc; > > > + bool op_executing; > > > + bool op_canceled; > > > + bool child_running; > > > + TPMVersion tpm_version; > > > + ptm_cap caps; /* capabilities of the TPM */ > > > + uint8_t cur_locty_number; /* last set locality */ > > > + QemuMutex state_lock; > > > + Error *migration_blocker; > > > +} TPMEmulator; > > > + > > > +#define TPM_DEFAULT_EMULATOR "swtpm" > > > +#define TPM_DEFAULT_LOGLEVEL 5 > > > +#define TPM_EMULATOR_PIDFILE "/tmp/qemu-tpm.pid" > > > > swtpm will write this file and remove it when it terminates. You may run > > into concurrency problems as well. I would extend this name with the pid > > of the QEMU process starting swtpm. > Stefan, there was some issue in my reabasing and sent wrong version of > patchset, but i made all the changes you suggested including the pid > file. > > But i did not sent the next version as Marc-André Lureau objected the > the idea of spawning swtpm from Qemu. I started exploring his suggestion > of 'chardev'. > > I feel like we are back to square one :).
I agree with Marc-Andre that it's best not to spawn it from qemu; the way we do pretty much all other external tools is to get something else to start them up and wire them back in with a chardev. Dave > - Amarnath > > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK