All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10
@ 2012-07-10 16:23 Alexander Graf
  2012-07-10 16:24 ` [Qemu-devel] [PATCH 1/1] s390: autodetect map private Alexander Graf
  2012-07-14 12:21 ` [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Blue Swirl
  0 siblings, 2 replies; 5+ messages in thread
From: Alexander Graf @ 2012-07-10 16:23 UTC (permalink / raw)
  To: qemu-devel qemu-devel; +Cc: Blue Swirl, Aurelien Jarno

Hi Blue / Aurelien,

This is my current patch queue for s390. It only includes a single patch
that enables for better memory allocation with kvm on newer kernels.

Please pull.

Alex


The following changes since commit 92336855975805d88c7979f53bc05c2d47abab04:
  Anthony Liguori (1):
        megasas: disable due to build breakage

are available in the git repository at:

  git://repo.or.cz/qemu/agraf.git s390-for-upstream

Christian Borntraeger (1):
      s390: autodetect map private

 exec.c             |   18 +++---------------
 kvm-all.c          |   13 +++++++++++++
 kvm.h              |    2 ++
 oslib-posix.c      |    3 +++
 target-s390x/kvm.c |   35 +++++++++++++++++++++++++++++++++++
 5 files changed, 56 insertions(+), 15 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH 1/1] s390: autodetect map private
  2012-07-10 16:23 [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Alexander Graf
@ 2012-07-10 16:24 ` Alexander Graf
  2012-07-14 12:21 ` [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Blue Swirl
  1 sibling, 0 replies; 5+ messages in thread
From: Alexander Graf @ 2012-07-10 16:24 UTC (permalink / raw)
  To: qemu-devel qemu-devel
  Cc: Blue Swirl, Christian Borntraeger, Jens Freimann, Aurelien Jarno

From: Christian Borntraeger <borntraeger@de.ibm.com>

By default qemu will use MAP_PRIVATE for guest pages. This will write
protect pages and thus break on s390 systems that dont support this feature.
Therefore qemu has a hack to always use MAP_SHARED for s390. But MAP_SHARED
has other problems (no dirty pages tracking, a lot more swap overhead etc.)
Newer systems allow the distinction via KVM_CAP_S390_COW. With this feature
qemu can use the standard qemu alloc if available, otherwise it will use
the old s390 hack.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Acked-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
 exec.c             |   18 +++---------------
 kvm-all.c          |   13 +++++++++++++
 kvm.h              |    2 ++
 oslib-posix.c      |    3 +++
 target-s390x/kvm.c |   35 +++++++++++++++++++++++++++++++++++
 5 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/exec.c b/exec.c
index dd4833d..c9fa17d 100644
--- a/exec.c
+++ b/exec.c
@@ -2536,26 +2536,14 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
             exit(1);
 #endif
         } else {
-#if defined(TARGET_S390X) && defined(CONFIG_KVM)
-            /* S390 KVM requires the topmost vma of the RAM to be smaller than
-               an system defined value, which is at least 256GB. Larger systems
-               have larger values. We put the guest between the end of data
-               segment (system break) and this value. We use 32GB as a base to
-               have enough room for the system break to grow. */
-            new_block->host = mmap((void*)0x800000000, size,
-                                   PROT_EXEC|PROT_READ|PROT_WRITE,
-                                   MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
-            if (new_block->host == MAP_FAILED) {
-                fprintf(stderr, "Allocating RAM failed\n");
-                abort();
-            }
-#else
             if (xen_enabled()) {
                 xen_ram_alloc(new_block->offset, size, mr);
+            } else if (kvm_enabled()) {
+                /* some s390/kvm configurations have special constraints */
+                new_block->host = kvm_vmalloc(size);
             } else {
                 new_block->host = qemu_vmalloc(size);
             }
-#endif
             qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
         }
     }
diff --git a/kvm-all.c b/kvm-all.c
index f8e4328..1016ca4 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1655,6 +1655,19 @@ int kvm_allows_irq0_override(void)
     return !kvm_irqchip_in_kernel() || kvm_has_gsi_routing();
 }
 
+void *kvm_vmalloc(ram_addr_t size)
+{
+#ifdef TARGET_S390X
+    void *mem;
+
+    mem = kvm_arch_vmalloc(size);
+    if (mem) {
+        return mem;
+    }
+#endif
+    return qemu_vmalloc(size);
+}
+
 void kvm_setup_guest_memory(void *start, size_t size)
 {
     if (!kvm_has_sync_mmu()) {
diff --git a/kvm.h b/kvm.h
index 9c7b0ea..ddc7c53 100644
--- a/kvm.h
+++ b/kvm.h
@@ -70,6 +70,8 @@ int kvm_init_vcpu(CPUArchState *env);
 int kvm_cpu_exec(CPUArchState *env);
 
 #if !defined(CONFIG_USER_ONLY)
+void *kvm_vmalloc(ram_addr_t size);
+void *kvm_arch_vmalloc(ram_addr_t size);
 void kvm_setup_guest_memory(void *start, size_t size);
 
 int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size);
diff --git a/oslib-posix.c b/oslib-posix.c
index 6b7ba64..dbeb627 100644
--- a/oslib-posix.c
+++ b/oslib-posix.c
@@ -41,6 +41,9 @@ extern int daemon(int, int);
       therefore we need special code which handles running on Valgrind. */
 #  define QEMU_VMALLOC_ALIGN (512 * 4096)
 #  define CONFIG_VALGRIND
+#elif defined(__linux__) && defined(__s390x__)
+   /* Use 1 MiB (segment size) alignment so gmap can be used by KVM. */
+#  define QEMU_VMALLOC_ALIGN (256 * 4096)
 #else
 #  define QEMU_VMALLOC_ALIGN getpagesize()
 #endif
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index ec08dd0..47008c2 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -135,6 +135,41 @@ int kvm_arch_get_registers(CPUS390XState *env)
     return 0;
 }
 
+/*
+ * Legacy layout for s390:
+ * Older S390 KVM requires the topmost vma of the RAM to be
+ * smaller than an system defined value, which is at least 256GB.
+ * Larger systems have larger values. We put the guest between
+ * the end of data segment (system break) and this value. We
+ * use 32GB as a base to have enough room for the system break
+ * to grow. We also have to use MAP parameters that avoid
+ * read-only mapping of guest pages.
+ */
+static void *legacy_s390_alloc(ram_addr_t size)
+{
+    void *mem;
+
+    mem = mmap((void *) 0x800000000ULL, size,
+               PROT_EXEC|PROT_READ|PROT_WRITE,
+               MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+    if (mem == MAP_FAILED) {
+        fprintf(stderr, "Allocating RAM failed\n");
+        abort();
+    }
+    return mem;
+}
+
+void *kvm_arch_vmalloc(ram_addr_t size)
+{
+    /* Can we use the standard allocation ? */
+    if (kvm_check_extension(kvm_state, KVM_CAP_S390_GMAP) &&
+        kvm_check_extension(kvm_state, KVM_CAP_S390_COW)) {
+        return NULL;
+    } else {
+        return legacy_s390_alloc(size);
+    }
+}
+
 int kvm_arch_insert_sw_breakpoint(CPUS390XState *env, struct kvm_sw_breakpoint *bp)
 {
     static const uint8_t diag_501[] = {0x83, 0x24, 0x05, 0x01};
-- 
1.6.0.2

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10
  2012-07-10 16:23 [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Alexander Graf
  2012-07-10 16:24 ` [Qemu-devel] [PATCH 1/1] s390: autodetect map private Alexander Graf
@ 2012-07-14 12:21 ` Blue Swirl
  1 sibling, 0 replies; 5+ messages in thread
From: Blue Swirl @ 2012-07-14 12:21 UTC (permalink / raw)
  To: Alexander Graf; +Cc: qemu-devel qemu-devel, Aurelien Jarno

On Tue, Jul 10, 2012 at 4:23 PM, Alexander Graf <agraf@suse.de> wrote:
> Hi Blue / Aurelien,
>
> This is my current patch queue for s390. It only includes a single patch
> that enables for better memory allocation with kvm on newer kernels.
>
> Please pull.

Thanks, pulled.

>
> Alex
>
>
> The following changes since commit 92336855975805d88c7979f53bc05c2d47abab04:
>   Anthony Liguori (1):
>         megasas: disable due to build breakage
>
> are available in the git repository at:
>
>   git://repo.or.cz/qemu/agraf.git s390-for-upstream
>
> Christian Borntraeger (1):
>       s390: autodetect map private
>
>  exec.c             |   18 +++---------------
>  kvm-all.c          |   13 +++++++++++++
>  kvm.h              |    2 ++
>  oslib-posix.c      |    3 +++
>  target-s390x/kvm.c |   35 +++++++++++++++++++++++++++++++++++
>  5 files changed, 56 insertions(+), 15 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10
  2012-07-10 16:33 Alexander Graf
@ 2012-07-12 20:03 ` Michael Roth
  0 siblings, 0 replies; 5+ messages in thread
From: Michael Roth @ 2012-07-12 20:03 UTC (permalink / raw)
  To: Alexander Graf; +Cc: qemu-devel qemu-devel

On Tue, Jul 10, 2012 at 06:33:48PM +0200, Alexander Graf wrote:
> Hi Mike,
> 
> This is my current patch queue for s390 for 1.1. It contains an important fix
> to make virtio devices accessible via their aliases.
> 
> Please pull.

Pulled into stable-1.1 (now on git.qemu.org). Will be included
in the 1.1.1 release (ETA: today). Thanks!

> 
> Alex
> 
> 
> The following changes since commit b7093f294c330c4db789c077dac9d8611e4f8ee0:
>   Jason Wang (1):
>         rtl8139: validate rx ring before receiving packets
> 
> are available in the git repository at:
> 
>   git://repo.or.cz/qemu/agraf.git s390-for-upstream-1.1
> 
> Alexander Graf (1):
>       s390x: fix s390 virtio aliases
> 
>  hw/qdev-monitor.c |   27 ++++++++++++++++++++-------
>  1 files changed, 20 insertions(+), 7 deletions(-)
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10
@ 2012-07-10 16:33 Alexander Graf
  2012-07-12 20:03 ` Michael Roth
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Graf @ 2012-07-10 16:33 UTC (permalink / raw)
  To: qemu-devel qemu-devel; +Cc: Michael Roth

Hi Mike,

This is my current patch queue for s390 for 1.1. It contains an important fix
to make virtio devices accessible via their aliases.

Please pull.

Alex


The following changes since commit b7093f294c330c4db789c077dac9d8611e4f8ee0:
  Jason Wang (1):
        rtl8139: validate rx ring before receiving packets

are available in the git repository at:

  git://repo.or.cz/qemu/agraf.git s390-for-upstream-1.1

Alexander Graf (1):
      s390x: fix s390 virtio aliases

 hw/qdev-monitor.c |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-07-14 12:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-10 16:23 [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Alexander Graf
2012-07-10 16:24 ` [Qemu-devel] [PATCH 1/1] s390: autodetect map private Alexander Graf
2012-07-14 12:21 ` [Qemu-devel] [PULL 0/1] s390 patch queue 2012-07-10 Blue Swirl
2012-07-10 16:33 Alexander Graf
2012-07-12 20:03 ` Michael Roth

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.