|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 10/14] mini-os/tpmback: set up callbacks before enumeration
The open/close callbacks in tpmback cannot be properly initalized in
order to catch the initial enumeration events because init_tpmback
clears the callbacks and then asynchronously starts the enumeration of
existing tpmback devices. Fix this by passing the callbacks to
init_tpmback so they can be installed before enumeration.
This also removes the unused callbacks for suspend and resume.
Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
---
extras/mini-os/include/tpmback.h | 12 +-----------
extras/mini-os/tpmback.c | 31 +++----------------------------
stubdom/vtpm/vtpm.c | 2 +-
stubdom/vtpmmgr/init.c | 2 +-
4 files changed, 6 insertions(+), 41 deletions(-)
diff --git a/extras/mini-os/include/tpmback.h b/extras/mini-os/include/tpmback.h
index ec9eda4..3c11c34 100644
--- a/extras/mini-os/include/tpmback.h
+++ b/extras/mini-os/include/tpmback.h
@@ -56,7 +56,7 @@ struct tpmcmd {
typedef struct tpmcmd tpmcmd_t;
/* Initialize the tpm backend driver */
-void init_tpmback(void);
+void init_tpmback(void (*open_cb)(domid_t, unsigned int), void
(*close_cb)(domid_t, unsigned int));
/* Shutdown tpm backend driver */
void shutdown_tpmback(void);
@@ -94,14 +94,4 @@ int tpmback_num_frontends(void);
* The return value is internally allocated, so don't free it */
unsigned char* tpmback_get_uuid(domid_t domid, unsigned int handle);
-/* Specify a function to call when a new tpm device connects */
-void tpmback_set_open_callback(void (*cb)(domid_t, unsigned int));
-
-/* Specify a function to call when a tpm device disconnects */
-void tpmback_set_close_callback(void (*cb)(domid_t, unsigned int));
-
-//Not Implemented
-void tpmback_set_suspend_callback(void (*cb)(domid_t, unsigned int));
-void tpmback_set_resume_callback(void (*cb)(domid_t, unsigned int));
-
#endif
diff --git a/extras/mini-os/tpmback.c b/extras/mini-os/tpmback.c
index 69a7f2d..1c46e5d 100644
--- a/extras/mini-os/tpmback.c
+++ b/extras/mini-os/tpmback.c
@@ -114,8 +114,6 @@ struct tpmback_dev {
/* Callbacks */
void (*open_callback)(domid_t, unsigned int);
void (*close_callback)(domid_t, unsigned int);
- void (*suspend_callback)(domid_t, unsigned int);
- void (*resume_callback)(domid_t, unsigned int);
};
typedef struct tpmback_dev tpmback_dev_t;
@@ -131,8 +129,6 @@ static tpmback_dev_t gtpmdev = {
.events = NULL,
.open_callback = NULL,
.close_callback = NULL,
- .suspend_callback = NULL,
- .resume_callback = NULL,
};
struct wait_queue_head waitq;
int globalinit = 0;
@@ -772,23 +768,6 @@ unsigned char* tpmback_get_uuid(domid_t domid, unsigned
int handle)
return tpmif->uuid;
}
-void tpmback_set_open_callback(void (*cb)(domid_t, unsigned int))
-{
- gtpmdev.open_callback = cb;
-}
-void tpmback_set_close_callback(void (*cb)(domid_t, unsigned int))
-{
- gtpmdev.close_callback = cb;
-}
-void tpmback_set_suspend_callback(void (*cb)(domid_t, unsigned int))
-{
- gtpmdev.suspend_callback = cb;
-}
-void tpmback_set_resume_callback(void (*cb)(domid_t, unsigned int))
-{
- gtpmdev.resume_callback = cb;
-}
-
static void event_listener(void)
{
const char* bepath = "backend/vtpm2";
@@ -835,7 +814,7 @@ void event_thread(void* p) {
event_listener();
}
-void init_tpmback(void)
+void init_tpmback(void (*open_cb)(domid_t, unsigned int), void
(*close_cb)(domid_t, unsigned int))
{
if(!globalinit) {
init_waitqueue_head(&waitq);
@@ -847,8 +826,8 @@ void init_tpmback(void)
gtpmdev.num_tpms = 0;
gtpmdev.flags = 0;
- gtpmdev.open_callback = gtpmdev.close_callback = NULL;
- gtpmdev.suspend_callback = gtpmdev.resume_callback = NULL;
+ gtpmdev.open_callback = open_cb;
+ gtpmdev.close_callback = close_cb;
eventthread = create_thread("tpmback-listener", event_thread, NULL);
@@ -856,10 +835,6 @@ void init_tpmback(void)
void shutdown_tpmback(void)
{
- /* Disable callbacks */
- gtpmdev.open_callback = gtpmdev.close_callback = NULL;
- gtpmdev.suspend_callback = gtpmdev.resume_callback = NULL;
-
TPMBACK_LOG("Shutting down tpm backend\n");
/* Set the quit flag */
gtpmdev.flags = TPMIF_CLOSED;
diff --git a/stubdom/vtpm/vtpm.c b/stubdom/vtpm/vtpm.c
index d576c8f..feb8aa3 100644
--- a/stubdom/vtpm/vtpm.c
+++ b/stubdom/vtpm/vtpm.c
@@ -357,7 +357,7 @@ int main(int argc, char **argv)
}
/* Initialize devices */
- init_tpmback();
+ init_tpmback(NULL, NULL);
if((tpmfront_dev = init_tpmfront(NULL)) == NULL) {
error("Unable to initialize tpmfront device");
goto abort_posttpmfront;
diff --git a/stubdom/vtpmmgr/init.c b/stubdom/vtpmmgr/init.c
index a158020..00dd9f3 100644
--- a/stubdom/vtpmmgr/init.c
+++ b/stubdom/vtpmmgr/init.c
@@ -462,7 +462,7 @@ TPM_RESULT vtpmmgr_init(int argc, char** argv) {
}
//Setup tpmback device
- init_tpmback();
+ init_tpmback(NULL, NULL);
//Setup tpm access
switch(opts.tpmdriver) {
--
1.7.11.7
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |