Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 249555
b: refs/heads/master
c: 9568a19
h: refs/heads/master
i:
  249553: badaf34
  249551: 7e18c28
v: v3
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed May 11, 2011
1 parent c4e48cd commit 9ba44ef
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 44 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b7c6b02f34cefae56ff06ebf386bea2610dd849d
refs/heads/master: 9568a1931cd2066ed0f2df6f311e86dd851ab452
31 changes: 12 additions & 19 deletions trunk/drivers/staging/hv/channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
struct vmbus_channel_msginfo *openInfo = NULL;
void *in, *out;
unsigned long flags;
int ret, err = 0;
int ret, t, err = 0;

/* Aligned to page size */
/* ASSERT(!(SendRingBufferSize & (PAGE_SIZE - 1))); */
Expand Down Expand Up @@ -240,7 +240,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
goto errorout;
}

init_waitqueue_head(&openInfo->waitevent);
init_completion(&openInfo->waitevent);

openMsg = (struct vmbus_channel_open_channel *)openInfo->msg;
openMsg->header.msgtype = CHANNELMSG_OPENCHANNEL;
Expand Down Expand Up @@ -270,11 +270,8 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
if (ret != 0)
goto Cleanup;

openInfo->wait_condition = 0;
wait_event_timeout(openInfo->waitevent,
openInfo->wait_condition,
msecs_to_jiffies(1000));
if (openInfo->wait_condition == 0) {
t = wait_for_completion_timeout(&openInfo->waitevent, HZ);
if (t == 0) {
err = -ETIMEDOUT;
goto errorout;
}
Expand Down Expand Up @@ -495,6 +492,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
u32 next_gpadl_handle;
unsigned long flags;
int ret = 0;
int t;

next_gpadl_handle = atomic_read(&vmbus_connection.next_gpadl_handle);
atomic_inc(&vmbus_connection.next_gpadl_handle);
Expand All @@ -503,7 +501,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
if (ret)
return ret;

init_waitqueue_head(&msginfo->waitevent);
init_completion(&msginfo->waitevent);

gpadlmsg = (struct vmbus_channel_gpadl_header *)msginfo->msg;
gpadlmsg->header.msgtype = CHANNELMSG_GPADL_HEADER;
Expand All @@ -518,7 +516,6 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,

spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);

msginfo->wait_condition = 0;
ret = vmbus_post_msg(gpadlmsg, msginfo->msgsize -
sizeof(*msginfo));
if (ret != 0)
Expand Down Expand Up @@ -546,10 +543,8 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,

}
}
wait_event_timeout(msginfo->waitevent,
msginfo->wait_condition,
msecs_to_jiffies(1000));
BUG_ON(msginfo->wait_condition == 0);
t = wait_for_completion_timeout(&msginfo->waitevent, HZ);
BUG_ON(t == 0);


/* At this point, we received the gpadl created msg */
Expand All @@ -573,7 +568,7 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
struct vmbus_channel_gpadl_teardown *msg;
struct vmbus_channel_msginfo *info;
unsigned long flags;
int ret;
int ret, t;

/* ASSERT(gpadl_handle != 0); */

Expand All @@ -582,7 +577,7 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
if (!info)
return -ENOMEM;

init_waitqueue_head(&info->waitevent);
init_completion(&info->waitevent);

msg = (struct vmbus_channel_gpadl_teardown *)info->msg;

Expand All @@ -594,14 +589,12 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
list_add_tail(&info->msglistentry,
&vmbus_connection.chn_msg_list);
spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
info->wait_condition = 0;
ret = vmbus_post_msg(msg,
sizeof(struct vmbus_channel_gpadl_teardown));

BUG_ON(ret != 0);
wait_event_timeout(info->waitevent,
info->wait_condition, msecs_to_jiffies(1000));
BUG_ON(info->wait_condition == 0);
t = wait_for_completion_timeout(&info->waitevent, HZ);
BUG_ON(t == 0);

/* Received a torndown response */
spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
Expand Down
31 changes: 14 additions & 17 deletions trunk/drivers/staging/hv/channel_mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -753,15 +752,15 @@ 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),
GFP_KERNEL);
if (!msginfo)
return -ENOMEM;

init_waitqueue_head(&msginfo->waitevent);
init_completion(&msginfo->waitevent);

msg = (struct vmbus_channel_message_header *)msginfo->msg;

Expand All @@ -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;
}
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/staging/hv/channel_mgmt.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <linux/list.h>
#include <linux/timer.h>
#include <linux/workqueue.h>
#include <linux/completion.h>
#include "ring_buffer.h"
#include "vmbus_channel_interface.h"
#include "vmbus_packet_format.h"
Expand Down Expand Up @@ -290,8 +291,7 @@ struct vmbus_channel_msginfo {
struct list_head submsglist;

/* Synchronize the request/response if needed */
int wait_condition;
wait_queue_head_t waitevent;
struct completion waitevent;
union {
struct vmbus_channel_version_supported version_supported;
struct vmbus_channel_open_result open_result;
Expand Down
9 changes: 4 additions & 5 deletions trunk/drivers/staging/hv/connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ struct vmbus_connection vmbus_connection = {
int vmbus_connect(void)
{
int ret = 0;
int t;
struct vmbus_channel_msginfo *msginfo = NULL;
struct vmbus_channel_initiate_contact *msg;
unsigned long flags;
Expand Down Expand Up @@ -101,7 +102,7 @@ int vmbus_connect(void)
goto Cleanup;
}

init_waitqueue_head(&msginfo->waitevent);
init_completion(&msginfo->waitevent);

msg = (struct vmbus_channel_initiate_contact *)msginfo->msg;

Expand Down Expand Up @@ -134,10 +135,8 @@ int vmbus_connect(void)
}

/* Wait for the connection response */
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) {
spin_lock_irqsave(&vmbus_connection.channelmsg_lock,
flags);
list_del(&msginfo->msglistentry);
Expand Down

0 comments on commit 9ba44ef

Please sign in to comment.