Page MenuHomeFreeBSD

D6332.id16364.diff
No OneTemporary

D6332.id16364.diff

Index: head/sys/dev/hyperv/vmbus/hv_connection.c
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_connection.c
+++ head/sys/dev/hyperv/vmbus/hv_connection.c
@@ -300,7 +300,6 @@
int rel_id;
int maxdword;
hv_vmbus_synic_event_flags *event;
- /* int maxdword = PAGE_SIZE >> 3; */
KASSERT(cpu <= mp_maxid, ("VMBUS: hv_vmbus_on_events: "
"cpu out of range!"));
@@ -314,9 +313,12 @@
/*
* receive size is 1/2 page and divide that by 4 bytes
*/
- if (synch_test_and_clear_bit(0, &event->flags32[0]))
+ if (synch_test_and_clear_bit(0, &event->flags32[0])) {
recv_interrupt_page =
hv_vmbus_g_connection.recv_interrupt_page;
+ } else {
+ return;
+ }
} else {
/*
* On Host with Win8 or above, the event page can be
@@ -330,36 +332,32 @@
/*
* Check events
*/
- if (recv_interrupt_page != NULL) {
- for (dword = 0; dword < maxdword; dword++) {
- if (recv_interrupt_page[dword]) {
- for (bit = 0; bit < HV_CHANNEL_DWORD_LEN; bit++) {
- if (synch_test_and_clear_bit(bit,
- (uint32_t *) &recv_interrupt_page[dword])) {
- rel_id = (dword << 5) + bit;
- if (rel_id == 0) {
- /*
- * Special case -
- * vmbus channel protocol msg.
- */
- continue;
- } else {
- hv_vmbus_channel * channel = hv_vmbus_g_connection.channels[rel_id];
- /* if channel is closed or closing */
- if (channel == NULL || channel->rxq == NULL)
- continue;
-
- if (channel->batched_reading)
- hv_ring_buffer_read_begin(&channel->inbound);
- taskqueue_enqueue(channel->rxq, &channel->channel_task);
- }
- }
- }
- }
+ for (dword = 0; dword < maxdword; dword++) {
+ if (recv_interrupt_page[dword]) {
+ for (bit = 0; bit < HV_CHANNEL_DWORD_LEN; bit++) {
+ if (synch_test_and_clear_bit(bit,
+ (uint32_t *) &recv_interrupt_page[dword])) {
+ rel_id = (dword << 5) + bit;
+ if (rel_id == 0) {
+ /*
+ * Special case -
+ * vmbus channel protocol msg.
+ */
+ continue;
+ } else {
+ hv_vmbus_channel * channel = hv_vmbus_g_connection.channels[rel_id];
+ /* if channel is closed or closing */
+ if (channel == NULL || channel->rxq == NULL)
+ continue;
+
+ if (channel->batched_reading)
+ hv_ring_buffer_read_begin(&channel->inbound);
+ taskqueue_enqueue(channel->rxq, &channel->channel_task);
+ }
+ }
+ }
}
}
-
- return;
}
/**

File Metadata

Mime Type
text/plain
Expires
Fri, May 1, 2:09 AM (4 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32549350
Default Alt Text
D6332.id16364.diff (2 KB)

Event Timeline