From: Stefan Berger <stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org
Subject: [RFC PATCH 4/4] A test program for vTPM device creation
Date: Thu, 14 Jan 2016 11:01:58 -0500 [thread overview]
Message-ID: <1452787318-29610-5-git-send-email-stefanb@us.ibm.com> (raw)
In-Reply-To: <1452787318-29610-1-git-send-email-stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
From: Stefan Berger <stefanb-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
This provides a test program for testing the creation of vTPM device pairs.
Build it using the following commands:
make headers_install ARCH=x86_64 INSTALL_HDR_PATH=/usr
gcc vtpmctrl.c -o vtpmctrl
To use it:
# to create a device pair:
./vtpmctrl create
# to find the name of the other device give the name of one device
./vtpmctrl find /dev/vtpms0
# to destroy a device pair given one device name
./vtpmctrl destroy /dev/vtpms0
Signed-off-by: Stefan Berger <stefanb-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
---
vtpmctrl.c | 369 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 369 insertions(+)
create mode 100644 vtpmctrl.c
diff --git a/vtpmctrl.c b/vtpmctrl.c
new file mode 100644
index 0000000..883df72
--- /dev/null
+++ b/vtpmctrl.c
@@ -0,0 +1,369 @@
+/*
+ * vtpmctrl.c -- Linux vTPM driver control program
+ *
+ * (c) Copyright IBM Corporation 2015.
+ *
+ * Author: Stefan Berger <stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the names of the IBM Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <linux/vtpm.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <getopt.h>
+
+void vtpmctrl_create_usage(const char *prgname)
+{
+ fprintf(stderr,
+"Usage: %s create [options]\n"
+"\n"
+"Create a client server device pair."
+"\n"
+"The following options are supported\n"
+"\n"
+"-k|--keep : Keep the device pair after the vTPM closes access to the\n"
+" device; by default the device is closed.\n"
+"-h|--help : Display this help screen and exit.\n"
+"\n", prgname);
+}
+
+int vtpmctrl_create(int argc, char *argv[], const char *prgname)
+{
+ int fd, n;
+ struct vtpm_new_pair vtpm_new_pair = {
+ .flags = 0,
+ };
+ char tpmdev[VTPM_DEVNAME_MAX + 5];
+ char vtpmdev[VTPM_DEVNAME_MAX + 5];
+ const struct option longOpts[] = {
+ {"keep", no_argument, NULL, 'k'},
+ {"help", no_argument, NULL, 'h'},
+ {NULL , 0, 0, 0 },
+ };
+ int option, li;
+
+ while ((option = getopt_long(argc, argv, "kh", longOpts, &li)) >= 0) {
+ switch (option) {
+ case 'k':
+ vtpm_new_pair.flags |= VTPM_FLAG_KEEP_DEVPAIR;
+ break;
+ case 'h':
+ vtpmctrl_create_usage(prgname);
+ return 0;
+ default:
+ vtpmctrl_create_usage(prgname);
+ return 1;
+ }
+ }
+
+ fd = open("/dev/vtpmx", O_RDWR);
+ if (fd < 0) {
+ perror("Could not open /dev/vtpmx");
+ return 1;
+ }
+
+ n = ioctl(fd, VTPM_NEW_DEV, &vtpm_new_pair);
+ if (n != 0) {
+ perror("ioctl to create dev pair failed");
+ close(fd);
+ return 1;
+ }
+
+ snprintf(tpmdev, sizeof(tpmdev), "/dev/" VTPM_DEV_PREFIX_CLIENT"%u",
+ vtpm_new_pair.tpm_dev_num);
+ snprintf(vtpmdev, sizeof(vtpmdev), "/dev/" VTPM_DEV_PREFIX_SERVER"%u",
+ vtpm_new_pair.vtpm_dev_num);
+
+ printf("Created TPM device %s and vTPM device %s.\n",
+ tpmdev, vtpmdev);
+
+ close(fd);
+
+ return 0;
+}
+
+int copy_devname(char *dest, size_t size, const char *devname)
+{
+ int n;
+
+ n = snprintf(dest, size, "%s", devname);
+ if (n >= size) {
+ fprintf(stderr, "Device name %s is too long.\n", devname);
+ return 1;
+ }
+
+ return 0;
+}
+
+void vtpmctrl_destroy_usage(const char *prgname)
+{
+ fprintf(stderr,
+"Usage: %s destroy <devicename> [options]\n"
+"\n"
+"Destroy a client server device pair by providing the name of one of\n"
+"the devices.\n"
+"\n"
+"The following options are supported\n"
+"\n"
+"-h|--help : Display this help screen and exit.\n"
+"\n", prgname);
+}
+
+int fill_vtpm_pair(struct vtpm_pair *vtpm_pair, const char *devname)
+{
+ unsigned int offset = 0, num;
+ int n;
+
+ if (!strncmp("/dev/", devname, 5))
+ offset = 5;
+
+ if (!strncmp(&devname[offset], VTPM_DEV_PREFIX_SERVER,
+ strlen(VTPM_DEV_PREFIX_SERVER))) {
+ offset += strlen(VTPM_DEV_PREFIX_SERVER);
+ if (sscanf(&devname[offset], "%u", &num) != 1) {
+ fprintf(stderr, "Could not parse %s as vTPM "
+ "device.\n", devname);
+ return -1;
+ }
+ vtpm_pair->tpm_dev_num = VTPM_DEV_NUM_INVALID;
+ vtpm_pair->vtpm_dev_num = num;
+ return 0;
+ } else if (!strncmp(&devname[offset], VTPM_DEV_PREFIX_CLIENT,
+ strlen(VTPM_DEV_PREFIX_CLIENT))) {
+ offset += strlen(VTPM_DEV_PREFIX_CLIENT);
+ if (sscanf(&devname[offset], "%u", &num) != 1) {
+ fprintf(stderr, "Could not parse %s as vTPM "
+ "device.\n", devname);
+ return -1;
+ }
+ vtpm_pair->tpm_dev_num = num;
+ vtpm_pair->vtpm_dev_num = VTPM_DEV_NUM_INVALID;
+ return 0;
+ }
+ fprintf(stderr , "Could not parse %s.\n", devname);
+
+ return -1;
+}
+
+int vtpmctrl_destroy(int argc, char *argv[], const char *prgname)
+{
+ int fd = -1, n;
+ struct vtpm_pair vtpm_pair;
+ const char *devname;
+ unsigned offset = 0;
+ size_t size;
+ const struct option longOpts[] = {
+ {"help", no_argument, NULL, 'h'},
+ {NULL , 0, 0, 0 },
+ };
+ int option, li;
+
+ while ((option = getopt_long(argc, argv, "h", longOpts, &li)) >= 0) {
+ switch (option) {
+ case 'h':
+ vtpmctrl_destroy_usage(prgname);
+ return 0;
+ default:
+ vtpmctrl_destroy_usage(prgname);
+ return 1;
+ }
+ }
+
+ if (argc < 2) {
+ fprintf(stderr, "Missing device name parameter.\n");
+ vtpmctrl_destroy_usage(prgname);
+ goto err_exit;
+ }
+
+ devname = argv[1];
+
+ fd = open("/dev/vtpmx", O_RDWR);
+ if (fd < 0) {
+ perror("Could not open /dev/vtpmx");
+ goto err_exit;
+ }
+
+ if (fill_vtpm_pair(&vtpm_pair, devname) < 0)
+ goto err_exit;
+
+ n = ioctl(fd, VTPM_DEL_DEV, &vtpm_pair);
+ if (n != 0) {
+ fprintf(stderr, "Could not delete device pair.\n");
+ goto err_exit;
+ }
+
+ fprintf(stdout, "Successfully deleted device pair.\n");
+
+ close(fd);
+
+ return 0;
+
+err_exit:
+ if (fd >= 0)
+ close(fd);
+ return 1;
+}
+
+void vtpmctrl_find_usage(const char *prgname)
+{
+ fprintf(stderr,
+"Usage: %s find <devicename> [options]\n"
+"\n"
+"Given one device name, determine the name of the other one.\n"
+"\n"
+"The following options are supported\n"
+"\n"
+"-h|--help : Display this help screen and exit.\n"
+"\n", prgname);
+}
+
+int vtpmctrl_find(int argc, char *argv[], const char *prgname)
+{
+ int fd = -1, n;
+ struct vtpm_pair vtpm_pair;
+ const char *devname;
+ unsigned offset = 0;
+ size_t size;
+ const struct option longOpts[] = {
+ {"help", no_argument, NULL, 'h'},
+ {NULL , 0, 0, 0 },
+ };
+ int option, li;
+ char tpmdev[VTPM_DEVNAME_MAX + 5];
+
+ while ((option = getopt_long(argc, argv, "h", longOpts, &li)) >= 0) {
+ switch (option) {
+ case 'h':
+ vtpmctrl_find_usage(prgname);
+ return 0;
+
+ default:
+ vtpmctrl_find_usage(prgname);
+ return 1;
+ }
+ }
+
+ if (argc < 2) {
+ fprintf(stderr, "Missing device name parameter.\n");
+ vtpmctrl_destroy_usage(prgname);
+ goto err_exit;
+ }
+
+ devname = argv[1];
+
+ fd = open("/dev/vtpmx", O_RDWR);
+ if (fd < 0) {
+ perror("Could not open /dev/vtpmx");
+ goto err_exit;
+ }
+
+ if (fill_vtpm_pair(&vtpm_pair, devname) < 0)
+ goto err_exit;
+
+ if (vtpm_pair.tpm_dev_num != VTPM_DEV_NUM_INVALID) {
+ n = ioctl(fd, VTPM_GET_VTPMDEV, &vtpm_pair);
+ if (n != 0) {
+ fprintf(stderr, "Could not find the other device of the device pair.\n");
+ goto err_exit;
+ } else {
+ snprintf(tpmdev, sizeof(tpmdev), "/dev/"VTPM_DEV_PREFIX_SERVER"%u",
+ vtpm_pair.vtpm_dev_num);
+ fprintf(stdout, "The name of the vTPM device is: %s\n", tpmdev);
+ }
+ } else {
+ n = ioctl(fd, VTPM_GET_TPMDEV, &vtpm_pair);
+ if (n != 0) {
+ fprintf(stderr, "Could not find the other device of the device pair.\n");
+ goto err_exit;
+ } else {
+ snprintf(tpmdev, sizeof(tpmdev), "/dev/"VTPM_DEV_PREFIX_CLIENT"%u",
+ vtpm_pair.tpm_dev_num);
+ fprintf(stdout, "The name of the TPM device is: %s\n", tpmdev);
+ }
+ }
+
+
+ close(fd);
+
+ return 0;
+
+err_exit:
+ if (fd >= 0)
+ close(fd);
+ return 1;
+}
+
+void main_usage(const char *prgname)
+{
+ fprintf(stdout,
+"Usage: %s [command] [options]\n"
+"\n"
+"Control vTPM devices.\n"
+"\n"
+"The following commands are supported.\n"
+"\n"
+"create : Create device pairs\n"
+"destroy : Destroy device pairs\n"
+"find : Find the names of device pairs\n"
+"\n"
+"Consult the help screens of the individual commands for supported options.\n"
+"\n"
+, prgname);
+}
+
+int main(int argc, char *argv[])
+{
+
+ if (argc < 2) {
+ fprintf(stderr, "Missing command parameter.\n");
+ return 1;
+ }
+
+ if (!strcmp(argv[1], "create")) {
+ return vtpmctrl_create(argc - 1, &argv[1], argv[0]);
+ } else if (!strcmp(argv[1], "destroy")) {
+ return vtpmctrl_destroy(argc - 1, &argv[1], argv[0]);
+ } else if (!strcmp(argv[1], "find")) {
+ return vtpmctrl_find(argc - 1, &argv[1], argv[0]);
+ } else {
+ fprintf(stderr, "Unsupported command.\n\n");
+ main_usage(argv[0]);
+ return 1;
+ }
+}
--
2.4.3
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
next prev parent reply other threads:[~2016-01-14 16:01 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-14 16:01 [RFC PATCH 0/4] Multi-instance vTPM driver Stefan Berger
[not found] ` <1452787318-29610-1-git-send-email-stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2016-01-14 16:01 ` [RFC PATCH 1/4] New flags for TPM chip avoiding filesystem registrations Stefan Berger
[not found] ` <1452787318-29610-2-git-send-email-stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2016-01-21 8:07 ` Jarkko Sakkinen
2016-01-14 16:01 ` [RFC PATCH 2/4] Allow to provide a name pattern of the device Stefan Berger
2016-01-14 16:01 ` [RFC PATCH 3/4] Implement driver for supporting multiple emulated TPMs Stefan Berger
[not found] ` <1452787318-29610-4-git-send-email-stefanb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2016-01-19 23:51 ` Jason Gunthorpe
[not found] ` <20160119235107.GA4307-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-20 14:39 ` Stefan Berger
[not found] ` <201601201439.u0KEdGB9031710-YREtIfBy6dDImUpY6SP3GEEOCMrvLtNR@public.gmane.org>
2016-01-27 2:36 ` Jarkko Sakkinen
[not found] ` <20160127023603.GA23863-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-27 12:17 ` Stefan Berger
[not found] ` <201601271217.u0RCHQIX004914@d03av02.boulder.ibm.com>
[not found] ` <201601271217.u0RCHQIX004914-nNA/7dmquNI+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 14:22 ` Jarkko Sakkinen
[not found] ` <20160127142239.GA3756-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-27 18:24 ` Jason Gunthorpe
[not found] ` <20160127182448.GA31680-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-27 21:13 ` Jarkko Sakkinen
2016-01-27 22:38 ` Stefan Berger
[not found] ` <201601271217.u0RCHQkf003637@d03av03.boulder.ibm.com>
[not found] ` <201601271217.u0RCHQkf003637-MijUUJkLaQs+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 17:35 ` Jason Gunthorpe
[not found] ` <201601201439.u0KEdFao027907@d03av05.boulder.ibm.com>
[not found] ` <201601201439.u0KEdFao027907-3MP/CPU4Muo+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-21 1:17 ` Jason Gunthorpe
[not found] ` <20160121011701.GA20361-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-21 3:01 ` Stefan Berger
[not found] ` <201601210301.u0L31hLD018933-nNA/7dmquNI+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 2:50 ` Jarkko Sakkinen
[not found] ` <20160127025057.GB23863-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-27 12:20 ` Stefan Berger
[not found] ` <201601271220.u0RCKpEG016626@d03av02.boulder.ibm.com>
[not found] ` <201601271220.u0RCKpEG016626-nNA/7dmquNI+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 14:23 ` Jarkko Sakkinen
[not found] ` <201601210301.u0L31h5r012187@d03av03.boulder.ibm.com>
[not found] ` <201601210301.u0L31h5r012187-MijUUJkLaQs+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-21 3:21 ` Jason Gunthorpe
[not found] ` <20160121032115.GA26266-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-21 3:56 ` Stefan Berger
[not found] ` <201601210356.u0L3uP1n029818@d03av05.boulder.ibm.com>
[not found] ` <201601210356.u0L3uP1n029818-3MP/CPU4Muo+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-21 17:42 ` Jason Gunthorpe
[not found] ` <20160121174243.GD3064-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-21 19:02 ` Stefan Berger
[not found] ` <201601211902.u0LJ2LbL001130@d03av01.boulder.ibm.com>
[not found] ` <201601211902.u0LJ2LbL001130-Rn83F4s8Lwc+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-21 19:30 ` Jason Gunthorpe
[not found] ` <20160121193049.GA31938-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-21 21:51 ` Stefan Berger
[not found] ` <201601212151.u0LLpC93021986@d03av03.boulder.ibm.com>
[not found] ` <201601212151.u0LLpC93021986-MijUUJkLaQs+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-21 22:10 ` Jason Gunthorpe
[not found] ` <20160121221040.GA1630-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-22 12:01 ` Jarkko Sakkinen
2016-01-22 15:09 ` Stefan Berger
[not found] ` <56A2461C.7030607-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2016-01-25 18:10 ` Jason Gunthorpe
[not found] ` <20160125181046.GB28108-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-26 1:05 ` Stefan Berger
2016-01-26 1:46 ` Jarkko Sakkinen
[not found] ` <20160126014652.GB10732-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-26 3:19 ` Jason Gunthorpe
[not found] ` <20160126031919.GA24217-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-26 13:56 ` Jarkko Sakkinen
[not found] ` <20160126135658.GA6813-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-26 17:58 ` Jason Gunthorpe
[not found] ` <20160126175816.GA17937-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-27 2:06 ` Jarkko Sakkinen
[not found] ` <20160127020617.GB22703-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-27 19:48 ` Jarkko Sakkinen
[not found] ` <201601260105.u0Q15IWW028777@d03av04.boulder.ibm.com>
[not found] ` <201601260105.u0Q15IWW028777-2xHzGjyANq4+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-26 3:46 ` Jason Gunthorpe
[not found] ` <20160126034632.GB24217-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-26 14:21 ` Stefan Berger
2016-02-02 19:22 ` Stefan Berger
[not found] ` <201601261421.u0QELnI3002626@d01av02.pok.ibm.com>
[not found] ` <201601261421.u0QELnI3002626-prK0F/7GlgzImUpY6SP3GEEOCMrvLtNR@public.gmane.org>
2016-01-26 18:22 ` Jason Gunthorpe
[not found] ` <20160126182248.GB17937-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-26 23:22 ` Stefan Berger
[not found] ` <201601262322.u0QNMo1r022303@d03av03.boulder.ibm.com>
[not found] ` <201601262322.u0QNMo1r022303-MijUUJkLaQs+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 18:21 ` Jason Gunthorpe
2016-01-27 3:13 ` Jarkko Sakkinen
[not found] ` <20160127031320.GC23863-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-27 12:42 ` Stefan Berger
[not found] ` <201601271242.u0RCgM0E031875@d03av05.boulder.ibm.com>
[not found] ` <201601271242.u0RCgM0E031875-3MP/CPU4Muo+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 17:58 ` Jason Gunthorpe
[not found] ` <20160127175839.GA31038-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-27 21:58 ` Stefan Berger
[not found] ` <201601272158.u0RLwvIK005533@d01av01.pok.ibm.com>
[not found] ` <201601272158.u0RLwvIK005533-4ZtxiNBBw+3ImUpY6SP3GEEOCMrvLtNR@public.gmane.org>
2016-01-27 22:25 ` Jason Gunthorpe
[not found] ` <20160127222534.GB5520-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-27 22:55 ` Stefan Berger
[not found] ` <201601272255.u0RMtuqY014120@d03av02.boulder.ibm.com>
[not found] ` <201601272255.u0RMtuqY014120-nNA/7dmquNI+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-27 23:33 ` Jason Gunthorpe
2016-01-14 16:01 ` Stefan Berger [this message]
2016-01-15 10:11 ` [RFC PATCH 0/4] Multi-instance vTPM driver Jarkko Sakkinen
[not found] ` <20160115101146.GA11987-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-15 13:02 ` Stefan Berger
[not found] ` <201601151302.u0FD2wGG003518@d03av03.boulder.ibm.com>
[not found] ` <201601151302.u0FD2wGG003518-MijUUJkLaQs+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-25 23:15 ` Jarkko Sakkinen
[not found] ` <20160125231532.GA10732-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-26 0:28 ` Stefan Berger
2016-01-26 0:29 ` Jarkko Sakkinen
[not found] ` <201601260029.u0Q0T7Ek004865@d03av04.boulder.ibm.com>
[not found] ` <201601260029.u0Q0T7Ek004865-2xHzGjyANq4+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-26 1:48 ` Jarkko Sakkinen
2016-01-19 17:44 ` Jason Gunthorpe
[not found] ` <20160119174400.GA7616-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-19 17:53 ` Stefan Berger
2016-01-19 22:59 ` Jarkko Sakkinen
[not found] ` <201601191753.u0JHrku2031608@d01av01.pok.ibm.com>
[not found] ` <201601191753.u0JHrku2031608-4ZtxiNBBw+3ImUpY6SP3GEEOCMrvLtNR@public.gmane.org>
2016-01-19 18:08 ` Jason Gunthorpe
[not found] ` <20160119180802.GA8038-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-19 18:18 ` Stefan Berger
2016-01-19 22:14 ` Mimi Zohar
[not found] ` <1453241668.2673.31.camel-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2016-01-19 22:48 ` Jason Gunthorpe
[not found] ` <20160119224851.GA31745-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-19 23:05 ` Stefan Berger
[not found] ` <201601191818.u0JIIExQ010843@d03av04.boulder.ibm.com>
[not found] ` <201601191818.u0JIIExQ010843-2xHzGjyANq4+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-19 23:04 ` Jason Gunthorpe
[not found] ` <20160119230456.GB31745-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-01-19 23:15 ` Stefan Berger
[not found] ` <201601192315.u0JNFFG6030371-Rn83F4s8Lwc+UXBhvPuGgqsjOiXwFzmk@public.gmane.org>
2016-01-20 15:40 ` Ken Goldman
[not found] ` <201601192315.u0JNFGkm029862@d01av04.pok.ibm.com>
[not found] ` <201601192315.u0JNFGkm029862-YREtIfBy6dDImUpY6SP3GEEOCMrvLtNR@public.gmane.org>
2016-01-19 23:42 ` Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1452787318-29610-5-git-send-email-stefanb@us.ibm.com \
--to=stefanb-r/jw6+rmf7hqt0dzr+alfa@public.gmane.org \
--cc=dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).