summaryrefslogtreecommitdiffstats
path: root/sys/dev/hyperv/vmbus
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/hyperv/vmbus')
-rw-r--r--sys/dev/hyperv/vmbus/hv_channel.c8
-rw-r--r--sys/dev/hyperv/vmbus/hv_channel_mgmt.c22
-rw-r--r--sys/dev/hyperv/vmbus/hv_ring_buffer.c1
3 files changed, 13 insertions, 18 deletions
diff --git a/sys/dev/hyperv/vmbus/hv_channel.c b/sys/dev/hyperv/vmbus/hv_channel.c
index a7d9de8..3d3608b 100644
--- a/sys/dev/hyperv/vmbus/hv_channel.c
+++ b/sys/dev/hyperv/vmbus/hv_channel.c
@@ -856,11 +856,13 @@ VmbusProcessChannelEvent(void* context, int pending)
void* arg;
uint32_t bytes_to_read;
hv_vmbus_channel* channel = (hv_vmbus_channel*)context;
- boolean_t is_batched_reading;
+ bool is_batched_reading = false;
+
+ if (channel->ch_flags & VMBUS_CHAN_FLAG_BATCHREAD)
+ is_batched_reading = true;
if (channel->on_channel_callback != NULL) {
arg = channel->channel_callback_context;
- is_batched_reading = channel->batched_reading;
/*
* Optimize host to guest signaling by ensuring:
* 1. While reading the channel, we disable interrupts from
@@ -917,7 +919,7 @@ vmbus_event_flags_proc(struct vmbus_softc *sc, volatile u_long *event_flags,
if (channel == NULL || channel->rxq == NULL)
continue;
- if (channel->batched_reading)
+ if (channel->ch_flags & VMBUS_CHAN_FLAG_BATCHREAD)
hv_ring_buffer_read_begin(&channel->inbound);
taskqueue_enqueue(channel->rxq, &channel->channel_task);
}
diff --git a/sys/dev/hyperv/vmbus/hv_channel_mgmt.c b/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
index 54a61c7..71cf0e0 100644
--- a/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
+++ b/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
@@ -285,21 +285,19 @@ vmbus_channel_on_offer_internal(struct vmbus_softc *sc,
{
hv_vmbus_channel* new_channel;
- /* Allocate the channel object and save this offer */
+ /*
+ * Allocate the channel object and save this offer
+ */
new_channel = hv_vmbus_allocate_channel(sc);
new_channel->ch_id = offer->child_rel_id;
new_channel->ch_subidx = offer->offer.sub_channel_index;
- if (offer->monitor_allocated)
- new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
new_channel->ch_guid_type = offer->offer.interface_type;
new_channel->ch_guid_inst = offer->offer.interface_instance;
- /*
- * By default we setup state to enable batched
- * reading. A specific service can choose to
- * disable this prior to opening the channel.
- */
- new_channel->batched_reading = TRUE;
+ /* Batch reading is on by default */
+ new_channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
+ if (offer->monitor_allocated)
+ new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
new_channel->ch_sigevt = hyperv_dmamem_alloc(
bus_get_dma_tag(sc->vmbus_dev),
@@ -313,12 +311,8 @@ vmbus_channel_on_offer_internal(struct vmbus_softc *sc,
return;
}
new_channel->ch_sigevt->hc_connid = VMBUS_CONNID_EVENT;
-
- if (sc->vmbus_version != VMBUS_VERSION_WS2008) {
- new_channel->is_dedicated_interrupt =
- (offer->is_dedicated_interrupt != 0);
+ if (sc->vmbus_version != VMBUS_VERSION_WS2008)
new_channel->ch_sigevt->hc_connid = offer->connection_id;
- }
new_channel->monitor_group = (uint8_t) offer->monitor_id / 32;
new_channel->monitor_bit = (uint8_t) offer->monitor_id % 32;
diff --git a/sys/dev/hyperv/vmbus/hv_ring_buffer.c b/sys/dev/hyperv/vmbus/hv_ring_buffer.c
index cd82b27..2165f44 100644
--- a/sys/dev/hyperv/vmbus/hv_ring_buffer.c
+++ b/sys/dev/hyperv/vmbus/hv_ring_buffer.c
@@ -288,7 +288,6 @@ hv_vmbus_ring_buffer_init(
ring_info->ring_buffer->read_index =
ring_info->ring_buffer->write_index = 0;
- 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);
OpenPOWER on IntegriCloud