diff options
author | K. Y. Srinivasan <kys@microsoft.com> | 2011-05-10 07:55:39 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-11 13:49:14 -0700 |
commit | 9568a1931cd2066ed0f2df6f311e86dd851ab452 (patch) | |
tree | dc67f6095fa02d513b3b1ef5ce6b9aa023bcd41c /drivers/staging/hv/channel_mgmt.c | |
parent | b7c6b02f34cefae56ff06ebf386bea2610dd849d (diff) | |
download | op-kernel-dev-9568a1931cd2066ed0f2df6f311e86dd851ab452.zip op-kernel-dev-9568a1931cd2066ed0f2df6f311e86dd851ab452.tar.gz |
Staging: hv: Use completion abstraction to synchronize in vmbus_channel_msginfo
Use completion abstraction to synchronize in vmbus_channel_msginfo.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/channel_mgmt.c')
-rw-r--r-- | drivers/staging/hv/channel_mgmt.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/staging/hv/channel_mgmt.c b/drivers/staging/hv/channel_mgmt.c index 95eef92..33cb5d5 100644 --- a/drivers/staging/hv/channel_mgmt.c +++ b/drivers/staging/hv/channel_mgmt.c @@ -556,9 +556,9 @@ static void vmbus_onopen_result(struct vmbus_channel_message_header *hdr) openmsg->openid == result->openid) { memcpy(&msginfo->response.open_result, result, - sizeof(struct vmbus_channel_open_result)); - msginfo->wait_condition = 1; - wake_up(&msginfo->waitevent); + sizeof( + struct vmbus_channel_open_result)); + complete(&msginfo->waitevent); break; } } @@ -603,9 +603,9 @@ static void vmbus_ongpadl_created(struct vmbus_channel_message_header *hdr) (gpadlcreated->gpadl == gpadlheader->gpadl)) { memcpy(&msginfo->response.gpadl_created, gpadlcreated, - sizeof(struct vmbus_channel_gpadl_created)); - msginfo->wait_condition = 1; - wake_up(&msginfo->waitevent); + sizeof( + struct vmbus_channel_gpadl_created)); + complete(&msginfo->waitevent); break; } } @@ -648,9 +648,9 @@ static void vmbus_ongpadl_torndown( if (gpadl_torndown->gpadl == gpadl_teardown->gpadl) { memcpy(&msginfo->response.gpadl_torndown, gpadl_torndown, - sizeof(struct vmbus_channel_gpadl_torndown)); - msginfo->wait_condition = 1; - wake_up(&msginfo->waitevent); + sizeof( + struct vmbus_channel_gpadl_torndown)); + complete(&msginfo->waitevent); break; } } @@ -689,8 +689,7 @@ static void vmbus_onversion_response( memcpy(&msginfo->response.version_response, version_response, sizeof(struct vmbus_channel_version_response)); - msginfo->wait_condition = 1; - wake_up(&msginfo->waitevent); + complete(&msginfo->waitevent); } } spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); @@ -753,7 +752,7 @@ int vmbus_request_offers(void) { struct vmbus_channel_message_header *msg; struct vmbus_channel_msginfo *msginfo; - int ret; + int ret, t; msginfo = kmalloc(sizeof(*msginfo) + sizeof(struct vmbus_channel_message_header), @@ -761,7 +760,7 @@ int vmbus_request_offers(void) if (!msginfo) return -ENOMEM; - init_waitqueue_head(&msginfo->waitevent); + init_completion(&msginfo->waitevent); msg = (struct vmbus_channel_message_header *)msginfo->msg; @@ -776,10 +775,8 @@ int vmbus_request_offers(void) goto cleanup; } - msginfo->wait_condition = 0; - wait_event_timeout(msginfo->waitevent, msginfo->wait_condition, - msecs_to_jiffies(1000)); - if (msginfo->wait_condition == 0) { + t = wait_for_completion_timeout(&msginfo->waitevent, HZ); + if (t == 0) { ret = -ETIMEDOUT; goto cleanup; } |