mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
hyperv: vmbus: remove the per-channel control_work_queue
Now vmbus_channel_on_offer() -> vmbus_channel_process_offer() can safely run on the global hv_vmbus_g_connection.work_queue now. We remove the per-channel control_work_queue to achieve the proper serialization of the message handling. I removed the bogus TODO in vmbus_channel_on_offer(): a vmbus offer can only come from the parent partition, i.e., the host. PR: kern/205156 Submitted by: Dexuan Cui <decui microsoft com> Reviewed by: Howard Su <howard0su gmail com>, delphij MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D4597
This commit is contained in:
parent
efcc1985ad
commit
47f175b846
2 changed files with 3 additions and 30 deletions
|
|
@ -759,7 +759,6 @@ typedef struct hv_vmbus_channel {
|
|||
hv_vmbus_ring_buffer_info inbound;
|
||||
|
||||
struct mtx inbound_lock;
|
||||
hv_vmbus_handle control_work_queue;
|
||||
|
||||
hv_vmbus_pfn_channel_callback on_channel_callback;
|
||||
void* channel_callback_context;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ static void vmbus_channel_on_gpadl_created(hv_vmbus_channel_msg_header* hdr);
|
|||
static void vmbus_channel_on_gpadl_torndown(hv_vmbus_channel_msg_header* hdr);
|
||||
static void vmbus_channel_on_offers_delivered(hv_vmbus_channel_msg_header* hdr);
|
||||
static void vmbus_channel_on_version_response(hv_vmbus_channel_msg_header* hdr);
|
||||
static void vmbus_channel_process_offer(void *context);
|
||||
|
||||
/**
|
||||
* Channel message dispatch table
|
||||
|
|
@ -206,15 +205,6 @@ hv_queue_work_item(
|
|||
return (taskqueue_enqueue(wq->queue, &w->work));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rescind the offer by initiating a device removal
|
||||
*/
|
||||
static void
|
||||
vmbus_channel_process_rescind_offer(void *context)
|
||||
{
|
||||
hv_vmbus_channel* channel = (hv_vmbus_channel*) context;
|
||||
hv_vmbus_child_device_unregister(channel->device);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Allocate and initialize a vmbus channel object
|
||||
|
|
@ -237,14 +227,6 @@ hv_vmbus_allocate_channel(void)
|
|||
|
||||
TAILQ_INIT(&channel->sc_list_anchor);
|
||||
|
||||
channel->control_work_queue = hv_work_queue_create("control");
|
||||
|
||||
if (channel->control_work_queue == NULL) {
|
||||
mtx_destroy(&channel->inbound_lock);
|
||||
free(channel, M_DEVBUF);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
return (channel);
|
||||
}
|
||||
|
||||
|
|
@ -255,7 +237,6 @@ static inline void
|
|||
ReleaseVmbusChannel(void *context)
|
||||
{
|
||||
hv_vmbus_channel* channel = (hv_vmbus_channel*) context;
|
||||
hv_work_queue_close(channel->control_work_queue);
|
||||
free(channel, M_DEVBUF);
|
||||
}
|
||||
|
||||
|
|
@ -281,14 +262,12 @@ hv_vmbus_free_vmbus_channel(hv_vmbus_channel* channel)
|
|||
* associated with this offer
|
||||
*/
|
||||
static void
|
||||
vmbus_channel_process_offer(void *context)
|
||||
vmbus_channel_process_offer(hv_vmbus_channel *new_channel)
|
||||
{
|
||||
hv_vmbus_channel* new_channel;
|
||||
boolean_t f_new;
|
||||
hv_vmbus_channel* channel;
|
||||
int ret;
|
||||
|
||||
new_channel = (hv_vmbus_channel*) context;
|
||||
f_new = TRUE;
|
||||
channel = NULL;
|
||||
|
||||
|
|
@ -521,11 +500,7 @@ vmbus_channel_on_offer(hv_vmbus_channel_msg_header* hdr)
|
|||
new_channel->monitor_group = (uint8_t) offer->monitor_id / 32;
|
||||
new_channel->monitor_bit = (uint8_t) offer->monitor_id % 32;
|
||||
|
||||
/* TODO: Make sure the offer comes from our parent partition */
|
||||
hv_queue_work_item(
|
||||
new_channel->control_work_queue,
|
||||
vmbus_channel_process_offer,
|
||||
new_channel);
|
||||
vmbus_channel_process_offer(new_channel);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -546,8 +521,7 @@ vmbus_channel_on_offer_rescind(hv_vmbus_channel_msg_header* hdr)
|
|||
if (channel == NULL)
|
||||
return;
|
||||
|
||||
hv_queue_work_item(channel->control_work_queue,
|
||||
vmbus_channel_process_rescind_offer, channel);
|
||||
hv_vmbus_child_device_unregister(channel->device);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue