• Home
  • Raw
  • Download

Lines Matching refs:vb

70 	struct virtio_balloon *vb;  in balloon_ack()  local
73 vb = vq->vq_ops->get_buf(vq, &len); in balloon_ack()
74 if (vb) in balloon_ack()
75 complete(&vb->acked); in balloon_ack()
78 static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq) in tell_host() argument
82 sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns); in tell_host()
84 init_completion(&vb->acked); in tell_host()
87 if (vq->vq_ops->add_buf(vq, &sg, 1, 0, vb) != 0) in tell_host()
92 wait_for_completion(&vb->acked); in tell_host()
95 static void fill_balloon(struct virtio_balloon *vb, size_t num) in fill_balloon() argument
98 num = min(num, ARRAY_SIZE(vb->pfns)); in fill_balloon()
100 for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) { in fill_balloon()
104 dev_printk(KERN_INFO, &vb->vdev->dev, in fill_balloon()
111 vb->pfns[vb->num_pfns] = page_to_balloon_pfn(page); in fill_balloon()
113 vb->num_pages++; in fill_balloon()
114 list_add(&page->lru, &vb->pages); in fill_balloon()
118 if (vb->num_pfns == 0) in fill_balloon()
121 tell_host(vb, vb->inflate_vq); in fill_balloon()
134 static void leak_balloon(struct virtio_balloon *vb, size_t num) in leak_balloon() argument
139 num = min(num, ARRAY_SIZE(vb->pfns)); in leak_balloon()
141 for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) { in leak_balloon()
142 page = list_first_entry(&vb->pages, struct page, lru); in leak_balloon()
144 vb->pfns[vb->num_pfns] = page_to_balloon_pfn(page); in leak_balloon()
145 vb->num_pages--; in leak_balloon()
148 if (vb->tell_host_first) { in leak_balloon()
149 tell_host(vb, vb->deflate_vq); in leak_balloon()
150 release_pages_by_pfn(vb->pfns, vb->num_pfns); in leak_balloon()
152 release_pages_by_pfn(vb->pfns, vb->num_pfns); in leak_balloon()
153 tell_host(vb, vb->deflate_vq); in leak_balloon()
159 struct virtio_balloon *vb = vdev->priv; in virtballoon_changed() local
161 wake_up(&vb->config_change); in virtballoon_changed()
164 static inline s64 towards_target(struct virtio_balloon *vb) in towards_target() argument
167 vb->vdev->config->get(vb->vdev, in towards_target()
170 return (s64)v - vb->num_pages; in towards_target()
173 static void update_balloon_size(struct virtio_balloon *vb) in update_balloon_size() argument
175 __le32 actual = cpu_to_le32(vb->num_pages); in update_balloon_size()
177 vb->vdev->config->set(vb->vdev, in update_balloon_size()
184 struct virtio_balloon *vb = _vballoon; in balloon() local
191 wait_event_interruptible(vb->config_change, in balloon()
192 (diff = towards_target(vb)) != 0 in balloon()
195 fill_balloon(vb, diff); in balloon()
197 leak_balloon(vb, -diff); in balloon()
198 update_balloon_size(vb); in balloon()
205 struct virtio_balloon *vb; in virtballoon_probe() local
208 vdev->priv = vb = kmalloc(sizeof(*vb), GFP_KERNEL); in virtballoon_probe()
209 if (!vb) { in virtballoon_probe()
214 INIT_LIST_HEAD(&vb->pages); in virtballoon_probe()
215 vb->num_pages = 0; in virtballoon_probe()
216 init_waitqueue_head(&vb->config_change); in virtballoon_probe()
217 vb->vdev = vdev; in virtballoon_probe()
220 vb->inflate_vq = vdev->config->find_vq(vdev, 0, balloon_ack); in virtballoon_probe()
221 if (IS_ERR(vb->inflate_vq)) { in virtballoon_probe()
222 err = PTR_ERR(vb->inflate_vq); in virtballoon_probe()
226 vb->deflate_vq = vdev->config->find_vq(vdev, 1, balloon_ack); in virtballoon_probe()
227 if (IS_ERR(vb->deflate_vq)) { in virtballoon_probe()
228 err = PTR_ERR(vb->deflate_vq); in virtballoon_probe()
232 vb->thread = kthread_run(balloon, vb, "vballoon"); in virtballoon_probe()
233 if (IS_ERR(vb->thread)) { in virtballoon_probe()
234 err = PTR_ERR(vb->thread); in virtballoon_probe()
238 vb->tell_host_first in virtballoon_probe()
244 vdev->config->del_vq(vb->deflate_vq); in virtballoon_probe()
246 vdev->config->del_vq(vb->inflate_vq); in virtballoon_probe()
248 kfree(vb); in virtballoon_probe()
255 struct virtio_balloon *vb = vdev->priv; in virtballoon_remove() local
257 kthread_stop(vb->thread); in virtballoon_remove()
260 while (vb->num_pages) in virtballoon_remove()
261 leak_balloon(vb, vb->num_pages); in virtballoon_remove()
266 vdev->config->del_vq(vb->deflate_vq); in virtballoon_remove()
267 vdev->config->del_vq(vb->inflate_vq); in virtballoon_remove()
268 kfree(vb); in virtballoon_remove()