diff
struct vmbus_channel {
    // ... existing members ...
+   bool ringbuffer_freed;
};

1281 void vmbus_free_ring(struct vmbus_channel *channel)
1283         hv_ringbuffer_cleanup(&channel->outbound);
1284         hv_ringbuffer_cleanup(&channel->inbound);
1286         if (channel->ringbuffer_page && !channel->ringbuffer_freed) {
1287                 __free_pages(channel->ringbuffer_page,
+                                 get_order(channel->ringbuffer_pagecount * PAGE_SIZE));
+                channel->ringbuffer_page = NULL;
+                channel->ringbuffer_pagecount = 0;
+                channel->ringbuffer_freed = true;
1288         }
