From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quan Xu Subject: [PATCH 1/6] vTPM: event channel bind interdomain with para/hvm virtual machine Date: Thu, 30 Oct 2014 03:38:46 -0400 Message-ID: <1414654731-32641-2-git-send-email-quan.xu@intel.com> References: <1414654731-32641-1-git-send-email-quan.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1414654731-32641-1-git-send-email-quan.xu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: keir@xen.org, ian.campbell@citrix.com, tim@xen.org, ian.jackson@eu.citrix.com, jbeulich@suse.com, Quan Xu List-Id: xen-devel@lists.xenproject.org Signed-off-by: Quan Xu --- extras/mini-os/include/tpmback.h | 3 +++ extras/mini-os/tpmback.c | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/extras/mini-os/include/tpmback.h b/extras/mini-os/include/tpmback.h index 4408986..2618098 100644 --- a/extras/mini-os/include/tpmback.h +++ b/extras/mini-os/include/tpmback.h @@ -41,6 +41,9 @@ #ifndef TPMBACK_H #define TPMBACK_H +#define T_DOMAIN_TYPE_HVM 1 +#define T_DOMAIN_TYPE_PV 2 + struct tpmcmd { domid_t domid; /* Domid of the frontend */ uint8_t locality; /* Locality requested by the frontend */ diff --git a/extras/mini-os/tpmback.c b/extras/mini-os/tpmback.c index 00b66e8..d76e05e 100644 --- a/extras/mini-os/tpmback.c +++ b/extras/mini-os/tpmback.c @@ -555,7 +555,7 @@ int connect_fe(tpmif_t* tpmif) { char path[512]; char* err, *value; - uint32_t domid; + uint32_t domid, domtype; grant_ref_t ringref; evtchn_port_t evtchn; @@ -608,14 +608,28 @@ int connect_fe(tpmif_t* tpmif) } free(value); - domid = tpmif->domid; + /* get the domain type*/ + snprintf(path, 512, "%s/domain-type", tpmif->fe_path); + if ((err = xenbus_read(XBT_NIL, path, &value))) { + TPMBACK_ERR("xenbus_read(%s) Error = %s", path, err); + free(err); + return -1; + } + if (sscanf(value, "%d", &domtype) != 1) { + TPMBACK_ERR("Non integer value (%s) \n", value); + free(value); + return -1; + } + + printk("domtype = %d \n",domtype); + domid = (domtype == T_DOMAIN_TYPE_HVM) ? 0 : tpmif->domid; if((tpmif->page = gntmap_map_grant_refs(>pmdev.map, 1, &domid, 0, &ringref, PROT_READ | PROT_WRITE)) == NULL) { TPMBACK_ERR("Failed to map grant reference %u/%u\n", (unsigned int) tpmif->domid, tpmif->handle); return -1; } /*Bind the event channel */ - if((evtchn_bind_interdomain(tpmif->domid, evtchn, tpmback_handler, tpmif, &tpmif->evtchn))) + if((evtchn_bind_interdomain(domid, evtchn, tpmback_handler, tpmif, &tpmif->evtchn))) { TPMBACK_ERR("%u/%u Unable to bind to interdomain event channel!\n", (unsigned int) tpmif->domid, tpmif->handle); goto error_post_map; -- 1.8.3.2