diff mbox

vballoon: page allocation failure. order:0 -> Kernel panic

Message ID 49A3E7D8.4060108@redhat.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Avi Kivity Feb. 24, 2009, 12:28 p.m. UTC
Tomasz Chmielewski wrote:
> I'm trying to use ballooning with kvm-83.
>
> Although I'm able to limit the guest's memory, when I try to increase 
> it right after that, I get "vballoon: page allocation failure. 
> order:0" followed by a kernel panic.
>
> Is it expected?
>
> The guest is running Debian Lenny with 2.6.26 kernel. It had initially 
> 256 MB memory.
>

It's a guest bug, fixed in 2.6.27 by

commit 532a6086e35fa3b5761e68af36d4e42a550eba15
Author: Anthony Liguori <aliguori@us.ibm.com>
Date:   Mon Aug 18 17:15:31 2008 -0500

    virtio_balloon: fix towards_target when deflating balloon
   
    Both v and vb->num_pages are u32 and unsigned int respectively.  If 
v is less
    than vb->num_pages (and it is, when deflating the balloon), the 
result is a
    very large 32-bit number.  Since we're returning a s64, instead of 
getting the
    same negative number we desire, we get a very large positive number.
   
    This handles the case where v < vb->num_pages and ensures we get a 
small,
    negative, s64 as the result.
   
    Rusty: please push this for 2.6.27-rc4.  It's probably appropriate 
for the
    stable tree too as it will cause an unexpected OOM when ballooning.
   
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (simplified)

 
 static void update_balloon_size(struct virtio_balloon *vb)

Comments

Tomasz Chmielewski Feb. 25, 2009, 10:34 a.m. UTC | #1
Avi Kivity schrieb:
> Tomasz Chmielewski wrote:
>> I'm trying to use ballooning with kvm-83.
>>
>> Although I'm able to limit the guest's memory, when I try to increase 
>> it right after that, I get "vballoon: page allocation failure. 
>> order:0" followed by a kernel panic.
>>
>> Is it expected?
>>
>> The guest is running Debian Lenny with 2.6.26 kernel. It had initially 
>> 256 MB memory.
>>
> 
> It's a guest bug, fixed in 2.6.27 by

Indeed it works with 2.6.27.

BTW, is it possible to "balloon" to a bigger amount of memory that what 
was available when the guest started?

Or is it only possible to "shrink" and "grow" within initial memory 
available to the guest, but never "grow" beyond it?

For example, if I start a 2.6.27 guest with 256 MB memory on a kvm-83 
host, it is not possible to balloon to 300 MB?
Avi Kivity Feb. 25, 2009, 10:37 a.m. UTC | #2
Tomasz Chmielewski wrote:
>
> BTW, is it possible to "balloon" to a bigger amount of memory that 
> what was available when the guest started?

No.  The guest won't have its data structures set up to handle the extra 
memory.

>
> Or is it only possible to "shrink" and "grow" within initial memory 
> available to the guest, but never "grow" beyond it?
>


Right.  One workaround is to start the guest with more memory than you 
need and immediately balloon it down.  Hopefully we'll have memory 
hotplug one day so it can be fixed properly.
diff mbox

Patch

diff --git a/drivers/virtio/virtio_balloon.c 
b/drivers/virtio/virtio_balloon.c
index bfef604..62eab43 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -158,7 +158,7 @@  static inline s64 towards_target(struct 
virtio_balloon *vb)
        vb->vdev->config->get(vb->vdev,
                              offsetof(struct virtio_balloon_config, 
num_pages),
                              &v, sizeof(v));
-       return v - vb->num_pages;
+       return (s64)v - vb->num_pages;
 }