Index: sys/dev/hyperv/vmbus/hv_ring_buffer.c =================================================================== --- sys/dev/hyperv/vmbus/hv_ring_buffer.c +++ sys/dev/hyperv/vmbus/hv_ring_buffer.c @@ -247,7 +247,7 @@ ring_info->ring_size = buffer_len; ring_info->ring_data_size = buffer_len - sizeof(hv_vmbus_ring_buffer); - mtx_init(&ring_info->ring_lock, "vmbus ring buffer", NULL, MTX_SPIN); + mtx_init(&ring_info->ring_lock, "vmbus ring buffer", NULL, MTX_DEF); return (0); } @@ -285,7 +285,7 @@ total_bytes_to_write += sizeof(uint64_t); - mtx_lock_spin(&out_ring_info->ring_lock); + mtx_lock(&out_ring_info->ring_lock); get_ring_buffer_avail_bytes(out_ring_info, &byte_avail_to_read, &byte_avail_to_write); @@ -298,7 +298,7 @@ if (byte_avail_to_write <= total_bytes_to_write) { - mtx_unlock_spin(&out_ring_info->ring_lock); + mtx_unlock(&out_ring_info->ring_lock); return (EAGAIN); } @@ -334,7 +334,7 @@ */ set_next_write_location(out_ring_info, next_write_location); - mtx_unlock_spin(&out_ring_info->ring_lock); + mtx_unlock(&out_ring_info->ring_lock); *need_sig = hv_ring_buffer_needsig_on_write(old_write_location, out_ring_info); @@ -355,8 +355,6 @@ uint32_t bytesAvailToRead; uint32_t nextReadLocation = 0; - mtx_lock_spin(&in_ring_info->ring_lock); - get_ring_buffer_avail_bytes(in_ring_info, &bytesAvailToRead, &bytesAvailToWrite); @@ -364,7 +362,6 @@ * Make sure there is something to read */ if (bytesAvailToRead < buffer_len) { - mtx_unlock_spin(&in_ring_info->ring_lock); return (EAGAIN); } @@ -376,8 +373,6 @@ nextReadLocation = copy_from_ring_buffer( in_ring_info, (char *)buffer, buffer_len, nextReadLocation); - mtx_unlock_spin(&in_ring_info->ring_lock); - return (0); } @@ -399,8 +394,6 @@ if (buffer_len <= 0) return (EINVAL); - mtx_lock_spin(&in_ring_info->ring_lock); - get_ring_buffer_avail_bytes( in_ring_info, &bytes_avail_to_read, &bytes_avail_to_write); @@ -409,7 +402,6 @@ * Make sure there is something to read */ if (bytes_avail_to_read < buffer_len) { - mtx_unlock_spin(&in_ring_info->ring_lock); return (EAGAIN); } @@ -441,8 +433,6 @@ */ set_next_read_location(in_ring_info, next_read_location); - mtx_unlock_spin(&in_ring_info->ring_lock); - return (0); }