svn commit: r299889 - head/sys/dev/hyperv/vmbus
Sepherosa Ziehau
sephe at FreeBSD.org
Mon May 16 03:48:01 UTC 2016
Author: sephe
Date: Mon May 16 03:48:00 2016
New Revision: 299889
URL: https://svnweb.freebsd.org/changeset/base/299889
Log:
hyperv/vmbus: Simplify event processing
While I'm here, remove useless comment and unnecessary return.
MFC after: 1 week
Sponsored by: Microsoft OSTC
Differential Revision: https://reviews.freebsd.org/D6332
Modified:
head/sys/dev/hyperv/vmbus/hv_connection.c
Modified: head/sys/dev/hyperv/vmbus/hv_connection.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_connection.c Mon May 16 03:26:16 2016 (r299888)
+++ head/sys/dev/hyperv/vmbus/hv_connection.c Mon May 16 03:48:00 2016 (r299889)
@@ -300,7 +300,6 @@ hv_vmbus_on_events(int cpu)
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 @@ hv_vmbus_on_events(int cpu)
/*
* 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 @@ hv_vmbus_on_events(int cpu)
/*
* 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;
}
/**
More information about the svn-src-all
mailing list