linux/drivers/virtio/virtio_balloon.c
<<
>>
Prefs
   1/*
   2 * Virtio balloon implementation, inspired by Dor Laor and Marcelo
   3 * Tosatti's implementations.
   4 *
   5 *  Copyright 2008 Rusty Russell IBM Corporation
   6 *
   7 *  This program is free software; you can redistribute it and/or modify
   8 *  it under the terms of the GNU General Public License as published by
   9 *  the Free Software Foundation; either version 2 of the License, or
  10 *  (at your option) any later version.
  11 *
  12 *  This program is distributed in the hope that it will be useful,
  13 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *  GNU General Public License for more details.
  16 *
  17 *  You should have received a copy of the GNU General Public License
  18 *  along with this program; if not, write to the Free Software
  19 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  20 */
  21
  22#include <linux/virtio.h>
  23#include <linux/virtio_balloon.h>
  24#include <linux/swap.h>
  25#include <linux/workqueue.h>
  26#include <linux/delay.h>
  27#include <linux/slab.h>
  28#include <linux/module.h>
  29#include <linux/balloon_compaction.h>
  30#include <linux/oom.h>
  31#include <linux/wait.h>
  32#include <linux/mm.h>
  33#include <linux/mount.h>
  34#include <linux/magic.h>
  35
  36/*
  37 * Balloon device works in 4K page units.  So each page is pointed to by
  38 * multiple balloon pages.  All memory counters in this driver are in balloon
  39 * page units.
  40 */
  41#define VIRTIO_BALLOON_PAGES_PER_PAGE (unsigned)(PAGE_SIZE >> VIRTIO_BALLOON_PFN_SHIFT)
  42#define VIRTIO_BALLOON_ARRAY_PFNS_MAX 256
  43#define OOM_VBALLOON_DEFAULT_PAGES 256
  44#define VIRTBALLOON_OOM_NOTIFY_PRIORITY 80
  45
  46static int oom_pages = OOM_VBALLOON_DEFAULT_PAGES;
  47module_param(oom_pages, int, S_IRUSR | S_IWUSR);
  48MODULE_PARM_DESC(oom_pages, "pages to free on OOM");
  49
  50#ifdef CONFIG_BALLOON_COMPACTION
  51static struct vfsmount *balloon_mnt;
  52#endif
  53
  54struct virtio_balloon {
  55        struct virtio_device *vdev;
  56        struct virtqueue *inflate_vq, *deflate_vq, *stats_vq;
  57
  58        /* The balloon servicing is delegated to a freezable workqueue. */
  59        struct work_struct update_balloon_stats_work;
  60        struct work_struct update_balloon_size_work;
  61
  62        /* Prevent updating balloon when it is being canceled. */
  63        spinlock_t stop_update_lock;
  64        bool stop_update;
  65
  66        /* Waiting for host to ack the pages we released. */
  67        wait_queue_head_t acked;
  68
  69        /* Number of balloon pages we've told the Host we're not using. */
  70        unsigned int num_pages;
  71        /*
  72         * The pages we've told the Host we're not using are enqueued
  73         * at vb_dev_info->pages list.
  74         * Each page on this list adds VIRTIO_BALLOON_PAGES_PER_PAGE
  75         * to num_pages above.
  76         */
  77        struct balloon_dev_info vb_dev_info;
  78
  79        /* Synchronize access/update to this struct virtio_balloon elements */
  80        struct mutex balloon_lock;
  81
  82        /* The array of pfns we tell the Host about. */
  83        unsigned int num_pfns;
  84        __virtio32 pfns[VIRTIO_BALLOON_ARRAY_PFNS_MAX];
  85
  86        /* Memory statistics */
  87        struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR];
  88
  89        /* To register callback in oom notifier call chain */
  90        struct notifier_block nb;
  91};
  92
  93static struct virtio_device_id id_table[] = {
  94        { VIRTIO_ID_BALLOON, VIRTIO_DEV_ANY_ID },
  95        { 0 },
  96};
  97
  98static u32 page_to_balloon_pfn(struct page *page)
  99{
 100        unsigned long pfn = page_to_pfn(page);
 101
 102        BUILD_BUG_ON(PAGE_SHIFT < VIRTIO_BALLOON_PFN_SHIFT);
 103        /* Convert pfn from Linux page size to balloon page size. */
 104        return pfn * VIRTIO_BALLOON_PAGES_PER_PAGE;
 105}
 106
 107static void balloon_ack(struct virtqueue *vq)
 108{
 109        struct virtio_balloon *vb = vq->vdev->priv;
 110
 111        wake_up(&vb->acked);
 112}
 113
 114static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
 115{
 116        struct scatterlist sg;
 117        unsigned int len;
 118
 119        sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
 120
 121        /* We should always be able to add one buffer to an empty queue. */
 122        virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL);
 123        virtqueue_kick(vq);
 124
 125        /* When host has read buffer, this completes via balloon_ack */
 126        wait_event(vb->acked, virtqueue_get_buf(vq, &len));
 127
 128}
 129
 130static void set_page_pfns(struct virtio_balloon *vb,
 131                          __virtio32 pfns[], struct page *page)
 132{
 133        unsigned int i;
 134
 135        /*
 136         * Set balloon pfns pointing at this page.
 137         * Note that the first pfn points at start of the page.
 138         */
 139        for (i = 0; i < VIRTIO_BALLOON_PAGES_PER_PAGE; i++)
 140                pfns[i] = cpu_to_virtio32(vb->vdev,
 141                                          page_to_balloon_pfn(page) + i);
 142}
 143
 144static unsigned fill_balloon(struct virtio_balloon *vb, size_t num)
 145{
 146        unsigned num_allocated_pages;
 147        unsigned num_pfns;
 148        struct page *page;
 149        LIST_HEAD(pages);
 150
 151        /* We can only do one array worth at a time. */
 152        num = min(num, ARRAY_SIZE(vb->pfns));
 153
 154        for (num_pfns = 0; num_pfns < num;
 155             num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE) {
 156                struct page *page = balloon_page_alloc();
 157
 158                if (!page) {
 159                        dev_info_ratelimited(&vb->vdev->dev,
 160                                             "Out of puff! Can't get %u pages\n",
 161                                             VIRTIO_BALLOON_PAGES_PER_PAGE);
 162                        /* Sleep for at least 1/5 of a second before retry. */
 163                        msleep(200);
 164                        break;
 165                }
 166
 167                balloon_page_push(&pages, page);
 168        }
 169
 170        mutex_lock(&vb->balloon_lock);
 171
 172        vb->num_pfns = 0;
 173
 174        while ((page = balloon_page_pop(&pages))) {
 175                balloon_page_enqueue(&vb->vb_dev_info, page);
 176
 177                set_page_pfns(vb, vb->pfns + vb->num_pfns, page);
 178                vb->num_pages += VIRTIO_BALLOON_PAGES_PER_PAGE;
 179                if (!virtio_has_feature(vb->vdev,
 180                                        VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
 181                        adjust_managed_page_count(page, -1);
 182                vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE;
 183        }
 184
 185        num_allocated_pages = vb->num_pfns;
 186        /* Did we get any? */
 187        if (vb->num_pfns != 0)
 188                tell_host(vb, vb->inflate_vq);
 189        mutex_unlock(&vb->balloon_lock);
 190
 191        return num_allocated_pages;
 192}
 193
 194static void release_pages_balloon(struct virtio_balloon *vb,
 195                                 struct list_head *pages)
 196{
 197        struct page *page, *next;
 198
 199        list_for_each_entry_safe(page, next, pages, lru) {
 200                if (!virtio_has_feature(vb->vdev,
 201                                        VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
 202                        adjust_managed_page_count(page, 1);
 203                list_del(&page->lru);
 204                put_page(page); /* balloon reference */
 205        }
 206}
 207
 208static unsigned leak_balloon(struct virtio_balloon *vb, size_t num)
 209{
 210        unsigned num_freed_pages;
 211        struct page *page;
 212        struct balloon_dev_info *vb_dev_info = &vb->vb_dev_info;
 213        LIST_HEAD(pages);
 214
 215        /* We can only do one array worth at a time. */
 216        num = min(num, ARRAY_SIZE(vb->pfns));
 217
 218        mutex_lock(&vb->balloon_lock);
 219        /* We can't release more pages than taken */
 220        num = min(num, (size_t)vb->num_pages);
 221        for (vb->num_pfns = 0; vb->num_pfns < num;
 222             vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE) {
 223                page = balloon_page_dequeue(vb_dev_info);
 224                if (!page)
 225                        break;
 226                set_page_pfns(vb, vb->pfns + vb->num_pfns, page);
 227                list_add(&page->lru, &pages);
 228                vb->num_pages -= VIRTIO_BALLOON_PAGES_PER_PAGE;
 229        }
 230
 231        num_freed_pages = vb->num_pfns;
 232        /*
 233         * Note that if
 234         * virtio_has_feature(vdev, VIRTIO_BALLOON_F_MUST_TELL_HOST);
 235         * is true, we *have* to do it in this order
 236         */
 237        if (vb->num_pfns != 0)
 238                tell_host(vb, vb->deflate_vq);
 239        release_pages_balloon(vb, &pages);
 240        mutex_unlock(&vb->balloon_lock);
 241        return num_freed_pages;
 242}
 243
 244static inline void update_stat(struct virtio_balloon *vb, int idx,
 245                               u16 tag, u64 val)
 246{
 247        BUG_ON(idx >= VIRTIO_BALLOON_S_NR);
 248        vb->stats[idx].tag = cpu_to_virtio16(vb->vdev, tag);
 249        vb->stats[idx].val = cpu_to_virtio64(vb->vdev, val);
 250}
 251
 252#define pages_to_bytes(x) ((u64)(x) << PAGE_SHIFT)
 253
 254static unsigned int update_balloon_stats(struct virtio_balloon *vb)
 255{
 256        unsigned long events[NR_VM_EVENT_ITEMS];
 257        struct sysinfo i;
 258        unsigned int idx = 0;
 259        long available;
 260        unsigned long caches;
 261
 262        all_vm_events(events);
 263        si_meminfo(&i);
 264
 265        available = si_mem_available();
 266        caches = global_node_page_state(NR_FILE_PAGES);
 267
 268#ifdef CONFIG_VM_EVENT_COUNTERS
 269        update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN,
 270                                pages_to_bytes(events[PSWPIN]));
 271        update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_OUT,
 272                                pages_to_bytes(events[PSWPOUT]));
 273        update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]);
 274        update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]);
 275#endif
 276        update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMFREE,
 277                                pages_to_bytes(i.freeram));
 278        update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMTOT,
 279                                pages_to_bytes(i.totalram));
 280        update_stat(vb, idx++, VIRTIO_BALLOON_S_AVAIL,
 281                                pages_to_bytes(available));
 282        update_stat(vb, idx++, VIRTIO_BALLOON_S_CACHES,
 283                                pages_to_bytes(caches));
 284
 285        return idx;
 286}
 287
 288/*
 289 * While most virtqueues communicate guest-initiated requests to the hypervisor,
 290 * the stats queue operates in reverse.  The driver initializes the virtqueue
 291 * with a single buffer.  From that point forward, all conversations consist of
 292 * a hypervisor request (a call to this function) which directs us to refill
 293 * the virtqueue with a fresh stats buffer.  Since stats collection can sleep,
 294 * we delegate the job to a freezable workqueue that will do the actual work via
 295 * stats_handle_request().
 296 */
 297static void stats_request(struct virtqueue *vq)
 298{
 299        struct virtio_balloon *vb = vq->vdev->priv;
 300
 301        spin_lock(&vb->stop_update_lock);
 302        if (!vb->stop_update)
 303                queue_work(system_freezable_wq, &vb->update_balloon_stats_work);
 304        spin_unlock(&vb->stop_update_lock);
 305}
 306
 307static void stats_handle_request(struct virtio_balloon *vb)
 308{
 309        struct virtqueue *vq;
 310        struct scatterlist sg;
 311        unsigned int len, num_stats;
 312
 313        num_stats = update_balloon_stats(vb);
 314
 315        vq = vb->stats_vq;
 316        if (!virtqueue_get_buf(vq, &len))
 317                return;
 318        sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats);
 319        virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL);
 320        virtqueue_kick(vq);
 321}
 322
 323static void virtballoon_changed(struct virtio_device *vdev)
 324{
 325        struct virtio_balloon *vb = vdev->priv;
 326        unsigned long flags;
 327
 328        spin_lock_irqsave(&vb->stop_update_lock, flags);
 329        if (!vb->stop_update)
 330                queue_work(system_freezable_wq, &vb->update_balloon_size_work);
 331        spin_unlock_irqrestore(&vb->stop_update_lock, flags);
 332}
 333
 334static inline s64 towards_target(struct virtio_balloon *vb)
 335{
 336        s64 target;
 337        u32 num_pages;
 338
 339        virtio_cread(vb->vdev, struct virtio_balloon_config, num_pages,
 340                     &num_pages);
 341
 342        /* Legacy balloon config space is LE, unlike all other devices. */
 343        if (!virtio_has_feature(vb->vdev, VIRTIO_F_VERSION_1))
 344                num_pages = le32_to_cpu((__force __le32)num_pages);
 345
 346        target = num_pages;
 347        return target - vb->num_pages;
 348}
 349
 350static void update_balloon_size(struct virtio_balloon *vb)
 351{
 352        u32 actual = vb->num_pages;
 353
 354        /* Legacy balloon config space is LE, unlike all other devices. */
 355        if (!virtio_has_feature(vb->vdev, VIRTIO_F_VERSION_1))
 356                actual = (__force u32)cpu_to_le32(actual);
 357
 358        virtio_cwrite(vb->vdev, struct virtio_balloon_config, actual,
 359                      &actual);
 360}
 361
 362/*
 363 * virtballoon_oom_notify - release pages when system is under severe
 364 *                          memory pressure (called from out_of_memory())
 365 * @self : notifier block struct
 366 * @dummy: not used
 367 * @parm : returned - number of freed pages
 368 *
 369 * The balancing of memory by use of the virtio balloon should not cause
 370 * the termination of processes while there are pages in the balloon.
 371 * If virtio balloon manages to release some memory, it will make the
 372 * system return and retry the allocation that forced the OOM killer
 373 * to run.
 374 */
 375static int virtballoon_oom_notify(struct notifier_block *self,
 376                                  unsigned long dummy, void *parm)
 377{
 378        struct virtio_balloon *vb;
 379        unsigned long *freed;
 380        unsigned num_freed_pages;
 381
 382        vb = container_of(self, struct virtio_balloon, nb);
 383        if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
 384                return NOTIFY_OK;
 385
 386        freed = parm;
 387        num_freed_pages = leak_balloon(vb, oom_pages);
 388        update_balloon_size(vb);
 389        *freed += num_freed_pages;
 390
 391        return NOTIFY_OK;
 392}
 393
 394static void update_balloon_stats_func(struct work_struct *work)
 395{
 396        struct virtio_balloon *vb;
 397
 398        vb = container_of(work, struct virtio_balloon,
 399                          update_balloon_stats_work);
 400        stats_handle_request(vb);
 401}
 402
 403static void update_balloon_size_func(struct work_struct *work)
 404{
 405        struct virtio_balloon *vb;
 406        s64 diff;
 407
 408        vb = container_of(work, struct virtio_balloon,
 409                          update_balloon_size_work);
 410        diff = towards_target(vb);
 411
 412        if (diff > 0)
 413                diff -= fill_balloon(vb, diff);
 414        else if (diff < 0)
 415                diff += leak_balloon(vb, -diff);
 416        update_balloon_size(vb);
 417
 418        if (diff)
 419                queue_work(system_freezable_wq, work);
 420}
 421
 422static int init_vqs(struct virtio_balloon *vb)
 423{
 424        struct virtqueue *vqs[3];
 425        vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request };
 426        static const char * const names[] = { "inflate", "deflate", "stats" };
 427        int err, nvqs;
 428
 429        /*
 430         * We expect two virtqueues: inflate and deflate, and
 431         * optionally stat.
 432         */
 433        nvqs = virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ) ? 3 : 2;
 434        err = virtio_find_vqs(vb->vdev, nvqs, vqs, callbacks, names, NULL);
 435        if (err)
 436                return err;
 437
 438        vb->inflate_vq = vqs[0];
 439        vb->deflate_vq = vqs[1];
 440        if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) {
 441                struct scatterlist sg;
 442                unsigned int num_stats;
 443                vb->stats_vq = vqs[2];
 444
 445                /*
 446                 * Prime this virtqueue with one buffer so the hypervisor can
 447                 * use it to signal us later (it can't be broken yet!).
 448                 */
 449                num_stats = update_balloon_stats(vb);
 450
 451                sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats);
 452                if (virtqueue_add_outbuf(vb->stats_vq, &sg, 1, vb, GFP_KERNEL)
 453                    < 0)
 454                        BUG();
 455                virtqueue_kick(vb->stats_vq);
 456        }
 457        return 0;
 458}
 459
 460#ifdef CONFIG_BALLOON_COMPACTION
 461/*
 462 * virtballoon_migratepage - perform the balloon page migration on behalf of
 463 *                           a compation thread.     (called under page lock)
 464 * @vb_dev_info: the balloon device
 465 * @newpage: page that will replace the isolated page after migration finishes.
 466 * @page   : the isolated (old) page that is about to be migrated to newpage.
 467 * @mode   : compaction mode -- not used for balloon page migration.
 468 *
 469 * After a ballooned page gets isolated by compaction procedures, this is the
 470 * function that performs the page migration on behalf of a compaction thread
 471 * The page migration for virtio balloon is done in a simple swap fashion which
 472 * follows these two macro steps:
 473 *  1) insert newpage into vb->pages list and update the host about it;
 474 *  2) update the host about the old page removed from vb->pages list;
 475 *
 476 * This function preforms the balloon page migration task.
 477 * Called through balloon_mapping->a_ops->migratepage
 478 */
 479static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,
 480                struct page *newpage, struct page *page, enum migrate_mode mode)
 481{
 482        struct virtio_balloon *vb = container_of(vb_dev_info,
 483                        struct virtio_balloon, vb_dev_info);
 484        unsigned long flags;
 485
 486        /*
 487         * In order to avoid lock contention while migrating pages concurrently
 488         * to leak_balloon() or fill_balloon() we just give up the balloon_lock
 489         * this turn, as it is easier to retry the page migration later.
 490         * This also prevents fill_balloon() getting stuck into a mutex
 491         * recursion in the case it ends up triggering memory compaction
 492         * while it is attempting to inflate the ballon.
 493         */
 494        if (!mutex_trylock(&vb->balloon_lock))
 495                return -EAGAIN;
 496
 497        get_page(newpage); /* balloon reference */
 498
 499        /* balloon's page migration 1st step  -- inflate "newpage" */
 500        spin_lock_irqsave(&vb_dev_info->pages_lock, flags);
 501        balloon_page_insert(vb_dev_info, newpage);
 502        vb_dev_info->isolated_pages--;
 503        __count_vm_event(BALLOON_MIGRATE);
 504        spin_unlock_irqrestore(&vb_dev_info->pages_lock, flags);
 505        vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
 506        set_page_pfns(vb, vb->pfns, newpage);
 507        tell_host(vb, vb->inflate_vq);
 508
 509        /* balloon's page migration 2nd step -- deflate "page" */
 510        balloon_page_delete(page);
 511        vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
 512        set_page_pfns(vb, vb->pfns, page);
 513        tell_host(vb, vb->deflate_vq);
 514
 515        mutex_unlock(&vb->balloon_lock);
 516
 517        put_page(page); /* balloon reference */
 518
 519        return MIGRATEPAGE_SUCCESS;
 520}
 521
 522static struct dentry *balloon_mount(struct file_system_type *fs_type,
 523                int flags, const char *dev_name, void *data)
 524{
 525        static const struct dentry_operations ops = {
 526                .d_dname = simple_dname,
 527        };
 528
 529        return mount_pseudo(fs_type, "balloon-kvm:", NULL, &ops,
 530                                BALLOON_KVM_MAGIC);
 531}
 532
 533static struct file_system_type balloon_fs = {
 534        .name           = "balloon-kvm",
 535        .mount          = balloon_mount,
 536        .kill_sb        = kill_anon_super,
 537};
 538
 539#endif /* CONFIG_BALLOON_COMPACTION */
 540
 541static int virtballoon_probe(struct virtio_device *vdev)
 542{
 543        struct virtio_balloon *vb;
 544        int err;
 545
 546        if (!vdev->config->get) {
 547                dev_err(&vdev->dev, "%s failure: config access disabled\n",
 548                        __func__);
 549                return -EINVAL;
 550        }
 551
 552        vdev->priv = vb = kmalloc(sizeof(*vb), GFP_KERNEL);
 553        if (!vb) {
 554                err = -ENOMEM;
 555                goto out;
 556        }
 557
 558        INIT_WORK(&vb->update_balloon_stats_work, update_balloon_stats_func);
 559        INIT_WORK(&vb->update_balloon_size_work, update_balloon_size_func);
 560        spin_lock_init(&vb->stop_update_lock);
 561        vb->stop_update = false;
 562        vb->num_pages = 0;
 563        mutex_init(&vb->balloon_lock);
 564        init_waitqueue_head(&vb->acked);
 565        vb->vdev = vdev;
 566
 567        balloon_devinfo_init(&vb->vb_dev_info);
 568
 569        err = init_vqs(vb);
 570        if (err)
 571                goto out_free_vb;
 572
 573        vb->nb.notifier_call = virtballoon_oom_notify;
 574        vb->nb.priority = VIRTBALLOON_OOM_NOTIFY_PRIORITY;
 575        err = register_oom_notifier(&vb->nb);
 576        if (err < 0)
 577                goto out_del_vqs;
 578
 579#ifdef CONFIG_BALLOON_COMPACTION
 580        balloon_mnt = kern_mount(&balloon_fs);
 581        if (IS_ERR(balloon_mnt)) {
 582                err = PTR_ERR(balloon_mnt);
 583                unregister_oom_notifier(&vb->nb);
 584                goto out_del_vqs;
 585        }
 586
 587        vb->vb_dev_info.migratepage = virtballoon_migratepage;
 588        vb->vb_dev_info.inode = alloc_anon_inode(balloon_mnt->mnt_sb);
 589        if (IS_ERR(vb->vb_dev_info.inode)) {
 590                err = PTR_ERR(vb->vb_dev_info.inode);
 591                kern_unmount(balloon_mnt);
 592                unregister_oom_notifier(&vb->nb);
 593                vb->vb_dev_info.inode = NULL;
 594                goto out_del_vqs;
 595        }
 596        vb->vb_dev_info.inode->i_mapping->a_ops = &balloon_aops;
 597#endif
 598
 599        virtio_device_ready(vdev);
 600
 601        if (towards_target(vb))
 602                virtballoon_changed(vdev);
 603        return 0;
 604
 605out_del_vqs:
 606        vdev->config->del_vqs(vdev);
 607out_free_vb:
 608        kfree(vb);
 609out:
 610        return err;
 611}
 612
 613static void remove_common(struct virtio_balloon *vb)
 614{
 615        /* There might be pages left in the balloon: free them. */
 616        while (vb->num_pages)
 617                leak_balloon(vb, vb->num_pages);
 618        update_balloon_size(vb);
 619
 620        /* Now we reset the device so we can clean up the queues. */
 621        vb->vdev->config->reset(vb->vdev);
 622
 623        vb->vdev->config->del_vqs(vb->vdev);
 624}
 625
 626static void virtballoon_remove(struct virtio_device *vdev)
 627{
 628        struct virtio_balloon *vb = vdev->priv;
 629
 630        unregister_oom_notifier(&vb->nb);
 631
 632        spin_lock_irq(&vb->stop_update_lock);
 633        vb->stop_update = true;
 634        spin_unlock_irq(&vb->stop_update_lock);
 635        cancel_work_sync(&vb->update_balloon_size_work);
 636        cancel_work_sync(&vb->update_balloon_stats_work);
 637
 638        remove_common(vb);
 639#ifdef CONFIG_BALLOON_COMPACTION
 640        if (vb->vb_dev_info.inode)
 641                iput(vb->vb_dev_info.inode);
 642
 643        kern_unmount(balloon_mnt);
 644#endif
 645        kfree(vb);
 646}
 647
 648#ifdef CONFIG_PM_SLEEP
 649static int virtballoon_freeze(struct virtio_device *vdev)
 650{
 651        struct virtio_balloon *vb = vdev->priv;
 652
 653        /*
 654         * The workqueue is already frozen by the PM core before this
 655         * function is called.
 656         */
 657        remove_common(vb);
 658        return 0;
 659}
 660
 661static int virtballoon_restore(struct virtio_device *vdev)
 662{
 663        struct virtio_balloon *vb = vdev->priv;
 664        int ret;
 665
 666        ret = init_vqs(vdev->priv);
 667        if (ret)
 668                return ret;
 669
 670        virtio_device_ready(vdev);
 671
 672        if (towards_target(vb))
 673                virtballoon_changed(vdev);
 674        update_balloon_size(vb);
 675        return 0;
 676}
 677#endif
 678
 679static int virtballoon_validate(struct virtio_device *vdev)
 680{
 681        __virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
 682        return 0;
 683}
 684
 685static unsigned int features[] = {
 686        VIRTIO_BALLOON_F_MUST_TELL_HOST,
 687        VIRTIO_BALLOON_F_STATS_VQ,
 688        VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
 689};
 690
 691static struct virtio_driver virtio_balloon_driver = {
 692        .feature_table = features,
 693        .feature_table_size = ARRAY_SIZE(features),
 694        .driver.name =  KBUILD_MODNAME,
 695        .driver.owner = THIS_MODULE,
 696        .id_table =     id_table,
 697        .validate =     virtballoon_validate,
 698        .probe =        virtballoon_probe,
 699        .remove =       virtballoon_remove,
 700        .config_changed = virtballoon_changed,
 701#ifdef CONFIG_PM_SLEEP
 702        .freeze =       virtballoon_freeze,
 703        .restore =      virtballoon_restore,
 704#endif
 705};
 706
 707module_virtio_driver(virtio_balloon_driver);
 708MODULE_DEVICE_TABLE(virtio, id_table);
 709MODULE_DESCRIPTION("Virtio balloon driver");
 710MODULE_LICENSE("GPL");
 711