mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
hyperv/vmbus: Initialize RX/TX bufring mutex at channel creation time
MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D7312
This commit is contained in:
parent
a766ffd061
commit
a0c3998ea9
3 changed files with 21 additions and 11 deletions
|
|
@ -198,20 +198,24 @@ hv_ring_buffer_needsig_on_write(uint32_t old_write_location,
|
|||
/**
|
||||
* @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 @@ hv_vmbus_ring_buffer_init(hv_vmbus_ring_buffer_info *ring_info, void *buffer,
|
|||
void
|
||||
hv_ring_buffer_cleanup(hv_vmbus_ring_buffer_info *ring_info)
|
||||
{
|
||||
mtx_destroy(&ring_info->ring_lock);
|
||||
/* Do nothing */
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -49,11 +49,13 @@ void vmbus_br_sysctl_create(struct sysctl_ctx_list *ctx,
|
|||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -914,6 +914,8 @@ vmbus_chan_alloc(struct vmbus_softc *sc)
|
|||
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 @@ vmbus_chan_free(struct vmbus_channel *chan)
|
|||
/* 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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue