Index: head/sys/dev/hyperv/vmbus/hv_ring_buffer.c =================================================================== --- head/sys/dev/hyperv/vmbus/hv_ring_buffer.c +++ head/sys/dev/hyperv/vmbus/hv_ring_buffer.c @@ -198,20 +198,24 @@ /** * @brief Initialize the ring buffer. */ -int +void hv_vmbus_ring_buffer_init(hv_vmbus_ring_buffer_info *ring_info, void *buffer, uint32_t buffer_len) { - memset(ring_info, 0, sizeof(hv_vmbus_ring_buffer_info)); - ring_info->ring_buffer = buffer; - ring_info->ring_buffer->br_rindex = 0; - ring_info->ring_buffer->br_windex = 0; - ring_info->ring_data_size = buffer_len - sizeof(struct vmbus_bufring); - mtx_init(&ring_info->ring_lock, "vmbus ring buffer", NULL, MTX_SPIN); +} - return (0); +void +vmbus_br_init(hv_vmbus_ring_buffer_info *ring_info) +{ + mtx_init(&ring_info->ring_lock, "vmbus_br", NULL, MTX_SPIN); +} + +void +vmbus_br_deinit(hv_vmbus_ring_buffer_info *ring_info) +{ + mtx_destroy(&ring_info->ring_lock); } /** @@ -220,7 +224,7 @@ void hv_ring_buffer_cleanup(hv_vmbus_ring_buffer_info *ring_info) { - mtx_destroy(&ring_info->ring_lock); + /* Do nothing */ } /** Index: head/sys/dev/hyperv/vmbus/vmbus_brvar.h =================================================================== --- head/sys/dev/hyperv/vmbus/vmbus_brvar.h +++ head/sys/dev/hyperv/vmbus/vmbus_brvar.h @@ -49,11 +49,13 @@ struct sysctl_oid *br_tree, hv_vmbus_ring_buffer_info *br, const char *name); -int hv_vmbus_ring_buffer_init( +void vmbus_br_init(hv_vmbus_ring_buffer_info *ring_info); +void vmbus_br_deinit(hv_vmbus_ring_buffer_info *ring_info); + +void hv_vmbus_ring_buffer_init( hv_vmbus_ring_buffer_info *ring_info, void *buffer, uint32_t buffer_len); - void hv_ring_buffer_cleanup( hv_vmbus_ring_buffer_info *ring_info); Index: head/sys/dev/hyperv/vmbus/vmbus_chan.c =================================================================== --- head/sys/dev/hyperv/vmbus/vmbus_chan.c +++ head/sys/dev/hyperv/vmbus/vmbus_chan.c @@ -914,6 +914,8 @@ mtx_init(&chan->ch_subchan_lock, "vmbus subchan", NULL, MTX_DEF); TAILQ_INIT(&chan->ch_subchans); TASK_INIT(&chan->ch_detach_task, 0, vmbus_chan_detach_task, chan); + vmbus_br_init(&chan->ch_rxbr); + vmbus_br_init(&chan->ch_txbr); return chan; } @@ -926,6 +928,8 @@ /* TODO: asset no longer on the vmbus channel list */ hyperv_dmamem_free(&chan->ch_monprm_dma, chan->ch_monprm); mtx_destroy(&chan->ch_subchan_lock); + vmbus_br_deinit(&chan->ch_rxbr); + vmbus_br_deinit(&chan->ch_txbr); free(chan, M_DEVBUF); }