Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F135748495
D7038.id18044.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D7038.id18044.diff
View Options
Index: sys/dev/hyperv/include/hyperv.h
===================================================================
--- sys/dev/hyperv/include/hyperv.h
+++ sys/dev/hyperv/include/hyperv.h
@@ -551,17 +551,6 @@
hv_vmbus_pfn_channel_callback on_channel_callback;
void* channel_callback_context;
- /*
- * If batched_reading is set to "true", mask the interrupt
- * and read until the channel is empty.
- * If batched_reading is set to "false", the channel is not
- * going to perform batched reading.
- *
- * Batched reading is enabled by default; specific
- * drivers that don't want this behavior can turn it off.
- */
- boolean_t batched_reading;
-
struct hypercall_sigevt_in *ch_sigevt;
struct hyperv_dma ch_sigevt_dma;
@@ -622,11 +611,23 @@
#define HV_VMBUS_CHAN_ISPRIMARY(chan) ((chan)->primary_channel == NULL)
#define VMBUS_CHAN_FLAG_HASMNF 0x0001
+/*
+ * If this flag is set, this channel's interrupt will be masked in ISR,
+ * and the RX bufring will be drained before this channel's interrupt is
+ * unmasked.
+ *
+ * This flag is turned on by default. Drivers can turn it off according
+ * to their own requirement.
+ */
+#define VMBUS_CHAN_FLAG_BATCHREAD 0x0002
static inline void
-hv_set_channel_read_state(hv_vmbus_channel* channel, boolean_t state)
+hv_set_channel_read_state(hv_vmbus_channel* channel, boolean_t on)
{
- channel->batched_reading = state;
+ if (!on)
+ channel->ch_flags &= ~VMBUS_CHAN_FLAG_BATCHREAD;
+ else
+ channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
}
int hv_vmbus_channel_recv_packet(
Index: sys/dev/hyperv/vmbus/hv_channel.c
===================================================================
--- sys/dev/hyperv/vmbus/hv_channel.c
+++ sys/dev/hyperv/vmbus/hv_channel.c
@@ -856,11 +856,13 @@
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 @@
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);
}
Index: sys/dev/hyperv/vmbus/hv_channel_mgmt.c
===================================================================
--- sys/dev/hyperv/vmbus/hv_channel_mgmt.c
+++ sys/dev/hyperv/vmbus/hv_channel_mgmt.c
@@ -282,21 +282,19 @@
{
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),
@@ -310,7 +308,6 @@
return;
}
new_channel->ch_sigevt->hc_connid = VMBUS_CONNID_EVENT;
-
if (sc->vmbus_version != VMBUS_VERSION_WS2008)
new_channel->ch_sigevt->hc_connid = offer->connection_id;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 13, 11:13 AM (2 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25254532
Default Alt Text
D7038.id18044.diff (3 KB)
Attached To
Mode
D7038: hyperv/vmbus: Pack bool field into flags field
Attached
Detach File
Event Timeline
Log In to Comment