* [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.