From: Akio T. <tak...@jp...> - 2008-01-10 12:29:57
|
Hi, Marcelo >> >+static int kvm_balloon_inflate(struct virtballoon *v, int32_t npages) >> >+{ >> >+ LIST_HEAD(tmp_list); >> >+ struct page *page, *tmp; >> >+ struct balloon_buf *buf; >> >+ u32 *pfn; >> >+ int allocated = 0; >> >+ int i, r = -ENOMEM; >> >+ >> >+ buf = alloc_balloon_buf(v->vdev, GFP_KERNEL); >> When does balloon driver free the buf? > >Hi Akio, > >The buffers are passed from the virtio handling routine to the balloon_thread >through the balloon_work list, and then freed here: > >+ spin_lock_irq(&v->queue_lock); >+ while (!list_empty(&v->balloon_work)) { >+ struct balloon_work *work; >+ struct balloon_buf *buf; >+ >+ work = list_entry(v->balloon_work.next, >+ struct balloon_work, list); >+ list_del(&work->list); >+ spin_unlock_irq(&v->queue_lock); >+ buf = work->buf; >+ kfree(work); >+ >+ switch(buf->hdr.cmd) { >+ case CMD_BALLOON_DEFLATE: >+ deflate_done(v, buf); >+ break; >+ case CMD_BALLOON_INFLATE: >+ inflate_done(v, buf); >+ break; >+ default: >+ printk("%s: unknown cmd 0x%x\n", __func__, >+ buf->hdr.cmd); >+ } >+ kfree(buf); Thank you for your exlanation. Does balloon free the buf when kvm_balloon_xflate() retrun -ENOMEM? Best Regards, Akio Takebe |