All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/1] target/s390x: Allow 2G hugepages guest backing
@ 2026-07-29 16:30 Claudio Imbrenda
  2026-07-29 16:30 ` [PATCH v2 1/1] " Claudio Imbrenda
  0 siblings, 1 reply; 4+ messages in thread
From: Claudio Imbrenda @ 2026-07-29 16:30 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.

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       | 40 +++++++++++++++++++++++-------------
 target/s390x/kvm/kvm_s390x.h |  2 ++
 target/s390x/kvm/stubs.c     | 10 +++++++++
 4 files changed, 39 insertions(+), 15 deletions(-)

-- 
2.55.0



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

* [PATCH v2 1/1] target/s390x: Allow 2G hugepages guest backing
  2026-07-29 16:30 [PATCH v2 0/1] target/s390x: Allow 2G hugepages guest backing Claudio Imbrenda
@ 2026-07-29 16:30 ` Claudio Imbrenda
  2026-07-29 17:53   ` Matthew Rosato
  0 siblings, 1 reply; 4+ messages in thread
From: Claudio Imbrenda @ 2026-07-29 16:30 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.

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       | 40 +++++++++++++++++++++++-------------
 target/s390x/kvm/kvm_s390x.h |  2 ++
 target/s390x/kvm/stubs.c     | 10 +++++++++
 4 files changed, 39 insertions(+), 15 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..0d04e940ef 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;
@@ -298,24 +298,36 @@ void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp)
         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, 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;
+    if (pagesize == 2 * GiB) {
+        if (kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_HPAGE_2G, 0)) {
+            error_setg(errp, "Memory backing with 2G pages was specified, "
+                       "but KVM does not support this memory backing");
+            return;
+        }
+        cap_hpage = 2;
+    } else if (pagesize == MiB) {
+        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;
+        }
+        cap_hpage = 1;
     }
+}
 
-    cap_hpage_1m = 1;
+int kvm_s390_get_hpage(void)
+{
+    return cap_hpage;
 }
 
 int kvm_s390_get_hpage_1m(void)
 {
-    return cap_hpage_1m;
+    return cap_hpage == 1;
+}
+
+int kvm_s390_get_hpage_2g(void)
+{
+    return cap_hpage == 2;
 }
 
 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..ccc615abed 100644
--- a/target/s390x/kvm/kvm_s390x.h
+++ b/target/s390x/kvm/kvm_s390x.h
@@ -25,7 +25,9 @@ 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(void);
 int kvm_s390_get_hpage_1m(void);
+int kvm_s390_get_hpage_2g(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..06e865f806 100644
--- a/target/s390x/kvm/stubs.c
+++ b/target/s390x/kvm/stubs.c
@@ -143,11 +143,21 @@ int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu)
     g_assert_not_reached();
 }
 
+int kvm_s390_get_hpage(void)
+{
+    g_assert_not_reached();
+}
+
 int kvm_s390_get_hpage_1m(void)
 {
     g_assert_not_reached();
 }
 
+int kvm_s390_get_hpage_2g(void)
+{
+    g_assert_not_reached();
+}
+
 void kvm_s390_enable_css_support(S390CPU *cpu)
 {
     g_assert_not_reached();
-- 
2.55.0



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

* Re: [PATCH v2 1/1] target/s390x: Allow 2G hugepages guest backing
  2026-07-29 16:30 ` [PATCH v2 1/1] " Claudio Imbrenda
@ 2026-07-29 17:53   ` Matthew Rosato
  2026-07-30 12:20     ` Claudio Imbrenda
  0 siblings, 1 reply; 4+ messages in thread
From: Matthew Rosato @ 2026-07-29 17:53 UTC (permalink / raw)
  To: Claudio Imbrenda, qemu-devel
  Cc: qemu-s390x, borntraeger, frankja, pasic, mhartmay, david, farman,
	richard.henderson, iii, cohuck


> -        if (kvm_enabled() && kvm_s390_get_hpage_1m()) {
> +        if (kvm_enabled() && kvm_s390_get_hpage()) {

...

>  
> -    cap_hpage_1m = 1;
> +int kvm_s390_get_hpage(void)
> +{
> +    return cap_hpage;
>  }
>  
>  int kvm_s390_get_hpage_1m(void)
>  {
> -    return cap_hpage_1m;
> +    return cap_hpage == 1;
> +}
> +
> +int kvm_s390_get_hpage_2g(void)
> +{
> +    return cap_hpage == 2;
>  }

Hey Claudio,

Thanks for changing things to differentiate between 1m and 2g for the cap.

Overall LGTM but this patch now makes kvm_s390_get_hpage_1m() dead code
(not referenced anywhere) as well as introduces a new function
kvm_s390_get_hpage_2g() that is also unused.

Since this patch is by itself, why not just remove the functions
until/if they are needed and only provide kvm_s390_get_hpage()?

Do you have planned future patches that you are confident will soon make
use of these get_hpage_1m() and get_hpage_2g() helpers?

Thanks,
Matt





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

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

On Wed, 29 Jul 2026 13:53:01 -0400
Matthew Rosato <mjrosato@linux.ibm.com> wrote:

> > -        if (kvm_enabled() && kvm_s390_get_hpage_1m()) {
> > +        if (kvm_enabled() && kvm_s390_get_hpage()) {  
> 
> ...
> 
> >  
> > -    cap_hpage_1m = 1;
> > +int kvm_s390_get_hpage(void)
> > +{
> > +    return cap_hpage;
> >  }
> >  
> >  int kvm_s390_get_hpage_1m(void)
> >  {
> > -    return cap_hpage_1m;
> > +    return cap_hpage == 1;
> > +}
> > +
> > +int kvm_s390_get_hpage_2g(void)
> > +{
> > +    return cap_hpage == 2;
> >  }  
> 
> Hey Claudio,
> 
> Thanks for changing things to differentiate between 1m and 2g for the cap.
> 
> Overall LGTM but this patch now makes kvm_s390_get_hpage_1m() dead code
> (not referenced anywhere) as well as introduces a new function
> kvm_s390_get_hpage_2g() that is also unused.
> 
> Since this patch is by itself, why not just remove the functions
> until/if they are needed and only provide kvm_s390_get_hpage()?
> 
> Do you have planned future patches that you are confident will soon make
> use of these get_hpage_1m() and get_hpage_2g() helpers?

yes, which is why I put them there :)

but I understand that dead code is annoying, if you want I can simply
respin without the unused functions, and introduce them later when they
are actually needed.

> 
> Thanks,
> Matt
> 
> 
> 



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

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

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-29 16:30 [PATCH v2 0/1] target/s390x: Allow 2G hugepages guest backing Claudio Imbrenda
2026-07-29 16:30 ` [PATCH v2 1/1] " Claudio Imbrenda
2026-07-29 17:53   ` Matthew Rosato
2026-07-30 12:20     ` Claudio Imbrenda

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.