Lines Matching refs:vb
146 static void start_wakeup_event(struct virtio_balloon *vb, u32 mask) in start_wakeup_event() argument
150 spin_lock_irqsave(&vb->wakeup_lock, flags); in start_wakeup_event()
151 vb->wakeup_signal_mask |= mask; in start_wakeup_event()
152 if (!vb->processing_wakeup_event) { in start_wakeup_event()
153 vb->processing_wakeup_event = true; in start_wakeup_event()
154 pm_stay_awake(&vb->vdev->dev); in start_wakeup_event()
156 spin_unlock_irqrestore(&vb->wakeup_lock, flags); in start_wakeup_event()
159 static void process_wakeup_event(struct virtio_balloon *vb, u32 mask) in process_wakeup_event() argument
161 spin_lock_irq(&vb->wakeup_lock); in process_wakeup_event()
162 vb->wakeup_signal_mask &= ~mask; in process_wakeup_event()
163 spin_unlock_irq(&vb->wakeup_lock); in process_wakeup_event()
166 static void finish_wakeup_event(struct virtio_balloon *vb) in finish_wakeup_event() argument
168 spin_lock_irq(&vb->wakeup_lock); in finish_wakeup_event()
169 if (!vb->wakeup_signal_mask && vb->processing_wakeup_event) { in finish_wakeup_event()
170 vb->processing_wakeup_event = false; in finish_wakeup_event()
171 pm_relax(&vb->vdev->dev); in finish_wakeup_event()
173 spin_unlock_irq(&vb->wakeup_lock); in finish_wakeup_event()
178 struct virtio_balloon *vb = vq->vdev->priv; in balloon_ack() local
180 wake_up(&vb->acked); in balloon_ack()
183 static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq) in tell_host() argument
188 sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns); in tell_host()
191 virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL); in tell_host()
195 wait_event(vb->acked, virtqueue_get_buf(vq, &len)); in tell_host()
202 struct virtio_balloon *vb = in virtballoon_free_page_report() local
204 struct virtqueue *vq = vb->reporting_vq; in virtballoon_free_page_report()
208 err = virtqueue_add_inbuf(vq, sg, nents, vb, GFP_NOWAIT); in virtballoon_free_page_report()
221 wait_event(vb->acked, virtqueue_get_buf(vq, &unused)); in virtballoon_free_page_report()
226 static void set_page_pfns(struct virtio_balloon *vb, in set_page_pfns() argument
238 pfns[i] = cpu_to_virtio32(vb->vdev, in set_page_pfns()
242 static unsigned int fill_balloon(struct virtio_balloon *vb, size_t num) in fill_balloon() argument
250 num = min(num, ARRAY_SIZE(vb->pfns)); in fill_balloon()
257 dev_info_ratelimited(&vb->vdev->dev, in fill_balloon()
268 mutex_lock(&vb->balloon_lock); in fill_balloon()
270 vb->num_pfns = 0; in fill_balloon()
273 balloon_page_enqueue(&vb->vb_dev_info, page); in fill_balloon()
275 set_page_pfns(vb, vb->pfns + vb->num_pfns, page); in fill_balloon()
276 vb->num_pages += VIRTIO_BALLOON_PAGES_PER_PAGE; in fill_balloon()
277 if (!virtio_has_feature(vb->vdev, in fill_balloon()
280 vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE; in fill_balloon()
283 num_allocated_pages = vb->num_pfns; in fill_balloon()
285 if (vb->num_pfns != 0) in fill_balloon()
286 tell_host(vb, vb->inflate_vq); in fill_balloon()
287 mutex_unlock(&vb->balloon_lock); in fill_balloon()
292 static void release_pages_balloon(struct virtio_balloon *vb, in release_pages_balloon() argument
298 if (!virtio_has_feature(vb->vdev, in release_pages_balloon()
306 static unsigned int leak_balloon(struct virtio_balloon *vb, size_t num) in leak_balloon() argument
310 struct balloon_dev_info *vb_dev_info = &vb->vb_dev_info; in leak_balloon()
314 num = min(num, ARRAY_SIZE(vb->pfns)); in leak_balloon()
316 mutex_lock(&vb->balloon_lock); in leak_balloon()
318 num = min(num, (size_t)vb->num_pages); in leak_balloon()
319 for (vb->num_pfns = 0; vb->num_pfns < num; in leak_balloon()
320 vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE) { in leak_balloon()
324 set_page_pfns(vb, vb->pfns + vb->num_pfns, page); in leak_balloon()
326 vb->num_pages -= VIRTIO_BALLOON_PAGES_PER_PAGE; in leak_balloon()
329 num_freed_pages = vb->num_pfns; in leak_balloon()
335 if (vb->num_pfns != 0) in leak_balloon()
336 tell_host(vb, vb->deflate_vq); in leak_balloon()
337 release_pages_balloon(vb, &pages); in leak_balloon()
338 mutex_unlock(&vb->balloon_lock); in leak_balloon()
342 static inline void update_stat(struct virtio_balloon *vb, int idx, in update_stat() argument
346 vb->stats[idx].tag = cpu_to_virtio16(vb->vdev, tag); in update_stat()
347 vb->stats[idx].val = cpu_to_virtio64(vb->vdev, val); in update_stat()
354 static inline unsigned int update_balloon_vm_stats(struct virtio_balloon *vb) in update_balloon_vm_stats() argument
362 update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN, in update_balloon_vm_stats()
364 update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_OUT, in update_balloon_vm_stats()
366 update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]); in update_balloon_vm_stats()
367 update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]); in update_balloon_vm_stats()
368 update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, events[OOM_KILL]); in update_balloon_vm_stats()
374 update_stat(vb, idx++, VIRTIO_BALLOON_S_ALLOC_STALL, stall); in update_balloon_vm_stats()
376 update_stat(vb, idx++, VIRTIO_BALLOON_S_ASYNC_SCAN, in update_balloon_vm_stats()
378 update_stat(vb, idx++, VIRTIO_BALLOON_S_DIRECT_SCAN, in update_balloon_vm_stats()
380 update_stat(vb, idx++, VIRTIO_BALLOON_S_ASYNC_RECLAIM, in update_balloon_vm_stats()
382 update_stat(vb, idx++, VIRTIO_BALLOON_S_DIRECT_RECLAIM, in update_balloon_vm_stats()
386 update_stat(vb, idx++, VIRTIO_BALLOON_S_HTLB_PGALLOC, in update_balloon_vm_stats()
388 update_stat(vb, idx++, VIRTIO_BALLOON_S_HTLB_PGFAIL, in update_balloon_vm_stats()
395 static inline unsigned int update_balloon_vm_stats(struct virtio_balloon *vb) in update_balloon_vm_stats() argument
401 static unsigned int update_balloon_stats(struct virtio_balloon *vb) in update_balloon_stats() argument
408 idx = update_balloon_vm_stats(vb); in update_balloon_stats()
413 update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMFREE, in update_balloon_stats()
415 update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMTOT, in update_balloon_stats()
417 update_stat(vb, idx++, VIRTIO_BALLOON_S_AVAIL, in update_balloon_stats()
419 update_stat(vb, idx++, VIRTIO_BALLOON_S_CACHES, in update_balloon_stats()
436 struct virtio_balloon *vb = vq->vdev->priv; in stats_request() local
438 spin_lock(&vb->stop_update_lock); in stats_request()
439 if (!vb->stop_update) { in stats_request()
440 start_wakeup_event(vb, VIRTIO_BALLOON_WAKEUP_SIGNAL_STATS); in stats_request()
441 queue_work(system_freezable_wq, &vb->update_balloon_stats_work); in stats_request()
443 spin_unlock(&vb->stop_update_lock); in stats_request()
446 static void stats_handle_request(struct virtio_balloon *vb) in stats_handle_request() argument
452 num_stats = update_balloon_stats(vb); in stats_handle_request()
454 vq = vb->stats_vq; in stats_handle_request()
457 sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats); in stats_handle_request()
458 virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL); in stats_handle_request()
462 static inline s64 towards_target(struct virtio_balloon *vb) in towards_target() argument
468 virtio_cread_le(vb->vdev, struct virtio_balloon_config, num_pages, in towards_target()
476 return target - vb->num_pages; in towards_target()
480 static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb, in return_free_pages_to_mm() argument
486 spin_lock_irq(&vb->free_page_list_lock); in return_free_pages_to_mm()
488 page = balloon_page_pop(&vb->free_page_list); in return_free_pages_to_mm()
493 vb->num_free_page_blocks -= num_returned; in return_free_pages_to_mm()
494 spin_unlock_irq(&vb->free_page_list_lock); in return_free_pages_to_mm()
499 static void virtio_balloon_queue_free_page_work(struct virtio_balloon *vb) in virtio_balloon_queue_free_page_work() argument
501 if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in virtio_balloon_queue_free_page_work()
506 &vb->config_read_bitmap)) in virtio_balloon_queue_free_page_work()
509 queue_work(vb->balloon_wq, &vb->report_free_page_work); in virtio_balloon_queue_free_page_work()
512 static void start_update_balloon_size(struct virtio_balloon *vb) in start_update_balloon_size() argument
514 start_wakeup_event(vb, VIRTIO_BALLOON_WAKEUP_SIGNAL_ADJUST); in start_update_balloon_size()
515 queue_work(system_freezable_wq, &vb->update_balloon_size_work); in start_update_balloon_size()
520 struct virtio_balloon *vb = vdev->priv; in virtballoon_changed() local
523 spin_lock_irqsave(&vb->stop_update_lock, flags); in virtballoon_changed()
524 if (!vb->stop_update) { in virtballoon_changed()
525 start_update_balloon_size(vb); in virtballoon_changed()
526 virtio_balloon_queue_free_page_work(vb); in virtballoon_changed()
528 spin_unlock_irqrestore(&vb->stop_update_lock, flags); in virtballoon_changed()
531 static void update_balloon_size(struct virtio_balloon *vb) in update_balloon_size() argument
533 u32 actual = vb->num_pages; in update_balloon_size()
536 virtio_cwrite_le(vb->vdev, struct virtio_balloon_config, actual, in update_balloon_size()
542 struct virtio_balloon *vb; in update_balloon_stats_func() local
544 vb = container_of(work, struct virtio_balloon, in update_balloon_stats_func()
547 process_wakeup_event(vb, VIRTIO_BALLOON_WAKEUP_SIGNAL_STATS); in update_balloon_stats_func()
548 stats_handle_request(vb); in update_balloon_stats_func()
549 finish_wakeup_event(vb); in update_balloon_stats_func()
554 struct virtio_balloon *vb; in update_balloon_size_func() local
557 vb = container_of(work, struct virtio_balloon, in update_balloon_size_func()
560 process_wakeup_event(vb, VIRTIO_BALLOON_WAKEUP_SIGNAL_ADJUST); in update_balloon_size_func()
562 diff = towards_target(vb); in update_balloon_size_func()
566 diff -= fill_balloon(vb, diff); in update_balloon_size_func()
568 diff += leak_balloon(vb, -diff); in update_balloon_size_func()
569 update_balloon_size(vb); in update_balloon_size_func()
575 finish_wakeup_event(vb); in update_balloon_size_func()
578 static int init_vqs(struct virtio_balloon *vb) in init_vqs() argument
594 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) { in init_vqs()
599 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in init_vqs()
602 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) { in init_vqs()
607 err = virtio_find_vqs(vb->vdev, VIRTIO_BALLOON_VQ_MAX, vqs, in init_vqs()
612 vb->inflate_vq = vqs[VIRTIO_BALLOON_VQ_INFLATE]; in init_vqs()
613 vb->deflate_vq = vqs[VIRTIO_BALLOON_VQ_DEFLATE]; in init_vqs()
614 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_STATS_VQ)) { in init_vqs()
617 vb->stats_vq = vqs[VIRTIO_BALLOON_VQ_STATS]; in init_vqs()
623 num_stats = update_balloon_stats(vb); in init_vqs()
625 sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats); in init_vqs()
626 err = virtqueue_add_outbuf(vb->stats_vq, &sg, 1, vb, in init_vqs()
629 dev_warn(&vb->vdev->dev, "%s: add stat_vq failed\n", in init_vqs()
633 virtqueue_kick(vb->stats_vq); in init_vqs()
636 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in init_vqs()
637 vb->free_page_vq = vqs[VIRTIO_BALLOON_VQ_FREE_PAGE]; in init_vqs()
639 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) in init_vqs()
640 vb->reporting_vq = vqs[VIRTIO_BALLOON_VQ_REPORTING]; in init_vqs()
645 static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb) in virtio_balloon_cmd_id_received() argument
648 &vb->config_read_bitmap)) { in virtio_balloon_cmd_id_received()
650 virtio_cread_le(vb->vdev, struct virtio_balloon_config, in virtio_balloon_cmd_id_received()
652 &vb->cmd_id_received_cache); in virtio_balloon_cmd_id_received()
655 return vb->cmd_id_received_cache; in virtio_balloon_cmd_id_received()
658 static int send_cmd_id_start(struct virtio_balloon *vb) in send_cmd_id_start() argument
661 struct virtqueue *vq = vb->free_page_vq; in send_cmd_id_start()
668 vb->cmd_id_active = cpu_to_virtio32(vb->vdev, in send_cmd_id_start()
669 virtio_balloon_cmd_id_received(vb)); in send_cmd_id_start()
670 sg_init_one(&sg, &vb->cmd_id_active, sizeof(vb->cmd_id_active)); in send_cmd_id_start()
671 err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_active, GFP_KERNEL); in send_cmd_id_start()
677 static int send_cmd_id_stop(struct virtio_balloon *vb) in send_cmd_id_stop() argument
680 struct virtqueue *vq = vb->free_page_vq; in send_cmd_id_stop()
687 sg_init_one(&sg, &vb->cmd_id_stop, sizeof(vb->cmd_id_stop)); in send_cmd_id_stop()
688 err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_stop, GFP_KERNEL); in send_cmd_id_stop()
694 static int get_free_page_and_send(struct virtio_balloon *vb) in get_free_page_and_send() argument
696 struct virtqueue *vq = vb->free_page_vq; in get_free_page_and_send()
725 spin_lock_irq(&vb->free_page_list_lock); in get_free_page_and_send()
726 balloon_page_push(&vb->free_page_list, page); in get_free_page_and_send()
727 vb->num_free_page_blocks++; in get_free_page_and_send()
728 spin_unlock_irq(&vb->free_page_list_lock); in get_free_page_and_send()
740 static int send_free_pages(struct virtio_balloon *vb) in send_free_pages() argument
750 cmd_id_active = virtio32_to_cpu(vb->vdev, vb->cmd_id_active); in send_free_pages()
752 virtio_balloon_cmd_id_received(vb))) in send_free_pages()
759 err = get_free_page_and_send(vb); in send_free_pages()
769 static void virtio_balloon_report_free_page(struct virtio_balloon *vb) in virtio_balloon_report_free_page() argument
772 struct device *dev = &vb->vdev->dev; in virtio_balloon_report_free_page()
775 err = send_cmd_id_start(vb); in virtio_balloon_report_free_page()
779 err = send_free_pages(vb); in virtio_balloon_report_free_page()
784 err = send_cmd_id_stop(vb); in virtio_balloon_report_free_page()
791 struct virtio_balloon *vb = container_of(work, struct virtio_balloon, in report_free_page_func() local
795 cmd_id_received = virtio_balloon_cmd_id_received(vb); in report_free_page_func()
798 return_free_pages_to_mm(vb, ULONG_MAX); in report_free_page_func()
801 virtio32_to_cpu(vb->vdev, vb->cmd_id_active)) { in report_free_page_func()
802 virtio_balloon_report_free_page(vb); in report_free_page_func()
828 struct virtio_balloon *vb = container_of(vb_dev_info, in virtballoon_migratepage() local
840 if (!mutex_trylock(&vb->balloon_lock)) in virtballoon_migratepage()
850 if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM) && in virtballoon_migratepage()
862 vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE; in virtballoon_migratepage()
863 set_page_pfns(vb, vb->pfns, newpage); in virtballoon_migratepage()
864 tell_host(vb, vb->inflate_vq); in virtballoon_migratepage()
867 vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE; in virtballoon_migratepage()
868 set_page_pfns(vb, vb->pfns, page); in virtballoon_migratepage()
869 tell_host(vb, vb->deflate_vq); in virtballoon_migratepage()
871 mutex_unlock(&vb->balloon_lock); in virtballoon_migratepage()
880 static unsigned long shrink_free_pages(struct virtio_balloon *vb, in shrink_free_pages() argument
888 blocks_freed = return_free_pages_to_mm(vb, blocks_to_free); in shrink_free_pages()
896 struct virtio_balloon *vb = shrinker->private_data; in virtio_balloon_shrinker_scan() local
898 return shrink_free_pages(vb, sc->nr_to_scan); in virtio_balloon_shrinker_scan()
904 struct virtio_balloon *vb = shrinker->private_data; in virtio_balloon_shrinker_count() local
906 return vb->num_free_page_blocks * VIRTIO_BALLOON_HINT_BLOCK_PAGES; in virtio_balloon_shrinker_count()
912 struct virtio_balloon *vb = container_of(nb, in virtio_balloon_oom_notify() local
916 *freed += leak_balloon(vb, VIRTIO_BALLOON_OOM_NR_PAGES) / in virtio_balloon_oom_notify()
918 update_balloon_size(vb); in virtio_balloon_oom_notify()
923 static void virtio_balloon_unregister_shrinker(struct virtio_balloon *vb) in virtio_balloon_unregister_shrinker() argument
925 shrinker_free(vb->shrinker); in virtio_balloon_unregister_shrinker()
928 static int virtio_balloon_register_shrinker(struct virtio_balloon *vb) in virtio_balloon_register_shrinker() argument
930 vb->shrinker = shrinker_alloc(0, "virtio-balloon"); in virtio_balloon_register_shrinker()
931 if (!vb->shrinker) in virtio_balloon_register_shrinker()
934 vb->shrinker->scan_objects = virtio_balloon_shrinker_scan; in virtio_balloon_register_shrinker()
935 vb->shrinker->count_objects = virtio_balloon_shrinker_count; in virtio_balloon_register_shrinker()
936 vb->shrinker->private_data = vb; in virtio_balloon_register_shrinker()
938 shrinker_register(vb->shrinker); in virtio_balloon_register_shrinker()
945 struct virtio_balloon *vb; in virtballoon_probe() local
954 vdev->priv = vb = kzalloc(sizeof(*vb), GFP_KERNEL); in virtballoon_probe()
955 if (!vb) { in virtballoon_probe()
960 INIT_WORK(&vb->update_balloon_stats_work, update_balloon_stats_func); in virtballoon_probe()
961 INIT_WORK(&vb->update_balloon_size_work, update_balloon_size_func); in virtballoon_probe()
962 spin_lock_init(&vb->stop_update_lock); in virtballoon_probe()
963 mutex_init(&vb->balloon_lock); in virtballoon_probe()
964 init_waitqueue_head(&vb->acked); in virtballoon_probe()
965 vb->vdev = vdev; in virtballoon_probe()
967 balloon_devinfo_init(&vb->vb_dev_info); in virtballoon_probe()
969 err = init_vqs(vb); in virtballoon_probe()
974 vb->vb_dev_info.migratepage = virtballoon_migratepage; in virtballoon_probe()
981 if (virtqueue_get_vring_size(vb->free_page_vq) < 2) { in virtballoon_probe()
985 vb->balloon_wq = alloc_workqueue("balloon-wq", in virtballoon_probe()
988 if (!vb->balloon_wq) { in virtballoon_probe()
992 INIT_WORK(&vb->report_free_page_work, report_free_page_func); in virtballoon_probe()
993 vb->cmd_id_received_cache = VIRTIO_BALLOON_CMD_ID_STOP; in virtballoon_probe()
994 vb->cmd_id_active = cpu_to_virtio32(vb->vdev, in virtballoon_probe()
996 vb->cmd_id_stop = cpu_to_virtio32(vb->vdev, in virtballoon_probe()
998 spin_lock_init(&vb->free_page_list_lock); in virtballoon_probe()
999 INIT_LIST_HEAD(&vb->free_page_list); in virtballoon_probe()
1004 err = virtio_balloon_register_shrinker(vb); in virtballoon_probe()
1009 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) { in virtballoon_probe()
1010 vb->oom_nb.notifier_call = virtio_balloon_oom_notify; in virtballoon_probe()
1011 vb->oom_nb.priority = VIRTIO_BALLOON_OOM_NOTIFY_PRIORITY; in virtballoon_probe()
1012 err = register_oom_notifier(&vb->oom_nb); in virtballoon_probe()
1033 virtio_cwrite_le(vb->vdev, struct virtio_balloon_config, in virtballoon_probe()
1037 vb->pr_dev_info.report = virtballoon_free_page_report; in virtballoon_probe()
1038 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) { in virtballoon_probe()
1041 capacity = virtqueue_get_vring_size(vb->reporting_vq); in virtballoon_probe()
1061 vb->pr_dev_info.order = 5; in virtballoon_probe()
1064 err = page_reporting_register(&vb->pr_dev_info); in virtballoon_probe()
1069 spin_lock_init(&vb->wakeup_lock); in virtballoon_probe()
1078 device_set_wakeup_capable(&vb->vdev->dev, true); in virtballoon_probe()
1082 if (towards_target(vb)) in virtballoon_probe()
1087 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) in virtballoon_probe()
1088 unregister_oom_notifier(&vb->oom_nb); in virtballoon_probe()
1090 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in virtballoon_probe()
1091 virtio_balloon_unregister_shrinker(vb); in virtballoon_probe()
1094 destroy_workqueue(vb->balloon_wq); in virtballoon_probe()
1098 kfree(vb); in virtballoon_probe()
1103 static void remove_common(struct virtio_balloon *vb) in remove_common() argument
1106 while (vb->num_pages) in remove_common()
1107 leak_balloon(vb, vb->num_pages); in remove_common()
1108 update_balloon_size(vb); in remove_common()
1111 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in remove_common()
1112 return_free_pages_to_mm(vb, ULONG_MAX); in remove_common()
1115 virtio_reset_device(vb->vdev); in remove_common()
1117 vb->vdev->config->del_vqs(vb->vdev); in remove_common()
1122 struct virtio_balloon *vb = vdev->priv; in virtballoon_remove() local
1124 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) in virtballoon_remove()
1125 page_reporting_unregister(&vb->pr_dev_info); in virtballoon_remove()
1126 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) in virtballoon_remove()
1127 unregister_oom_notifier(&vb->oom_nb); in virtballoon_remove()
1128 if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) in virtballoon_remove()
1129 virtio_balloon_unregister_shrinker(vb); in virtballoon_remove()
1130 spin_lock_irq(&vb->stop_update_lock); in virtballoon_remove()
1131 vb->stop_update = true; in virtballoon_remove()
1132 spin_unlock_irq(&vb->stop_update_lock); in virtballoon_remove()
1133 cancel_work_sync(&vb->update_balloon_size_work); in virtballoon_remove()
1134 cancel_work_sync(&vb->update_balloon_stats_work); in virtballoon_remove()
1137 cancel_work_sync(&vb->report_free_page_work); in virtballoon_remove()
1138 destroy_workqueue(vb->balloon_wq); in virtballoon_remove()
1141 remove_common(vb); in virtballoon_remove()
1142 kfree(vb); in virtballoon_remove()
1148 struct virtio_balloon *vb = vdev->priv; in virtballoon_freeze() local
1154 remove_common(vb); in virtballoon_freeze()
1160 struct virtio_balloon *vb = vdev->priv; in virtballoon_restore() local
1169 if (towards_target(vb)) in virtballoon_restore()
1171 update_balloon_size(vb); in virtballoon_restore()