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 :). - Amarnath