Author: sephe
Date: Thu Apr  7 05:45:49 2016
New Revision: 297635
URL: https://svnweb.freebsd.org/changeset/base/297635

Log:
  hyperv/vmbus: Use default mtx for channel message queue
  
  First of all sema_post() can't be called w/ spinlock, and the channel
  message queue processing is not on hot code path, i.e. spinlock is not
  necessary.
  
  Submitted by: Jun Su <junsu microsoft com>
  Reviewed by:  sephe, Dexuan Cui <decui microsoft com>
  MFC after:    1 week
  Sponsored by: Microsoft OSTC
  Differential Revision:        https://reviews.freebsd.org/D5812

Modified:
  head/sys/dev/hyperv/vmbus/hv_channel.c
  head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
  head/sys/dev/hyperv/vmbus/hv_connection.c

Modified: head/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel.c      Thu Apr  7 05:31:22 2016        
(r297634)
+++ head/sys/dev/hyperv/vmbus/hv_channel.c      Thu Apr  7 05:45:49 2016        
(r297635)
@@ -270,12 +270,12 @@ hv_vmbus_channel_open(
        if (user_data_len)
                memcpy(open_msg->user_data, user_data, user_data_len);
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_INSERT_TAIL(
                &hv_vmbus_g_connection.channel_msg_anchor,
                open_info,
                msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        ret = hv_vmbus_post_message(
                open_msg, sizeof(hv_vmbus_channel_open_channel));
@@ -302,12 +302,12 @@ hv_vmbus_channel_open(
        }
 
        cleanup:
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_REMOVE(
                &hv_vmbus_g_connection.channel_msg_anchor,
                open_info,
                msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
        sema_destroy(&open_info->wait_sema);
        free(open_info, M_DEVBUF);
 
@@ -496,13 +496,13 @@ hv_vmbus_channel_establish_gpadl(
        gpadl_msg->child_rel_id = channel->offer_msg.child_rel_id;
        gpadl_msg->gpadl = next_gpadl_handle;
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_INSERT_TAIL(
                &hv_vmbus_g_connection.channel_msg_anchor,
                msg_info,
                msg_list_entry);
 
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        ret = hv_vmbus_post_message(
                gpadl_msg,
@@ -541,10 +541,10 @@ hv_vmbus_channel_establish_gpadl(
 
 cleanup:
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_REMOVE(&hv_vmbus_g_connection.channel_msg_anchor,
                msg_info, msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        sema_destroy(&msg_info->wait_sema);
        free(msg_info, M_DEVBUF);
@@ -583,10 +583,10 @@ hv_vmbus_channel_teardown_gpdal(
        msg->child_rel_id = channel->offer_msg.child_rel_id;
        msg->gpadl = gpadl_handle;
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_INSERT_TAIL(&hv_vmbus_g_connection.channel_msg_anchor,
                        info, msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        ret = hv_vmbus_post_message(msg,
                        sizeof(hv_vmbus_channel_gpadl_teardown));
@@ -599,10 +599,10 @@ cleanup:
        /*
         * Received a torndown response
         */
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_REMOVE(&hv_vmbus_g_connection.channel_msg_anchor,
                        info, msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
        sema_destroy(&info->wait_sema);
        free(info, M_DEVBUF);
 

Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Thu Apr  7 05:31:22 2016        
(r297634)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Thu Apr  7 05:45:49 2016        
(r297635)
@@ -492,7 +492,7 @@ vmbus_channel_on_open_result(hv_vmbus_ch
        /*
         * Find the open msg, copy the result and signal/unblock the wait event
         */
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
 
        TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor,
            msg_list_entry) {
@@ -510,7 +510,7 @@ vmbus_channel_on_open_result(hv_vmbus_ch
                }
            }
        }
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
 }
 
@@ -534,7 +534,7 @@ vmbus_channel_on_gpadl_created(hv_vmbus_
        /* Find the establish msg, copy the result and signal/unblock
         * the wait event
         */
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor,
                msg_list_entry) {
            request_header = (hv_vmbus_channel_msg_header*) msg_info->msg;
@@ -553,7 +553,7 @@ vmbus_channel_on_gpadl_created(hv_vmbus_
                }
            }
        }
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 }
 
 /**
@@ -578,7 +578,7 @@ vmbus_channel_on_gpadl_torndown(hv_vmbus
         * wait event.
         */
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
 
        TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor,
                msg_list_entry) {
@@ -598,7 +598,7 @@ vmbus_channel_on_gpadl_torndown(hv_vmbus
                }
            }
        }
-    mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+    mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 }
 
 /**
@@ -618,7 +618,7 @@ vmbus_channel_on_version_response(hv_vmb
 
        versionResponse = (hv_vmbus_channel_version_response*)hdr;
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor,
            msg_list_entry) {
            requestHeader = (hv_vmbus_channel_msg_header*) msg_info->msg;
@@ -632,7 +632,7 @@ vmbus_channel_on_version_response(hv_vmb
                sema_post(&msg_info->wait_sema);
            }
        }
-    mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+    mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
 }
 

Modified: head/sys/dev/hyperv/vmbus/hv_connection.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_connection.c   Thu Apr  7 05:31:22 2016        
(r297634)
+++ head/sys/dev/hyperv/vmbus/hv_connection.c   Thu Apr  7 05:45:49 2016        
(r297635)
@@ -96,26 +96,26 @@ hv_vmbus_negotiate_version(hv_vmbus_chan
         * Add to list before we send the request since we may receive the
         * response before returning from this routine
         */
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
 
        TAILQ_INSERT_TAIL(
                &hv_vmbus_g_connection.channel_msg_anchor,
                msg_info,
                msg_list_entry);
 
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        ret = hv_vmbus_post_message(
                msg,
                sizeof(hv_vmbus_channel_initiate_contact));
 
        if (ret != 0) {
-               mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+               mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
                TAILQ_REMOVE(
                        &hv_vmbus_g_connection.channel_msg_anchor,
                        msg_info,
                        msg_list_entry);
-               mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+               mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
                return (ret);
        }
 
@@ -124,12 +124,12 @@ hv_vmbus_negotiate_version(hv_vmbus_chan
         */
        ret = sema_timedwait(&msg_info->wait_sema, 5 * hz); /* KYS 5 seconds */
 
-       mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_lock(&hv_vmbus_g_connection.channel_msg_lock);
        TAILQ_REMOVE(
                &hv_vmbus_g_connection.channel_msg_anchor,
                msg_info,
                msg_list_entry);
-       mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock);
+       mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock);
 
        /**
         * Check if successful
@@ -166,7 +166,7 @@ hv_vmbus_connect(void) {
 
        TAILQ_INIT(&hv_vmbus_g_connection.channel_msg_anchor);
        mtx_init(&hv_vmbus_g_connection.channel_msg_lock, "vmbus channel msg",
-               NULL, MTX_SPIN);
+               NULL, MTX_DEF);
 
        TAILQ_INIT(&hv_vmbus_g_connection.channel_anchor);
        mtx_init(&hv_vmbus_g_connection.channel_lock, "vmbus channel",
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to