linux/drivers/virtio/virtio_balloon.c
<<
>>
Prefs
   1/* Virtio balloon implementation, inspired by Dor Loar and Marcelo
   2 * Tosatti's implementations.
   3 *
   4 *  Copyright 2008 Rusty Russell IBM Corporation
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2 of the License, or
   9 *  (at your option) any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to the Free Software
  18 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  19 */
  20//#define DEBUG
  21#include <linux/virtio.h>
  22#include <linux/virtio_balloon.h>
  23#include <linux/swap.h>
  24#include <linux/kthread.h>
  25#include <linux/freezer.h>
  26#include <linux/delay.h>
  27#include <linux/slab.h>
  28
  29struct virtio_balloon
  30{
  31        struct virtio_device *vdev;
  32        struct virtqueue *inflate_vq, *deflate_vq, *stats_vq;
  33
  34        /* Where the ballooning thread waits for config to change. */
  35        wait_queue_head_t config_change;
  36
  37        /* The thread servicing the balloon. */
  38        struct task_struct *thread;
  39
  40        /* Waiting for host to ack the pages we released. */
  41        struct completion acked;
  42
  43        /* The pages we've told the Host we're not using. */
  44        unsigned int num_pages;
  45        struct list_head pages;
  46
  47        /* The array of pfns we tell the Host about. */
  48        unsigned int num_pfns;
  49        u32 pfns[256];
  50
  51        /* Memory statistics */
  52        int need_stats_update;
  53        struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR];
  54};
  55
  56static struct virtio_device_id id_table[] = {
  57        { VIRTIO_ID_BALLOON, VIRTIO_DEV_ANY_ID },
  58        { 0 },
  59};
  60
  61static u32 page_to_balloon_pfn(struct page *page)
  62{
  63        unsigned long pfn = page_to_pfn(page);
  64
  65        BUILD_BUG_ON(PAGE_SHIFT < VIRTIO_BALLOON_PFN_SHIFT);
  66        /* Convert pfn from Linux page size to balloon page size. */
  67        return pfn >> (PAGE_SHIFT - VIRTIO_BALLOON_PFN_SHIFT);
  68}
  69
  70static void balloon_ack(struct virtqueue *vq)
  71{
  72        struct virtio_balloon *vb;
  73        unsigned int len;
  74
  75        vb = virtqueue_get_buf(vq, &len);
  76        if (vb)
  77                complete(&vb->acked);
  78}
  79
  80static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
  81{
  82        struct scatterlist sg;
  83
  84        sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
  85
  86        init_completion(&vb->acked);
  87
  88        /* We should always be able to add one buffer to an empty queue. */
  89        if (virtqueue_add_buf(vq, &sg, 1, 0, vb) < 0)
  90                BUG();
  91        virtqueue_kick(vq);
  92
  93        /* When host has read buffer, this completes via balloon_ack */
  94        wait_for_completion(&vb->acked);
  95}
  96
  97static void fill_balloon(struct virtio_balloon *vb, size_t num)
  98{
  99        /* We can only do one array worth at a time. */
 100        num = min(num, ARRAY_SIZE(vb->pfns));
 101
 102        for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) {
 103                struct page *page = alloc_page(GFP_HIGHUSER | __GFP_NORETRY |
 104                                        __GFP_NOMEMALLOC | __GFP_NOWARN);
 105                if (!page) {
 106                        if (printk_ratelimit())
 107                                dev_printk(KERN_INFO, &vb->vdev->dev,
 108                                           "Out of puff! Can't get %zu pages\n",
 109                                           num);
 110                        /* Sleep for at least 1/5 of a second before retry. */
 111                        msleep(200);
 112                        break;
 113                }
 114                vb->pfns[vb->num_pfns] = page_to_balloon_pfn(page);
 115                totalram_pages--;
 116                vb->num_pages++;
 117                list_add(&page->lru, &vb->pages);
 118        }
 119
 120        /* Didn't get any?  Oh well. */
 121        if (vb->num_pfns == 0)
 122                return;
 123
 124        tell_host(vb, vb->inflate_vq);
 125}
 126
 127static void release_pages_by_pfn(const u32 pfns[], unsigned int num)
 128{
 129        unsigned int i;
 130
 131        for (i = 0; i < num; i++) {
 132                __free_page(pfn_to_page(pfns[i]));
 133                totalram_pages++;
 134        }
 135}
 136
 137static void leak_balloon(struct virtio_balloon *vb, size_t num)
 138{
 139        struct page *page;
 140
 141        /* We can only do one array worth at a time. */
 142        num = min(num, ARRAY_SIZE(vb->pfns));
 143
 144        for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) {
 145                page = list_first_entry(&vb->pages, struct page, lru);
 146                list_del(&page->lru);
 147                vb->pfns[vb->num_pfns] = page_to_balloon_pfn(page);
 148                vb->num_pages--;
 149        }
 150
 151
 152        /*
 153         * Note that if
 154         * virtio_has_feature(vdev, VIRTIO_BALLOON_F_MUST_TELL_HOST);
 155         * is true, we *have* to do it in this order
 156         */
 157        tell_host(vb, vb->deflate_vq);
 158        release_pages_by_pfn(vb->pfns, vb->num_pfns);
 159}
 160
 161static inline void update_stat(struct virtio_balloon *vb, int idx,
 162                               u16 tag, u64 val)
 163{
 164        BUG_ON(idx >= VIRTIO_BALLOON_S_NR);
 165        vb->stats[idx].tag = tag;
 166        vb->stats[idx].val = val;
 167}
 168
 169#define pages_to_bytes(x) ((u64)(x) << PAGE_SHIFT)
 170
 171static void update_balloon_stats(struct virtio_balloon *vb)
 172{
 173        unsigned long events[NR_VM_EVENT_ITEMS];
 174        struct sysinfo i;
 175        int idx = 0;
 176
 177        all_vm_events(events);
 178        si_meminfo(&i);
 179
 180        update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN,
 181                                pages_to_bytes(events[PSWPIN]));
 182        update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_OUT,
 183                                pages_to_bytes(events[PSWPOUT]));
 184        update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]);
 185        update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]);
 186        update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMFREE,
 187                                pages_to_bytes(i.freeram));
 188        update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMTOT,
 189                                pages_to_bytes(i.totalram));
 190}
 191
 192/*
 193 * While most virtqueues communicate guest-initiated requests to the hypervisor,
 194 * the stats queue operates in reverse.  The driver initializes the virtqueue
 195 * with a single buffer.  From that point forward, all conversations consist of
 196 * a hypervisor request (a call to this function) which directs us to refill
 197 * the virtqueue with a fresh stats buffer.  Since stats collection can sleep,
 198 * we notify our kthread which does the actual work via stats_handle_request().
 199 */
 200static void stats_request(struct virtqueue *vq)
 201{
 202        struct virtio_balloon *vb;
 203        unsigned int len;
 204
 205        vb = virtqueue_get_buf(vq, &len);
 206        if (!vb)
 207                return;
 208        vb->need_stats_update = 1;
 209        wake_up(&vb->config_change);
 210}
 211
 212static void stats_handle_request(struct virtio_balloon *vb)
 213{
 214        struct virtqueue *vq;
 215        struct scatterlist sg;
 216
 217        vb->need_stats_update = 0;
 218        update_balloon_stats(vb);
 219
 220        vq = vb->stats_vq;
 221        sg_init_one(&sg, vb->stats, sizeof(vb->stats));
 222        if (virtqueue_add_buf(vq, &sg, 1, 0, vb) < 0)
 223                BUG();
 224        virtqueue_kick(vq);
 225}
 226
 227static void virtballoon_changed(struct virtio_device *vdev)
 228{
 229        struct virtio_balloon *vb = vdev->priv;
 230
 231        wake_up(&vb->config_change);
 232}
 233
 234static inline s64 towards_target(struct virtio_balloon *vb)
 235{
 236        u32 v;
 237        vb->vdev->config->get(vb->vdev,
 238                              offsetof(struct virtio_balloon_config, num_pages),
 239                              &v, sizeof(v));
 240        return (s64)v - vb->num_pages;
 241}
 242
 243static void update_balloon_size(struct virtio_balloon *vb)
 244{
 245        __le32 actual = cpu_to_le32(vb->num_pages);
 246
 247        vb->vdev->config->set(vb->vdev,
 248                              offsetof(struct virtio_balloon_config, actual),
 249                              &actual, sizeof(actual));
 250}
 251
 252static int balloon(void *_vballoon)
 253{
 254        struct virtio_balloon *vb = _vballoon;
 255
 256        set_freezable();
 257        while (!kthread_should_stop()) {
 258                s64 diff;
 259
 260                try_to_freeze();
 261                wait_event_interruptible(vb->config_change,
 262                                         (diff = towards_target(vb)) != 0
 263                                         || vb->need_stats_update
 264                                         || kthread_should_stop()
 265                                         || freezing(current));
 266                if (vb->need_stats_update)
 267                        stats_handle_request(vb);
 268                if (diff > 0)
 269                        fill_balloon(vb, diff);
 270                else if (diff < 0)
 271                        leak_balloon(vb, -diff);
 272                update_balloon_size(vb);
 273        }
 274        return 0;
 275}
 276
 277static int virtballoon_probe(struct virtio_device *vdev)
 278{
 279        struct virtio_balloon *vb;
 280        struct virtqueue *vqs[3];
 281        vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request };
 282        const char *names[] = { "inflate", "deflate", "stats" };
 283        int err, nvqs;
 284
 285        vdev->priv = vb = kmalloc(sizeof(*vb), GFP_KERNEL);
 286        if (!vb) {
 287                err = -ENOMEM;
 288                goto out;
 289        }
 290
 291        INIT_LIST_HEAD(&vb->pages);
 292        vb->num_pages = 0;
 293        init_waitqueue_head(&vb->config_change);
 294        vb->vdev = vdev;
 295        vb->need_stats_update = 0;
 296
 297        /* We expect two virtqueues: inflate and deflate,
 298         * and optionally stat. */
 299        nvqs = virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ) ? 3 : 2;
 300        err = vdev->config->find_vqs(vdev, nvqs, vqs, callbacks, names);
 301        if (err)
 302                goto out_free_vb;
 303
 304        vb->inflate_vq = vqs[0];
 305        vb->deflate_vq = vqs[1];
 306        if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
 307                struct scatterlist sg;
 308                vb->stats_vq = vqs[2];
 309
 310                /*
 311                 * Prime this virtqueue with one buffer so the hypervisor can
 312                 * use it to signal us later.
 313                 */
 314                sg_init_one(&sg, vb->stats, sizeof vb->stats);
 315                if (virtqueue_add_buf(vb->stats_vq, &sg, 1, 0, vb) < 0)
 316                        BUG();
 317                virtqueue_kick(vb->stats_vq);
 318        }
 319
 320        vb->thread = kthread_run(balloon, vb, "vballoon");
 321        if (IS_ERR(vb->thread)) {
 322                err = PTR_ERR(vb->thread);
 323                goto out_del_vqs;
 324        }
 325
 326        return 0;
 327
 328out_del_vqs:
 329        vdev->config->del_vqs(vdev);
 330out_free_vb:
 331        kfree(vb);
 332out:
 333        return err;
 334}
 335
 336static void __devexit virtballoon_remove(struct virtio_device *vdev)
 337{
 338        struct virtio_balloon *vb = vdev->priv;
 339
 340        kthread_stop(vb->thread);
 341
 342        /* There might be pages left in the balloon: free them. */
 343        while (vb->num_pages)
 344                leak_balloon(vb, vb->num_pages);
 345
 346        /* Now we reset the device so we can clean up the queues. */
 347        vdev->config->reset(vdev);
 348
 349        vdev->config->del_vqs(vdev);
 350        kfree(vb);
 351}
 352
 353static unsigned int features[] = {
 354        VIRTIO_BALLOON_F_MUST_TELL_HOST,
 355        VIRTIO_BALLOON_F_STATS_VQ,
 356};
 357
 358static struct virtio_driver virtio_balloon_driver = {
 359        .feature_table = features,
 360        .feature_table_size = ARRAY_SIZE(features),
 361        .driver.name =  KBUILD_MODNAME,
 362        .driver.owner = THIS_MODULE,
 363        .id_table =     id_table,
 364        .probe =        virtballoon_probe,
 365        .remove =       __devexit_p(virtballoon_remove),
 366        .config_changed = virtballoon_changed,
 367};
 368
 369static int __init init(void)
 370{
 371        return register_virtio_driver(&virtio_balloon_driver);
 372}
 373
 374static void __exit fini(void)
 375{
 376        unregister_virtio_driver(&virtio_balloon_driver);
 377}
 378module_init(init);
 379module_exit(fini);
 380
 381MODULE_DEVICE_TABLE(virtio, id_table);
 382MODULE_DESCRIPTION("Virtio balloon driver");
 383MODULE_LICENSE("GPL");
 384