target/s390x/kvm/kvm.c | 52 +++++++++--------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-)
From: Thomas Huth <thuth@redhat.com>
Since commit 126e7f78036 ("kvm: require KVM_CAP_IOEVENTFD and
KVM_CAP_IOEVENTFD_ANY_LENGTH") we require at least kernel v4.4 to
be able to use KVM. KVM_CAP_ASYNC_PF is available in the kernel
since v3.15 and KVM_SYNC_PFAULT is available since kernel v3.18,
so we can assume now that they are available in all supported
kernels. Thus simplify the code a little bit by removing the
checks for these features.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
I just found this old patch on one of my local branches ... seems like
I forgot to send it out after writing it last year...
target/s390x/kvm/kvm.c | 52 +++++++++---------------------------------
1 file changed, 11 insertions(+), 41 deletions(-)
diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
index 54d28e37d4d..133e8c12fd4 100644
--- a/target/s390x/kvm/kvm.c
+++ b/target/s390x/kvm/kvm.c
@@ -140,7 +140,6 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
KVM_CAP_LAST_INFO
};
-static int cap_async_pf;
static int cap_mem_op;
static int cap_mem_op_extension;
static int cap_s390_irq;
@@ -333,6 +332,7 @@ int kvm_arch_get_default_type(MachineState *ms)
int kvm_arch_init(MachineState *ms, KVMState *s)
{
int required_caps[] = {
+ KVM_CAP_ASYNC_PF,
KVM_CAP_DEVICE_CTRL,
KVM_CAP_SYNC_REGS,
};
@@ -340,7 +340,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
for (int i = 0; i < ARRAY_SIZE(required_caps); i++) {
if (!kvm_check_extension(s, required_caps[i])) {
error_report("KVM is missing capability #%d - "
- "please use kernel 3.15 or newer", required_caps[i]);
+ "please use kernel 4.4 or newer", required_caps[i]);
return -1;
}
}
@@ -354,7 +354,6 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
return -1;
}
- cap_async_pf = kvm_check_extension(s, KVM_CAP_ASYNC_PF);
cap_mem_op = kvm_check_extension(s, KVM_CAP_S390_MEM_OP);
cap_mem_op_extension = kvm_check_extension(s, KVM_CAP_S390_MEM_OP_EXTENSION);
mem_op_storage_key_support = cap_mem_op_extension > 0;
@@ -466,7 +465,8 @@ static int can_sync_regs(CPUState *cs, int regs)
}
#define KVM_SYNC_REQUIRED_REGS (KVM_SYNC_GPRS | KVM_SYNC_ACRS | \
- KVM_SYNC_CRS | KVM_SYNC_PREFIX)
+ KVM_SYNC_CRS | KVM_SYNC_PREFIX | \
+ KVM_SYNC_PFAULT)
int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp)
{
@@ -550,25 +550,10 @@ int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp)
}
/* pfault parameters */
- if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
- cs->kvm_run->s.regs.pft = env->pfault_token;
- cs->kvm_run->s.regs.pfs = env->pfault_select;
- cs->kvm_run->s.regs.pfc = env->pfault_compare;
- cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_PFAULT;
- } else if (cap_async_pf) {
- r = kvm_set_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token);
- if (r < 0) {
- return r;
- }
- r = kvm_set_one_reg(cs, KVM_REG_S390_PFCOMPARE, &env->pfault_compare);
- if (r < 0) {
- return r;
- }
- r = kvm_set_one_reg(cs, KVM_REG_S390_PFSELECT, &env->pfault_select);
- if (r < 0) {
- return r;
- }
- }
+ cs->kvm_run->s.regs.pft = env->pfault_token;
+ cs->kvm_run->s.regs.pfs = env->pfault_select;
+ cs->kvm_run->s.regs.pfc = env->pfault_compare;
+ cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_PFAULT;
if (can_sync_regs(cs, KVM_SYNC_GSCB)) {
memcpy(cs->kvm_run->s.regs.gscb, env->gscb, 32);
@@ -673,24 +658,9 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp)
}
/* pfault parameters */
- if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
- env->pfault_token = cs->kvm_run->s.regs.pft;
- env->pfault_select = cs->kvm_run->s.regs.pfs;
- env->pfault_compare = cs->kvm_run->s.regs.pfc;
- } else if (cap_async_pf) {
- r = kvm_get_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token);
- if (r < 0) {
- return r;
- }
- r = kvm_get_one_reg(cs, KVM_REG_S390_PFCOMPARE, &env->pfault_compare);
- if (r < 0) {
- return r;
- }
- r = kvm_get_one_reg(cs, KVM_REG_S390_PFSELECT, &env->pfault_select);
- if (r < 0) {
- return r;
- }
- }
+ env->pfault_token = cs->kvm_run->s.regs.pft;
+ env->pfault_select = cs->kvm_run->s.regs.pfs;
+ env->pfault_compare = cs->kvm_run->s.regs.pfc;
if (can_sync_regs(cs, KVM_SYNC_DIAG318)) {
env->diag318_info = cs->kvm_run->s.regs.diag318;
--
2.53.0
On Tue, 2026-03-17 at 14:45 +0100, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> Since commit 126e7f78036 ("kvm: require KVM_CAP_IOEVENTFD and
> KVM_CAP_IOEVENTFD_ANY_LENGTH") we require at least kernel v4.4 to
> be able to use KVM. KVM_CAP_ASYNC_PF is available in the kernel
> since v3.15 and KVM_SYNC_PFAULT is available since kernel v3.18,
> so we can assume now that they are available in all supported
> kernels. Thus simplify the code a little bit by removing the
> checks for these features.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> I just found this old patch on one of my local branches ... seems like
> I forgot to send it out after writing it last year...
>
> target/s390x/kvm/kvm.c | 52 +++++++++---------------------------------
> 1 file changed, 11 insertions(+), 41 deletions(-)
Nice.
Reviewed-by: Eric Farman <farman@linux.ibm.com>
On 3/17/26 9:45 AM, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> Since commit 126e7f78036 ("kvm: require KVM_CAP_IOEVENTFD and
> KVM_CAP_IOEVENTFD_ANY_LENGTH") we require at least kernel v4.4 to
> be able to use KVM. KVM_CAP_ASYNC_PF is available in the kernel
> since v3.15 and KVM_SYNC_PFAULT is available since kernel v3.18,
> so we can assume now that they are available in all supported
> kernels. Thus simplify the code a little bit by removing the
> checks for these features.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
LGTM, thanks Thomas!
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Am 17.03.26 um 14:45 schrieb Thomas Huth:
> From: Thomas Huth <thuth@redhat.com>
>
> Since commit 126e7f78036 ("kvm: require KVM_CAP_IOEVENTFD and
> KVM_CAP_IOEVENTFD_ANY_LENGTH") we require at least kernel v4.4 to
> be able to use KVM. KVM_CAP_ASYNC_PF is available in the kernel
> since v3.15 and KVM_SYNC_PFAULT is available since kernel v3.18,
> so we can assume now that they are available in all supported
> kernels. Thus simplify the code a little bit by removing the
> checks for these features.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
© 2016 - 2026 Red Hat, Inc.