c
struct vmbus_channel {
    // ...
    struct mutex ringbuffer_page_mutex;
    // ...
};

void vmbus_free_ring(struct vmbus_channel *channel)
{
    hv_ringbuffer_cleanup(&channel->outbound);
    hv_ringbuffer_cleanup(&channel->inbound);

    mutex_lock(&channel->ringbuffer_page_mutex);
    if (channel->ringbuffer_page) {
        __free_pages(channel->ringbuffer_page,
                      get_order(channel->ringbuffer_pagecount
                                << PAGE_SHIFT));
        channel->ringbuffer_page = NULL;
    }
    mutex_unlock(&channel->ringbuffer_page_mutex);
}
