All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/1] target/s390x: Allow 2G hugepages guest backing
@ 2026-08-05 10:37 Claudio Imbrenda
  2026-08-05 10:37 ` [PATCH v3 1/1] " Claudio Imbrenda
  2026-08-10 18:39 ` [PATCH v3 0/1] " Eric Farman
  0 siblings, 2 replies; 4+ messages in thread
From: Claudio Imbrenda @ 2026-08-05 10:37 UTC (permalink / raw)
  To: qemu-devel
  Cc: qemu-s390x, borntraeger, frankja, pasic, mhartmay, david, farman,
	mjrosato, richard.henderson, iii, cohuck

Allow mapping guest with 2G hugepages on hosts that support it.
    
Add new helper functions to check whether hpages are in effect, and
which size.

v2->v3:
* Remove dead code introduced in the previous version.
* Factor out the capability enablement and error reporting to avoid
  duplicating code and error messages.
* Optimize the control flow and bring it back in line with the previous
  behaviour regarding page sizes, i.e. assuming that if the page size
  is neither 4K nor 1M, then it must be 2G.

v1->v2:
* Rename the global variable to cap_hpage
* Use different values of cap_hpage to distinguish between hpage sizes
* Add wrappers to test for specific hpage sizes

Claudio Imbrenda (1):
  target/s390x: Allow 2G hugepages guest backing

 target/s390x/diag.c          |  2 +-
 target/s390x/kvm/kvm.c       | 36 +++++++++++++++++-------------------
 target/s390x/kvm/kvm_s390x.h |  2 +-
 target/s390x/kvm/stubs.c     |  2 +-
 4 files changed, 20 insertions(+), 22 deletions(-)

-- 
2.55.0



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

* [PATCH v3 1/1] target/s390x: Allow 2G hugepages guest backing
  2026-08-05 10:37 [PATCH v3 0/1] target/s390x: Allow 2G hugepages guest backing Claudio Imbrenda
@ 2026-08-05 10:37 ` Claudio Imbrenda
  2026-08-05 17:17   ` Matthew Rosato
  2026-08-10 18:39 ` [PATCH v3 0/1] " Eric Farman
  1 sibling, 1 reply; 4+ messages in thread
From: Claudio Imbrenda @ 2026-08-05 10:37 UTC (permalink / raw)
  To: qemu-devel
  Cc: qemu-s390x, borntraeger, frankja, pasic, mhartmay, david, farman,
	mjrosato, richard.henderson, iii, cohuck

Allow mapping guest with 2G hugepages on hosts that support it.

Rename kvm_s390_get_hpage_1m() to kvm_s390_get_hpage() to reflect that
it is not anymore limited only to 1m hpages.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
---
 target/s390x/diag.c          |  2 +-
 target/s390x/kvm/kvm.c       | 36 +++++++++++++++++-------------------
 target/s390x/kvm/kvm_s390x.h |  2 +-
 target/s390x/kvm/stubs.c     |  2 +-
 4 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/target/s390x/diag.c b/target/s390x/diag.c
index 80f0958478..46d191b87d 100644
--- a/target/s390x/diag.c
+++ b/target/s390x/diag.c
@@ -185,7 +185,7 @@ out:
             return false;
         }
 
-        if (kvm_enabled() && kvm_s390_get_hpage_1m()) {
+        if (kvm_enabled() && kvm_s390_get_hpage()) {
             error_report("Protected VMs can currently not be backed with "
                          "huge pages");
             env->regs[r1 + 1] = DIAG_308_RC_INVAL_FOR_PV;
diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
index 72031a5714..803b878b4f 100644
--- a/target/s390x/kvm/kvm.c
+++ b/target/s390x/kvm/kvm.c
@@ -145,7 +145,7 @@ static int cap_mem_op;
 static int cap_mem_op_extension;
 static int cap_s390_irq;
 static int cap_ri;
-static int cap_hpage_1m;
+static int cap_hpage;
 static int cap_vcpu_resets;
 static int cap_protected;
 static int cap_zpci_op;
@@ -231,7 +231,7 @@ static void kvm_s390_enable_cmma(void)
         .attr = KVM_S390_VM_MEM_ENABLE_CMMA,
     };
 
-    if (cap_hpage_1m) {
+    if (cap_hpage) {
         warn_report("CMM will not be enabled because it is not "
                     "compatible with huge memory backings.");
         return;
@@ -292,30 +292,28 @@ void kvm_s390_crypto_reset(void)
     }
 }
 
-void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp)
+static bool kvm_s390_pgsize_cap(uint32_t capa, const char *s, Error **errp)
 {
-    if (pagesize == 4 * KiB) {
-        return;
-    }
-
-    if (pagesize != 1 * MiB) {
-        error_setg(errp, "Memory backing with 2G pages was specified, "
-                   "but KVM does not support this memory backing");
-        return;
+    if (kvm_vm_enable_cap(kvm_state, capa, 0)) {
+        error_setg(errp, "Memory backing with %s pages was specified, "
+                   "but KVM does not support this memory backing", s);
+        return false;
     }
+    return true;
+}
 
-    if (kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_HPAGE_1M, 0)) {
-        error_setg(errp, "Memory backing with 1M pages was specified, "
-                   "but KVM does not support this memory backing");
-        return;
+void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp)
+{
+    if (pagesize == MiB) {
+        cap_hpage = kvm_s390_pgsize_cap(KVM_CAP_S390_HPAGE_1M, "1M", errp);
+    } else if (pagesize != 4 * KiB) {
+        cap_hpage = 2 * kvm_s390_pgsize_cap(KVM_CAP_S390_HPAGE_2G, "2G", errp);
     }
-
-    cap_hpage_1m = 1;
 }
 
-int kvm_s390_get_hpage_1m(void)
+int kvm_s390_get_hpage(void)
 {
-    return cap_hpage_1m;
+    return cap_hpage;
 }
 
 static void ccw_machine_class_foreach(ObjectClass *oc, void *opaque)
diff --git a/target/s390x/kvm/kvm_s390x.h b/target/s390x/kvm/kvm_s390x.h
index 7b1cce3e60..3c4fa0489c 100644
--- a/target/s390x/kvm/kvm_s390x.h
+++ b/target/s390x/kvm/kvm_s390x.h
@@ -25,7 +25,7 @@ void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code);
 int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state);
 void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu);
 int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);
-int kvm_s390_get_hpage_1m(void);
+int kvm_s390_get_hpage(void);
 int kvm_s390_get_protected_dump(void);
 int kvm_s390_get_ri(void);
 int kvm_s390_get_zpci_op(void);
diff --git a/target/s390x/kvm/stubs.c b/target/s390x/kvm/stubs.c
index 196127baa5..ebf3c83994 100644
--- a/target/s390x/kvm/stubs.c
+++ b/target/s390x/kvm/stubs.c
@@ -143,7 +143,7 @@ int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu)
     g_assert_not_reached();
 }
 
-int kvm_s390_get_hpage_1m(void)
+int kvm_s390_get_hpage(void)
 {
     g_assert_not_reached();
 }
-- 
2.55.0



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

* Re: [PATCH v3 1/1] target/s390x: Allow 2G hugepages guest backing
  2026-08-05 10:37 ` [PATCH v3 1/1] " Claudio Imbrenda
@ 2026-08-05 17:17   ` Matthew Rosato
  0 siblings, 0 replies; 4+ messages in thread
From: Matthew Rosato @ 2026-08-05 17:17 UTC (permalink / raw)
  To: Claudio Imbrenda, qemu-devel
  Cc: qemu-s390x, borntraeger, frankja, pasic, mhartmay, david, farman,
	richard.henderson, iii, cohuck

On 8/5/26 6:37 AM, Claudio Imbrenda wrote:
> Allow mapping guest with 2G hugepages on hosts that support it.
> 
> Rename kvm_s390_get_hpage_1m() to kvm_s390_get_hpage() to reflect that
> it is not anymore limited only to 1m hpages.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Eric Farman <farman@linux.ibm.com>
> Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>

Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>



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

* Re: [PATCH v3 0/1] target/s390x: Allow 2G hugepages guest backing
  2026-08-05 10:37 [PATCH v3 0/1] target/s390x: Allow 2G hugepages guest backing Claudio Imbrenda
  2026-08-05 10:37 ` [PATCH v3 1/1] " Claudio Imbrenda
@ 2026-08-10 18:39 ` Eric Farman
  1 sibling, 0 replies; 4+ messages in thread
From: Eric Farman @ 2026-08-10 18:39 UTC (permalink / raw)
  To: Claudio Imbrenda, qemu-devel
  Cc: qemu-s390x, borntraeger, frankja, pasic, mhartmay, david,
	mjrosato, richard.henderson, iii, cohuck



On 8/5/26 6:37 AM, Claudio Imbrenda wrote:
> Allow mapping guest with 2G hugepages on hosts that support it.
>      
> Add new helper functions to check whether hpages are in effect, and
> which size.
> 
> v2->v3:
> * Remove dead code introduced in the previous version.
> * Factor out the capability enablement and error reporting to avoid
>    duplicating code and error messages.
> * Optimize the control flow and bring it back in line with the previous
>    behaviour regarding page sizes, i.e. assuming that if the page size
>    is neither 4K nor 1M, then it must be 2G.
> 
> v1->v2:
> * Rename the global variable to cap_hpage
> * Use different values of cap_hpage to distinguish between hpage sizes
> * Add wrappers to test for specific hpage sizes
> 
> Claudio Imbrenda (1):
>    target/s390x: Allow 2G hugepages guest backing

Thanks! Applied for 11.2

> 
>   target/s390x/diag.c          |  2 +-
>   target/s390x/kvm/kvm.c       | 36 +++++++++++++++++-------------------
>   target/s390x/kvm/kvm_s390x.h |  2 +-
>   target/s390x/kvm/stubs.c     |  2 +-
>   4 files changed, 20 insertions(+), 22 deletions(-)
> 



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

end of thread, other threads:[~2026-08-10 18:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-05 10:37 [PATCH v3 0/1] target/s390x: Allow 2G hugepages guest backing Claudio Imbrenda
2026-08-05 10:37 ` [PATCH v3 1/1] " Claudio Imbrenda
2026-08-05 17:17   ` Matthew Rosato
2026-08-10 18:39 ` [PATCH v3 0/1] " Eric Farman

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.