hyperv/vmbus: Simplify event processing
For channel0, it will never be processed on event handling path, so there is no need to install it. After skipping in the channel0 installation, we could discard the channel0 check on event handling hot code path. MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D6333
This commit is contained in:
parent
2afc04024e
commit
2a616fdcda
@ -183,7 +183,14 @@ vmbus_channel_process_offer(hv_vmbus_channel *new_channel)
|
||||
* Make sure this is a new offer
|
||||
*/
|
||||
mtx_lock(&hv_vmbus_g_connection.channel_lock);
|
||||
hv_vmbus_g_connection.channels[relid] = new_channel;
|
||||
if (relid == 0) {
|
||||
/*
|
||||
* XXX channel0 will not be processed; skip it.
|
||||
*/
|
||||
printf("VMBUS: got channel0 offer\n");
|
||||
} else {
|
||||
hv_vmbus_g_connection.channels[relid] = new_channel;
|
||||
}
|
||||
|
||||
TAILQ_FOREACH(channel, &hv_vmbus_g_connection.channel_anchor,
|
||||
list_entry) {
|
||||
|
@ -337,15 +337,11 @@ hv_vmbus_on_events(int cpu)
|
||||
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];
|
||||
struct hv_vmbus_channel *channel;
|
||||
|
||||
rel_id = (dword << 5) + bit;
|
||||
channel = hv_vmbus_g_connection.channels[rel_id];
|
||||
|
||||
/* if channel is closed or closing */
|
||||
if (channel == NULL || channel->rxq == NULL)
|
||||
continue;
|
||||
@ -353,7 +349,6 @@ hv_vmbus_on_events(int cpu)
|
||||
if (channel->batched_reading)
|
||||
hv_ring_buffer_read_begin(&channel->inbound);
|
||||
taskqueue_enqueue(channel->rxq, &channel->channel_task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user