From: Dor Laor <dor.laor-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Marcelo Tosatti <marcelo-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>,
kvm-devel
<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Cc: virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH] KVM virtio balloon driver
Date: Thu, 17 Jan 2008 01:12:46 +0200 [thread overview]
Message-ID: <1200525166.26281.103.camel@localhost.localdomain> (raw)
In-Reply-To: <20080115190102.GA27645@dmt>
On Tue, 2008-01-15 at 17:01 -0200, Marcelo Tosatti wrote:
> OK, thats simpler. How about this:
>
It's sure is simpler :)
> [PATCH] Virtio balloon driver
>
> Add a balloon driver for KVM, host<->guest communication is performed
> via virtio.
>
> Signed-off-by: Marcelo Tosatti <mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
[snip]
> +static void free_page_array(struct balloon_buf *buf, unsigned int npages)
> +{
> + struct page *page;
> + u32 *pfn = (u32 *)&buf->data;
> + int i;
> +
> + for (i=0; i<npages; i++) {
> + page = pfn_to_page(*pfn);
> + list_del_init(&page->lru);
> + __free_page(page);
> + pfn++;
In add_page_array below you update baloon_size & totalram_pages,
it is need here too.
> + }
> +}
> +
> +static void add_page_array(struct virtballoon *v, struct balloon_buf *buf,
> + unsigned int npages)
> +{
> + struct page *page;
> + u32 *pfn = (u32 *)&buf->data;
> + int i;
> +
> + for (i=0; i<npages; i++) {
> + page = pfn_to_page(*pfn);
> + v->balloon_size++;
> + totalram_pages--;
> + list_add(&page->lru, &v->balloon_plist);
> + pfn++;
> + }
> +}
> +
> +static void inflate_done(struct virtballoon *v, struct balloon_buf *buf,
> + unsigned int npages)
> +{
> + u8 status = buf->hdr.status;
> +
> + /* inflate OK */
> + if (!status)
> + add_page_array(v, buf, npages);
> + else
> + free_page_array(buf, npages);
> +}
> +
> +static void deflate_done(struct virtballoon *v, struct balloon_buf *buf,
> + unsigned int npages)
> +{
> + u8 status = buf->hdr.status;
> +
> + /* deflate OK, return pages to the system */
> + if (!status) {
> + free_page_array(buf, npages);
If there are update above then no need below.
> + totalram_pages += npages;
> + v->balloon_size -= npages;
> + }
> + return;
> +}
> +
[snip]
> +static void balloon_config_changed(struct virtio_device *vdev)
> +{
> + struct virtballoon *v = vdev->priv;
> + u32 target_nrpages;
> +
A check should be added to see if rmmod_wait is active.
If it is then don't allow the monitor to inflate the balloon since
we like to remove the module.
Best regards,
Dor
> + __virtio_config_val(v->vdev, 0, &target_nrpages);
> + atomic_set(&v->target_nrpages, target_nrpages);
> + wake_up(&v->balloon_wait);
> + dprintk(&vdev->dev, "%s\n", __func__);
> +}
> +
> +static struct virtio_driver virtio_balloon = {
> + .driver.name = KBUILD_MODNAME,
> + .driver.owner = THIS_MODULE,
> + .id_table = id_table,
> + .probe = balloon_probe,
> + .remove = __devexit_p(balloon_remove),
> + .config_changed = balloon_config_changed,
> +};
> +
> +module_param(kvm_balloon_debug, int, 0);
> +
> +static int __init kvm_balloon_init(void)
> +{
> + return register_virtio_driver(&virtio_balloon);
> +}
> +
> +static void __exit kvm_balloon_exit(void)
> +{
> + struct virtballoon *v;
> +
> + list_for_each_entry(v, &balloon_devices, list) {
> + while (v->balloon_size) {
> + DEFINE_WAIT(wait);
> +
> + atomic_add(v->balloon_size, &v->target_nrpages);
> + wake_up(&v->balloon_wait);
> + prepare_to_wait(&v->rmmod_wait, &wait,
> + TASK_INTERRUPTIBLE);
> + schedule_timeout(HZ*10);
> + finish_wait(&v->rmmod_wait, &wait);
> + }
> + }
> +
> + unregister_virtio_driver(&virtio_balloon);
> +}
> +
> +module_init(kvm_balloon_init);
> +module_exit(kvm_balloon_exit);
> Index: linux-2.6-nv/drivers/virtio/virtio_pci.c
> ===================================================================
> --- linux-2.6-nv.orig/drivers/virtio/virtio_pci.c
> +++ linux-2.6-nv/drivers/virtio/virtio_pci.c
> @@ -67,6 +67,7 @@ static struct pci_device_id virtio_pci_i
> { 0x1AF4, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Dummy entry */
> { 0x1AF4, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Dummy entry */
> { 0x1AF4, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Dummy entry */
> + { 0x1AF4, 0x1003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* Balloon */
> { 0 },
> };
>
> Index: linux-2.6-nv/include/linux/virtio_balloon.h
> ===================================================================
> --- /dev/null
> +++ linux-2.6-nv/include/linux/virtio_balloon.h
> @@ -0,0 +1,20 @@
> +#ifndef _LINUX_VIRTIO_BALLOON_H
> +#define _LINUX_VIRTIO_BALLOON_H
> +#include <linux/virtio_config.h>
> +
> +#define VIRTIO_ID_BALLOON 3
> +
> +#define CMD_BALLOON_INFLATE 0x1
> +#define CMD_BALLOON_DEFLATE 0x2
> +
> +struct virtio_balloon_hdr {
> + __u8 cmd;
> + __u8 status;
> +};
> +
> +struct virtio_balloon_config
> +{
> + __u32 target_nrpages;
> +};
> +
> +#endif /* _LINUX_VIRTIO_BALLOON_H */
> _______________________________________________
> Virtualization mailing list
> Virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> https://lists.linux-foundation.org/mailman/listinfo/virtualization
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
next prev parent reply other threads:[~2008-01-16 23:12 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-14 20:03 [PATCH] KVM virtio balloon driver Marcelo Tosatti
2008-01-14 21:29 ` Anthony Liguori
2008-01-15 14:22 ` Marcelo Tosatti
2008-01-14 23:32 ` Rusty Russell
2008-01-15 19:01 ` Marcelo Tosatti
2008-01-16 23:12 ` Dor Laor
2008-01-16 23:12 ` Dor Laor [this message]
2008-01-17 1:45 ` [PATCH] KVM simplified " Rusty Russell
[not found] ` <1200525166.26281.103.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-01-17 1:45 ` Rusty Russell
2008-01-17 2:14 ` [kvm-devel] " Anthony Liguori
[not found] ` <200801171245.59510.rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>
2008-01-17 2:14 ` Anthony Liguori
[not found] ` <478EBA22.30301-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-01-17 3:29 ` Rusty Russell
2008-01-17 4:01 ` [kvm-devel] " Anthony Liguori
[not found] ` <200801171429.32888.rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>
2008-01-17 4:01 ` Anthony Liguori
2008-01-17 5:59 ` [kvm-devel] " Rusty Russell
[not found] ` <478ED32A.1060803-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-01-17 5:59 ` Rusty Russell
2008-01-19 7:05 ` Avi Kivity
2008-01-19 7:05 ` [kvm-devel] " Avi Kivity
2008-01-17 3:29 ` Rusty Russell
2008-01-17 9:32 ` Christian Borntraeger
2008-01-17 10:25 ` Martin Schwidefsky
[not found] ` <200801171032.26198.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-17 10:25 ` Martin Schwidefsky
2008-01-17 11:40 ` Dor Laor
2008-01-17 13:56 ` Anthony Liguori
[not found] ` <478F5E85.9020009-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-01-17 23:01 ` Dor Laor
2008-01-17 23:35 ` Anthony Liguori
[not found] ` <1200610891.26281.171.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-01-17 23:35 ` Anthony Liguori
2008-01-17 23:01 ` Dor Laor
2008-01-17 11:40 ` Dor Laor
2008-01-19 7:02 ` Avi Kivity
2008-01-17 9:32 ` Christian Borntraeger
2008-01-19 7:02 ` [kvm-devel] " Avi Kivity
2008-01-19 22:37 ` Anthony Liguori
2008-01-19 22:37 ` Anthony Liguori
[not found] ` <4791A085.8060502__30665.5007684187$1200726687$gmane$org-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-19 22:37 ` Anthony Liguori
2008-01-20 0:24 ` [kvm-devel] " Marcelo Tosatti
[not found] ` <47927BB7.7060805-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-01-20 0:24 ` Marcelo Tosatti
2008-01-20 0:40 ` Anthony Liguori
[not found] ` <47929884.2010908-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-01-24 1:58 ` Rusty Russell
2008-01-24 1:58 ` [kvm-devel] " Rusty Russell
2008-01-20 0:40 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1200525166.26281.103.camel@localhost.localdomain \
--to=dor.laor-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=dor.laor-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=marcelo-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.