[05/11] Allocate physical memory in low virtual address space

Submitted by Alexander Graf on Nov. 26, 2009, 1:23 p.m.

Details

Message ID 1259241800-2810-6-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf Nov. 26, 2009, 1:23 p.m.
KVM on S390x requires the virtual address space of the guest's RAM to be
within the first 256GB.

The general direction I'd like to see KVM on S390 move is that this requirement
is losened, but for now that's what we're stuck with.

So let's just hack up qemu_ram_alloc until KVM behaves nicely :-).

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 exec.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

Comments

Aurelien Jarno Nov. 30, 2009, 6:18 p.m.
On Thu, Nov 26, 2009 at 02:23:14PM +0100, Alexander Graf wrote:
> KVM on S390x requires the virtual address space of the guest's RAM to be
> within the first 256GB.
> 

While I have no problem with this patch, I am curious to know the reason
of this. No need to change anything in the patch.

> The general direction I'd like to see KVM on S390 move is that this requirement
> is losened, but for now that's what we're stuck with.
> 
> So let's just hack up qemu_ram_alloc until KVM behaves nicely :-).
>
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  exec.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/exec.c b/exec.c
> index 076d26b..59150d0 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2411,7 +2411,13 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size)
>      size = TARGET_PAGE_ALIGN(size);
>      new_block = qemu_malloc(sizeof(*new_block));
>  
> +#if defined(TARGET_S390) && defined(CONFIG_KVM)
> +    /* XXX S390 KVM requires the topmost vma of the RAM to be < 256GB */
> +    new_block->host = mmap(0x1000000, size, PROT_EXEC|PROT_READ|PROT_WRITE,
> +                           MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> +#else
>      new_block->host = qemu_vmalloc(size);
> +#endif
>  #ifdef MADV_MERGEABLE
>      madvise(new_block->host, size, MADV_MERGEABLE);
>  #endif
> -- 
> 1.6.0.2
> 
> 
> 
>
Alexander Graf Nov. 30, 2009, 10:21 p.m.
On 30.11.2009, at 19:18, Aurelien Jarno wrote:

> On Thu, Nov 26, 2009 at 02:23:14PM +0100, Alexander Graf wrote:
>> KVM on S390x requires the virtual address space of the guest's RAM to be
>> within the first 256GB.
>> 
> 
> While I have no problem with this patch, I am curious to know the reason
> of this. No need to change anything in the patch.

For the technical reason I hope Carsten can provide some insight.
As for the implementation reason - S390 KVM (the kernel part) doesn't do memslots properly :-).

Alex
Carsten Otte Dec. 1, 2009, 9:12 a.m.
Alexander Graf wrote:
> For the technical reason I hope Carsten can provide some insight.
> As for the implementation reason - S390 KVM (the kernel part) doesn't do memslots properly :-).
I'm sorry, I cannot comment on that :-(.

Patch hide | download patch | download mbox

diff --git a/exec.c b/exec.c
index 076d26b..59150d0 100644
--- a/exec.c
+++ b/exec.c
@@ -2411,7 +2411,13 @@  ram_addr_t qemu_ram_alloc(ram_addr_t size)
     size = TARGET_PAGE_ALIGN(size);
     new_block = qemu_malloc(sizeof(*new_block));
 
+#if defined(TARGET_S390) && defined(CONFIG_KVM)
+    /* XXX S390 KVM requires the topmost vma of the RAM to be < 256GB */
+    new_block->host = mmap(0x1000000, size, PROT_EXEC|PROT_READ|PROT_WRITE,
+                           MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+#else
     new_block->host = qemu_vmalloc(size);
+#endif
 #ifdef MADV_MERGEABLE
     madvise(new_block->host, size, MADV_MERGEABLE);
 #endif