X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=include%2Flinux%2Fhyperv.h;h=a08587861f12d7866057c367a637400cd09954db;hb=5053fdd0922951f7fa2ae83f61016333484ca2ac;hp=6c9336626592b0a07e4216ea97a72a050e7146d4;hpb=19286e4a7a0ce0a7ac584be614c40513d6318ad6;p=mirror_ubuntu-bionic-kernel.git diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 6c9336626592..a08587861f12 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -878,6 +878,13 @@ struct vmbus_channel { bool probe_done; + /* + * We must offload the handling of the primary/sub channels + * from the single-threaded vmbus_connection.work_queue to + * two different workqueue, otherwise we can block + * vmbus_connection.work_queue and hang: see vmbus_process_offer(). + */ + struct work_struct add_channel_work; }; static inline bool is_hvsock_channel(const struct vmbus_channel *c) @@ -1035,6 +1042,8 @@ extern int vmbus_establish_gpadl(struct vmbus_channel *channel, extern int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle); +void vmbus_reset_channel_cb(struct vmbus_channel *channel); + extern int vmbus_recvpacket(struct vmbus_channel *channel, void *buffer, u32 bufferlen, @@ -1131,8 +1140,9 @@ struct hv_ring_buffer_debug_info { u32 bytes_avail_towrite; }; -void hv_ringbuffer_get_debuginfo(const struct hv_ring_buffer_info *ring_info, - struct hv_ring_buffer_debug_info *debug_info); + +int hv_ringbuffer_get_debuginfo(const struct hv_ring_buffer_info *ring_info, + struct hv_ring_buffer_debug_info *debug_info); /* Vmbus interface */ #define vmbus_driver_register(driver) \