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