# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1179222609 -3600
# Node ID 5f09e34f56d7c3b77fc87dcb9310e05946b82670
# Parent fbce94a9feaac121ebb51a8f50e1f233d532ddd6
Fix TPM support in HVM domains
Signed-off-by: Joseph Cihula <joseph.cihula@xxxxxxxxx>
Signed-off-by: Peter Yang <peisen.yang@xxxxxxxxx>
---
tools/examples/vtpm-impl | 2 +-
tools/ioemu/hw/tpm_tis.c | 25 ++++++++++++++++++++-----
2 files changed, 21 insertions(+), 6 deletions(-)
diff -r fbce94a9feaa -r 5f09e34f56d7 tools/examples/vtpm-impl
--- a/tools/examples/vtpm-impl Tue May 15 10:49:10 2007 +0100
+++ b/tools/examples/vtpm-impl Tue May 15 10:50:09 2007 +0100
@@ -83,7 +83,7 @@ function vtpm_manager_cmd() {
release_lock vtpm_mgr
#return whether the command was successful
- if [ $resp_hex ne $TPM_SUCCESS ]; then
+ if [ $resp_hex -ne $TPM_SUCCESS ]; then
vtpm_fatal_error=1
false
else
diff -r fbce94a9feaa -r 5f09e34f56d7 tools/ioemu/hw/tpm_tis.c
--- a/tools/ioemu/hw/tpm_tis.c Tue May 15 10:49:10 2007 +0100
+++ b/tools/ioemu/hw/tpm_tis.c Tue May 15 10:50:09 2007 +0100
@@ -148,7 +148,7 @@ static int read_local_socket(tpmState *s
static int read_local_socket(tpmState *s, tpmBuffer *);
static int close_local_socket(tpmState *s, int force);
static int has_channel_local_socket(tpmState *s);
-#define LOCAL_SOCKET_PATH "/var/vtpm/vtpm_all.socket"
+#define LOCAL_SOCKET_PATH "/var/vtpm/socks/%d.socket"
#define NUM_TRANSPORTS 1
@@ -238,18 +238,33 @@ static int create_local_socket(tpmState
if (s->tpmTx.fd[0] < 0) {
s->tpmTx.fd[0] = socket(PF_LOCAL, SOCK_STREAM, 0);
+#ifdef DEBUG_TPM
+ fprintf(logfile," SOCKET FD %d errno %d \n", s->tpmTx.fd[0], errno );
+#endif
if (has_channel_local_socket(s)) {
+ int ret;
struct sockaddr_un addr;
memset(&addr, 0x0, sizeof(addr));
addr.sun_family = AF_LOCAL;
- strcpy(addr.sun_path, LOCAL_SOCKET_PATH);
- if (connect(s->tpmTx.fd[0],
- (struct sockaddr *)&addr,
- sizeof(addr)) != 0) {
+ snprintf(addr.sun_path, sizeof(addr.sun_path)-1,
+ LOCAL_SOCKET_PATH, (uint32_t) vtpm_instance);
+#ifdef DEBUG_TPM
+ fprintf(logfile," SOCKET NAME %s \n", addr.sun_path );
+#endif
+
+ if ((ret = connect(s->tpmTx.fd[0], (struct sockaddr *)&addr,
+ sizeof(addr))) != 0) {
close_local_socket(s, 1);
+#ifdef DEBUG_TPM
+ fprintf(logfile," RET %d errno %d\n", ret, errno );
+#endif
success = 0;
} else {
/* put filedescriptor in non-blocking mode for polling */
+#ifdef DEBUG_TPM
+ fprintf(logfile," put filedescriptor in non-blocking mode "
+ "for polling \n");
+#endif
int flags = fcntl(s->tpmTx.fd[0], F_GETFL);
fcntl(s->tpmTx.fd[0], F_SETFL, flags | O_NONBLOCK);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|