pandora: defconfig: update
[pandora-kernel.git] / drivers / hv / connection.c
index 650c9f0..96548d7 100644 (file)
@@ -45,7 +45,6 @@ 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;
@@ -132,16 +131,7 @@ int vmbus_connect(void)
        }
 
        /* Wait for the connection response */
-       t =  wait_for_completion_timeout(&msginfo->waitevent, 5*HZ);
-       if (t == 0) {
-               spin_lock_irqsave(&vmbus_connection.channelmsg_lock,
-                               flags);
-               list_del(&msginfo->msglistentry);
-               spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock,
-                                       flags);
-               ret = -ETIMEDOUT;
-               goto cleanup;
-       }
+       wait_for_completion(&msginfo->waitevent);
 
        spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
        list_del(&msginfo->msglistentry);
@@ -294,10 +284,21 @@ int vmbus_post_msg(void *buffer, size_t buflen)
         * insufficient resources. Retry the operation a couple of
         * times before giving up.
         */
-       while (retries < 3) {
-               ret =  hv_post_message(conn_id, 1, buffer, buflen);
-               if (ret != HV_STATUS_INSUFFICIENT_BUFFERS)
+       while (retries < 10) {
+               ret = hv_post_message(conn_id, 1, buffer, buflen);
+
+               switch (ret) {
+               case HV_STATUS_INSUFFICIENT_BUFFERS:
+                       ret = -ENOMEM;
+               case -ENOMEM:
+                       break;
+               case HV_STATUS_SUCCESS:
                        return ret;
+               default:
+                       pr_err("hv_post_msg() failed; error code:%d\n", ret);
+                       return -EINVAL;
+               }
+
                retries++;
                msleep(100);
        }