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
This commit is contained in:
parent
aa77d82eca
commit
2afc04024e
@ -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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (channel->batched_reading)
|
||||
hv_ring_buffer_read_begin(&channel->inbound);
|
||||
taskqueue_enqueue(channel->rxq, &channel->channel_task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user