]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/hyperv.h
libfdt: define INT32_MAX and UINT32_MAX in libfdt_env.h
[mirror_ubuntu-bionic-kernel.git] / include / linux / hyperv.h
index 6431087816ba5b06d9d5f7dae08af53ed57e11ca..a08587861f12d7866057c367a637400cd09954db 100644 (file)
@@ -708,6 +708,7 @@ struct vmbus_channel {
        u8 monitor_bit;
 
        bool rescind; /* got rescind msg */
+       struct completion rescind_event;
 
        u32 ringbuffer_gpadlhandle;
 
@@ -719,6 +720,10 @@ struct vmbus_channel {
 
        struct vmbus_close_msg close_msg;
 
+       /* Statistics */
+       u64     interrupts;     /* Host to Guest interrupts */
+       u64     sig_events;     /* Guest to Host events */
+
        /* Channel callback's invoked in softirq context */
        struct tasklet_struct callback_event;
        void (*onchannel_callback)(void *context);
@@ -828,6 +833,11 @@ struct vmbus_channel {
         */
        struct rcu_head rcu;
 
+       /*
+        * For sysfs per-channel properties.
+        */
+       struct kobject                  kobj;
+
        /*
         * For performance critical channels (storage, networking
         * etc,), Hyper-V has a mechanism to enhance the throughput
@@ -868,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)
@@ -1025,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,
@@ -1089,6 +1108,7 @@ struct hv_device {
        struct device device;
 
        struct vmbus_channel *channel;
+       struct kset          *channels_kset;
 };
 
 
@@ -1120,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)  \