From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 20B6B44C4E2; Wed, 12 Aug 2026 15:37:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549049; cv=none; b=KJeTsPvwhCvr6tVrfIkYoPumCLbWP9MTvbpHFRcY2evM/kt/el8YztFg9o3M6rIBQuoxImYrZVCLLc+tefnykPbunG4c2/z3t2TyEZE7MGGSbo1aKC8QUPx6+8omPcobzUALxKXP9qpmKvcDPsZltZ89N+XB86PJ77LuuEsst9o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549049; c=relaxed/simple; bh=uOcF1zD1XNDj2iXI9EzY9mfpPt/FXOE/SA6gY8bVyx8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ot1cdFRGpUq7i6fQh5Je4zBKL59B+nOLXAuRJlvv+eW1w3zUoUHtKgo3fA+VzXordCGJ5zXZnCIlU6QH3Yj8sA8W+P6XoK6T71FWwOokSceQfYDI8EtnOkZReNstoBZaZ6QjMsCbLVdXCUwpRkr8jrRx1aEK3HH1f6aQQJtiusg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=rR9egrau; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="rR9egrau" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1UBZ1816396; Wed, 12 Aug 2026 15:36:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=/5NL9D O/LCOIeBJYhlzjg0RPSv1yXhjruJs23EtLbMw=; b=rR9egrauJDdTNZ4sBpxhgZ 6mRcA61jxuHt1yi0ni9FjsLR1xBVRz+DuxGaYph+IptMHB+AYkONqMPkIAMfF66M 7/y0Qy3gY6BxgXbPsMxpJzDQEuUK6f3PkdQImu3ikk6fmxyqxKxeykM7gMzcpEeo BBcBj3DWEMpl2wc+tM5qNgUfh+capnWvJ+utPO7k++9z8nGb+utYLKsDgNUdOkM7 aMWgFSXDQRTkniFlQu0ke9lvs1CeAZDAzqA/2rlCm83MI/b0epVZhv/DGUE3HUTn 9v5b/3O+zf1fuEVofC6EKVX4I8+UZZL5SxT+8q81g8T+ypW+GCbthoMbXzLA9pvA == Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvk0380c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQHOM021704; Wed, 12 Aug 2026 15:36:36 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g3g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaWqT35717612 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:33 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CE8742004E; Wed, 12 Aug 2026 15:36:32 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 664A02004D; Wed, 12 Aug 2026 15:36:32 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:32 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 01/33] vfio: Use file-based reference counting for KVM Date: Wed, 12 Aug 2026 17:35:57 +0200 Message-ID: <20260812153631.3376090-2-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXxAVS7HSTpWB9 g7fP50abyPZerqWSYDope405Egt8jTS08PYdST2faGhKQKlunIYX6JXMqhKNpVbxPUCEWBx5c1K arHrUZKC8tphL+fWm3xBoOtfgs5L7SrWhEpXhuQo+l/4U35HlUpqFngDqaOLUU64m72hgB2GGdo kb3aAEPnOnDa4jgWYJjOHxzsTDZRejCQE7PUyqso3LAiSMafgXSvN84W7xQSEEpMXD6FLlLMELj 1nC4DFmJ1fYLTa2zEkb6CY5PwoCzOkDcJu7zbfcqdAgY3rS8usENbbRZF2bPmZyVF2PLsGFHa9p sK8PkYhvxG5tGcK3GlstRfRpSllY9Zzw+h8NYRDsV/BAK7TIN3Zfap+XIkATPGgrhoZQKb0lg/b IFJNuwpBh7Sj7oCGFdxPxGuL/jFCEX42PWvSknkPYnDjimLj6G1Cj6tD4RBNnGWBmKGinlXRabo DO92A6mlANNDzMG+FmQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX/BXwSuGKiKj8 FFfhUFDTPx+D3wiQDz5AQBMfeDCTJX52pv7thdMnDBrkMF0/Cosm9pbFYvJs2AhHPMjqgf60hCt LrLJw/4gBNJQ4c6ioZQURG/pFB245Tc= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7c9306 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=Ikd4Dj_1AAAA:8 a=1XWaLZrsAAAA:8 a=VnNF1IyMAAAA:8 a=cFm4mksYcdg9GKIP9xkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: yBHl0QxAJqzQt7qjTPFFOCUdDnfVramG X-Proofpoint-ORIG-GUID: NbXaTicKfGWwKZQ_vNSULy1AMpFKRX7z X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Replace manual module reference counting with file-based reference counting for KVM integration. Previously, VFIO used symbol_get() to obtain function pointers for kvm_get_kvm_safe() and kvm_put_kvm(), then manually tracked module references through these symbols. This approach required storing the put_kvm function pointer in each device and carefully managing symbol references. Remove the put_kvm field in struct vfio_device as is it no longer used. Pass struct file pointers instead of struct kvm pointers throughout the VFIO-KVM interface. This leverages the kernel's existing file reference counting mechanism via get_file_active() and fput(), eliminating the need for manual module reference tracking. The file->private_data field provides access to the underlying struct kvm when needed. This simplifies the code and removes all remaining externally exported symbols for KVM, paving the path for a second concurrent KVM module. Suggested-by: Jason Gunthorpe Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson Signed-off-by: Steffen Eiden --- arch/x86/include/asm/kvm_page_track.h | 8 ++--- arch/x86/kvm/Makefile | 3 -- arch/x86/kvm/mmu/page_track.c | 16 +++++---- drivers/s390/crypto/vfio_ap_ops.c | 30 ++++++++++++---- drivers/s390/crypto/vfio_ap_private.h | 1 + drivers/vfio/device_cdev.c | 2 +- drivers/vfio/group.c | 4 +-- drivers/vfio/pci/vfio_pci_zdev.c | 7 +++- drivers/vfio/vfio.h | 10 +++--- drivers/vfio/vfio_main.c | 52 +++++++-------------------- include/linux/kvm_host.h | 7 ++++ include/linux/vfio.h | 5 ++- virt/kvm/kvm_main.c | 22 ++++++++++-- virt/kvm/vfio.c | 8 ++--- 14 files changed, 97 insertions(+), 78 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/k= vm_page_track.h index 3d040741044b..046a25c8fe4f 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -44,13 +44,13 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; =20 -int kvm_page_track_register_notifier(struct kvm *kvm, +int kvm_page_track_register_notifier(struct file *file, struct kvm_page_track_notifier_node *n); -void kvm_page_track_unregister_notifier(struct kvm *kvm, +void kvm_page_track_unregister_notifier(struct file *file, struct kvm_page_track_notifier_node *n); =20 -int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn); -int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn); +int kvm_write_track_add_gfn(struct file *file, gfn_t gfn); +int kvm_write_track_remove_gfn(struct file *file, gfn_t gfn); #else /* * Allow defining a node in a structure even if page tracking is disabled,= e.g. diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 0474604ab8a1..70645c2cd8ed 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -61,9 +61,6 @@ exports_grep_trailer :=3D --include=3D'*.[ch]' -nrw $(src= tree)/virt/kvm $(srctree)/a -e kvm_page_track_unregister_notifier \ -e kvm_write_track_add_gfn \ -e kvm_write_track_remove_gfn \ - -e kvm_get_kvm \ - -e kvm_get_kvm_safe \ - -e kvm_put_kvm =20 # Force grep to emit a goofy group separator that can in turn be replaced = with # the above newline macro (newlines in Make are a nightmare). Note, grep = only diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 7e8195a311bb..860049ed24ea 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -237,10 +237,11 @@ static int kvm_enable_external_write_tracking(struct = kvm *kvm) * register the notifier so that event interception for the tracked guest * pages can be received. */ -int kvm_page_track_register_notifier(struct kvm *kvm, +int kvm_page_track_register_notifier(struct file *file, struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; + struct kvm *kvm =3D file_to_kvm(file); int r; =20 if (!kvm || kvm->mm !=3D current->mm) @@ -252,7 +253,7 @@ int kvm_page_track_register_notifier(struct kvm *kvm, return r; } =20 - kvm_get_kvm(kvm); + get_file(file); =20 head =3D &kvm->arch.track_notifier_head; =20 @@ -267,10 +268,11 @@ EXPORT_SYMBOL_GPL(kvm_page_track_register_notifier); * stop receiving the event interception. It is the opposed operation of * kvm_page_track_register_notifier(). */ -void kvm_page_track_unregister_notifier(struct kvm *kvm, +void kvm_page_track_unregister_notifier(struct file *file, struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; + struct kvm *kvm =3D file_to_kvm(file); =20 head =3D &kvm->arch.track_notifier_head; =20 @@ -279,7 +281,7 @@ void kvm_page_track_unregister_notifier(struct kvm *kvm, write_unlock(&kvm->mmu_lock); synchronize_srcu(&head->track_srcu); =20 - kvm_put_kvm(kvm); + fput(file); } EXPORT_SYMBOL_GPL(kvm_page_track_unregister_notifier); =20 @@ -339,8 +341,9 @@ void kvm_page_track_delete_slot(struct kvm *kvm, struct= kvm_memory_slot *slot) * @kvm: the guest instance we are interested in. * @gfn: the guest page. */ -int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn) +int kvm_write_track_add_gfn(struct file *file, gfn_t gfn) { + struct kvm *kvm =3D file_to_kvm(file); struct kvm_memory_slot *slot; int idx; =20 @@ -369,8 +372,9 @@ EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); * @kvm: the guest instance we are interested in. * @gfn: the guest page. */ -int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn) +int kvm_write_track_remove_gfn(struct file *file, gfn_t gfn) { + struct kvm *kvm =3D file_to_kvm(file); struct kvm_memory_slot *slot; int idx; =20 diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_a= p_ops.c index 99a0efd999ef..875e67063d8e 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -8,6 +8,7 @@ * Halil Pasic * Pierre Morel */ +#include "linux/cleanup.h" #include #include #include @@ -1822,12 +1823,25 @@ static const struct attribute_group *vfio_ap_mdev_a= ttr_groups[] =3D { * @matrix_mdev: a mediated matrix device * @kvm: reference to KVM instance * - * Return: 0 if no other mediated matrix device has a reference to @kvm; - * otherwise, returns an -EPERM. + * Returns: 0 if the reference to kvm is successfully retrieved from @kvm_= file + * and set into @matrix_mdev; otherwise, returns: +=C2=A0* -ENOENT if a reference to kvm could not be retrieved from @kvm_file +=C2=A0* -EPERM if another mediated matrix device already has a reference t= o the same kvm instance */ static int vfio_ap_mdev_set_kvm(struct ap_matrix_mdev *matrix_mdev, - struct kvm *kvm) + struct file **kvm_file) { + struct file *kvm_file_ref __free(fput) =3D NULL; + struct kvm *kvm; + + kvm_file_ref =3D get_file_active(kvm_file); + if (!kvm_file_ref) + return -ENOENT; + + kvm =3D kvm_file_ref->private_data; + if (!kvm) + return -ENOENT; + if (kvm->arch.crypto.crycbd) { get_update_locks_for_kvm(kvm); if (kvm->arch.crypto.pqap_hook) { @@ -1836,10 +1850,11 @@ static int vfio_ap_mdev_set_kvm(struct ap_matrix_md= ev *matrix_mdev, } kvm->arch.crypto.pqap_hook =3D &matrix_mdev->pqap_hook; =20 - kvm_get_kvm(kvm); matrix_mdev->kvm =3D kvm; vfio_ap_mdev_update_guest_apcb(matrix_mdev); release_update_locks_for_kvm(kvm); + + matrix_mdev->kvm_file =3D no_free_ptr(kvm_file_ref); } =20 return 0; @@ -1878,9 +1893,10 @@ static void vfio_ap_mdev_dma_unmap(struct vfio_devic= e *vdev, u64 iova, */ static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev) { + struct file *kvm_file =3D matrix_mdev->kvm_file; struct kvm *kvm =3D matrix_mdev->kvm; =20 - if (kvm && kvm->arch.crypto.crycbd) { + if (kvm_file && kvm && kvm->arch.crypto.crycbd) { get_update_locks_for_kvm(kvm); kvm->arch.crypto.pqap_hook =3D NULL; =20 @@ -1889,7 +1905,7 @@ static void vfio_ap_mdev_unset_kvm(struct ap_matrix_m= dev *matrix_mdev) matrix_mdev->kvm =3D NULL; =20 release_update_locks_for_kvm(kvm); - kvm_put_kvm(kvm); + fput(kvm_file); } } =20 @@ -2053,7 +2069,7 @@ static int vfio_ap_mdev_open_device(struct vfio_devic= e *vdev) if (!vdev->kvm) return -EINVAL; =20 - return vfio_ap_mdev_set_kvm(matrix_mdev, vdev->kvm); + return vfio_ap_mdev_set_kvm(matrix_mdev, &vdev->kvm); } =20 static void vfio_ap_mdev_close_device(struct vfio_device *vdev) diff --git a/drivers/s390/crypto/vfio_ap_private.h b/drivers/s390/crypto/vf= io_ap_private.h index 9bff666b0b35..4ec91c6827eb 100644 --- a/drivers/s390/crypto/vfio_ap_private.h +++ b/drivers/s390/crypto/vfio_ap_private.h @@ -117,6 +117,7 @@ struct ap_matrix_mdev { struct ap_matrix matrix; struct ap_matrix shadow_apcb; struct kvm *kvm; + struct file *kvm_file; crypto_hook pqap_hook; struct mdev_device *mdev; struct ap_queue_table qtable; diff --git a/drivers/vfio/device_cdev.c b/drivers/vfio/device_cdev.c index 1d9515c967b0..e32176a55c46 100644 --- a/drivers/vfio/device_cdev.c +++ b/drivers/vfio/device_cdev.c @@ -65,7 +65,7 @@ int vfio_device_fops_cdev_open(struct inode *inode, struc= t file *filep) static void vfio_df_get_kvm_safe(struct vfio_device_file *df) { spin_lock(&df->kvm_ref_lock); - vfio_device_get_kvm_safe(df->device, df->kvm); + vfio_device_get_kvm_safe(df->device, &df->kvm); spin_unlock(&df->kvm_ref_lock); } =20 diff --git a/drivers/vfio/group.c b/drivers/vfio/group.c index b2299e5bc6df..197298ca0003 100644 --- a/drivers/vfio/group.c +++ b/drivers/vfio/group.c @@ -163,7 +163,7 @@ static int vfio_group_ioctl_set_container(struct vfio_g= roup *group, static void vfio_device_group_get_kvm_safe(struct vfio_device *device) { spin_lock(&device->group->kvm_ref_lock); - vfio_device_get_kvm_safe(device, device->group->kvm); + vfio_device_get_kvm_safe(device, &device->group->kvm); spin_unlock(&device->group->kvm_ref_lock); } =20 @@ -860,7 +860,7 @@ bool vfio_group_enforced_coherent(struct vfio_group *gr= oup) return ret; } =20 -void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm) +void vfio_group_set_kvm(struct vfio_group *group, struct file *kvm) { spin_lock(&group->kvm_ref_lock); group->kvm =3D kvm; diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_z= dev.c index 0990fdb146b7..d3a110101353 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -144,6 +144,7 @@ int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_de= vice *vdev, int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev) { struct zpci_dev *zdev =3D to_zpci(vdev->pdev); + struct kvm *kvm; =20 if (!zdev) return -ENODEV; @@ -151,8 +152,12 @@ int vfio_pci_zdev_open_device(struct vfio_pci_core_dev= ice *vdev) if (!vdev->vdev.kvm) return 0; =20 + kvm =3D vdev->vdev.kvm->private_data; + if (!kvm) + return -ENOENT; + if (zpci_kvm_hook.kvm_register) - return zpci_kvm_hook.kvm_register(zdev, vdev->vdev.kvm); + return zpci_kvm_hook.kvm_register(zdev, kvm); =20 return -ENOENT; } diff --git a/drivers/vfio/vfio.h b/drivers/vfio/vfio.h index 7728bc99b63d..7935c51ea1ac 100644 --- a/drivers/vfio/vfio.h +++ b/drivers/vfio/vfio.h @@ -23,7 +23,7 @@ struct vfio_device_file { u8 access_granted; u32 devid; /* only valid when iommufd is valid */ spinlock_t kvm_ref_lock; /* protect kvm field */ - struct kvm *kvm; + struct file *kvm; struct iommufd_ctx *iommufd; /* protected by struct vfio_device_set::lock= */ }; =20 @@ -88,7 +88,7 @@ struct vfio_group { #endif enum vfio_group_type type; struct mutex group_lock; - struct kvm *kvm; + struct file *kvm; struct file *opened_file; struct iommufd_ctx *iommufd; spinlock_t kvm_ref_lock; @@ -107,7 +107,7 @@ void vfio_device_group_unuse_iommu(struct vfio_device *= device); void vfio_df_group_close(struct vfio_device_file *df); struct vfio_group *vfio_group_from_file(struct file *file); bool vfio_group_enforced_coherent(struct vfio_group *group); -void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm); +void vfio_group_set_kvm(struct vfio_group *group, struct file *kvm); bool vfio_device_has_container(struct vfio_device *device); int __init vfio_group_init(void); void vfio_group_cleanup(void); @@ -429,11 +429,11 @@ static inline void vfio_virqfd_exit(void) #endif =20 #if IS_ENABLED(CONFIG_KVM) -void vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm); +void vfio_device_get_kvm_safe(struct vfio_device *device, struct file **kv= m); void vfio_device_put_kvm(struct vfio_device *device); #else static inline void vfio_device_get_kvm_safe(struct vfio_device *device, - struct kvm *kvm) + struct file **kvm) { } =20 diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 423ead48aafe..b06d1a911605 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -472,36 +472,17 @@ void vfio_unregister_group_dev(struct vfio_device *de= vice) EXPORT_SYMBOL_GPL(vfio_unregister_group_dev); =20 #if IS_ENABLED(CONFIG_KVM) -void vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm) +void vfio_device_get_kvm_safe(struct vfio_device *device, struct file **kv= m) { - void (*pfn)(struct kvm *kvm); - bool (*fn)(struct kvm *kvm); - bool ret; + struct file *kvm_file_ref __free(fput) =3D NULL; =20 lockdep_assert_held(&device->dev_set->lock); =20 - if (!kvm) + kvm_file_ref =3D get_file_active(kvm); + if (!kvm_file_ref) return; =20 - pfn =3D symbol_get(kvm_put_kvm); - if (WARN_ON(!pfn)) - return; - - fn =3D symbol_get(kvm_get_kvm_safe); - if (WARN_ON(!fn)) { - symbol_put(kvm_put_kvm); - return; - } - - ret =3D fn(kvm); - symbol_put(kvm_get_kvm_safe); - if (!ret) { - symbol_put(kvm_put_kvm); - return; - } - - device->put_kvm =3D pfn; - device->kvm =3D kvm; + device->kvm =3D no_free_ptr(kvm_file_ref); } =20 void vfio_device_put_kvm(struct vfio_device *device) @@ -511,14 +492,7 @@ void vfio_device_put_kvm(struct vfio_device *device) if (!device->kvm) return; =20 - if (WARN_ON(!device->put_kvm)) - goto clear; - - device->put_kvm(device->kvm); - device->put_kvm =3D NULL; - symbol_put(kvm_put_kvm); - -clear: + fput(device->kvm); device->kvm =3D NULL; } #endif @@ -1544,7 +1518,7 @@ bool vfio_file_enforced_coherent(struct file *file) } EXPORT_SYMBOL_GPL(vfio_file_enforced_coherent); =20 -static void vfio_device_file_set_kvm(struct file *file, struct kvm *kvm) +static void vfio_device_file_set_kvm(struct file *file, struct file *kvm) { struct vfio_device_file *df =3D file->private_data; =20 @@ -1560,22 +1534,22 @@ static void vfio_device_file_set_kvm(struct file *f= ile, struct kvm *kvm) =20 /** * vfio_file_set_kvm - Link a kvm with VFIO drivers - * @file: VFIO group file or VFIO device file - * @kvm: KVM to link + * @vfio_file: VFIO group file or VFIO device file + * @kvm: KVM file to link * * When a VFIO device is first opened the KVM will be available in * device->kvm if one was associated with the file. */ -void vfio_file_set_kvm(struct file *file, struct kvm *kvm) +void vfio_file_set_kvm(struct file *vfio_file, struct file *kvm) { struct vfio_group *group; =20 - group =3D vfio_group_from_file(file); + group =3D vfio_group_from_file(vfio_file); if (group) vfio_group_set_kvm(group, kvm); =20 - if (vfio_device_from_file(file)) - vfio_device_file_set_kvm(file, kvm); + if (vfio_device_from_file(vfio_file)) + vfio_device_file_set_kvm(vfio_file, kvm); } EXPORT_SYMBOL_GPL(vfio_file_set_kvm); =20 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 03bfc92864b6..1c5bf2801bf1 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -784,6 +784,12 @@ struct kvm { * kvm_swap_active_memslots(). */ struct mutex slots_arch_lock; + /* + * Back-reference to VM file descriptor without extra refcount held. + * Use get_file_active() to safely access the file without circular refer= ences. + * RCU-protected to ensure safe access even during file release. + */ + struct file __rcu *file; struct mm_struct *mm; /* userspace tied to this vm */ unsigned long nr_memslot_pages; /* The two memslot sets - active and inactive (per address space) */ @@ -1082,6 +1088,7 @@ void kvm_get_kvm(struct kvm *kvm); bool kvm_get_kvm_safe(struct kvm *kvm); void kvm_put_kvm(struct kvm *kvm); bool file_is_kvm(struct file *file); +struct kvm *file_to_kvm(struct file *file); void kvm_put_kvm_no_destroy(struct kvm *kvm); =20 static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_= id) diff --git a/include/linux/vfio.h b/include/linux/vfio.h index 45f08986359e..0cc91c6f96d2 100644 --- a/include/linux/vfio.h +++ b/include/linux/vfio.h @@ -54,7 +54,7 @@ struct vfio_device { struct list_head dev_set_list; unsigned int migration_flags; u8 precopy_info_v2; - struct kvm *kvm; + struct file *kvm; =20 /* Members below here are private, not for driver use */ unsigned int index; @@ -66,7 +66,6 @@ struct vfio_device { unsigned int open_count; struct completion comp; struct iommufd_access *iommufd_access; - void (*put_kvm)(struct kvm *kvm); struct inode *inode; #if IS_ENABLED(CONFIG_IOMMUFD) struct iommufd_device *iommufd_device; @@ -378,7 +377,7 @@ static inline bool vfio_file_has_dev(struct file *file,= struct vfio_device *devi #endif bool vfio_file_is_valid(struct file *file); bool vfio_file_enforced_coherent(struct file *file); -void vfio_file_set_kvm(struct file *file, struct kvm *kvm); +void vfio_file_set_kvm(struct file *vfio_file, struct file *kvm); =20 #define VFIO_PIN_PAGES_MAX_ENTRIES (PAGE_SIZE/sizeof(unsigned long)) =20 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 65eb26a0520d..0d80730e8424 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1314,7 +1314,7 @@ void kvm_get_kvm(struct kvm *kvm) { refcount_inc(&kvm->users_count); } -EXPORT_SYMBOL_GPL(kvm_get_kvm); +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_get_kvm); =20 /* * Make sure the vm is not during destruction, which is a safe version of @@ -1324,14 +1324,14 @@ bool kvm_get_kvm_safe(struct kvm *kvm) { return refcount_inc_not_zero(&kvm->users_count); } -EXPORT_SYMBOL_GPL(kvm_get_kvm_safe); +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_get_kvm_safe); =20 void kvm_put_kvm(struct kvm *kvm) { if (refcount_dec_and_test(&kvm->users_count)) kvm_destroy_vm(kvm); } -EXPORT_SYMBOL_GPL(kvm_put_kvm); +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_put_kvm); =20 /* * Used to put a reference that was taken on behalf of an object associated @@ -1352,6 +1352,9 @@ static int kvm_vm_release(struct inode *inode, struct= file *filp) =20 kvm_irqfd_release(kvm); =20 + rcu_assign_pointer(kvm->file, NULL); + synchronize_rcu(); + kvm_put_kvm(kvm); return 0; } @@ -5496,6 +5499,15 @@ bool file_is_kvm(struct file *file) } EXPORT_SYMBOL_FOR_KVM_INTERNAL(file_is_kvm); =20 +struct kvm *file_to_kvm(struct file *file) +{ + if (!file_is_kvm(file)) + return NULL; + + return file->private_data; +} +EXPORT_SYMBOL_FOR_KVM_INTERNAL(file_to_kvm); + static int kvm_dev_ioctl_create_vm(unsigned long type) { char fdname[ITOA_MAX_LEN + 1]; @@ -5527,6 +5539,10 @@ static int kvm_dev_ioctl_create_vm(unsigned long typ= e) * cases it will be called by the final fput(file) and will take * care of doing kvm_put_kvm(kvm). */ + + /* Store back-reference for VFIO and other subsystems */ + rcu_assign_pointer(kvm->file, file); + kvm_uevent_notify_change(KVM_EVENT_CREATE_VM, kvm); =20 fd_install(fd, file); diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c index 6cdc4e9a333a..0166cc4d39b3 100644 --- a/virt/kvm/vfio.c +++ b/virt/kvm/vfio.c @@ -35,15 +35,15 @@ struct kvm_vfio { bool noncoherent; }; =20 -static void kvm_vfio_file_set_kvm(struct file *file, struct kvm *kvm) +static void kvm_vfio_file_set_kvm(struct file *vfio_file, struct file *kvm) { - void (*fn)(struct file *file, struct kvm *kvm); + void (*fn)(struct file *vfio_file, struct file *kvm); =20 fn =3D symbol_get(vfio_file_set_kvm); if (!fn) return; =20 - fn(file, kvm); + fn(vfio_file, kvm); =20 symbol_put(vfio_file_set_kvm); } @@ -168,7 +168,7 @@ static int kvm_vfio_file_add(struct kvm_device *dev, un= signed int fd) kvf->file =3D get_file(filp); list_add_tail(&kvf->node, &kv->file_list); =20 - kvm_vfio_file_set_kvm(kvf->file, dev->kvm); + kvm_vfio_file_set_kvm(kvf->file, dev->kvm->file); kvm_vfio_update_coherency(dev); =20 return 0; --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9930028CF4A; Wed, 12 Aug 2026 15:37:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549049; cv=none; b=W8FgYVu+QNQArcqWihYWMhb0zfbW9fvcQOER5wNGvZgTHeOSw3T159bxi0nXprB4iIqooZo1f9o9IRzMIgzepgx7Ffdl9S32pZ8mHzF+E32GVpM3687DCcjoWkdmJxLp8w9mwgwa6kGdjs45hOVoF8gpggxz2Ps/vrQtQMC9nMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549049; c=relaxed/simple; bh=fik10URQEkk79QYqmWKrZzrRL6NYRYubQ5ORyRQon7U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tA0gTc5JqpldcGchy/cyMlVyGPjbEZZtz1TKp1R8FNrEXsqF6tE3hmRwA77zvFeuFsTAko9uC3trYHHLxISzzpvsrRTmzxd9YKSodbdv2QFINjWt7HreQw6bODDvF8dw331Go5x653uCj8pESTVd08Lsmyrhf3fdU7dRDGLlDzA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=irE69GO4; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="irE69GO4" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1rIY3594403; Wed, 12 Aug 2026 15:36:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=RThAaofvcUNt4+pXN 5K1tYWWV2gtt15F90TRL/IpILs=; b=irE69GO46IA+Abu85XXpB4Bttag9AwmjN OCRB51zDoyNiqheVJVUBpRskCZx+w8zuqFbwWm3rTwvoK7IASxFUvY0ATacEm7KP VzK0hPszdlPzEbNm6wjV+bdUIiG+GrXBC4mP+QhguC4njlOQfQbEiWIG61JiQiE9 Pzoroj0YfUPeYW9XN839UClpZFtsxgA/V6VOTjuUh/Hx6E7I05lktRFrVwgRIuF1 pVeBhiXJ4K2D5UXPGtlpaTWRBXHzh/5tE26aHJaDrcJwU4khIL8/gSh6RHkURSs0 BBeTFwN9DOPD4w2HgChtuavB7uahPovTQW92drSZkuQpBOBB8tlsw== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e10-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQG6O021696; Wed, 12 Aug 2026 15:36:37 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g3j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaXgY31785528 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:33 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3736120049; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D43182004F; Wed, 12 Aug 2026 15:36:32 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:32 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 02/33] KVM: Make device name configurable Date: Wed, 12 Aug 2026 17:35:58 +0200 Message-ID: <20260812153631.3376090-3-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c9306 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=mNtOeJMeAAAA:8 a=WWSSfADqlBNYbpG058sA:9 a=_FGNsZxrd-dVGcz-3RuP:22 X-Proofpoint-GUID: 6VWLARX-WajOsaV6-_1FCwyMYwxpVe4P X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX6Mnsk7m2ROnz EwEPSvqED/9KGBiZ+Py0xJdHKYi7noD14bFPfN4/83J57KBaAx5zXF5aqfYkRIgqrgW6W3LQnO5 N7Qtgx/yr8ALkMt4BkUQQih13e75okhD/tevCJp0cvU6hj358wmWcVmBZLbJWBaj3f/NQst+4BJ hP3ffwyE6YDWaWAYci+ESqSm6fMFtl2Qcx8NF6+YAN9oqptW5aTWyITB4q5CTtWXp0wzmnzA805 /JVXnFkJWnlH2buybStjfd/3iiGDTTGg2Aj1xwQy8zh9jTirnMtUimS+A3XVdeFrkgKV5SaX2G5 6LkoQlqCcuYsq64kZDxv5hxpJCB8SkjLq74l8R6R4y7k/UIA13d8ANVRb2k2DFCIyVvYYHuW4ih gFubtiLkUTLF3FT7WvHpaFwbhvzj/dFvdcTvNAdcBCmHPKvrFa2IbGitB+P1TWdcLHOylV3dXMy zDsofrSBtpxosNkC6wQ== X-Proofpoint-ORIG-GUID: Dpkx2jvt5xxI9NDHBc1ehX3romaxEcF_ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX/s2JQ5kN5SRR qeVR3LqnpBanlR+EVqnAj+YI9uwMFEiJhNmnt7yIcPz2uurgVgxYQXb1TkcDpWrcLkIxRnMObil L4GfV8gSTsFiV7LKKRmKn+mlNz7xBpo= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Allow KVM implementations to choose alternative device names. This is especially useful for architectures providing multiple KVM implementations simultaneously. Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- include/linux/kvm_host.h | 4 +++- virt/kvm/async_pf.c | 13 ++++++++++-- virt/kvm/async_pf.h | 4 ++-- virt/kvm/kvm_main.c | 43 ++++++++++++++++++++++++++++++---------- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 1c5bf2801bf1..6ea6322ba8b5 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1081,7 +1081,9 @@ static inline void kvm_irqfd_exit(void) { } #endif -int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *modul= e); +int kvm_init(unsigned int vcpu_size, unsigned int vcpu_align, struct modul= e *module); +int kvm_init_with_dev(unsigned int vcpu_size, unsigned int vcpu_align, + struct module *module, const char *dev_name, int minor); void kvm_exit(void); =20 void kvm_get_kvm(struct kvm *kvm); diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c index b8aaa96b799b..015761249107 100644 --- a/virt/kvm/async_pf.c +++ b/virt/kvm/async_pf.c @@ -19,9 +19,18 @@ =20 static struct kmem_cache *async_pf_cache; =20 -int kvm_async_pf_init(void) +int kvm_async_pf_init(const char *cache_name) { - async_pf_cache =3D KMEM_CACHE(kvm_async_pf, 0); + char *full_cache_name; + + full_cache_name =3D kasprintf(GFP_KERNEL, "%s_async_pf", cache_name); + if (!full_cache_name) + return -ENOMEM; + + async_pf_cache =3D kmem_cache_create(full_cache_name, + sizeof(struct kvm_async_pf), 0, + SLAB_ACCOUNT, NULL); + kfree(full_cache_name); =20 if (!async_pf_cache) return -ENOMEM; diff --git a/virt/kvm/async_pf.h b/virt/kvm/async_pf.h index 90d1a7d8c6de..829003899414 100644 --- a/virt/kvm/async_pf.h +++ b/virt/kvm/async_pf.h @@ -12,11 +12,11 @@ #define __KVM_ASYNC_PF_H__ =20 #ifdef CONFIG_KVM_ASYNC_PF -int kvm_async_pf_init(void); +int kvm_async_pf_init(const char *cache_name); void kvm_async_pf_deinit(void); void kvm_async_pf_vcpu_init(struct kvm_vcpu *vcpu); #else -#define kvm_async_pf_init() (0) +#define kvm_async_pf_init(name) (0) #define kvm_async_pf_deinit() do {} while (0) #define kvm_async_pf_vcpu_init(C) do {} while (0) #endif diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 0d80730e8424..0b34477bf325 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -10,6 +10,7 @@ * Yaniv Kamay */ =20 +#include "linux/sprintf.h" #include =20 #include @@ -5597,9 +5598,7 @@ static struct file_operations kvm_chardev_ops =3D { }; =20 static struct miscdevice kvm_dev =3D { - KVM_MINOR, - "kvm", - &kvm_chardev_ops, + .fops =3D &kvm_chardev_ops, }; =20 #ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING @@ -6371,13 +6370,13 @@ static void kvm_uevent_notify_change(unsigned int t= ype, struct kvm *kvm) kfree(env); } =20 -static void kvm_init_debug(void) +static void kvm_init_debug(const char *dev_name) { const struct file_operations *fops; const struct kvm_stats_desc *pdesc; int i; =20 - kvm_debugfs_dir =3D debugfs_create_dir("kvm", NULL); + kvm_debugfs_dir =3D debugfs_create_dir(dev_name, NULL); =20 for (i =3D 0; i < kvm_vm_stats_header.num_desc; ++i) { pdesc =3D &kvm_vm_stats_desc[i]; @@ -6513,23 +6512,42 @@ void kvm_unregister_perf_callbacks(void) } #endif =20 -int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *modul= e) +int kvm_init(unsigned int vcpu_size, unsigned int vcpu_align, struct modul= e *module) { + return kvm_init_with_dev(vcpu_size, vcpu_align, module, "kvm", KVM_MINOR); +} + +int kvm_init_with_dev(unsigned int vcpu_size, unsigned int vcpu_align, + struct module *module, const char *dev_name, int minor) +{ + char *cache_name; int r; int cpu; =20 + kvm_dev.minor =3D minor; + kvm_dev.name =3D kstrdup_const(dev_name, GFP_KERNEL); + if (!kvm_dev.name) + return -ENOMEM; + /* A kmem cache lets us meet the alignment requirements of fx_save. */ if (!vcpu_align) vcpu_align =3D __alignof__(struct kvm_vcpu); + + r =3D -ENOMEM; + cache_name =3D kasprintf(GFP_KERNEL, "%s_vcpu", dev_name); + if (!cache_name) + goto err_dev_name; kvm_vcpu_cache =3D - kmem_cache_create_usercopy("kvm_vcpu", vcpu_size, vcpu_align, + kmem_cache_create_usercopy(cache_name, vcpu_size, vcpu_align, SLAB_ACCOUNT, offsetof(struct kvm_vcpu, arch), offsetofend(struct kvm_vcpu, stats_id) - offsetof(struct kvm_vcpu, arch), NULL); + kfree(cache_name); + if (!kvm_vcpu_cache) - return -ENOMEM; + goto err_dev_name; =20 for_each_possible_cpu(cpu) { if (!alloc_cpumask_var_node(&per_cpu(cpu_kick_mask, cpu), @@ -6543,7 +6561,7 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align,= struct module *module) if (r) goto err_irqfd; =20 - r =3D kvm_async_pf_init(); + r =3D kvm_async_pf_init(dev_name); if (r) goto err_async_pf; =20 @@ -6555,7 +6573,7 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align,= struct module *module) kvm_preempt_ops.sched_in =3D kvm_sched_in; kvm_preempt_ops.sched_out =3D kvm_sched_out; =20 - kvm_init_debug(); + kvm_init_debug(kvm_dev.name); =20 r =3D kvm_vfio_ops_init(); if (WARN_ON_ONCE(r)) @@ -6597,6 +6615,8 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align,= struct module *module) for_each_possible_cpu(cpu) free_cpumask_var(per_cpu(cpu_kick_mask, cpu)); kmem_cache_destroy(kvm_vcpu_cache); +err_dev_name: + kfree_const(kvm_dev.name); return r; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init); @@ -6622,5 +6642,8 @@ void kvm_exit(void) kvm_vfio_ops_exit(); kvm_async_pf_deinit(); kvm_irqfd_exit(); + + kfree_const(kvm_dev.name); + kvm_dev.name =3D NULL; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_exit); --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE0174746CA; Wed, 12 Aug 2026 15:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549045; cv=none; b=ir2GQTJgsWvHtfd86EjO6pm2wccKhpjVnTPgNDYFIE8g0i6zo4/tyJLp9CPj2BSghlEy0SfkcQE9MlXHkwuiFfh4HCKC4rJQeogjExZWG+NuxncaqFuXyyhPpBIECzRq/4VC6mqU2A2MINX8yqNZLwIt6UPXBLDEaZgAIcQVwCw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549045; c=relaxed/simple; bh=o+ArixxhzEvIDUW0yFjfwDcFjlvFs2gFgI8Y/2J+6kQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TktGk/KJzMB7TEmGtl+3v2TxMQl65egwXifh2Lsd2FxZNhAxHCl7bWMMWPrd1h7OEF6lOY/ak4Gd+FCgqFTyl2mDQU1UnrKRPZIbp2q7Xif1j171kbiLMpGKX0GW6dhNup1z/6/D4SWhQoPgz5DrTDJCjOMZgqspl9zvKQb3NMw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=pM73YVOr; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="pM73YVOr" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1dBi3717242; Wed, 12 Aug 2026 15:36:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=cl76esLcWjymMPYNC 2q4aJds0FA9d90E9bv8u7T8wTk=; b=pM73YVOraZ9L4kLBoj7bQdvCw+V+QsHuH IrxygcItbD1PcAMFNwfUnvcjYarpJuQNiSNnQsK5d+EOnkbCO9SBdNbZMf82N0vn zqUdOTBMxyDIwNSsKpAtkq8SGD/5/z6G9G0rEBluf9S7u8DLwh/FqYkowkWDky/w IuNgGKFRt9B91ogZOGWeYIFKcw/2ReaXPs8V0QVdDcDwgn7IaT9sVViE0a+TGCfS 0LCxR4WFVsXgTtlEJQKXE5Fb5F90YpomIjvc7f/GtP6eaH6P0Yle/ea4KzZxNJ44 iY5bMfJeYtQdU1y6BUdqf305mIWdj57MA9IneA8gpcZfMZ/X0DP2w== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvnwads4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQHmj011835; Wed, 12 Aug 2026 15:36:37 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq6usv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaXaZ23724610 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:33 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 91DE72004F; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3C89A2004D; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 03/33] KVM: Allow KVM implementations to switch off MMIO independent of Kconfig Date: Wed, 12 Aug 2026 17:35:59 +0200 Message-ID: <20260812153631.3376090-4-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7c9306 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=-AqJVl6EvvwGbS2dlloA:9 X-Proofpoint-GUID: qeZTNIEAxa3y3BEKND009Oy6PQoaMMSY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1yLHaTv0/gQA AMe15tA3bTGbhZnvvcori5MJYebtr9sb1pUlWB8Ufe2n5CXZpLh4c01kq/w88si3lLSP7hm731N gdlQgkRlnVFKKlImeOiVbFIUrwuKEaCXXT4h9aMQnZC4FEtaPxlbjNkEQn9Ju5iyv4WH7jXPxK7 PDzPNN/CVOC/eLgmhqOuOKGjCAp585gt5oSsUTw+bGQOkg5T6h6pXwPlq8ZtH7H+txTDn1TxgAb bb/Phj7J+f26hKARCjJE7uhVX+5lTTRqBKKjFMf2t5QVvaTuYu3tWcy+gZYOzG9JVSWAY66wpYZ f6q/uWCkg3aku/jLvj2u9J7k9GQuUWNzmcRxuUfuLNEbeKgzxndxAz9ovdjuL4rUWJj7vjZwtl+ Ci8qxxE2v3M+WcVw/5LKOmZ1OgcuD90pyIzg+tyl0C6AxjeHqfZrhSeqeS8C2Zyc2qr0j0vONO5 tyZ9mCQQc1ALfU1eQcw== X-Proofpoint-ORIG-GUID: M6iwbjeeBzLS_qIaPi5H-SJ8HN70rNMe X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX+h4ZucUGWXEY Zkqpw0M33aL9ebdwLcLV+rQfSXMyq4uvM/OMagy2Lzg9UkDofeaAf8hGIPFkcXDYQMx91W9GFoa 7yaBcIPGPGYaDmk5wXZOponH040f7rg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Only defining KVM_MMIO is not flexible enough for multi-KVM systems where one KVM implements MMIO but others do not. Solve this by additionally testing for the non-existence of KVM_NO_MMIO before including MMIO code to KVM. Signed-off-by: Steffen Eiden --- virt/kvm/coalesced_mmio.c | 4 ++++ virt/kvm/coalesced_mmio.h | 2 +- virt/kvm/kvm_main.c | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c index 6b1d90161099..8ff9d9a6f47a 100644 --- a/virt/kvm/coalesced_mmio.c +++ b/virt/kvm/coalesced_mmio.c @@ -15,6 +15,8 @@ #include #include =20 +#ifndef KVM_NO_MMIO + #include "coalesced_mmio.h" =20 static inline struct kvm_coalesced_mmio_dev *to_mmio(struct kvm_io_device = *dev) @@ -188,3 +190,5 @@ int kvm_vm_ioctl_unregister_coalesced_mmio(struct kvm *= kvm, */ return 0; } + +#endif /* ifndef KVM_NO_MMIO */ diff --git a/virt/kvm/coalesced_mmio.h b/virt/kvm/coalesced_mmio.h index 36f84264ed25..826af421a5be 100644 --- a/virt/kvm/coalesced_mmio.h +++ b/virt/kvm/coalesced_mmio.h @@ -11,7 +11,7 @@ * */ =20 -#ifdef CONFIG_KVM_MMIO +#if defined(CONFIG_KVM_MMIO) && !defined(KVM_NO_MMIO) =20 #include =20 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 0b34477bf325..a5dcb38e80db 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4063,7 +4063,7 @@ static vm_fault_t kvm_vcpu_fault(struct vm_fault *vmf) else if (vmf->pgoff =3D=3D KVM_PIO_PAGE_OFFSET) page =3D virt_to_page(vcpu->arch.pio_data); #endif -#ifdef CONFIG_KVM_MMIO +#if defined(CONFIG_KVM_MMIO) && !defined(KVM_NO_MMIO) else if (vmf->pgoff =3D=3D KVM_COALESCED_MMIO_PAGE_OFFSET) page =3D virt_to_page(vcpu->kvm->coalesced_mmio_ring); #endif @@ -4904,7 +4904,7 @@ static int kvm_vm_ioctl_check_extension_generic(struc= t kvm *kvm, long arg) case KVM_CAP_ENABLE_CAP_VM: case KVM_CAP_HALT_POLL: return 1; -#ifdef CONFIG_KVM_MMIO +#if defined(CONFIG_KVM_MMIO) && !defined(KVM_NO_MMIO) case KVM_CAP_COALESCED_MMIO: return KVM_COALESCED_MMIO_PAGE_OFFSET; case KVM_CAP_COALESCED_PIO: @@ -5245,7 +5245,7 @@ static long kvm_vm_ioctl(struct file *filp, break; } #endif -#ifdef CONFIG_KVM_MMIO +#if defined(CONFIG_KVM_MMIO) && !defined(KVM_NO_MMIO) case KVM_REGISTER_COALESCED_MMIO: { struct kvm_coalesced_mmio_zone zone; =20 @@ -5580,7 +5580,7 @@ static long kvm_dev_ioctl(struct file *filp, #ifdef CONFIG_X86 r +=3D PAGE_SIZE; /* pio data page */ #endif -#ifdef CONFIG_KVM_MMIO +#if defined(CONFIG_KVM_MMIO) && !defined(KVM_NO_MMIO) r +=3D PAGE_SIZE; /* coalesced mmio ring page */ #endif break; --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 274E2476CDE; Wed, 12 Aug 2026 15:37:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549053; cv=none; b=QSO71PW62+XOT4UWRZa7KQ2NcK6UdRjpdrkDXfaSztS6TZcBEp2M9sgbt1bpDLtcqRtC0l/HvJchKSUTpBiI2XwPmMTZzasLq0GVuuJCFNK8grMb3tyEXfEG/fCxxrQXjk+xUVY2H/W3EK0TL1l7d8JHbBSvQqUBkmt3iHHAwTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549053; c=relaxed/simple; bh=CdRBGytXIXa1zx9eXOvGAuzKgsrn2BprzimKUV3/4dI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H1VU/BWeQNpvWgsA3ZbGooVl4tw5ofNHpFgchyoQ4xeaqE5k9WAQTKRb7h1cWyMABayVfGNO88zc5UH5mk4AvDSvWXlVG2st8J2loFLJW3T7Snvk9HL5DH6+61jTWJOgn+pwircpMm1V97sZ/qIdycqgK6pTI5tc7D0mblnKmIk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=c/UNId0h; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="c/UNId0h" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1mmH3717448; Wed, 12 Aug 2026 15:36:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=eGPgAnjtKT6ftTAM6 aOkUfJetBSRY7Y8hfEs8FIUvWE=; b=c/UNId0hpEOA58rnxwOmyntRiuISlwrDT FiZh4n6pQ1CpXnj0eux/G2tuDsHBEo/8Me1UTJV1UCzQsI1IK8/L0cI/L9bmjxzt /o3c24i1XAkfiT7O5uzYgOVupWIrVZ/m1qcsVwHMPXfw7dpgie2Pu7xsIOBiFsl1 w+F2MUpLaIQVKR6jm00JYCfGAV6WQr6p48VFxcLwTTl2Q3Etfm8tXGO05C7yCtTw EuNu9WFaUn1Ic7pyuOJ/8cDSlHx4rluywr5aQaDRVN0iV7omkilOkSEXqrE2sODL U37qOxjzO8vBIirJd4zDkb77B5GJDrHcmNYnnj7ktHv1/ANO3BgpQ== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvnwads8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQHri024761; Wed, 12 Aug 2026 15:36:38 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpj2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaYrf48693682 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:34 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E92C720049; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 97B192005A; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 04/33] arm64: Use proper include variant Date: Wed, 12 Aug 2026 17:36:00 +0200 Message-ID: <20260812153631.3376090-5-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7c9307 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=d3WjOe2bLlXSZPWdUOEA:9 X-Proofpoint-GUID: P6gFbGSDggD4L-zZXBOItFsSrc5gX5tC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX6gr+77HpB1d6 En16SZVNMJQwSeEHCRyYKjjjz0E5vjNOJeQVSNTW1jDHKnZLqDXwFoTurRdVH9Ls2xckIC04U3A IOC/idlGzKGOE6F6uv15feSJT0tRHr3sls/b/dyyMOgvhYUjlOWxPbeZl1sNYuiOgiLNK/6+OK2 xi5TTYTRMCZ9J7xkoaIw7w3E+jnWzKg8YaXX9F8Kyv7f6ma4Kj9pBxEr0cLsTaBNaK4dduFM8il b2e0U8xPZMsQAWWzk6il+EHquGlnnJHTY+KkBhF3fWvQXFFAfBcVQSoF1wm+DxWCgaxE/xlT7GB K9hRYDYgsT8KMTt2jSIZ97JdPim9yEOx3JnmTi6/o5rvbVWVnf95bD0mscyVBvq86bOtCq0cI5Q 2e/l7gBdm+mCbYuwIgZQtdPu+uxqRLakEkleFA3nfCgNJjrtFEG7D6nluTTdx2iSh3FO4b8LseR jEvU+mNpNOHfKEoICgA== X-Proofpoint-ORIG-GUID: peK-E1XwVJ35p7lF-ahfEIF6XNutEUJr X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9MB+Ec1YYNIS dK4Cn6GUYAgzdaakqy06b088+y+upwIVb+xJ4CnytLWdf4Tu5uHSSlYbakjaMeuBmiSjM9F5mvT CSvXeSzcxRTQ87e0Due9prEpa56IyI4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Use <> for including the sysreg header as it is not discoverable from the current directory. Fixes: c07d8017bceb ("arm64/sysreg: Enable automatic generation of system r= egister definitions") Signed-off-by: Steffen Eiden Acked-by: Marc Zyngier --- arch/arm64/include/asm/sysreg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysre= g.h index 7aa08d59d494..4bfdac9401bd 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -173,7 +173,7 @@ * come from here. The header relies on the definition of sys_reg() * earlier in this file. */ -#include "asm/sysreg-defs.h" +#include =20 /* * System registers, organised loosely by encoding but grouped together --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D64074746D7; Wed, 12 Aug 2026 15:37:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549041; cv=none; b=jH95u47j/WovJCh1Gn8Xt8z1cHSkCt+Hxn9rmCByylRIi/g471lL5WlnEx1ncZpP75B+9ECTdKYhiEVRFGg82RDcPaBXcOmQDTqckOWm28AdqkUPvIDHSG8uEbvGC6L/nsjwPmU988NJWZKmj5oAli6sng9eTJISX9jjeB6d8pQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549041; c=relaxed/simple; bh=31tWlAySrS7NW+tnf3QuyeIDEyQzztjvH4O6gocnGJI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kX1XRLzlL05ncCKQ3qt5mnPa/l6mFr1KsazZSMyBVHGTQ+rt/UAGwwZlM1SPkw6CCfO0x8GvVIM44fuWUiC4cLqTJmgAxDV63oyLvL5OzvWNnSDG93GfOVwmhpgsPqNbQfOwnJmytyvbz6HVMje6f8UUL1T/bWlYURawQRBdOs0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=rlEXqtgP; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="rlEXqtgP" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1pHC3640585; Wed, 12 Aug 2026 15:36:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=rJrLyzddm9CEpE2TZ Zohj7jwwyh45qkZ85dZIflvNdE=; b=rlEXqtgPpJxQnGEBAEYtV8jtCkb5LbI0W GOy1nWe7BvFfcByl9X8O3mm1mBNe+AW11AA4/fL8GKzQ6zof6StHFLp/R2ADbcrN xG2JPIVQvskACbkfTL/cG1a0VqEkNaLXG0EZnwTiMnQzGPQA6KcCabVX9zFpgLJ7 DEBnriGwMii/SMfxHvsxjGeq5MDKWCZDbLYM8KAyYTZkUjtBHn5qSntSYnY0Bgm1 fKJXS8CfO4e1NfTJWQOcKf9luQXdW0VV1MYDmehSfxL7sOtTApPtU7ADJKys1oXM xKzdiljjDq9BTJY0lN6hkpb6b4IlBZk/HdE4xIs5nZosVQN1pH+yA== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7bg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFBKqN018660; Wed, 12 Aug 2026 15:36:38 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5w6tcx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaYE148693686 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:34 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 46D6220040; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EF1642004D; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:33 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 05/33] arm64: ptrace: Use constants for compat register numbers Date: Wed, 12 Aug 2026 17:36:01 +0200 Message-ID: <20260812153631.3376090-6-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: XxRMhA5t4KAqrWvUZzivpLuljWJk0Lzz X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c9308 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=8sKaXpLx0aSSeG29UzUA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9zkNOYox4fBp Uuvky4U1aRpnkBfvNenjPz4iMYWUKb1jEzdwn/u9z894jXTideB3xIJWqGXGGibH5hQ0xlGI0OD u/TwQu0htUNNtcy1VlAGbVCqpUA81OpNJfbT0QyQNo530zVBuu7n4H4wZJ16fyRoRfA0+Fgco1o rlZHaI6N3qMHkK0q735j9BJKETpSvEqznxUF94aEVOV/CksLd5UfMVH2flvRN3NBaGSNJGuCGgw CTrk7Nz+K2Cw1ObcDXLoYsPzgWHGufNt1kA7H1tipK0N5DsA0hVQZiPnHW2vuCHbt4WDQB6EMkM FrEJCmjof74ri367kWN85/N1asbhdAxI9tZnrVA5yrY7yErEHHCC4ns/uezFi9BPNwSRmkjjcd8 Bee6+ISQ1wDouUfGjgE1j5xXYy9nBUyqYrYIxogHGPC7NrnMO2WD/5anaLZERDTKtQia6iqfwHz dMOetXE2cGDDGRmw2Vg== X-Proofpoint-ORIG-GUID: dbaGJcJQZP5wv0qSovhsnwwl7zprjDUF X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX+Oc2q8yfDASJ zjOhW+KMaKrLuIwGsAxixDhLVAQHnmVBxkAIJUvDpdJfjT0jhnBNfFZy3w+E/2sqBCgbPSZQiOg ggAY2IN3+EC3hr1L+ApLaVSxFijskKw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Define an enum to determine the register number for the mapping from AArch32 and AArch64 registers. This allows for a more flexible use of the register mappings. Signed-off-by: Steffen Eiden Reviewed-by: Marc Zyngier --- arch/arm64/include/asm/ptrace.h | 60 ++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrac= e.h index f7dc5fb9427d..49a83a0636b9 100644 --- a/arch/arm64/include/asm/ptrace.h +++ b/arch/arm64/include/asm/ptrace.h @@ -102,26 +102,48 @@ #define COMPAT_USER_SZ 296 =20 /* Architecturally defined mapping between AArch32 and AArch64 registers */ +enum { + __compat_fp =3D 11, + __compat_sp =3D 13, + __compat_lr =3D 14, + __compat_sp_hyp =3D 15, + __compat_lr_irq =3D 16, + __compat_sp_irq =3D 17, + __compat_lr_svc =3D 18, + __compat_sp_svc =3D 19, + __compat_lr_abt =3D 20, + __compat_sp_abt =3D 21, + __compat_lr_und =3D 22, + __compat_sp_und =3D 23, + __compat_r8_fiq =3D 24, + __compat_r9_fiq =3D 25, + __compat_r10_fiq =3D 26, + __compat_r11_fiq =3D 27, + __compat_r12_fiq =3D 28, + __compat_sp_fiq =3D 29, + __compat_lr_fiq =3D 30, +}; + #define compat_usr(x) regs[(x)] -#define compat_fp regs[11] -#define compat_sp regs[13] -#define compat_lr regs[14] -#define compat_sp_hyp regs[15] -#define compat_lr_irq regs[16] -#define compat_sp_irq regs[17] -#define compat_lr_svc regs[18] -#define compat_sp_svc regs[19] -#define compat_lr_abt regs[20] -#define compat_sp_abt regs[21] -#define compat_lr_und regs[22] -#define compat_sp_und regs[23] -#define compat_r8_fiq regs[24] -#define compat_r9_fiq regs[25] -#define compat_r10_fiq regs[26] -#define compat_r11_fiq regs[27] -#define compat_r12_fiq regs[28] -#define compat_sp_fiq regs[29] -#define compat_lr_fiq regs[30] +#define compat_fp regs[__compat_fp] +#define compat_sp regs[__compat_sp] +#define compat_lr regs[__compat_lr] +#define compat_sp_hyp regs[__compat_sp_hyp] +#define compat_lr_irq regs[__compat_lr_irq] +#define compat_sp_irq regs[__compat_sp_irq] +#define compat_lr_svc regs[__compat_lr_svc] +#define compat_sp_svc regs[__compat_sp_svc] +#define compat_lr_abt regs[__compat_lr_abt] +#define compat_sp_abt regs[__compat_sp_abt] +#define compat_lr_und regs[__compat_lr_und] +#define compat_sp_und regs[__compat_sp_und] +#define compat_r8_fiq regs[__compat_r8_fiq] +#define compat_r9_fiq regs[__compat_r9_fiq] +#define compat_r10_fiq regs[__compat_r10_fiq] +#define compat_r11_fiq regs[__compat_r11_fiq] +#define compat_r12_fiq regs[__compat_r12_fiq] +#define compat_sp_fiq regs[__compat_sp_fiq] +#define compat_lr_fiq regs[__compat_lr_fiq] =20 static inline unsigned long compat_psr_to_pstate(const unsigned long psr) { --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FC6B470135; Wed, 12 Aug 2026 15:37:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549046; cv=none; b=hIzrRE4sPvsiTnkyh9sNaQARelTGDeo3YFBiq1VGcqU8wdeFtP7GI3ffhso6FMbhsMtRCRVc/Z21SKYO28mfXPFV8n8tnTb/RsSk+nQSPbAuYmv+dhOOs/24clo3F6wj29pmzh1+lqv2TImyDb7oO+ASEQl/7iC1/Di60H0Z7LQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549046; c=relaxed/simple; bh=TVQaQmRnmBhta/zgdtQYlEzfKdGrKE5RbZXcZPD+9G0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WRMRUdkbI16RZAvcCVrTz6hJZ6+J3kpcj3/JQFrlP0SQLDlGZjLVuIFlrS0Ug9r6azG1XrwEVF13CDtsO4Yq8B7Ql0LsN6/ZiH+Wrx8mBJyYeJm006JbXxNJEgBUTsuclBU2wtKuPM13IfzneVTpcB2BcdNk8FIiKPRRgdqZjNk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=dF6GEtXA; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="dF6GEtXA" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1eUK2585741; Wed, 12 Aug 2026 15:36:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=xalLNEWrJY6441oMy g+rTz0yPpUDhYP9aCyCGhuBalE=; b=dF6GEtXAyunRzG27I6sfAU4H6Z1+l8wSt DOONnbesqfFMOmwjAt7lGeKlOTXH1hT89w66xpEZURLuikLC1Tp/wEexrKp314J+ aNpTCWFIlUEQSuJL0s6oZ5nWInKSd5DxoRqubycOZ9YLZt/dPgjcUYwLCZ7iC/BS 4budAHIaLJMEhHb3w6MH1rJOI/565UzM4Sqq7Re90fdALxE+F9W9vdDHwtpw3sLY eMhI5BUa8SUIKUNgvJnkeVxw3/VMa4mso8Cuu9GZFmIoUy29lOFUShANfoDpVtw+ 7ujVGE2YOIFacnK7cR+sm51Oko5lSnrPqmZWmrLFHK5VVP3CivLxg== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fyb23usfx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQOux013787; Wed, 12 Aug 2026 15:36:38 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h6mjw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaYAU39846232 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:34 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A821F20040; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 569112005A; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 06/33] arm64: sysreg: Convert SPSR_ELx to automatic register generation Date: Wed, 12 Aug 2026 17:36:02 +0200 Message-ID: <20260812153631.3376090-7-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7c9308 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=qAnUzrOnmDNqMeXR4cMA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXzLOSztFwq1rM TLnTbKzxQ5PjPusYwkoWRufpDgw4r1EUjC8ntBqRMMx1yD/fGdCzH1G/ErXcPjY6aXvwhkrY31/ D2UEujNpUvrZp4YoP/YqX6BZU0tPgk+gHhkrtxBQaX+rhxTumhrF6nfXpa4lkN7+GEUXfDa9/07 mQHm0Qm1rz0E9+k93faGk/QA2eoq/YVHFVSEtqjxczj3spQkdTdF99TR1f3hXNRvHBGzxGoI8BG AO0IihWvwuL1rbcIlYIju5wMCq4ZXBTL6wdrlWlHUukiQhZU0jt62bSzhZZi/5cafnC802CmBXD hsVvUjgo5YTsloSyOmDTkWN9pjCiNIYB3UwhYiR0FLGUdzEIS2r5aDvE+CAP+MHiEge6deZPQyk bu+SZn2mWj36P0USBuu4TuTNSC0zeNcrG0WsRzF22VwQmr8WER0S/1sBobftBjx/vYrIVLOt5Pf 95CG+TGW5DW4bsgFgMA== X-Proofpoint-ORIG-GUID: mV2r1km3Yvu7iM34gEtAqFW3U6R-B2Te X-Proofpoint-GUID: K95bFIa4deShqD3jNtm-8ub_33cdind6 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX31fcQ2gX0qhk oN0YLipqK4Pw3wY/guravnvRmVboeop4uU8QYkju15JDlV9+rkIy1BuZTr67icpl+kcc0raFtxS ziPxhSU3vzGQLlnGk2Fmraze8iohyFw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Convert SPSR_EL{1, 2, 12} to automatic register generation as per DDIO616 2026-06. No functional change. Signed-off-by: Steffen Eiden --- arch/arm64/include/asm/sysreg.h | 3 --- arch/arm64/tools/sysreg | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysre= g.h index 4bfdac9401bd..1aa601c95188 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -295,7 +295,6 @@ #define SYS_APGAKEYLO_EL1 sys_reg(3, 0, 2, 3, 0) #define SYS_APGAKEYHI_EL1 sys_reg(3, 0, 2, 3, 1) =20 -#define SYS_SPSR_EL1 sys_reg(3, 0, 4, 0, 0) #define SYS_ELR_EL1 sys_reg(3, 0, 4, 0, 1) =20 #define SYS_ICC_PMR_EL1 sys_reg(3, 0, 4, 6, 0) @@ -518,7 +517,6 @@ #define SYS_VTTBR_EL2 sys_reg(3, 4, 2, 1, 0) =20 #define SYS_HAFGRTR_EL2 sys_reg(3, 4, 3, 1, 6) -#define SYS_SPSR_EL2 sys_reg(3, 4, 4, 0, 0) #define SYS_ELR_EL2 sys_reg(3, 4, 4, 0, 1) #define SYS_SP_EL1 sys_reg(3, 4, 4, 1, 0) #define SYS_SPSR_irq sys_reg(3, 4, 4, 3, 0) @@ -604,7 +602,6 @@ #define SYS_BRBCR_EL12 sys_reg(2, 5, 9, 0, 0) #define SYS_TTBR0_EL12 sys_reg(3, 5, 2, 0, 0) #define SYS_TTBR1_EL12 sys_reg(3, 5, 2, 0, 1) -#define SYS_SPSR_EL12 sys_reg(3, 5, 4, 0, 0) #define SYS_ELR_EL12 sys_reg(3, 5, 4, 0, 1) #define SYS_AFSR0_EL12 sys_reg(3, 5, 5, 1, 0) #define SYS_AFSR1_EL12 sys_reg(3, 5, 5, 1, 1) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 94bf065c8ac7..6e625a05c477 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -401,6 +401,54 @@ Res0 3:1 Field 0 SO EndSysreg =20 +SysregFields SPSR_ELx +Res0 63:37 +Field 36 UNIJ +Field 35 PACM +Field 34 EXLOCK +Res0 33 +Field 32 PM +Field 31 N +Field 30 Z +Field 29 C +Field 28 V +Res0 27:26 +Field 25 TCO +Field 24 DIT +Field 23 UAO +Field 22 PAN +Field 21 SS +Field 20 IL +Res0 19:14 +Field 13 ALLINT +Field 12 SSBS +Field 11:10 BTYPE +Field 9 D +Field 8 A +Field 7 I +Field 6 F +Res0 5 +Enum 4:0 M + 0b0000 EL0 + 0b0100 EL1t + 0b0101 EL1h + 0b1000 EL2t + 0b1001 EL2h +EndEnum +EndSysregFields + +Sysreg SPSR_EL1 3 0 4 0 0 +Fields SPSR_ELx +EndSysreg + +Sysreg SPSR_EL2 3 4 4 0 0 +Fields SPSR_ELx +EndSysreg + +Sysreg SPSR_EL12 3 5 4 0 0 +Mapping SPSR_EL1 +EndSysreg + Sysreg ID_PFR0_EL1 3 0 0 1 0 Res0 63:32 UnsignedEnum 31:28 RAS --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1D3F476064; Wed, 12 Aug 2026 15:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549043; cv=none; b=ELfdpF9MG3k6Du/BbPoPwYOdGLm5dreLqS+Cyy3vVZSiixzgIOsB26QxKUF+Fos+x21qqNS32UyQwUO/zAmpi1bLdvTWwKth08sPaY5xmJnDO3NR30CP2Jz2d2oTBe9U30yhPWb0U4xFzSgshwmM9vYCLmCZutVd8ZupGdHL0VY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549043; c=relaxed/simple; bh=n3z6+ADK4s80ht8PPFuqP9gqlcBgx+fAfILpx9ECUCM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WoYi9JLnAbosA76rSTpK2xcdSCGiDrNWmKW7b8N36mVuebwbhyiJJ+y0tLkUApgkvkL83f1gRJBYFPd+C810CvK0nWImDxjt9MQOZjz8WOU2BdN/p65j+2eF+NlCio5WWJbV5B/dUkgDHxib9WAhE34bCa9QxC2XYpXfcOx/eeU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=fjvLmaSQ; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="fjvLmaSQ" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1RsT3686399; Wed, 12 Aug 2026 15:36:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=jbrY1Z1fuhnAvoemp nnGD1Lf2vQL6r8+6XRighIy7Wg=; b=fjvLmaSQZXjUt+B6EJARGTC3HCCh5Ohde Lg+I/LxNRt5spxV25ivPKbLSu2V27Mtqp0mxmYFL34cLpxcFtZy/yfcpVvubbj7p 5QbwrIFuM2Vv8VvxB0ow4EqWxx8j3qYVoxcZTCwdDmJGiWTDuRfuyypclUXdz6R4 kfM2wHAaqueEGXBcYsoRqqwc6edc0dK4HnSd8K6nbm2k/aJ/Fvrfcwrh8znvTfBC ALneoS4GMlCnax3NPoencz6/1yIFFGSY5Fypks4ELVuMAT0QqXD1fw56fhB5EeJx xhn8fFhklGK8Zf7SZELLCmk6jXXJg3eaEMhPZeZT957RiWrM3szpw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9th-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQTf4024859; Wed, 12 Aug 2026 15:36:39 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpj6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaZ1M38469992 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:35 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F3F7820040; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ADC2B2004E; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:34 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 07/33] KVM: arm64: Access elements of vcpu_gp_regs individually Date: Wed, 12 Aug 2026 17:36:03 +0200 Message-ID: <20260812153631.3376090-8-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8OZMeRXGegtI QKyiLvL/lhjkU+DTakyaX5JPV23g0btqovRLufAVQ2KCcWJlLZOXo0ynzHhOe8m9uGRnbDXgvVN yo8k6My/B4SZS7cTToa+6hxeNVoBEzmcnxZ3VaFNgKEYJtrPWArzFcxVcOtAuzAwd/XEOJc9mn9 M3niq6ELrET/8jzJcXkZx5Ld3a2LjUgDH4xEvG3Pbik90SP7Rm5xPfi3OUO/nVzIMvWiYfbrWZc oHjV+fCP2YOyqH+ZdPH87AI/Palcp4jTqIYTvd2CstMj0e5bXxcONiGX0mGr7DYBWvaC9x//K+h BxYbmGjSHkts6tckpj7q5v/iudL9ENhm2T67gqpYQMLyXOP3G00PeQCRxfGG9ujzXDoUGtGn2RF tppEhTEN0otcTAkmU5cwCwAgCZ2FnhBjhgoj/zCqr2FqRLozo6wgPWhaZrYpqvtxmPfypfy7OaS CzWceRwduf+Ptwv1XEA== X-Proofpoint-ORIG-GUID: X9rjb23duR4IfjNUTcfpdrjj0jqCZtrQ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX43IrGf2VWKvS NfEiNCjxD4TTpigsCCBWz+QDZmBYPtRTAUl1hx4RMB4SgGco2238u7Oz5qRpzhWcXDRkL+ifkHY h2SEifs+smlN0M0P+5TsTLJoQOWcZt8= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c9308 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=0bZ0xZpKCs-q1FEIZIEA:9 X-Proofpoint-GUID: Iv_hC1INciEPlHlkbETAoBX9hnqyvuJI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" While for arm64 the members of vcpu_gp_regs are allocated continuous this is not necessarily true for other architectures implementing ARM. Let vcpu_gp_regs() no longer return the address of the user_pt_regs in the vcpu context but the address of the gp-register array field in the user_pt_reg struct. Note, this change semantically excludes pc from the GPRs. No functional change. Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden Reviewed-by: Marc Zyngier --- arch/arm64/include/asm/kvm_emulate.h | 14 ++++++++------ arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/kvm/hyp/exception.c | 4 ++-- arch/arm64/kvm/hyp/include/hyp/adjust_pc.h | 4 ++-- arch/arm64/kvm/hyp/include/hyp/switch.h | 4 ++-- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/= kvm_emulate.h index a3c1928bdf74..8603766c1b4d 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -133,12 +133,12 @@ static inline void vcpu_set_vsesr(struct kvm_vcpu *vc= pu, u64 vsesr) =20 static __always_inline unsigned long *vcpu_pc(const struct kvm_vcpu *vcpu) { - return (unsigned long *)&vcpu_gp_regs(vcpu)->pc; + return (unsigned long *)&vcpu->arch.ctxt.regs.pc; } =20 static __always_inline unsigned long *vcpu_cpsr(const struct kvm_vcpu *vcp= u) { - return (unsigned long *)&vcpu_gp_regs(vcpu)->pstate; + return (unsigned long *)&vcpu->arch.ctxt.regs.pstate; } =20 static __always_inline bool vcpu_mode_is_32bit(const struct kvm_vcpu *vcpu) @@ -167,14 +167,14 @@ static inline void vcpu_set_thumb(struct kvm_vcpu *vc= pu) static __always_inline unsigned long vcpu_get_reg(const struct kvm_vcpu *v= cpu, u8 reg_num) { - return (reg_num =3D=3D 31) ? 0 : vcpu_gp_regs(vcpu)->regs[reg_num]; + return (reg_num =3D=3D 31) ? 0 : vcpu_gp_regs(vcpu)[reg_num]; } =20 static __always_inline void vcpu_set_reg(struct kvm_vcpu *vcpu, u8 reg_num, unsigned long val) { if (reg_num !=3D 31) - vcpu_gp_regs(vcpu)->regs[reg_num] =3D val; + vcpu_gp_regs(vcpu)[reg_num] =3D val; } =20 static inline bool vcpu_is_el2_ctxt(const struct kvm_cpu_context *ctxt) @@ -750,13 +750,15 @@ static inline void kvm_reset_vcpu_core(struct kvm_vcp= u *vcpu) pstate =3D VCPU_RESET_PSTATE_EL1; =20 /* Reset core registers */ - memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); + memset(vcpu_gp_regs(vcpu), 0, sizeof(vcpu_gp_regs(vcpu))); + *vcpu_pc(vcpu) =3D 0; + vcpu->arch.ctxt.regs.sp =3D 0; memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); vcpu->arch.ctxt.spsr_abt =3D 0; vcpu->arch.ctxt.spsr_und =3D 0; vcpu->arch.ctxt.spsr_irq =3D 0; vcpu->arch.ctxt.spsr_fiq =3D 0; - vcpu_gp_regs(vcpu)->pstate =3D pstate; + *vcpu_cpsr(vcpu) =3D pstate; } =20 /* PSCI reset handling for a vcpu. */ diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm= _host.h index 27fe0cd5b2d7..46c8d7928b3f 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1158,7 +1158,7 @@ struct kvm_vcpu_arch { #define vcpu_clear_on_unsupported_cpu(vcpu) \ vcpu_clear_flag(vcpu, ON_UNSUPPORTED_CPU) =20 -#define vcpu_gp_regs(v) (&(v)->arch.ctxt.regs) +#define vcpu_gp_regs(v) ((v)->arch.ctxt.regs.regs) =20 /* * Only use __vcpu_sys_reg/ctxt_sys_reg if you know you want the diff --git a/arch/arm64/kvm/hyp/exception.c b/arch/arm64/kvm/hyp/exception.c index 754e2dc1df54..0640c9ccaa3c 100644 --- a/arch/arm64/kvm/hyp/exception.c +++ b/arch/arm64/kvm/hyp/exception.c @@ -276,12 +276,12 @@ static void enter_exception32(struct kvm_vcpu *vcpu, = u32 mode, u32 vect_offset) switch(mode) { case PSR_AA32_MODE_ABT: __vcpu_write_spsr_abt(vcpu, host_spsr_to_spsr32(spsr)); - vcpu_gp_regs(vcpu)->compat_lr_abt =3D return_address; + vcpu_gp_regs(vcpu)[__compat_lr_abt] =3D return_address; break; =20 case PSR_AA32_MODE_UND: __vcpu_write_spsr_und(vcpu, host_spsr_to_spsr32(spsr)); - vcpu_gp_regs(vcpu)->compat_lr_und =3D return_address; + vcpu_gp_regs(vcpu)[__compat_lr_und] =3D return_address; break; } =20 diff --git a/arch/arm64/kvm/hyp/include/hyp/adjust_pc.h b/arch/arm64/kvm/hy= p/include/hyp/adjust_pc.h index 4fdfeabefeb4..a049983bd5c3 100644 --- a/arch/arm64/kvm/hyp/include/hyp/adjust_pc.h +++ b/arch/arm64/kvm/hyp/include/hyp/adjust_pc.h @@ -33,11 +33,11 @@ static inline void kvm_skip_instr(struct kvm_vcpu *vcpu) static inline void __kvm_skip_instr(struct kvm_vcpu *vcpu) { *vcpu_pc(vcpu) =3D read_sysreg_el2(SYS_ELR); - vcpu_gp_regs(vcpu)->pstate =3D read_sysreg_el2(SYS_SPSR); + *vcpu_cpsr(vcpu) =3D read_sysreg_el2(SYS_SPSR); =20 kvm_skip_instr(vcpu); =20 - write_sysreg_el2(vcpu_gp_regs(vcpu)->pstate, SYS_SPSR); + write_sysreg_el2(*vcpu_cpsr(vcpu), SYS_SPSR); write_sysreg_el2(*vcpu_pc(vcpu), SYS_ELR); } =20 diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/i= nclude/hyp/switch.h index 1ce7130e2549..a2a054fec2e2 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -470,7 +470,7 @@ static inline bool kvm_hyp_handle_mops(struct kvm_vcpu = *vcpu, u64 *exit_code) u64 spsr; =20 *vcpu_pc(vcpu) =3D read_sysreg_el2(SYS_ELR); - arm64_mops_reset_regs(vcpu_gp_regs(vcpu), vcpu->arch.fault.esr_el2); + arm64_mops_reset_regs(&vcpu->arch.ctxt.regs, vcpu->arch.fault.esr_el2); write_sysreg_el2(*vcpu_pc(vcpu), SYS_ELR); =20 /* @@ -902,7 +902,7 @@ static inline void synchronize_vcpu_pstate(struct kvm_v= cpu *vcpu) /* * Check for the conditions of Cortex-A510's #2077057. When these occur * SPSR_EL2 can't be trusted, but isn't needed either as it is - * unchanged from the value in vcpu_gp_regs(vcpu)->pstate. + * unchanged from the value in vcpu_cpsr(vcpu). * Are we single-stepping the guest, and took a PAC exception from the * active-not-pending state? */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 108A2353A68; Wed, 12 Aug 2026 15:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; cv=none; b=vGNs+g/7Stvv2Qk4zolEd1rE8jGDtGL1cHLOPDy83LoW5BEot7KWrCs6pdIGeY+7AflUZLNDgYjkq4qKw2bUZrn8P0oVEw9q7wgLoedX0t6V1bMCfk7NgA6FmicWTFFQi7yT9/vmpCkBbne0+bAKk1OWi3lHCzLVB2XMFSGJqRM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; c=relaxed/simple; bh=nAog0EW1+LivCtqNfgI+VvLyU1ueCFNXewjOzU5XYYg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F+E6PPR/bs0PDZFAWkwO+VhKX53i8q76xlVfam+u9JYoE+wPSH2l0jIMcbPsJEUvIiQHvcP+LPAYC2gu6DQeAXvEz4ANZ7xQJvEh1b6MiliDhioZdD9m0TuBfvn9iPUJEwd8vEW4Di1RJAqvJUwh1RKnbaDiSH+17Yet5xxLYmI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=ohJmm03j; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="ohJmm03j" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1Xow3640148; Wed, 12 Aug 2026 15:36:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=JxtsbiP8r+SDfpRgT wTkCOm9ZbFs+/3zIpu1J8HpaTo=; b=ohJmm03jzBLpCZ0IzV2pQmvfSRqNFFCGy EEC2OzbB7ybYsVfXRwSYTeOwT6EhGdsCYk3vFlixYFvDey4U7Zzr9fJCQy015gV/ uuLGPnQNfkFg/nALKZ5tobrPkhX2Q95cGkk5cOcXIzIlhnBInNP3b3QPL/LDQele d4nvcaYQ600Z+R2Z30Ga9wRL1XoaS9cYDvviLvd0wLWfZWH8q8G5thScNBVBPuaZ s7+SEDn/5fPsueTv9UScq8Ev5OAI7UXD/lp6VZbyFZQVweS91PYVTyaJ/5T7Mbwo 8ERmBfos2moBaQmyZtbB3gvgGnig0Br4vBy6AY22vHJpvcRSa2/Yw== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7bk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQGCC023666; Wed, 12 Aug 2026 15:36:39 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gejfy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaZHa38469994 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:35 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 60D502004E; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 100F720049; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 08/33] KVM: arm64: Use accessor functions for core regs Date: Wed, 12 Aug 2026 17:36:04 +0200 Message-ID: <20260812153631.3376090-9-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: E4KjWPvUIKy2GdSssJxif_wqjAQqWG4a X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c9308 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=5d8JqmD_1xC0DvqtPZgA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX2xiFpwfrIUWl um5r7iZrOi3BFKXpB5Evqik9EnwSn1AZ1bmD2bxlZdgNLNoElZKcaSvYXWEzHKCPyjcMKQ4AcHh XT6qhWIU/cgS/E5Js9hvYYZ/kaZepmdrjE40iAPaMd8ifx08j3GzF+924AOvGCGMW5FgnW/Lt/P YnwdWO97hEVN7VhoxEY1KfGkTb+D0tbdqlCxmj2hDy/0ge3B0Ob/NCA6Nj9mgv1uUk1ProQ24yI B0XFVi9SUv+fcVno7gpWFaPDsJVtllblz4rrGqryya08nbGmHpxBsKoUSSOXtHawxfw2AJWSHbQ FtQZ104yK158gQ7y7bg2h//4chAAm5KhXRnkbCM/7Dqop29iwLNHIbRGTx8bGzqZixyY4aMCRv2 H0XBw+zgKiyOQIQoKjLhpcQ1I3P0GWkOKWdzGThcWS5VHexXsbPmid6bYt9H5nVbXFfxODlwts7 t1JAkKLgnzT82L3NLuw== X-Proofpoint-ORIG-GUID: _RBEguZpJkNmM7TPcpt_Cex4wt-FFNGi X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXxogeRCdhsNNt CunPFpJTWAPcEP6Sj68HWJTzCUUGr/0aQuXlq6mx78aEOqagPTZM1Q+f0AqFt9MpkggwEmS/B/e /bJo5p/5EBTkKm0an30+KnF5QlK84ME= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Instead of accessing the value directly use assessor function that abstract the actual location of the register values. Add a helper function to reset fpsimd registers. Enable other KVM implementations to reuse this code. No functional changes. Signed-off-by: Steffen Eiden --- arch/arm64/include/asm/kvm_emulate.h | 34 ++++++++++++++++++++++++++-- arch/arm64/kvm/guest.c | 16 ++++++------- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/= kvm_emulate.h index 8603766c1b4d..b31d50bdf59e 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -141,6 +141,31 @@ static __always_inline unsigned long *vcpu_cpsr(const = struct kvm_vcpu *vcpu) return (unsigned long *)&vcpu->arch.ctxt.regs.pstate; } =20 +static __always_inline unsigned long *vcpu_sp_el0(struct kvm_vcpu *vcpu) +{ + return (unsigned long *)&vcpu->arch.ctxt.regs.sp; +} + +static __always_inline u64 *vcpu_sp_el1(struct kvm_vcpu *vcpu) +{ + return __ctxt_sys_reg(&vcpu->arch.ctxt, SP_EL1); +} + +static __always_inline __u128 *vcpu_vreg(struct kvm_vcpu *vcpu, int n) +{ + return &vcpu->arch.ctxt.fp_regs.vregs[n]; +} + +static __always_inline __u32 *vcpu_fpsr(struct kvm_vcpu *vcpu) +{ + return &vcpu->arch.ctxt.fp_regs.fpsr; +} + +static __always_inline __u32 *vcpu_fpcr(struct kvm_vcpu *vcpu) +{ + return &vcpu->arch.ctxt.fp_regs.fpcr; +} + static __always_inline bool vcpu_mode_is_32bit(const struct kvm_vcpu *vcpu) { return !!(*vcpu_cpsr(vcpu) & PSR_MODE32_BIT); @@ -737,6 +762,11 @@ static inline void vcpu_set_hcrx(struct kvm_vcpu *vcpu) } } =20 +static inline void kvm_reset_fpsimd(struct kvm_vcpu *vcpu) +{ + memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); +} + /* Reset a vcpu's core registers. */ static inline void kvm_reset_vcpu_core(struct kvm_vcpu *vcpu) { @@ -752,8 +782,8 @@ static inline void kvm_reset_vcpu_core(struct kvm_vcpu = *vcpu) /* Reset core registers */ memset(vcpu_gp_regs(vcpu), 0, sizeof(vcpu_gp_regs(vcpu))); *vcpu_pc(vcpu) =3D 0; - vcpu->arch.ctxt.regs.sp =3D 0; - memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); + *vcpu_sp_el0(vcpu) =3D 0; + kvm_reset_fpsimd(vcpu); vcpu->arch.ctxt.spsr_abt =3D 0; vcpu->arch.ctxt.spsr_und =3D 0; vcpu->arch.ctxt.spsr_irq =3D 0; diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index b01d6622b872..773f6c8e5026 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -134,19 +134,19 @@ static void *core_reg_addr(struct kvm_vcpu *vcpu, con= st struct kvm_one_reg *reg) KVM_REG_ARM_CORE_REG(regs.regs[30]): off -=3D KVM_REG_ARM_CORE_REG(regs.regs[0]); off /=3D 2; - return &vcpu->arch.ctxt.regs.regs[off]; + return &vcpu_gp_regs(vcpu)[off]; =20 case KVM_REG_ARM_CORE_REG(regs.sp): - return &vcpu->arch.ctxt.regs.sp; + return vcpu_sp_el0(vcpu); =20 case KVM_REG_ARM_CORE_REG(regs.pc): - return &vcpu->arch.ctxt.regs.pc; + return vcpu_pc(vcpu); =20 case KVM_REG_ARM_CORE_REG(regs.pstate): - return &vcpu->arch.ctxt.regs.pstate; + return vcpu_cpsr(vcpu); =20 case KVM_REG_ARM_CORE_REG(sp_el1): - return __ctxt_sys_reg(&vcpu->arch.ctxt, SP_EL1); + return vcpu_sp_el1(vcpu); =20 case KVM_REG_ARM_CORE_REG(elr_el1): return __ctxt_sys_reg(&vcpu->arch.ctxt, ELR_EL1); @@ -170,13 +170,13 @@ static void *core_reg_addr(struct kvm_vcpu *vcpu, con= st struct kvm_one_reg *reg) KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]): off -=3D KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]); off /=3D 4; - return &vcpu->arch.ctxt.fp_regs.vregs[off]; + return vcpu_vreg(vcpu, off); =20 case KVM_REG_ARM_CORE_REG(fp_regs.fpsr): - return &vcpu->arch.ctxt.fp_regs.fpsr; + return vcpu_fpsr(vcpu); =20 case KVM_REG_ARM_CORE_REG(fp_regs.fpcr): - return &vcpu->arch.ctxt.fp_regs.fpcr; + return vcpu_fpcr(vcpu); =20 default: return NULL; --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6FBCB468C28; Wed, 12 Aug 2026 15:37:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549038; cv=none; b=oSBI/J4eos/TLWDh8NnN0O8zFS044AE6MxDrifk6w9OPLyH3fHV4EwzfN6NQ4Ru16k1BTykuaYyGL0kFA+0M4Q5ifGcMPvw/Dg5FLv/F+ItTD7ZY4ThH+hlSkaYbzHLihMnP+qvoQ54KKkh1spGzAa6u+lOgY+GJpUllrLuO82o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549038; c=relaxed/simple; bh=Qx8NXs3Lnt99hZttivmZV6XOQ0j+dE+T++Z/rCcoNOs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YwweSzyb9LOPx4ud3q3KUZEItD7WBGNRnJkRcDbeKd8Kd3CQXHNt0GGG2pmSY+xjFsm3vHFlj4Lu3CDd7ivOjRd51IudHZs0jijK1JuaTsw4vdJBpfJVvPLE2sbQvb+pYbMKP42sUGv0/zFlFqHnXkl3/k00i1C1ctz+utJDbPA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Zi1WvFFf; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Zi1WvFFf" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1tDl3594435; Wed, 12 Aug 2026 15:36:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=U18O0gCKgALa+XbZC +EvXju0IjuEjqVEq5R1cGYDB6c=; b=Zi1WvFFf93bV0tBRYnzILg+u46RE5Zf7z OEx24FKzT9EIIUl9NynuUi0poCwfU+CNDzFoIfQislUvfZBOl1FELWGu3+mM+lsB hLosVWUm+bOF6sKFaR5H6Y6jXyucqi0zKbMcMW4pmkR3huM8FQO5sbLPquyZeGau PvCpUQpnJ36F+UxAJMJFaakYYS6UfQ92VsD0u2HNjpWZmgZpPdEbFLVJTd4t+NzJ RyYwpe3lihRzE7XxYT490yqwxGsG+w0jRbVu0qmXQEYVKMhpdnymna6nV1/yESxO FKqQgp26RJmbXxaA+WkvRSRJrcdnGW3acRFwkhcVb8go7uriPgpJA== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e1a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQIpB021717; Wed, 12 Aug 2026 15:36:39 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g3u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaZ7u38404606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:35 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ADD472004B; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 670472004F; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 09/33] arm64: Prepare sharing arm64 headers with s390 Date: Wed, 12 Aug 2026 17:36:05 +0200 Message-ID: <20260812153631.3376090-10-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c9308 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=CvB7ObVER1VTR8-vp5wA:9 X-Proofpoint-GUID: sV3KgM9W7HkqCkJES1T2_u9se0kqIrJz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1Zeji/METrWj EgY35Q9j3h6xHElOkND5TQU6w/3VQRXg3ltQyn5GL5cSgd6qlKhlc1UUkkL/skr9ejNbQD5Migl g23SILHVk2fonR4WARvF9a2Rw1uyX4vI9u7v0v3cgldkvWL4Qx27RhOTOLZLAYl4zsiQqBYiWb1 6GDDvtLuOF1bCYDt9Qlxwh9EF1YCG5/VkgOvgvJf20IfrSFxBD1oIy4IMHCRflhWBuPyGr7Qdy9 234vwCTM39qMbHXEbcrT4JsmTQfrcorhcjd2Y+ijxYx9HI480yHADH9vv2EtTzSz3E72naiJBJT oy/YhkQb2itDwLIG5bgTsW5mWThCmzehmcBb7ciAt2X0apvd++JOt0uI6mIz8qT3C3FRerEytQt gZm4sgYmTmGed+OeDv/C1AtKdJj2xyOz1xUcNE590tzjVDvzW7xuzWoCKRq2BwyU6BAVXTjaR+z Y98heJU6lM/yvxnc59A== X-Proofpoint-ORIG-GUID: hQ3rD-W-G9yHiPNUPcCiy-wWKmBtIlgw X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXynTp/phZlpTJ jlliUKTgVyWVbaC5YpTy50es4aEPYEuqyxOtkq4G8hQig9Z+7rKIFcrs5X7/ntiM7s6B35Ca25m Y9dF8L9oJC8X+5vx/FvJ7qePOWMGu1c= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Prepare the sharing of arm64 headers with s390 by moving a few definitions inside headers to reduce the number of shared markers. Clean up some includes to further streamline the sharing of headers. No functional change. Signed-off-by: Steffen Eiden --- arch/arm64/include/asm/esr.h | 4 +- arch/arm64/include/asm/kvm_arm.h | 5 ++- arch/arm64/include/asm/kvm_emulate.h | 5 ++- arch/arm64/include/asm/kvm_host.h | 59 ++++++++++++++-------------- arch/arm64/include/asm/sysreg.h | 2 +- 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index f816f5d77f1a..da085c83b57e 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -7,7 +7,7 @@ #ifndef __ASM_ESR_H #define __ASM_ESR_H =20 -#include +#include #include =20 #define ESR_ELx_EC_UNKNOWN UL(0x00) @@ -435,7 +435,7 @@ #define ESR_ELx_IT_GCSPOPX 7 =20 #ifndef __ASSEMBLER__ -#include +#include =20 static inline unsigned long esr_brk_comment(unsigned long esr) { diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_= arm.h index 4bfbd827c5aa..57edd8437200 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -7,10 +7,11 @@ #ifndef __ARM64_KVM_ARM_H__ #define __ARM64_KVM_ARM_H__ =20 +#include +#include +#include #include -#include #include -#include =20 /* * Because I'm terribly lazy and that repainting the whole of the KVM diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/= kvm_emulate.h index b31d50bdf59e..a34a9417ff4d 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -44,11 +44,12 @@ enum exception_type { bool kvm_condition_valid32(const struct kvm_vcpu *vcpu); void kvm_skip_instr32(struct kvm_vcpu *vcpu); =20 +int kvm_inject_dabt_excl_atomic(struct kvm_vcpu *vcpu, u64 addr); +int kvm_inject_serror_esr(struct kvm_vcpu *vcpu, u64 esr); + void kvm_inject_undefined(struct kvm_vcpu *vcpu); void kvm_inject_sync(struct kvm_vcpu *vcpu, u64 esr); -int kvm_inject_serror_esr(struct kvm_vcpu *vcpu, u64 esr); int kvm_inject_sea(struct kvm_vcpu *vcpu, bool iabt, u64 addr); -int kvm_inject_dabt_excl_atomic(struct kvm_vcpu *vcpu, u64 addr); void kvm_inject_size_fault(struct kvm_vcpu *vcpu); =20 static inline int kvm_inject_sea_dabt(struct kvm_vcpu *vcpu, u64 addr) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm= _host.h index 46c8d7928b3f..22770c1132cb 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -56,6 +56,36 @@ #define KVM_REQ_MAP_L1_VNCR_EL2 KVM_ARCH_REQ(10) #define KVM_REQ_VGIC_PROCESS_UPDATE KVM_ARCH_REQ(11) =20 +/* + * If we encounter a data abort without valid instruction syndrome + * information, report this to user space. User space can (and + * should) opt in to this feature if KVM_CAP_ARM_NISV_TO_USER is + * supported. + */ +#define KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER 0 +/* Memory Tagging Extension enabled for the guest */ +#define KVM_ARCH_FLAG_MTE_ENABLED 1 +/* At least one vCPU has ran in the VM */ +#define KVM_ARCH_FLAG_HAS_RAN_ONCE 2 +/* The vCPU feature set for the VM is configured */ +#define KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED 3 +/* PSCI SYSTEM_SUSPEND enabled for the guest */ +#define KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED 4 +/* VM counter offset */ +#define KVM_ARCH_FLAG_VM_COUNTER_OFFSET 5 +/* Timer PPIs made immutable */ +#define KVM_ARCH_FLAG_TIMER_PPIS_IMMUTABLE 6 +/* Initial ID reg values loaded */ +#define KVM_ARCH_FLAG_ID_REGS_INITIALIZED 7 +/* Fine-Grained UNDEF initialised */ +#define KVM_ARCH_FLAG_FGU_INITIALIZED 8 +/* SVE exposed to guest */ +#define KVM_ARCH_FLAG_GUEST_HAS_SVE 9 +/* MIDR_EL1, REVIDR_EL1, and AIDR_EL1 are writable from userspace */ +#define KVM_ARCH_FLAG_WRITABLE_IMP_ID_REGS 10 +/* Unhandled SEAs are taken to userspace */ +#define KVM_ARCH_FLAG_EXIT_SEA 11 + #define KVM_DIRTY_LOG_MANUAL_CAPS (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE |= \ KVM_DIRTY_LOG_INITIALLY_SET) =20 @@ -338,35 +368,6 @@ struct kvm_arch { /* Protects VM-scoped configuration data */ struct mutex config_lock; =20 - /* - * If we encounter a data abort without valid instruction syndrome - * information, report this to user space. User space can (and - * should) opt in to this feature if KVM_CAP_ARM_NISV_TO_USER is - * supported. - */ -#define KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER 0 - /* Memory Tagging Extension enabled for the guest */ -#define KVM_ARCH_FLAG_MTE_ENABLED 1 - /* At least one vCPU has ran in the VM */ -#define KVM_ARCH_FLAG_HAS_RAN_ONCE 2 - /* The vCPU feature set for the VM is configured */ -#define KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED 3 - /* PSCI SYSTEM_SUSPEND enabled for the guest */ -#define KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED 4 - /* VM counter offset */ -#define KVM_ARCH_FLAG_VM_COUNTER_OFFSET 5 - /* Timer PPIs made immutable */ -#define KVM_ARCH_FLAG_TIMER_PPIS_IMMUTABLE 6 - /* Initial ID reg values loaded */ -#define KVM_ARCH_FLAG_ID_REGS_INITIALIZED 7 - /* Fine-Grained UNDEF initialised */ -#define KVM_ARCH_FLAG_FGU_INITIALIZED 8 - /* SVE exposed to guest */ -#define KVM_ARCH_FLAG_GUEST_HAS_SVE 9 - /* MIDR_EL1, REVIDR_EL1, and AIDR_EL1 are writable from userspace */ -#define KVM_ARCH_FLAG_WRITABLE_IMP_ID_REGS 10 - /* Unhandled SEAs are taken to userspace */ -#define KVM_ARCH_FLAG_EXIT_SEA 11 unsigned long flags; =20 /* VM-wide vCPU feature set */ diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysre= g.h index 1aa601c95188..ab205f9db94a 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -1263,6 +1263,6 @@ FIELD_PREP(reg##_##field##_MASK, \ SYS_FIELD_VALUE(reg, field, val)) =20 -#endif +#endif /* __ASSEMBLER__ */ =20 #endif /* __ASM_SYSREG_H */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77EDF432BE9; Wed, 12 Aug 2026 15:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549058; cv=none; b=AL0n9vGnncfccH0R77bMFUm3Ma+qmkozpga6x0s0mG7p+J0ORTbPWB/czedE150MNVPyPH+oJZVsvQUPXJoms5jnPSHqJqnS/GGz1a9pV1ImVnSFYbDrpdzR1k6e0SeLbi0LOwnsNddl36/Szsx+TgLGncQguZmh5q5D8v8skNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549058; c=relaxed/simple; bh=8rsBEE+ncg18sw13EycoUIllY/c19fZfCvqW9koI86E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p2H3543ufaVtnMcgOYDVKJuU6GOTWWj3mF7LXUlbtWoz1xhVkzyFnsVpHZHvI4BQMHXpEMrjVr1YelsoOVRBKVghRopeDyQJOtGivKC/6/bLCJ2YbC6fdL68iTixMaqZNpt4nkaZN1uC4/Ah+An6/XOhrZ1INsuC2PE+yetpvHM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=kGCflixD; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="kGCflixD" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1RIE3686382; Wed, 12 Aug 2026 15:36:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=5+751IfvDrQgPni4Q cSwL6htzkVhZpmsSEbH4X8yv2U=; b=kGCflixDCHvgDN3J4HjJbyO0XYfUKKdBD /CcMMymAP62mK19sRBBWZR6TVcL3MbI+7r0wrjHr5hRxyZkhw9ZCLNSAKPAUcrAB EL5HCzQLDGhJs1ej7puNE7c2dFU2R0K5DiUkWEOkmJIcnM/RalBSoIjVPTQsPt8h 2kR/kkRUa72ItXPD2cYjZknGwd8DIN3fTSbm8GdRKvK2/ANXtbA+wfCGXoDSHwtj 5Yk1UWhzDiM/Oxsi1kI895pxm3dlfq1sEFY1JREBdd6h0Ds5fB8iEtWYBfNr3ZH4 7ItLCpPCP5b/9vP9uBq5qc95sV2yxkxXDXQOW5Hf/HTprJDJau8yw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9tr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQHrj024761; Wed, 12 Aug 2026 15:36:40 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpjb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaasF51314962 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:36 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 239E42004D; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BD80420040; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:35 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 10/33] arm64: Share arm64 headers with s390 Date: Wed, 12 Aug 2026 17:36:06 +0200 Message-ID: <20260812153631.3376090-11-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX0Z9BVpaMk5ov g0sH9+zxL83W7dUSl4Uwuncgv/8aKiJz265jkqL1bvSnYZI0QcmViCksEuZeiKn2y1W2C+IK/vQ FxGSG4rvhvUccpM9xYAGWDme8hBg0bd8lbUGDRJROwEP1v3mrraqoNvGMEN/Ebs5TEnnZzSs19K /vsNT4VpLGgyIIBDt45owjQm0fkemdgAslYhunS6SjP0SqvKbOqd5vU0GDO50F6DGsOfMCWBf17 /FuLE86O4HivYmn475aXgcQFSz/EfM34nynR+HipFuSsF8xM3S26MB6HVBUnpO2t7ixoDHisnj2 DL4lDMa+3lOGJBY0JwzYtmZuHM2bXq6AxH77FjqKR8nC1ZbqXzGXSnJlyYaG2p2cC4jp6Bwvaj3 lXmspFhDQwDn0ENLQFXs5QThm5cYs/SMiI07YlmYmDgnvJU1kykjbtfeDBwQiFxFJjCQo+8AGAB lyUbFY3EHvrzceZ7sRg== X-Proofpoint-ORIG-GUID: EBtXN5f4vcGuDsAUycztGiCl4elMAzTl X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXwXgspA6pvFYk LORQtVop0YKd+WqiXVj78jCDZqvIPGKfzuAKm2T0t9rgZQRbi+H+n8ri7JlbEWforlrn18Epqsd pSaaSzQGyiESfkJbaUDl1aR1IGZHPjg= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c930a cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=7CQSdrXTAAAA:8 a=70XfEf6xsUqLJviCXMsA:9 a=a-qgeE7W1pNrGK8U0ZQC:22 X-Proofpoint-GUID: 98ltcXIqIRRStlMoaJRbBkDSde2gYmrJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Allow sharing of arm64 headers with s390 by marking the shared regions or add a comment that the whole file is shared. The shared regions are marked with: #ifdef ARM64_S390_COMMON /* insert shared definitions here */ #endif /* ARM64_S390_COMMON */ The preprocessor symbol ARM64_S390_COMMON is always defined for arm64. s390 later will generate its own view of arm64 headers based on the content inside the ifdef/endif block. No functional change. Signed-off-by: Steffen Eiden --- arch/arm64/Makefile | 2 ++ arch/arm64/include/asm/brk-imm.h | 1 + arch/arm64/include/asm/esr.h | 1 + arch/arm64/include/asm/kvm_arm.h | 1 + arch/arm64/include/asm/kvm_emulate.h | 18 ++++++++++++++++++ arch/arm64/include/asm/kvm_host.h | 20 ++++++++++++++++++++ arch/arm64/include/asm/ptrace.h | 4 ++++ arch/arm64/include/asm/sysreg.h | 15 +++++++++++++++ 8 files changed, 62 insertions(+) diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 6b005c8fef70..1cd7cd94a855 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -43,7 +43,9 @@ CC_FLAGS_NO_FPU :=3D -mgeneral-regs-only KBUILD_CFLAGS +=3D $(CC_FLAGS_NO_FPU) \ $(compat_vdso) $(cc_has_k_constraint) KBUILD_CFLAGS +=3D $(call cc-disable-warning, psabi) +KBUILD_CFLAGS +=3D -DARM64_S390_COMMON KBUILD_AFLAGS +=3D $(compat_vdso) +KBUILD_AFLAGS +=3D -DARM64_S390_COMMON =20 ifeq ($(call rustc-min-version, 108500),y) KBUILD_RUSTFLAGS +=3D --target=3Daarch64-unknown-none-softfloat diff --git a/arch/arm64/include/asm/brk-imm.h b/arch/arm64/include/asm/brk-= imm.h index beb42c62b6ac..dd2d153dc0d8 100644 --- a/arch/arm64/include/asm/brk-imm.h +++ b/arch/arm64/include/asm/brk-imm.h @@ -2,6 +2,7 @@ /* * Copyright (C) 2012 ARM Ltd. */ +/* Whole file is shared with s390 */ =20 #ifndef __ASM_BRK_IMM_H #define __ASM_BRK_IMM_H diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index da085c83b57e..2cb73bde7346 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -3,6 +3,7 @@ * Copyright (C) 2013 - ARM Ltd * Author: Marc Zyngier */ +/* Whole file is shared with s390 */ =20 #ifndef __ASM_ESR_H #define __ASM_ESR_H diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_= arm.h index 57edd8437200..678f0daed445 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -3,6 +3,7 @@ * Copyright (C) 2012,2013 - ARM Ltd * Author: Marc Zyngier */ +/* Whole file is shared with s390 */ =20 #ifndef __ARM64_KVM_ARM_H__ #define __ARM64_KVM_ARM_H__ diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/= kvm_emulate.h index a34a9417ff4d..09f04a5686a1 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -47,6 +47,7 @@ void kvm_skip_instr32(struct kvm_vcpu *vcpu); int kvm_inject_dabt_excl_atomic(struct kvm_vcpu *vcpu, u64 addr); int kvm_inject_serror_esr(struct kvm_vcpu *vcpu, u64 esr); =20 +#ifdef ARM64_S390_COMMON void kvm_inject_undefined(struct kvm_vcpu *vcpu); void kvm_inject_sync(struct kvm_vcpu *vcpu, u64 esr); int kvm_inject_sea(struct kvm_vcpu *vcpu, bool iabt, u64 addr); @@ -62,6 +63,8 @@ static inline int kvm_inject_sea_iabt(struct kvm_vcpu *vc= pu, u64 addr) return kvm_inject_sea(vcpu, true, addr); } =20 +#endif /* ARM64_S390_COMMON */ + static inline int kvm_inject_serror(struct kvm_vcpu *vcpu) { /* @@ -185,6 +188,7 @@ static inline void vcpu_set_thumb(struct kvm_vcpu *vcpu) *vcpu_cpsr(vcpu) |=3D PSR_AA32_T_BIT; } =20 +#ifdef ARM64_S390_COMMON /* * vcpu_get_reg and vcpu_set_reg should always be passed a register number * coming from a read of ESR_EL2. Otherwise, it may give the wrong result = on @@ -203,6 +207,8 @@ static __always_inline void vcpu_set_reg(struct kvm_vcp= u *vcpu, u8 reg_num, vcpu_gp_regs(vcpu)[reg_num] =3D val; } =20 +#endif /* ARM64_S390_COMMON */ + static inline bool vcpu_is_el2_ctxt(const struct kvm_cpu_context *ctxt) { switch (ctxt->regs.pstate & (PSR_MODE32_BIT | PSR_MODE_MASK)) { @@ -405,6 +411,7 @@ static inline u64 kvm_vcpu_get_disr(const struct kvm_vc= pu *vcpu) return vcpu->arch.fault.disr_el1; } =20 +#ifdef ARM64_S390_COMMON static inline u32 kvm_vcpu_hvc_get_imm(const struct kvm_vcpu *vcpu) { return kvm_vcpu_get_esr(vcpu) & ESR_ELx_xVC_IMM_MASK; @@ -482,6 +489,8 @@ static __always_inline u8 kvm_vcpu_trap_get_fault(const= struct kvm_vcpu *vcpu) return kvm_vcpu_get_esr(vcpu) & ESR_ELx_FSC; } =20 +#endif /* ARM64_S390_COMMON */ + static inline bool kvm_vcpu_trap_is_permission_fault(const struct kvm_vcpu *vcpu) { @@ -522,6 +531,7 @@ static __always_inline int kvm_vcpu_sys_get_rt(struct k= vm_vcpu *vcpu) return ESR_ELx_SYS64_ISS_RT(esr); } =20 +#ifdef ARM64_S390_COMMON static inline bool kvm_is_write_fault(struct kvm_vcpu *vcpu) { if (kvm_vcpu_abt_iss1tw(vcpu)) { @@ -546,6 +556,8 @@ static inline bool kvm_is_write_fault(struct kvm_vcpu *= vcpu) return kvm_vcpu_dabt_iswrite(vcpu); } =20 +#endif /* ARM64_S390_COMMON */ + static inline unsigned long kvm_vcpu_get_mpidr_aff(struct kvm_vcpu *vcpu) { return __vcpu_sys_reg(vcpu, MPIDR_EL1) & MPIDR_HWID_BITMASK; @@ -587,6 +599,7 @@ static inline bool kvm_vcpu_is_be(struct kvm_vcpu *vcpu) return vcpu_read_sys_reg(vcpu, r) & bit; } =20 +#ifdef ARM64_S390_COMMON static inline unsigned long vcpu_data_guest_to_host(struct kvm_vcpu *vcpu, unsigned long data, unsigned int len) @@ -662,6 +675,8 @@ static __always_inline void kvm_incr_pc(struct kvm_vcpu= *vcpu) vcpu_set_flag((v), e); \ } while (0) =20 +#endif /* ARM64_S390_COMMON */ + /* * Returns a 'sanitised' view of CPTR_EL2, translating from nVHE to the VHE * format if E2H isn't set. @@ -768,6 +783,7 @@ static inline void kvm_reset_fpsimd(struct kvm_vcpu *vc= pu) memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); } =20 +#ifdef ARM64_S390_COMMON /* Reset a vcpu's core registers. */ static inline void kvm_reset_vcpu_core(struct kvm_vcpu *vcpu) { @@ -792,6 +808,8 @@ static inline void kvm_reset_vcpu_core(struct kvm_vcpu = *vcpu) *vcpu_cpsr(vcpu) =3D pstate; } =20 +#endif /* ARM64_S390_COMMON */ + /* PSCI reset handling for a vcpu. */ static inline void kvm_reset_vcpu_psci(struct kvm_vcpu *vcpu, struct vcpu_reset_state *reset_state) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm= _host.h index 22770c1132cb..e6b3d42abb08 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -39,6 +39,7 @@ =20 #define KVM_MAX_VCPUS VGIC_V3_MAX_CPUS =20 +#ifdef ARM64_S390_COMMON #define KVM_VCPU_MAX_FEATURES 10 #define KVM_VCPU_VALID_FEATURES (BIT(KVM_VCPU_MAX_FEATURES) - 1) =20 @@ -86,6 +87,8 @@ /* Unhandled SEAs are taken to userspace */ #define KVM_ARCH_FLAG_EXIT_SEA 11 =20 +#endif /* ARM64_S390_COMMON */ + #define KVM_DIRTY_LOG_MANUAL_CAPS (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE |= \ KVM_DIRTY_LOG_INITIALLY_SET) =20 @@ -836,6 +839,8 @@ extern s64 kvm_nvhe_sym(hyp_physvirt_offset); extern u64 kvm_nvhe_sym(hyp_cpu_logical_map)[NR_CPUS]; #define hyp_cpu_logical_map CHOOSE_NVHE_SYM(hyp_cpu_logical_map) =20 +#ifdef ARM64_S390_COMMON + struct vcpu_reset_state { unsigned long pc; unsigned long r0; @@ -843,6 +848,8 @@ struct vcpu_reset_state { bool reset; }; =20 +#endif /* ARM64_S390_COMMON */ + struct vncr_tlb; =20 struct kvm_vcpu_arch { @@ -952,6 +959,7 @@ struct kvm_vcpu_arch { pid_t pid; }; =20 +#ifdef ARM64_S390_COMMON /* * Each 'flag' is composed of a comma-separated triplet: * @@ -1105,6 +1113,8 @@ struct kvm_vcpu_arch { /* KVM is currently emulating an L2 to L1 exception */ #define IN_NESTED_EXCEPTION __vcpu_single_flag(sflags, BIT(9)) =20 +#endif /* ARM64_S390_COMMON */ + #define vcpu_sve_max_vq(vcpu) sve_vq_from_vl((vcpu)->arch.sve_max_vl) =20 #define vcpu_sve_zcr_elx(vcpu) \ @@ -1240,6 +1250,7 @@ struct kvm_vcpu_stat { u64 exits; }; =20 +#ifdef ARM64_S390_COMMON unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu); int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices); int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); @@ -1248,6 +1259,8 @@ int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const stru= ct kvm_one_reg *reg); unsigned long kvm_arm_num_sys_reg_descs(struct kvm_vcpu *vcpu); int kvm_arm_copy_sys_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindic= es); =20 +#endif /* ARM64_S390_COMMON */ + int __kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu, struct kvm_vcpu_events *events); =20 @@ -1326,6 +1339,7 @@ int __init populate_nv_trap_config(void); =20 void kvm_calculate_traps(struct kvm_vcpu *vcpu); =20 +#ifdef ARM64_S390_COMMON /* MMIO helpers */ void kvm_mmio_write_buf(void *buf, unsigned int len, unsigned long data); unsigned long kvm_mmio_read_buf(const void *buf, unsigned int len); @@ -1333,6 +1347,8 @@ unsigned long kvm_mmio_read_buf(const void *buf, unsi= gned int len); int kvm_handle_mmio_return(struct kvm_vcpu *vcpu); int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa); =20 +#endif /* ARM64_S390_COMMON */ + /* * Returns true if a Performance Monitoring Interrupt (PMI), a.k.a. perf e= vent, * arrived in guest context. For arm64, any event that arrives while a vC= PU is @@ -1530,11 +1546,15 @@ static inline bool __vcpu_has_feature(const struct = kvm_arch *ka, int feature) return test_bit(feature, ka->vcpu_features); } =20 +#ifdef ARM64_S390_COMMON + #define kvm_vcpu_has_feature(k, f) __vcpu_has_feature(&(k)->arch, (f)) #define vcpu_has_feature(v, f) __vcpu_has_feature(&(v)->kvm->arch, (f)) =20 #define kvm_vcpu_initialized(v) vcpu_get_flag(v, VCPU_INITIALIZED) =20 +#endif /* ARM64_S390_COMMON */ + int kvm_trng_call(struct kvm_vcpu *vcpu); #ifdef CONFIG_KVM extern phys_addr_t hyp_mem_base; diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrac= e.h index 49a83a0636b9..05c1307fa62f 100644 --- a/arch/arm64/include/asm/ptrace.h +++ b/arch/arm64/include/asm/ptrace.h @@ -26,6 +26,8 @@ =20 #define GIC_PRIO_PSR_I_SET GICV3_PRIO_PSR_I_SET =20 +#ifdef ARM64_S390_COMMON + /* Additional SPSR bits not exposed in the UABI */ #define PSR_MODE_THREAD_BIT (1 << 0) #define PSR_IL_BIT (1 << 20) @@ -66,6 +68,8 @@ #define PSR_AA32_IT_MASK 0x0600fc00 /* If-Then execution state mask */ #define PSR_AA32_GE_MASK 0x000f0000 =20 +#endif /* ARM64_S390_COMMON */ + #ifdef CONFIG_CPU_BIG_ENDIAN #define PSR_AA32_ENDSTATE PSR_AA32_E_BIT #else diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysre= g.h index ab205f9db94a..1c5c4df260be 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -16,6 +16,8 @@ =20 #include =20 +#ifdef ARM64_S390_COMMON + /* * ARMv8 ARM reserves the following encoding for system registers: * (Ref: ARMv8 ARM, Section: "System instruction class encoding overview", @@ -50,6 +52,8 @@ #define sys_reg_CRm(id) (((id) >> CRm_shift) & CRm_mask) #define sys_reg_Op2(id) (((id) >> Op2_shift) & Op2_mask) =20 +#endif /* ARM64_S390_COMMON */ + #ifndef CONFIG_BROKEN_GAS_INST =20 #ifdef __ASSEMBLER__ @@ -123,6 +127,8 @@ #define GSB_SYS_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 0, 31) #define GSB_ACK_BARRIER_INSN __SYS_BARRIER_INSN(1, 0, 12, 0, 1, 31) =20 +#ifdef ARM64_S390_COMMON + /* Data cache zero operations */ #define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2) #define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4) @@ -832,6 +838,8 @@ #define SCTLR_ELx_A (BIT(1)) #define SCTLR_ELx_M (BIT(0)) =20 +#endif /* ARM64_S390_COMMON */ + #ifdef CONFIG_CPU_BIG_ENDIAN #define ENDIAN_SET_EL2 SCTLR_ELx_EE #else @@ -866,6 +874,7 @@ SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | \ SCTLR_EL1_TSCXT | SCTLR_EL1_EOS) =20 +#ifdef ARM64_S390_COMMON /* MAIR_ELx memory attributes (used by Linux) */ #define MAIR_ATTR_DEVICE_nGnRnE UL(0x00) #define MAIR_ATTR_DEVICE_nGnRE UL(0x04) @@ -1102,6 +1111,8 @@ #define GICV5_GICR_CDNMIA_TYPE_MASK GENMASK_ULL(31, 29) #define GICV5_GICR_CDNMIA_ID_MASK GENMASK_ULL(23, 0) =20 +#endif /* ARM64_S390_COMMON */ + #define gicr_insn(insn) read_sysreg_s(GICV5_OP_GICR_##insn) #define gic_insn(v, insn) write_sysreg_s(v, GICV5_OP_GIC_##insn) =20 @@ -1251,6 +1262,8 @@ par; \ }) =20 +#ifdef ARM64_S390_COMMON + #define SYS_FIELD_VALUE(reg, field, val) reg##_##field##_##val =20 #define SYS_FIELD_GET(reg, field, val) \ @@ -1263,6 +1276,8 @@ FIELD_PREP(reg##_##field##_MASK, \ SYS_FIELD_VALUE(reg, field, val)) =20 +#endif /* ARM64_S390_COMMON */ + #endif /* __ASSEMBLER__ */ =20 #endif /* __ASM_SYSREG_H */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 411534749F3; Wed, 12 Aug 2026 15:37:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549072; cv=none; b=BRMJwCOFUbRNZYkmFogGsAtwpnrgA1TES447IJs7CqySohBwESd1aig8LkbY8paOqITg7AiOUBDP4fE8uNt2fpPEka62YnZiaO7Kym+jEW4ySSviPNJCTGOheUxWF2NHlWzTpgWz5UEwvJaF8P4q/eU7xyOst4312NtXIaHxHmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549072; c=relaxed/simple; bh=+ZFvEZKeSCu0sZHY43uIeV6Y9EyewU+Qda5p0vvySSY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MhV9ZOpTRQZGdd34dUwgeJwYGT9sn6Qm09GiOzK2jZuDxmc0mR79q23gQvk6OEa7dxqkvymr6f62xX+gUJTVgpfLTgAzMtY6tB5finwd0iEHxK+6QyCkQFC1mLluUC3ExXHklbvA+AnJr38EUmdKVYNuN6jBIyBbSAreaF+yioY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=HblgiD6N; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="HblgiD6N" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1U1R1816401; Wed, 12 Aug 2026 15:36:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=+ybf6ef7YiwCLG4K6 TTJ1lMv4MLFbJ+OtG+JrhZ4gg0=; b=HblgiD6NDTLEeR7ea7XZ2ckvxUg1awYck hYF0X1+7PD3jPmsQw2MdjCzh2Q8xaWu1CMNX7nTrvyO65WNT53mjrA+sXjR8lzGN oN23WrD7nFDe0UwCENytxW3l8/rYNQmRcJ0HROA8ujEBGaZZVt9nVtpqfIg+IfK0 3GzBONqvGIT057uVtQ/9GlLMAZB0DJklpoTeOP089je2CMaI8VPv1qUs21nM9fK8 hk7Zvfc5DFHp0Mc6uEy8IE+wviVdjI1bNcATvA6Ahx3qt6JZvJtxf2q8j/1LMWkt V00345PLOZ8pKg4CoVDez2u+y7rxRI/e5cvYSeBVwKBAOTAPVsS0A== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvk0380u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQOWp021753; Wed, 12 Aug 2026 15:36:40 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g3w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaajx38797598 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:36 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7979E2004D; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 28EFF2004E; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 11/33] KVM: arm64: Share arm64 code with s390 Date: Wed, 12 Aug 2026 17:36:07 +0200 Message-ID: <20260812153631.3376090-12-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1BhaPEZos6ct RO0pbWeTlCzCEUWhgrp9NQxCDaZE9fKXxOZJMX+uzKXnit0Icwob0ca1lCbjr/MPWuTx7ao58P8 thVDmSKJT1ApuShVVAFFUm3TJDVQt5EWoIUFjipW1eJoaWEK0WOAaczYrt9Pk2hn2MQ8zG+fYLA eQaO3nmbzMQJi3DoNVMFJOydU/el8ySSy583jBr+lzoWI+2auyeqZbcxxgKLCA0E7Cxdsbc0lDe VDI4Tr2h/FSnKOrZMY3d248JJGMyWmlzhaXvpQNP8eQMJZ7abr18N9kWq7PcgiczlPh6wNMkMVW sU1SpaNobT7YQzsrEDVEgXSqgvLQOrGHEswjqShFLBi+qE4HrzJDqG4Icjh+ZF0CgBS/F+NtD/O GghaK/wCReYMvhri0l6HYtCelBxg4wR8GbWvvQAdvk+BJy67l1hlTwvZZvXli2QGbDpJKok5XFn VGAma8qh3OR8fn2xnCQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1yPf6ykDrKjC UKMEtLbIinV58ppVQwtWAkSY/nGJIDQJQprxVjfGfbxLJo49ht+P6uUiOan7b0tbpO4PumbCtZG BNeghFTrZ3LY0rO9V6ju02Panb8mGIs= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7c9309 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=DWVxlzv4wnVo_M8M_fcA:9 X-Proofpoint-GUID: RzOi_joBKYaBt7eikWmH33uUyADdeH-G X-Proofpoint-ORIG-GUID: CqTfyBBWehjnw3w_OEzzq3sCLHnrxF-M X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Mark functions that s390 can use to implement arm on s390 as shared functions. No functional change. Signed-off-by: Steffen Eiden --- arch/arm64/kvm/arm.c | 3 +++ arch/arm64/kvm/guest.c | 6 ++++++ arch/arm64/kvm/handle_exit.c | 6 ++++++ arch/arm64/kvm/mmio.c | 2 ++ 4 files changed, 17 insertions(+) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 8b080804bc90..6b92a3c1d490 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1603,6 +1603,7 @@ static unsigned long system_supported_vcpu_features(v= oid) return features; } =20 +#ifdef ARM64_S390_COMMON static int kvm_vcpu_init_check_features(struct kvm_vcpu *vcpu, const struct kvm_vcpu_init *init) { @@ -1656,6 +1657,8 @@ static bool kvm_vcpu_init_changed(struct kvm_vcpu *vc= pu, KVM_VCPU_MAX_FEATURES); } =20 +#endif /* ARM64_S390_COMMON */ + static int kvm_setup_vcpu(struct kvm_vcpu *vcpu) { struct kvm *kvm =3D vcpu->kvm; diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 773f6c8e5026..6ca5a9f357cd 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -62,6 +62,7 @@ const struct kvm_stats_header kvm_vcpu_stats_header =3D { sizeof(kvm_vcpu_stats_desc), }; =20 +#ifdef ARM64_S390_COMMON static bool core_reg_offset_is_vreg(u64 off) { return off >=3D KVM_REG_ARM_CORE_REG(fp_regs.vregs) && @@ -306,6 +307,8 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const st= ruct kvm_one_reg *reg) return err; } =20 +#endif /* ARM64_S390_COMMON */ + #define vq_word(vq) (((vq) - SVE_VQ_MIN) / 64) #define vq_mask(vq) ((u64)1 << ((vq) - SVE_VQ_MIN) % 64) #define vq_present(vqs, vq) (!!((vqs)[vq_word(vq)] & vq_mask(vq))) @@ -543,6 +546,7 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu,= struct kvm_regs *regs) return -EINVAL; } =20 +#ifdef ARM64_S390_COMMON static int copy_core_reg_indices(const struct kvm_vcpu *vcpu, u64 __user *uindices) { @@ -591,6 +595,8 @@ static unsigned long num_core_regs(const struct kvm_vcp= u *vcpu) return copy_core_reg_indices(vcpu, NULL); } =20 +#endif /* ARM64_S390_COMMON */ + static unsigned long num_sve_regs(const struct kvm_vcpu *vcpu) { const unsigned int slices =3D vcpu_sve_slices(vcpu); diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index 29108e5c0206..6a6ef2c074f4 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -213,6 +213,7 @@ static int kvm_handle_guest_debug(struct kvm_vcpu *vcpu) return 0; } =20 +#ifdef ARM64_S390_COMMON static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu) { u64 esr =3D kvm_vcpu_get_esr(vcpu); @@ -224,6 +225,8 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu) return 1; } =20 +#endif /* ARM64_S390_COMMON */ + /* * Guest access to SVE registers should be routed to this handler only * when the system doesn't support SVE. @@ -404,6 +407,7 @@ static exit_handle_fn arm_exit_handlers[] =3D { [ESR_ELx_EC_GCS] =3D kvm_handle_gcs, }; =20 +#ifdef ARM64_S390_COMMON static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu) { u64 esr =3D kvm_vcpu_get_esr(vcpu); @@ -439,6 +443,8 @@ static int handle_trap_exceptions(struct kvm_vcpu *vcpu) return handled; } =20 +#endif /* ARM64_S390_COMMON */ + /* * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on * proper exit to userspace. diff --git a/arch/arm64/kvm/mmio.c b/arch/arm64/kvm/mmio.c index d1c3a352d5a2..5161102da507 100644 --- a/arch/arm64/kvm/mmio.c +++ b/arch/arm64/kvm/mmio.c @@ -10,6 +10,7 @@ =20 #include "trace.h" =20 +#ifdef ARM64_S390_COMMON void kvm_mmio_write_buf(void *buf, unsigned int len, unsigned long data) { void *datap =3D NULL; @@ -258,3 +259,4 @@ int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fau= lt_ipa) run->exit_reason =3D KVM_EXIT_MMIO; return 0; } +#endif /* ARM64_S390_COMMON */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 716B1379EC8; Wed, 12 Aug 2026 15:37:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549061; cv=none; b=WGW9QVBIVW/iLMnRdEDWF/5mKpYyP8NS68L2e5u5ORYtUUR8fAdQ4ThUESLZ/yzpddQhC0ZO67hvRShS5mY4y4X+C/UkNwBM+sO4y1lgYd1zSDKfQ0h3WlvWbkJivZ2ng/LCf+fl8hm09bk9bgdQjRS8XGSZ3Usk7IRQ0vxeSYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549061; c=relaxed/simple; bh=dSvMIDvJm6IzwXNQ65iwxXqa90FGz9LEvL0jLe1mkqA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RtSLIJ0AEF3k8mAzKTkBw+LHHH2QCKUzQ24X61zCchMTzdULlatxnhYRRIfY1N+h7ZKe8fNvm0bTEM37YlDjc6zy4Mbr3KoOo8C/W+cdKkPUGuCMuP6bxV4op2+Raj12luNrWd0OGgmF8B22fwEwSdPDU4a0RKF/fjx0kso2KTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=MnJD6QwV; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="MnJD6QwV" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1bCC3640263; Wed, 12 Aug 2026 15:36:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=cPdtovAYXF22FUXJg W37R+HUCWsKp0CDniDtlu11EGg=; b=MnJD6QwV8QED0nGLoC16FBJVUiAJ5SEsz 6zL5joYFfa17uLTNgWoJm2q2BcZtN/ZuauvR5i2N5bfvzNuzRg6sOrLGizOGOVzf iGn1IV10TbJJyM5fplbUvsSP/LBag+XhCX120uowQeq03GWq9+Il4QgqPhb1309N DKm+wqaF4dI7B8YKutp1WDe1qEU0FIaGgi0T3dUTKrGOSQFK2OANp2ZgHBVX6Itb LU7b7yKz46jC2ip+JTzROea+n2vgP2lrj7gR2mR/H//yA6x0icSm+ffg1/11qgok rdna94pw2tBlPqT5cDBNvjBiLR6DMiDy/sWrGIOt2GxZurKyMPBfg== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7bv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQNvt012331; Wed, 12 Aug 2026 15:36:40 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq6uta-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaa1I38797602 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:37 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D003920040; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7ECE22004F; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 12/33] KVM: s390: Extract gmap tracing to a separate header Date: Wed, 12 Aug 2026 17:36:08 +0200 Message-ID: <20260812153631.3376090-13-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: 4RLhiJBG_ECstebReXH6oyQMvCaJMXi- X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c930a cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=hUpfy6h2KLrKm0K-hOsA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXyOQhuOvmWgCu 7789l1u8jBSO0roN5429dQzs9DBD1PnpcXnSmGjar6P1hemnGXx1lNL2BU2+zugIzYBbZTdkRm6 f0CS0BIepVRH6Y3QeaAd+ic27J1GywGejUqmDi+tGSJFPkuItMEK5R1j61uWzK1fuMFf2BccNTQ 0AQ0btIGj6wiBg5YLyAy0NzhIsverd9Gm0E9o2Ywo5fJQA8l/+SqtxK0/pBFGEJ47edx3NTHb0f gnwZeIfasaDmb1O5nValexZL+uVarOJe8KSs8hFSsENgc+pjAza/1kC3lh8ppy4TZT9aoSmok0D wRHP8Q00M67kNuruz5GPpG0pi+kCZmCFsqGkFFGUXHXL5ZG2L/h8rT6QVN8VTYbKUvH13BDbo9G m3+BjeS7VRoMHJ2windd7n9GDkLQOtl6QPOgOM3OPdjtOBHWpSXG5jhHg3rAchenWsC0ZcZwGie ThEbiDgv8E8iUokl4Ow== X-Proofpoint-ORIG-GUID: 4IKwY207ohIYZNIWOT49smatfU6whGSv X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9tOJ76A74RdO Mr75z1r2CBqdEhbpFR/hsBnEEAoYyVxE5N122ZihtoztnVx21xd87qjKnd5grinZ5q7w7S8G164 ObvHns3xuS9b8dOBv3k3grWnVsuqIZw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Move the kvm_s390_major_guest_pfault trace event from trace.h to a new trace_gmap.h header. This separates gmap-specific tracing from general KVM/s390 tracing, preparing for code sharing between multiple KVM implementations. The trace event definition is updated to use local defines for parameters so that they can be replaced later with ease for when another KVM implementation uses these traces. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/faultin.c | 3 ++- arch/s390/kvm/trace.h | 14 ------------ arch/s390/kvm/trace_gmap.h | 47 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 arch/s390/kvm/trace_gmap.h diff --git a/arch/s390/kvm/faultin.c b/arch/s390/kvm/faultin.c index 3cc45f7f5b2d..1dc79807012c 100644 --- a/arch/s390/kvm/faultin.c +++ b/arch/s390/kvm/faultin.c @@ -9,10 +9,11 @@ #include =20 #include "gmap.h" -#include "trace.h" #include "faultin.h" =20 bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu); +#define CREATE_TRACE_POINTS +#include "trace_gmap.h" =20 /* * kvm_s390_faultin_gfn() - handle a dat fault. diff --git a/arch/s390/kvm/trace.h b/arch/s390/kvm/trace.h index dd2685c7df5b..3d2fffb1555a 100644 --- a/arch/s390/kvm/trace.h +++ b/arch/s390/kvm/trace.h @@ -45,20 +45,6 @@ TRACE_EVENT(kvm_s390_skey_related_inst, VCPU_TP_PRINTK("%s", "storage key related instruction") ); =20 -TRACE_EVENT(kvm_s390_major_guest_pfault, - TP_PROTO(VCPU_PROTO_COMMON), - TP_ARGS(VCPU_ARGS_COMMON), - - TP_STRUCT__entry( - VCPU_FIELD_COMMON - ), - - TP_fast_assign( - VCPU_ASSIGN_COMMON - ), - VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault") - ); - TRACE_EVENT(kvm_s390_pfault_init, TP_PROTO(VCPU_PROTO_COMMON, long pfault_token), TP_ARGS(VCPU_ARGS_COMMON, pfault_token), diff --git a/arch/s390/kvm/trace_gmap.h b/arch/s390/kvm/trace_gmap.h new file mode 100644 index 000000000000..a3cad705021b --- /dev/null +++ b/arch/s390/kvm/trace_gmap.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(GMAP_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) +#define GMAP_TRACE_KVM_H + +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kvm +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE trace_gmap + +#define __KVM_FIELDS \ + __field(unsigned long, pswmask) \ + __field(unsigned long, pswaddr) +#define __KVM_ASSIGN ({\ + __entry->pswmask =3D vcpu->arch.sie_block->gpsw.mask; \ + __entry->pswaddr =3D vcpu->arch.sie_block->gpsw.addr; \ + }) +#define __KVM_PRINT \ + __entry->pswmask,\ + __entry->pswaddr + +TRACE_EVENT(kvm_s390_major_guest_pfault, + TP_PROTO(struct kvm_vcpu *vcpu), + TP_ARGS(vcpu), + + TP_STRUCT__entry( + __field(int, id) + __KVM_FIELDS + ), + + TP_fast_assign( + __entry->id =3D vcpu->vcpu_id; + __KVM_ASSIGN + ), + TP_printk("%02d[%016lx-%016lx]: major fault, maybe applicable for pfa= ult", + __entry->id, + __KVM_PRINT + ) + ); + +#endif /* GMAP_TRACE_KVM_H */ + +/* This part must be outside protection */ +#include --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 247764746C8; Wed, 12 Aug 2026 15:37:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; cv=none; b=oZa8Yquo4coCzEUWIEia1qLocaOObxNLotJ5Rfg5cfTCiTFiZuVozAv43NdwAkbQrb8O7XYYdmi8P9M1nAay3N1sbfPkTMoGs+K8JjNllwF6gldwZaVix3oEe2pfpd8Q9Lrp0v+YEHe4RVHMT53WTZtJm6rm7j6pXPQlzessNE0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; c=relaxed/simple; bh=MNr34QA4exGDujDQ2v/MKuHtAdWp6LYgl1KHdt/wpbM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tbgpOt/eOLY9tZ8US6fnd81ypSIlwTGvGcsmh51S+OiR5Z5CjF1kEGIjY23NYCOkBx4EHZshR2ujQ6OQu7dc0XgdnBJI+rSU+Y/ncOZe6YUB4FWA6NzSls3GStSkxcB4VK63PUcwY9qegHCNJGlT7v11Ji13qy4yJQ7YVhhYz2c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=LyfMAkyA; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="LyfMAkyA" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1meH3687174; Wed, 12 Aug 2026 15:36:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=vX0JhDDXNBnfGCA1V Hi3fAjLiUTD3W0wwM5OuZSdrF0=; b=LyfMAkyAZNkM9A/IOutveFkJo0c8PRhab wteD00bsZ0+h9ik0oyrHSnoVgid1nd/91IBcHE1PeXHeD1C1c9SNuHQaanN4l25q MOw/EHdY85jxcTkaYuWIULvLyrR+V9+FLswg9y2aeqE7Ov0H30Ip9JH+9xzzgLB+ CEDJGNm3WpwxX4+5lqcGGGBhEbCoHNdspWFpuLeWW76TBtzzk3mwFQ7NEfXGUQaZ lzjicfOhxKl2tdrEOpbsBMLYWCcercW2V9siHm7UizfZ2BZGIhLLsyaADmKdq77W 7Zga4h3Kw2By9cXcOuQAwhXYL71dXAoWJrItyrzXb8L/Z6Umv8FKg== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9u0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQOOc013784; Wed, 12 Aug 2026 15:36:41 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h6mk3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFabDo37618088 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:37 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3748820049; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D540C2004D; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:36 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 13/33] KVM: s390: Prepare include guards for a new location Date: Wed, 12 Aug 2026 17:36:09 +0200 Message-ID: <20260812153631.3376090-14-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXwkTyVP7pbZ8t 9dnTQsMba2GOfibuR6ehI1P0QaT45jqz3Y1S9kM9h/PzmCIW9/xs2Qma/xXQFrGK526knJEVXm/ vmrEu3HN/l5n+96UIfd51exg7dtLT6SNFYk+K9ZuvIc96ayI2FoonKfHRt0I9JdoodS+YhpD4A/ 0ZsWXE9PZ+SUTD5zMI92FS2dYJGNlT89QysLXspKlBEt23FWVzaAXP0dIGoswVqYBrmHKqUUQgX d32luaawgrTAUhBRUp024728SBVPSY7rIyzri+bXC5getvwX9896H6MRHaDA2HNcJcl4ST8P7tL THhKAmf+sZYN8Gs3lKjVuAld5CqaGedYclaHIv8PwGxcPHLvp46dMQYuSnwDokUoFVuckH06ubw 7kEwHh+1PPNhFUERSPyODXDCy4Dkz5JojOB/smiCNjom+AA8/FjiuI73treGWFNmQWpggVj1uRU rvB5SzdI1ZvG2wBEZnA== X-Proofpoint-ORIG-GUID: Qc9OFY2T-XcjZQj8nkFY2REe8_BxbBFR X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8Ar6d0KCJwig AZbos1cn/AEVmkLzgIaXsK7Zphmfkz33CSIVY599/rDvq5t0yg5kaHaUK2nlwZXA5b8kLj2WRzQ S7j+3E5BBra0oU76PQkeQU33WEkh8yI= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c930b cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=0n0nkFggx1xHrEoCumAA:9 X-Proofpoint-GUID: nPtXakkkjq2FEaatpXQhgPu4_iaHtAeG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Update include guard names in dat.h, faultin.h, and gmap.h to ARCH_KVM_GMAP_* to reflect their upcoming relocation to a shared gmap directory. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/dat.h | 6 +++--- arch/s390/kvm/faultin.h | 6 +++--- arch/s390/kvm/gmap.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/s390/kvm/dat.h b/arch/s390/kvm/dat.h index 141ee7b9f019..87108f51228e 100644 --- a/arch/s390/kvm/dat.h +++ b/arch/s390/kvm/dat.h @@ -6,8 +6,8 @@ * Author(s): Claudio Imbrenda */ =20 -#ifndef __KVM_S390_DAT_H -#define __KVM_S390_DAT_H +#ifndef ARCH_KVM_GMAP_DAT_H +#define ARCH_KVM_GMAP_DAT_H =20 #include #include @@ -975,4 +975,4 @@ static inline bool crste_is_ucas(union crste crste) return is_pmd(crste) && crste.h.i && crste.h.fc0.tl =3D=3D 1 && crste.h.f= c =3D=3D 0; } =20 -#endif /* __KVM_S390_DAT_H */ +#endif /* ARCH_KVM_GMAP_DAT_H */ diff --git a/arch/s390/kvm/faultin.h b/arch/s390/kvm/faultin.h index f86176d2769c..f343b6fb6f16 100644 --- a/arch/s390/kvm/faultin.h +++ b/arch/s390/kvm/faultin.h @@ -6,8 +6,8 @@ * Author(s): Claudio Imbrenda */ =20 -#ifndef __KVM_S390_FAULTIN_H -#define __KVM_S390_FAULTIN_H +#ifndef ARCH_KVM_GMAP_FAULTIN_H +#define ARCH_KVM_GMAP_FAULTIN_H =20 #include =20 @@ -89,4 +89,4 @@ static inline int kvm_s390_get_guest_pages(struct kvm *kv= m, struct guest_fault * #define kvm_s390_array_needs_retry_safe(kvm, seq, array) \ kvm_s390_multiple_faults_need_retry(kvm, seq, array, ARRAY_SIZE(array), f= alse) =20 -#endif /* __KVM_S390_FAULTIN_H */ +#endif /* ARCH_KVM_GMAP_FAULTIN_H */ diff --git a/arch/s390/kvm/gmap.h b/arch/s390/kvm/gmap.h index 39938d363ec9..c54c35e47d6d 100644 --- a/arch/s390/kvm/gmap.h +++ b/arch/s390/kvm/gmap.h @@ -7,8 +7,8 @@ * Claudio Imbrenda */ =20 -#ifndef ARCH_KVM_S390_GMAP_H -#define ARCH_KVM_S390_GMAP_H +#ifndef ARCH_KVM_GMAP_GMAP_H +#define ARCH_KVM_GMAP_GMAP_H =20 #include "dat.h" =20 @@ -330,4 +330,4 @@ static inline bool gmap_is_shadow_valid(struct gmap *sg= , union asce asce, int ed return sg->guest_asce.val =3D=3D asce.val && sg->edat_level =3D=3D edat_l= evel; } =20 -#endif /* ARCH_KVM_S390_GMAP_H */ +#endif /* ARCH_KVM_GMAP_GMAP_H */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9464476CCF; Wed, 12 Aug 2026 15:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549066; cv=none; b=SqGiCFj8PNA91/Yc9rt6luKynS/lrgYCSWpmH31ODGXGju2glJm5BuN/2cYq611/oGJfowHrfADysmGQ5zwaFs3BNXwT42OyaUS28ALWXbsrsspOo8F/IWC7AVrwJ/Os1K63D+Y/qAs6nmAU3d5yUoO1ixPUJ4Up+W7C9ZqycwA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549066; c=relaxed/simple; bh=mSXmF0y0HYPt1K5KC0eEtZRWapwfDYy82uHnw8V1pYE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nyTM3zkVT1Rs/xSQc/IhBqb+LkDJNyTtQVanvhyL9QrlF48S7O4Px0EPX9xsfaj6iR8g+0cpuYuOEfiwl1NNvUveVpStiPELrncFES/Igic+vq56klj3WXBxfgJiHAPqOTLdCQQiUXB4+Gkq8BasXWtjpBSo2ybkhV+x+WPSy/8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=QZNxL1sq; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="QZNxL1sq" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1oH12585927; Wed, 12 Aug 2026 15:36:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=kFweWoD6BmrdWnt/M 2WzA8rqD3JqQ3siBWorNyr03bw=; b=QZNxL1sqvE6z8N3oEEXFwTFUC+op3ctnH hfAaSHlS/yu5uSndibyTsDgPbV9iMaC9dtvNrl7xtmpmNCD5sNO/UE+FfN/fHNzt cWGLmtsYDYtnshRWWM7HyyqgZUdERi2F60huSUdQ1BAqgd7orYGbrbVlg9zD8N3Z 7J+cqhF5AneibXAg3KEzDv+Fl/O49g7exuTOIxJp7LOG0eD1z5HrWyxqRQaifw2o efrqM2fDvYCSzvCSOTX9p9xFVxT3TJfxvRrx2se/iqiGwiViHCaU2mZj8gEl7IXS xaAlCBeSbtl0iK+M0zLBAcSFyvLm60VR1HuvOfrS/8CZnBICS4Sqw== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fyb23usga-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQG6P021696; Wed, 12 Aug 2026 15:36:41 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g40-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFabsA37618094 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:37 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9840B20049; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3CB4C2004E; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 14/33] KVM: s390: Rename kvm-s390.{c,h} to s390.{c,h} Date: Wed, 12 Aug 2026 17:36:10 +0200 Message-ID: <20260812153631.3376090-15-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7c930a cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=GjolvbTUVQmQk0ik3y8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX3ufe0ge4z2t2 MhCuaxxur0ioHeXr12UqsEb8pIjtT4uC9JTrSR8ycH4Ugb6isyb1LZxz4IjIjjmJQbHJ+F78FUn 6+2H/r/vuPxkMi+Lh9RZ3eygDZbEVbfqpr4p1DiDLJSbqGa2b95KfHf97NfFOZZd1xCnft7f5wu +gbaoYuQxDBUm+ICokIiWYM7s5mL+PTgj61lLBrugQPHENiw2Mcy4m7VOpzHMKSL6bDmL4G7sV1 Zf4bgzdKeRceTs0RtEF7QNiubAoMZrBLc6wucLHpWBVm3pcn/t4FB7aLbvfxdgId9E64/bbC3A7 eQ4C/dmDeNIbUKbmtyyoYl9PEhHBe72bl+y3t5yMQ3XYm/VpYJOSRk3L/p6AjknVzAjFJYJsuHB peyiWxoYdcP28jsVz7l1W/VGAcz72YBatj1yTr5F6Y+mTAdH44h+RHRb5GmUIFfyX5Xw9eqfUeY eMCrDY7D4Q5TKLeXgog== X-Proofpoint-ORIG-GUID: 5PT25hJ5ni7NkwffdMa1YsM44nXaC-rF X-Proofpoint-GUID: B8ogpzjb7HWPUJyUlI9DRzoxCAUwN0Vx X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX7vIML+b6UXuX 30S9WYunDeSomLrP3KTKNVRc9STP487ZZReztXt9LwwxMal/QvPpSCHQYTPNN1npQAKMOrN5Adb icBIAC+Fv9XCZEOUC0RAW3D33Xl+qtk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Rename kvm-s390.c to s390.c and kvm-s390.h to s390.h for consistency with the new directory structure. Update all include statements and simplify Makefile ccflags from explicit paths to -I$(src). No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/Makefile | 4 ++-- arch/s390/kvm/diag.c | 2 +- arch/s390/kvm/gaccess.c | 2 +- arch/s390/kvm/gaccess.h | 2 +- arch/s390/kvm/gmap.c | 2 +- arch/s390/kvm/guestdbg.c | 2 +- arch/s390/kvm/intercept.c | 2 +- arch/s390/kvm/interrupt.c | 2 +- arch/s390/kvm/pci.c | 2 +- arch/s390/kvm/priv.c | 2 +- arch/s390/kvm/pv.c | 2 +- arch/s390/kvm/{kvm-s390.c =3D> s390.c} | 2 +- arch/s390/kvm/{kvm-s390.h =3D> s390.h} | 2 +- arch/s390/kvm/sigp.c | 2 +- arch/s390/kvm/vsie.c | 2 +- 15 files changed, 16 insertions(+), 16 deletions(-) rename arch/s390/kvm/{kvm-s390.c =3D> s390.c} (99%) rename arch/s390/kvm/{kvm-s390.h =3D> s390.h} (99%) diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile index dac9d53b23d8..961de97b8e80 100644 --- a/arch/s390/kvm/Makefile +++ b/arch/s390/kvm/Makefile @@ -5,9 +5,9 @@ =20 include $(srctree)/virt/kvm/Makefile.kvm =20 -ccflags-y :=3D -Ivirt/kvm -Iarch/s390/kvm +ccflags-y :=3D -I$(src) =20 -kvm-y +=3D kvm-s390.o intercept.o interrupt.o priv.o sigp.o +kvm-y +=3D s390.o intercept.o interrupt.o priv.o sigp.o kvm-y +=3D diag.o gaccess.o guestdbg.o vsie.o pv.o kvm-y +=3D dat.o gmap.o faultin.o =20 diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c index 031ab6e5d6c4..09033c8ff1bb 100644 --- a/arch/s390/kvm/diag.c +++ b/arch/s390/kvm/diag.c @@ -12,7 +12,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "trace.h" #include "trace-s390.h" #include "gaccess.h" diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c index 0d389a302a70..e5c064f263df 100644 --- a/arch/s390/kvm/gaccess.c +++ b/arch/s390/kvm/gaccess.c @@ -17,7 +17,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "dat.h" #include "gmap.h" #include "gaccess.h" diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/gaccess.h index b5385cec60f4..ef922b3b4990 100644 --- a/arch/s390/kvm/gaccess.h +++ b/arch/s390/kvm/gaccess.h @@ -14,7 +14,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" =20 /** * kvm_s390_real_to_abs - convert guest real address to guest absolute add= ress diff --git a/arch/s390/kvm/gmap.c b/arch/s390/kvm/gmap.c index 3758e4009709..b5b920392378 100644 --- a/arch/s390/kvm/gmap.c +++ b/arch/s390/kvm/gmap.c @@ -21,7 +21,7 @@ =20 #include "dat.h" #include "gmap.h" -#include "kvm-s390.h" +#include "s390.h" #include "faultin.h" =20 static inline bool kvm_s390_is_in_sie(struct kvm_vcpu *vcpu) diff --git a/arch/s390/kvm/guestdbg.c b/arch/s390/kvm/guestdbg.c index 9a6149e310bb..1bf7e91b7e61 100644 --- a/arch/s390/kvm/guestdbg.c +++ b/arch/s390/kvm/guestdbg.c @@ -8,7 +8,7 @@ */ #include #include -#include "kvm-s390.h" +#include "s390.h" #include "gaccess.h" =20 /* diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c index 1980df61ef30..ca1205dfac8b 100644 --- a/arch/s390/kvm/intercept.c +++ b/arch/s390/kvm/intercept.c @@ -17,7 +17,7 @@ #include #include =20 -#include "kvm-s390.h" +#include "s390.h" #include "gaccess.h" #include "trace.h" #include "trace-s390.h" diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 0d9fbe75dc66..9aa786952718 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -29,7 +29,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "gaccess.h" #include "trace-s390.h" #include "pci.h" diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c index 50f5ec79600e..82892e1e03d9 100644 --- a/arch/s390/kvm/pci.c +++ b/arch/s390/kvm/pci.c @@ -14,7 +14,7 @@ #include #include #include "pci.h" -#include "kvm-s390.h" +#include "s390.h" =20 struct zpci_aift *aift; =20 diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c index b1ba24c346ef..b3cb2c2c3aa7 100644 --- a/arch/s390/kvm/priv.c +++ b/arch/s390/kvm/priv.c @@ -26,7 +26,7 @@ #include #include #include "gaccess.h" -#include "kvm-s390.h" +#include "s390.h" #include "trace.h" #include "gmap.h" =20 diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c index f549b161b972..7adfdc9b62be 100644 --- a/arch/s390/kvm/pv.c +++ b/arch/s390/kvm/pv.c @@ -18,7 +18,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "dat.h" #include "gaccess.h" #include "gmap.h" diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/s390.c similarity index 99% rename from arch/s390/kvm/kvm-s390.c rename to arch/s390/kvm/s390.c index 4faff6625da3..ff09ffc10f0d 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/s390.c @@ -50,7 +50,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "gaccess.h" #include "gmap.h" #include "faultin.h" diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/s390.h similarity index 99% rename from arch/s390/kvm/kvm-s390.h rename to arch/s390/kvm/s390.h index 6d2842fb71a3..e144ca2e6d5e 100644 --- a/arch/s390/kvm/kvm-s390.h +++ b/arch/s390/kvm/s390.h @@ -452,7 +452,7 @@ void kvm_s390_vsie_destroy(struct kvm *kvm); int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu); int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu); =20 -/* implemented in kvm-s390.c */ +/* implemented in s390.c */ int kvm_s390_try_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_t= od_clock *gtod); int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long ad= dr); int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr); diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index 55c34cb35428..131b3371ef4f 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c @@ -14,7 +14,7 @@ #include #include #include "gaccess.h" -#include "kvm-s390.h" +#include "s390.h" #include "trace.h" =20 static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu, diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index f546239d8ff8..cc94ede0621f 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -23,7 +23,7 @@ #include #include #include -#include "kvm-s390.h" +#include "s390.h" #include "gaccess.h" #include "gmap.h" =20 --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27900477292; Wed, 12 Aug 2026 15:37:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; cv=none; b=l9W7yq1by+uRX5gzsfRZQAAqIRgge/kDWvTks5mr9cHN4YC8Zb8jgouPzxTg11h0gtZbECKfN4h83R2feyCdAoef4yl2RyA8RVL/AK4dJP0uEMxr9cwy/wCqf8SfXCpfA7AnapQK0JE+uDC1SLVh/AghSD7/gVNVe8V9xriPBV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; c=relaxed/simple; bh=EdFGf8YxnSwhdkfVah08anuZVdXtej03yCP5sCiX0dk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MC5lkIQC3ptoXSiauKqupIISWPdzSxuYCqTfedTmxQ16S7KmRSeYe2qD+Y9fSbVhhfK24hN5Q6wJIl0fXX9ScgB3EUD3hYHop68eA34DmmV9rb4WXhDPdc/mzBY/mEwoov8YsUSCsjG4lDcBpZIIRysTp8b9yXMI6dtQr5wm0AA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=ESqvU1OG; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="ESqvU1OG" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1Yiu3640166; Wed, 12 Aug 2026 15:36:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=s3vF+uw4F3bpLUE0X 1BDSIJXEWXABUkWsiEIo+Q8feQ=; b=ESqvU1OGPcx99jyKV+KYxoVvshVRJL1Pe gdrrs0b4Z3zH9ytvvmQSmAK9gyxU8JZI+eP3IsVMLS70BNo6ZdMlQJxOssfa7GPE /dIogs2wEILGhZ2poRopr1reO2zs7To5VzCCxKvPYP94h8OxeKRSEz9ZUgPsl0cU P6DAsjdS/3kU1Psg24dnPyS6kVtUK7Erb2dXyQg5iUPucWvDUIwGIUjE83lsDSdH /ATu1ouqWK+yPfFhK4psM/b3A2/d63nHzTH3jp3lyv4FOOA68ExjEsKafby4MowQ kxAgLxLPo606qKBWJ4t9yIq6aaWKoH6m6LwVBqby9lolkZc5MIbTg== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7c4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQNZw023787; Wed, 12 Aug 2026 15:36:42 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gejgb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFacUB42008842 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:38 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0621220063; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9EC982004B; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:37 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 15/33] KVM: s390: Move kvm_host definitions to kvm_host_s390 Date: Wed, 12 Aug 2026 17:36:11 +0200 Message-ID: <20260812153631.3376090-16-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: LNmedOL9g1EavO1ihRp1FkOeHK5KJ9mY X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c930b cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=r72m_m8qt4_FbYUiRqcA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX6gXAfl8TwOdc QFthaFHkTNGFMteXta/GBvzl/tmfJcnVaW81vvNVP4vrE0r3QcVX1fkyVw/GR96BHfqX8hThot5 35GQVju+tP9+DpDjfjqNzmNZ+t6FKiCqBR8zVbAAbjlXFAdzj+VU1SVQ19Mpy13hhLXoj49g4sD rK7tpwV377N3V+4Dw/p0Ej9EF7hKvPmhVM/BidbtP1THrDefZjOScDmMSkpTN0JCDOQ4Q+2rIK3 OUueE5cnLBGEU8jzNa7UXTBX6z8wBt3vOy3YsGh3o9XwGrnYJrsiff5omDp+4xA45zYyRzC8ebw dFVOFEHI96UP0Z2oUKC5pXsFko7WgCzMfxLNokFj6zZ5/N/EfAKl3ff2MLs5sW2awD/KmZrhI+i gUs30X0fvdQOkbo5XdeChDhHeAVTKA3cQzcFt/iauFr0j97eUHLu2EsxRccYWjB5UTuiNn/1Ff1 t/Y0MW9rjtT1VQ5ejPw== X-Proofpoint-ORIG-GUID: FCmO6NxNMKUY2gKsNQfKySytL6iSdDpX X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX5YIrmiX21Q1P vGaRrAv2ztU3qYPLKJBo7iDHgkm0MvJFm/6z5xUh0YZvAIfY0u38P0Lkornvk/HBXWHyK9kutz1 8ce/BxYD/8HHzJfRWhVR/UBbKWDGD04= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Rename kvm_host.h to kvm_host_s390.h and kvm_host_types.h to kvm_host_s390_types.h to distinguish s390-specific KVM definitions from the generic kvm_host.h that will be used for shared definitions. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/include/asm/kvm_host.h | 780 +----------------- .../asm/{kvm_host.h =3D> kvm_host_s390.h} | 6 +- ...kvm_host_types.h =3D> kvm_host_s390_types.h} | 6 +- arch/s390/include/asm/kvm_host_types.h | 349 +------- 4 files changed, 12 insertions(+), 1129 deletions(-) copy arch/s390/include/asm/{kvm_host.h =3D> kvm_host_s390.h} (99%) copy arch/s390/include/asm/{kvm_host_types.h =3D> kvm_host_s390_types.h} (= 98%) diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost.h index b4182ca4435f..e76ceee11ef5 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -1,784 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0 */ -/* - * definition for kernel virtual machines on s390 - * - * Copyright IBM Corp. 2008, 2018 - * - * Author(s): Carsten Otte - */ - =20 #ifndef ASM_KVM_HOST_H #define ASM_KVM_HOST_H =20 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define KVM_HAVE_MMU_RWLOCK -#define KVM_MAX_VCPUS 255 - -#define KVM_INTERNAL_MEM_SLOTS 1 - -/* - * These seem to be used for allocating ->chip in the routing table, which= we - * don't use. 1 is as small as we can get to reduce the needed memory. If = we - * need to look at ->chip later on, we'll need to revisit this. - */ -#define KVM_NR_IRQCHIPS 1 -#define KVM_IRQCHIP_NUM_PINS 1 -#define KVM_HALT_POLL_NS_DEFAULT 50000 - -/* s390-specific vcpu->requests bit members */ -#define KVM_REQ_ENABLE_IBS KVM_ARCH_REQ(0) -#define KVM_REQ_DISABLE_IBS KVM_ARCH_REQ(1) -#define KVM_REQ_ICPT_OPEREXC KVM_ARCH_REQ(2) -#define KVM_REQ_START_MIGRATION KVM_ARCH_REQ(3) -#define KVM_REQ_STOP_MIGRATION KVM_ARCH_REQ(4) -#define KVM_REQ_VSIE_RESTART KVM_ARCH_REQ(5) -#define KVM_REQ_REFRESH_GUEST_PREFIX \ - KVM_ARCH_REQ_FLAGS(6, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) - -struct kvm_vcpu_stat { - struct kvm_vcpu_stat_generic generic; - u64 exit_userspace; - u64 exit_null; - u64 exit_external_request; - u64 exit_io_request; - u64 exit_external_interrupt; - u64 exit_stop_request; - u64 exit_validity; - u64 exit_instruction; - u64 exit_pei; - u64 halt_no_poll_steal; - u64 instruction_lctl; - u64 instruction_lctlg; - u64 instruction_stctl; - u64 instruction_stctg; - u64 exit_program_interruption; - u64 exit_instr_and_program; - u64 exit_operation_exception; - u64 deliver_ckc; - u64 deliver_cputm; - u64 deliver_external_call; - u64 deliver_emergency_signal; - u64 deliver_service_signal; - u64 deliver_virtio; - u64 deliver_stop_signal; - u64 deliver_prefix_signal; - u64 deliver_restart_signal; - u64 deliver_program; - u64 deliver_io; - u64 deliver_machine_check; - u64 exit_wait_state; - u64 inject_ckc; - u64 inject_cputm; - u64 inject_external_call; - u64 inject_emergency_signal; - u64 inject_mchk; - u64 inject_pfault_init; - u64 inject_program; - u64 inject_restart; - u64 inject_set_prefix; - u64 inject_stop_signal; - u64 instruction_epsw; - u64 instruction_gs; - u64 instruction_io_other; - u64 instruction_lpsw; - u64 instruction_lpswe; - u64 instruction_lpswey; - u64 instruction_pfmf; - u64 instruction_ptff; - u64 instruction_sck; - u64 instruction_sckpf; - u64 instruction_stidp; - u64 instruction_spx; - u64 instruction_stpx; - u64 instruction_stap; - u64 instruction_iske; - u64 instruction_ri; - u64 instruction_rrbe; - u64 instruction_sske; - u64 instruction_ipte_interlock; - u64 instruction_stsi; - u64 instruction_stfl; - u64 instruction_tb; - u64 instruction_tpi; - u64 instruction_tprot; - u64 instruction_tsch; - u64 instruction_sie; - u64 instruction_essa; - u64 instruction_sthyi; - u64 instruction_sigp_sense; - u64 instruction_sigp_sense_running; - u64 instruction_sigp_external_call; - u64 instruction_sigp_emergency; - u64 instruction_sigp_cond_emergency; - u64 instruction_sigp_start; - u64 instruction_sigp_stop; - u64 instruction_sigp_stop_store_status; - u64 instruction_sigp_store_status; - u64 instruction_sigp_store_adtl_status; - u64 instruction_sigp_arch; - u64 instruction_sigp_prefix; - u64 instruction_sigp_restart; - u64 instruction_sigp_init_cpu_reset; - u64 instruction_sigp_cpu_reset; - u64 instruction_sigp_unknown; - u64 instruction_diagnose_10; - u64 instruction_diagnose_44; - u64 instruction_diagnose_9c; - u64 diag_9c_ignored; - u64 diag_9c_forward; - u64 instruction_diagnose_258; - u64 instruction_diagnose_308; - u64 instruction_diagnose_500; - u64 instruction_diagnose_other; - u64 pfault_sync; - u64 signal_exits; -}; - -#define PGM_OPERATION 0x01 -#define PGM_PRIVILEGED_OP 0x02 -#define PGM_EXECUTE 0x03 -#define PGM_PROTECTION 0x04 -#define PGM_ADDRESSING 0x05 -#define PGM_SPECIFICATION 0x06 -#define PGM_DATA 0x07 -#define PGM_FIXED_POINT_OVERFLOW 0x08 -#define PGM_FIXED_POINT_DIVIDE 0x09 -#define PGM_DECIMAL_OVERFLOW 0x0a -#define PGM_DECIMAL_DIVIDE 0x0b -#define PGM_HFP_EXPONENT_OVERFLOW 0x0c -#define PGM_HFP_EXPONENT_UNDERFLOW 0x0d -#define PGM_HFP_SIGNIFICANCE 0x0e -#define PGM_HFP_DIVIDE 0x0f -#define PGM_SEGMENT_TRANSLATION 0x10 -#define PGM_PAGE_TRANSLATION 0x11 -#define PGM_TRANSLATION_SPEC 0x12 -#define PGM_SPECIAL_OPERATION 0x13 -#define PGM_OPERAND 0x15 -#define PGM_TRACE_TABEL 0x16 -#define PGM_VECTOR_PROCESSING 0x1b -#define PGM_SPACE_SWITCH 0x1c -#define PGM_HFP_SQUARE_ROOT 0x1d -#define PGM_PC_TRANSLATION_SPEC 0x1f -#define PGM_AFX_TRANSLATION 0x20 -#define PGM_ASX_TRANSLATION 0x21 -#define PGM_LX_TRANSLATION 0x22 -#define PGM_EX_TRANSLATION 0x23 -#define PGM_PRIMARY_AUTHORITY 0x24 -#define PGM_SECONDARY_AUTHORITY 0x25 -#define PGM_LFX_TRANSLATION 0x26 -#define PGM_LSX_TRANSLATION 0x27 -#define PGM_ALET_SPECIFICATION 0x28 -#define PGM_ALEN_TRANSLATION 0x29 -#define PGM_ALE_SEQUENCE 0x2a -#define PGM_ASTE_VALIDITY 0x2b -#define PGM_ASTE_SEQUENCE 0x2c -#define PGM_EXTENDED_AUTHORITY 0x2d -#define PGM_LSTE_SEQUENCE 0x2e -#define PGM_ASTE_INSTANCE 0x2f -#define PGM_STACK_FULL 0x30 -#define PGM_STACK_EMPTY 0x31 -#define PGM_STACK_SPECIFICATION 0x32 -#define PGM_STACK_TYPE 0x33 -#define PGM_STACK_OPERATION 0x34 -#define PGM_ASCE_TYPE 0x38 -#define PGM_REGION_FIRST_TRANS 0x39 -#define PGM_REGION_SECOND_TRANS 0x3a -#define PGM_REGION_THIRD_TRANS 0x3b -#define PGM_SECURE_STORAGE_ACCESS 0x3d -#define PGM_NON_SECURE_STORAGE_ACCESS 0x3e -#define PGM_SECURE_STORAGE_VIOLATION 0x3f -#define PGM_MONITOR 0x40 -#define PGM_PER 0x80 -#define PGM_CRYPTO_OPERATION 0x119 - -/* irq types in ascend order of priorities */ -enum irq_types { - IRQ_PEND_SET_PREFIX =3D 0, - IRQ_PEND_RESTART, - IRQ_PEND_SIGP_STOP, - IRQ_PEND_IO_ISC_7, - IRQ_PEND_IO_ISC_6, - IRQ_PEND_IO_ISC_5, - IRQ_PEND_IO_ISC_4, - IRQ_PEND_IO_ISC_3, - IRQ_PEND_IO_ISC_2, - IRQ_PEND_IO_ISC_1, - IRQ_PEND_IO_ISC_0, - IRQ_PEND_VIRTIO, - IRQ_PEND_PFAULT_DONE, - IRQ_PEND_PFAULT_INIT, - IRQ_PEND_EXT_HOST, - IRQ_PEND_EXT_SERVICE, - IRQ_PEND_EXT_SERVICE_EV, - IRQ_PEND_EXT_TIMING, - IRQ_PEND_EXT_CPU_TIMER, - IRQ_PEND_EXT_CLOCK_COMP, - IRQ_PEND_EXT_EXTERNAL, - IRQ_PEND_EXT_EMERGENCY, - IRQ_PEND_EXT_MALFUNC, - IRQ_PEND_EXT_IRQ_KEY, - IRQ_PEND_MCHK_REP, - IRQ_PEND_PROG, - IRQ_PEND_SVC, - IRQ_PEND_MCHK_EX, - IRQ_PEND_COUNT -}; - -/* We have 2M for virtio device descriptor pages. Smallest amount of - * memory per page is 24 bytes (1 queue), so (2048*1024) / 24 =3D 87381 - */ -#define KVM_S390_MAX_VIRTIO_IRQS 87381 - -/* - * Repressible (non-floating) machine check interrupts - * subclass bits in MCIC - */ -#define MCHK_EXTD_BIT 58 -#define MCHK_DEGR_BIT 56 -#define MCHK_WARN_BIT 55 -#define MCHK_REP_MASK ((1UL << MCHK_DEGR_BIT) | \ - (1UL << MCHK_EXTD_BIT) | \ - (1UL << MCHK_WARN_BIT)) - -/* Exigent machine check interrupts subclass bits in MCIC */ -#define MCHK_SD_BIT 63 -#define MCHK_PD_BIT 62 -#define MCHK_EX_MASK ((1UL << MCHK_SD_BIT) | (1UL << MCHK_PD_BIT)) - -#define IRQ_PEND_EXT_MASK ((1UL << IRQ_PEND_EXT_IRQ_KEY) | \ - (1UL << IRQ_PEND_EXT_CLOCK_COMP) | \ - (1UL << IRQ_PEND_EXT_CPU_TIMER) | \ - (1UL << IRQ_PEND_EXT_MALFUNC) | \ - (1UL << IRQ_PEND_EXT_EMERGENCY) | \ - (1UL << IRQ_PEND_EXT_EXTERNAL) | \ - (1UL << IRQ_PEND_EXT_TIMING) | \ - (1UL << IRQ_PEND_EXT_HOST) | \ - (1UL << IRQ_PEND_EXT_SERVICE) | \ - (1UL << IRQ_PEND_EXT_SERVICE_EV) | \ - (1UL << IRQ_PEND_VIRTIO) | \ - (1UL << IRQ_PEND_PFAULT_INIT) | \ - (1UL << IRQ_PEND_PFAULT_DONE)) - -#define IRQ_PEND_IO_MASK ((1UL << IRQ_PEND_IO_ISC_0) | \ - (1UL << IRQ_PEND_IO_ISC_1) | \ - (1UL << IRQ_PEND_IO_ISC_2) | \ - (1UL << IRQ_PEND_IO_ISC_3) | \ - (1UL << IRQ_PEND_IO_ISC_4) | \ - (1UL << IRQ_PEND_IO_ISC_5) | \ - (1UL << IRQ_PEND_IO_ISC_6) | \ - (1UL << IRQ_PEND_IO_ISC_7)) - -#define IRQ_PEND_MCHK_MASK ((1UL << IRQ_PEND_MCHK_REP) | \ - (1UL << IRQ_PEND_MCHK_EX)) - -#define IRQ_PEND_EXT_II_MASK ((1UL << IRQ_PEND_EXT_CPU_TIMER) | \ - (1UL << IRQ_PEND_EXT_CLOCK_COMP) | \ - (1UL << IRQ_PEND_EXT_EMERGENCY) | \ - (1UL << IRQ_PEND_EXT_EXTERNAL) | \ - (1UL << IRQ_PEND_EXT_SERVICE) | \ - (1UL << IRQ_PEND_EXT_SERVICE_EV)) - -struct kvm_s390_interrupt_info { - struct list_head list; - u64 type; - union { - struct kvm_s390_io_info io; - struct kvm_s390_ext_info ext; - struct kvm_s390_pgm_info pgm; - struct kvm_s390_emerg_info emerg; - struct kvm_s390_extcall_info extcall; - struct kvm_s390_prefix_info prefix; - struct kvm_s390_stop_info stop; - struct kvm_s390_mchk_info mchk; - }; -}; - -struct kvm_s390_irq_payload { - struct kvm_s390_io_info io; - struct kvm_s390_ext_info ext; - struct kvm_s390_pgm_info pgm; - struct kvm_s390_emerg_info emerg; - struct kvm_s390_extcall_info extcall; - struct kvm_s390_prefix_info prefix; - struct kvm_s390_stop_info stop; - struct kvm_s390_mchk_info mchk; -}; - -struct kvm_s390_local_interrupt { - spinlock_t lock; - DECLARE_BITMAP(sigp_emerg_pending, KVM_MAX_VCPUS); - struct kvm_s390_irq_payload irq; - unsigned long pending_irqs; -}; - -#define FIRQ_LIST_IO_ISC_0 0 -#define FIRQ_LIST_IO_ISC_1 1 -#define FIRQ_LIST_IO_ISC_2 2 -#define FIRQ_LIST_IO_ISC_3 3 -#define FIRQ_LIST_IO_ISC_4 4 -#define FIRQ_LIST_IO_ISC_5 5 -#define FIRQ_LIST_IO_ISC_6 6 -#define FIRQ_LIST_IO_ISC_7 7 -#define FIRQ_LIST_PFAULT 8 -#define FIRQ_LIST_VIRTIO 9 -#define FIRQ_LIST_COUNT 10 -#define FIRQ_CNTR_IO 0 -#define FIRQ_CNTR_SERVICE 1 -#define FIRQ_CNTR_VIRTIO 2 -#define FIRQ_CNTR_PFAULT 3 -#define FIRQ_MAX_COUNT 4 - -/* mask the AIS mode for a given ISC */ -#define AIS_MODE_MASK(isc) (0x80 >> isc) - -#define KVM_S390_AIS_MODE_ALL 0 -#define KVM_S390_AIS_MODE_SINGLE 1 - -struct kvm_s390_float_interrupt { - unsigned long pending_irqs; - unsigned long masked_irqs; - spinlock_t lock; - struct list_head lists[FIRQ_LIST_COUNT]; - int counters[FIRQ_MAX_COUNT]; - struct kvm_s390_mchk_info mchk; - struct kvm_s390_ext_info srv_signal; - int last_sleep_cpu; - spinlock_t ais_lock; - u8 simm; - u8 nimm; -}; - -struct kvm_hw_wp_info_arch { - unsigned long addr; - unsigned long phys_addr; - int len; - char *old_data; -}; - -struct kvm_hw_bp_info_arch { - unsigned long addr; - int len; -}; - -/* - * Only the upper 16 bits of kvm_guest_debug->control are arch specific. - * Further KVM_GUESTDBG flags which an be used from userspace can be found= in - * arch/s390/include/uapi/asm/kvm.h - */ -#define KVM_GUESTDBG_EXIT_PENDING 0x10000000 - -#define guestdbg_enabled(vcpu) \ - (vcpu->guest_debug & KVM_GUESTDBG_ENABLE) -#define guestdbg_sstep_enabled(vcpu) \ - (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) -#define guestdbg_hw_bp_enabled(vcpu) \ - (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) -#define guestdbg_exit_pending(vcpu) (guestdbg_enabled(vcpu) && \ - (vcpu->guest_debug & KVM_GUESTDBG_EXIT_PENDING)) - -#define KVM_GUESTDBG_VALID_MASK \ - (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP |\ - KVM_GUESTDBG_USE_HW_BP | KVM_GUESTDBG_EXIT_PENDING) - -struct kvm_guestdbg_info_arch { - unsigned long cr0; - unsigned long cr9; - unsigned long cr10; - unsigned long cr11; - struct kvm_hw_bp_info_arch *hw_bp_info; - struct kvm_hw_wp_info_arch *hw_wp_info; - int nr_hw_bp; - int nr_hw_wp; - unsigned long last_bp; -}; - -struct kvm_s390_pv_vcpu { - u64 handle; - unsigned long stor_base; -}; - -struct kvm_vcpu_arch { - struct kvm_s390_sie_block *sie_block; - /* if vsie is active, currently executed shadow sie control block */ - struct kvm_s390_sie_block *vsie_block; - unsigned int host_acrs[NUM_ACRS]; - struct gs_cb *host_gscb; - struct kvm_s390_local_interrupt local_int; - struct hrtimer ckc_timer; - struct kvm_s390_pgm_info pgm; - struct gmap *gmap; - struct kvm_guestdbg_info_arch guestdbg; - unsigned long pfault_token; - unsigned long pfault_select; - unsigned long pfault_compare; - bool cputm_enabled; - /* - * The seqcount protects updates to cputm_start and sie_block.cputm, - * this way we can have non-blocking reads with consistent values. - * Only the owning VCPU thread (vcpu->cpu) is allowed to change these - * values and to start/stop/enable/disable cpu timer accounting. - */ - seqcount_t cputm_seqcount; - __u64 cputm_start; - bool gs_enabled; - bool skey_enabled; - /* Indicator if the access registers have been loaded from guest */ - bool acrs_loaded; - bool initialized; - struct kvm_s390_pv_vcpu pv; - union diag318_info diag318_info; - struct kvm_s390_mmu_cache *mc; -}; - -struct kvm_vm_stat { - struct kvm_vm_stat_generic generic; - u64 inject_io; - u64 io_390_adapter_map; - u64 io_390_adapter_unmap; - u64 io_390_inatomic; - u64 io_flic_inject_airq; - u64 io_set_adapter_int; - u64 io_390_inatomic_no_inject; - u64 inject_float_mchk; - u64 inject_pfault_done; - u64 inject_service_signal; - u64 inject_virtio; - u64 aen_forward; - u64 gmap_shadow_create; - u64 gmap_shadow_reuse; - u64 gmap_shadow_r1_entry; - u64 gmap_shadow_r2_entry; - u64 gmap_shadow_r3_entry; - u64 gmap_shadow_sg_entry; - u64 gmap_shadow_pg_entry; -}; - -struct kvm_arch_memory_slot { -}; - -struct s390_map_info { - struct list_head list; - __u64 guest_addr; - __u64 addr; - struct page *page; - /* - * True if the page is long-term pinned. False if long-term pinning - * failed and this entry exists only to preserve MAP/UNMAP symmetry. - */ - bool pinned; -}; - -struct s390_io_adapter { - unsigned int id; - int isc; - bool maskable; - bool masked; - bool swap; - bool suppressible; - spinlock_t maps_lock; - struct list_head maps; - unsigned int nr_maps; -}; - -#define MAX_S390_IO_ADAPTERS ((MAX_ISC + 1) * 8) -#define MAX_S390_ADAPTER_MAPS 256 - -/* maximum size of facilities and facility mask is 2k bytes */ -#define S390_ARCH_FAC_LIST_SIZE_BYTE (1<<11) -#define S390_ARCH_FAC_LIST_SIZE_U64 \ - (S390_ARCH_FAC_LIST_SIZE_BYTE / sizeof(u64)) -#define S390_ARCH_FAC_MASK_SIZE_BYTE S390_ARCH_FAC_LIST_SIZE_BYTE -#define S390_ARCH_FAC_MASK_SIZE_U64 \ - (S390_ARCH_FAC_MASK_SIZE_BYTE / sizeof(u64)) - -struct kvm_s390_cpu_model { - /* facility mask supported by kvm & hosting machine */ - __u64 fac_mask[S390_ARCH_FAC_MASK_SIZE_U64]; - struct kvm_s390_vm_cpu_subfunc subfuncs; - /* facility list requested by guest (in dma page) */ - __u64 *fac_list; - u64 cpuid; - unsigned short ibc; - /* subset of available UV-features for pv-guests enabled by user space */ - struct kvm_s390_vm_cpu_uv_feat uv_feat_guest; -}; - -#define S390_ARCH_FAC_FORMAT_2 2 -struct kvm_s390_flcb2 { - union { - struct { - u8 reserved0[7]; - u8 length; - }; - u64 header_val; - }; - u64 facilities[S390_ARCH_FAC_LIST_SIZE_U64]; -}; - -typedef int (*crypto_hook)(struct kvm_vcpu *vcpu); - -struct kvm_s390_crypto { - struct kvm_s390_crypto_cb *crycb; - struct rw_semaphore pqap_hook_rwsem; - crypto_hook *pqap_hook; - __u32 crycbd; - __u8 aes_kw; - __u8 dea_kw; - __u8 apie; -}; - -#define APCB0_MASK_SIZE 1 -struct kvm_s390_apcb0 { - __u64 apm[APCB0_MASK_SIZE]; /* 0x0000 */ - __u64 aqm[APCB0_MASK_SIZE]; /* 0x0008 */ - __u64 adm[APCB0_MASK_SIZE]; /* 0x0010 */ - __u64 reserved18; /* 0x0018 */ -}; - -#define APCB1_MASK_SIZE 4 -struct kvm_s390_apcb1 { - __u64 apm[APCB1_MASK_SIZE]; /* 0x0000 */ - __u64 aqm[APCB1_MASK_SIZE]; /* 0x0020 */ - __u64 adm[APCB1_MASK_SIZE]; /* 0x0040 */ - __u64 reserved60[4]; /* 0x0060 */ -}; - -struct kvm_s390_crypto_cb { - struct kvm_s390_apcb0 apcb0; /* 0x0000 */ - __u8 reserved20[0x0048 - 0x0020]; /* 0x0020 */ - __u8 dea_wrapping_key_mask[24]; /* 0x0048 */ - __u8 aes_wrapping_key_mask[32]; /* 0x0060 */ - struct kvm_s390_apcb1 apcb1; /* 0x0080 */ -}; - -struct kvm_s390_gisa { - union { - struct { /* common to all formats */ - u32 next_alert; - u8 ipm; - u8 reserved01[2]; - u8 iam; - }; - struct { /* format 0 */ - u32 next_alert; - u8 ipm; - u8 reserved01; - u8 : 6; - u8 g : 1; - u8 c : 1; - u8 iam; - u8 reserved02[4]; - u32 airq_count; - } g0; - struct { /* format 1 */ - u32 next_alert; - u8 ipm; - u8 simm; - u8 nimm; - u8 iam; - u8 aism[8]; - u8 : 6; - u8 g : 1; - u8 c : 1; - u8 reserved03[11]; - u32 airq_count; - } g1; - struct { - u64 word[4]; - } u64; - }; -}; - -struct kvm_s390_gib { - u32 alert_list_origin; - u32 reserved01; - u8:5; - u8 nisc:3; - u8 reserved03[3]; - u32 reserved04[5]; -}; - -/* - * sie_page2 has to be allocated as DMA because fac_list, crycb and - * gisa need 31bit addresses in the sie control block. - */ -struct sie_page2 { - __u64 fac_list[S390_ARCH_FAC_LIST_SIZE_U64]; /* 0x0000 */ - struct kvm_s390_crypto_cb crycb; /* 0x0800 */ - struct kvm_s390_gisa gisa; /* 0x0900 */ - struct kvm *kvm; /* 0x0920 */ - u8 reserved928[0x1000 - 0x928]; /* 0x0928 */ -}; - -struct vsie_page; - -struct kvm_s390_vsie { - struct mutex mutex; - struct radix_tree_root addr_to_page; - int page_count; - int next; - struct vsie_page *pages[KVM_MAX_VCPUS]; -}; - -struct kvm_s390_gisa_iam { - u8 mask; - spinlock_t ref_lock; - u32 ref_count[MAX_ISC + 1]; -}; - -struct kvm_s390_gisa_interrupt { - struct kvm_s390_gisa *origin; - struct kvm_s390_gisa_iam alert; - struct hrtimer timer; - u64 expires; - DECLARE_BITMAP(kicked_mask, KVM_MAX_VCPUS); -}; - -struct kvm_s390_pv { - u64 handle; - u64 guest_len; - unsigned long stor_base; - void *stor_var; - bool dumping; - void *set_aside; - struct list_head need_cleanup; - struct mmu_notifier mmu_notifier; - /* Protects against concurrent import-like operations */ - struct mutex import_lock; -}; - -struct kvm_s390_mmu_cache; - -struct kvm_arch { - struct esca_block *sca; - debug_info_t *dbf; - struct kvm_s390_float_interrupt float_int; - struct kvm_device *flic; - struct gmap *gmap; - unsigned long mem_limit; - int css_support; - int use_irqchip; - int use_cmma; - int use_pfmfi; - int use_skf; - int use_zpci_interp; - int user_cpu_state_ctrl; - int user_sigp; - int user_stsi; - int user_instr0; - int user_operexec; - int allow_vsie_esamode; - struct s390_io_adapter *adapters[MAX_S390_IO_ADAPTERS]; - wait_queue_head_t ipte_wq; - int ipte_lock_count; - struct mutex ipte_mutex; - spinlock_t start_stop_lock; - struct sie_page2 *sie_page2; - struct kvm_s390_cpu_model model; - struct kvm_s390_crypto crypto; - struct kvm_s390_vsie vsie; - u8 epdx; - u64 epoch; - int migration_mode; - atomic64_t cmma_dirty_pages; - /* subset of available cpu features enabled by user space */ - DECLARE_BITMAP(cpu_feat, KVM_S390_VM_CPU_FEAT_NR_BITS); - /* indexed by vcpu_idx */ - DECLARE_BITMAP(idle_mask, KVM_MAX_VCPUS); - struct kvm_s390_gisa_interrupt gisa_int; - struct kvm_s390_pv pv; - struct list_head kzdev_list; - spinlock_t kzdev_list_lock; - struct kvm_s390_mmu_cache *mc; -}; - -#define KVM_HVA_ERR_BAD (-1UL) -#define KVM_HVA_ERR_RO_BAD (-2UL) - -static inline bool kvm_is_error_hva(unsigned long addr) -{ - return IS_ERR_VALUE(addr); -} - -#define ASYNC_PF_PER_VCPU 64 -struct kvm_arch_async_pf { - unsigned long pfault_token; -}; - -bool kvm_arch_can_dequeue_async_page_present(struct kvm_vcpu *vcpu); - -void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, - struct kvm_async_pf *work); - -bool kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, - struct kvm_async_pf *work); - -void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, - struct kvm_async_pf *work); - -static inline void kvm_arch_async_page_present_queued(struct kvm_vcpu *vcp= u) {} - -void kvm_arch_crypto_clear_masks(struct kvm *kvm); -void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm, - unsigned long *aqm, unsigned long *adm); - -#define SIE64_RETURN_NORMAL 0 -#define SIE64_RETURN_MCCK 1 - -int __sie64a(phys_addr_t sie_block_phys, struct kvm_s390_sie_block *sie_bl= ock, u64 *rsa, - unsigned long gasce); - -static inline int sie64a(struct kvm_s390_sie_block *sie_block, u64 *rsa, u= nsigned long gasce) -{ - return __sie64a(virt_to_phys(sie_block), sie_block, rsa, gasce); -} - -extern char sie_exit; - -bool kvm_s390_pv_is_protected(struct kvm *kvm); -bool kvm_s390_pv_cpu_is_protected(struct kvm_vcpu *vcpu); - -extern int kvm_s390_enter_exit_sie(struct kvm_s390_sie_block *scb, - u64 *gprs, unsigned long gasce); - -extern int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc); -extern int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc); - -bool kvm_s390_is_gpa_in_memslot(struct kvm *kvm, gpa_t gpa); - -static inline void kvm_arch_free_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot) {} -static inline void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen) {} -static inline void kvm_arch_flush_shadow_all(struct kvm *kvm) {} -static inline void kvm_arch_flush_shadow_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot) {} -static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) {} -static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {} - -#define __KVM_HAVE_ARCH_VM_FREE -void kvm_arch_free_vm(struct kvm *kvm); - -struct zpci_kvm_hook { - int (*kvm_register)(void *opaque, struct kvm *kvm); - void (*kvm_unregister)(void *opaque); -}; - -extern struct zpci_kvm_hook zpci_kvm_hook; +#include =20 -#endif +#endif /* ASM_KVM_HOST_H */ diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost_s390.h similarity index 99% copy from arch/s390/include/asm/kvm_host.h copy to arch/s390/include/asm/kvm_host_s390.h index b4182ca4435f..0c4e061d7437 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host_s390.h @@ -8,8 +8,8 @@ */ =20 =20 -#ifndef ASM_KVM_HOST_H -#define ASM_KVM_HOST_H +#ifndef ASM_KVM_HOST_S390_H +#define ASM_KVM_HOST_S390_H =20 #include #include @@ -781,4 +781,4 @@ struct zpci_kvm_hook { =20 extern struct zpci_kvm_hook zpci_kvm_hook; =20 -#endif +#endif /* ASM_KVM_HOST_S390_H */ diff --git a/arch/s390/include/asm/kvm_host_types.h b/arch/s390/include/asm= /kvm_host_s390_types.h similarity index 98% copy from arch/s390/include/asm/kvm_host_types.h copy to arch/s390/include/asm/kvm_host_s390_types.h index ac82dd09fce5..9e348a530421 100644 --- a/arch/s390/include/asm/kvm_host_types.h +++ b/arch/s390/include/asm/kvm_host_s390_types.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 */ =20 -#ifndef _ASM_KVM_HOST_TYPES_H -#define _ASM_KVM_HOST_TYPES_H +#ifndef _ASM_KVM_HOST_S390_TYPES_H +#define _ASM_KVM_HOST_S390_TYPES_H =20 #include #include @@ -346,4 +346,4 @@ struct sie_page { __u8 reserved700[2304]; /* 0x0700 */ }; =20 -#endif /* _ASM_KVM_HOST_TYPES_H */ +#endif /* _ASM_KVM_HOST_S390_TYPES_H */ diff --git a/arch/s390/include/asm/kvm_host_types.h b/arch/s390/include/asm= /kvm_host_types.h index ac82dd09fce5..e5bdba07cab0 100644 --- a/arch/s390/include/asm/kvm_host_types.h +++ b/arch/s390/include/asm/kvm_host_types.h @@ -1,349 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0 */ =20 -#ifndef _ASM_KVM_HOST_TYPES_H -#define _ASM_KVM_HOST_TYPES_H +#ifndef ASM_KVM_HOST_TYPES_H +#define ASM_KVM_HOST_TYPES_H =20 -#include -#include +#include =20 -#define KVM_S390_BSCA_CPU_SLOTS 64 -#define KVM_S390_ESCA_CPU_SLOTS 248 - -#define SCB_ALIGNMENT_SHIFT 9 - -#define SIGP_CTRL_C 0x80 -#define SIGP_CTRL_SCN_MASK 0x3f - -union bsca_sigp_ctrl { - __u8 value; - struct { - __u8 c : 1; - __u8 r : 1; - __u8 scn : 6; - }; -}; - -union esca_sigp_ctrl { - __u16 value; - struct { - __u8 c : 1; - __u8 reserved: 7; - __u8 scn; - }; -}; - -struct esca_entry { - union esca_sigp_ctrl sigp_ctrl; - __u16 reserved1[3]; - __u64 sda; - __u64 reserved2[6]; -}; - -struct bsca_entry { - __u8 reserved0; - union bsca_sigp_ctrl sigp_ctrl; - __u16 reserved[3]; - __u64 sda; - __u64 reserved2[2]; -}; - -union ipte_control { - unsigned long val; - struct { - unsigned long k : 1; - unsigned long kh : 31; - unsigned long kg : 32; - }; -}; - -/* - * Utility is defined as two bytes but having it four bytes wide - * generates more efficient code. Since the following bytes are - * reserved this makes no functional difference. - */ -union sca_utility { - __u32 val; - struct { - __u32 mtcr : 1; - __u32 : 31; - }; -}; - -struct bsca_block { - union ipte_control ipte_control; - __u64 reserved[5]; - __u64 mcn; - union sca_utility utility; - __u8 reserved2[4]; - struct bsca_entry cpu[KVM_S390_BSCA_CPU_SLOTS]; -}; - -struct esca_block { - union ipte_control ipte_control; - __u64 reserved1[6]; - union sca_utility utility; - __u8 reserved2[4]; - __u64 mcn[4]; - __u64 reserved3[20]; - struct esca_entry cpu[KVM_S390_ESCA_CPU_SLOTS]; -}; - -/* - * This struct is used to store some machine check info from lowcore - * for machine checks that happen while the guest is running. - * This info in host's lowcore might be overwritten by a second machine - * check from host when host is in the machine check's high-level handling. - * The size is 24 bytes. - */ -struct mcck_volatile_info { - __u64 mcic; - __u64 failing_storage_address; - __u32 ext_damage_code; - __u32 reserved; -}; - -#define CR0_INITIAL_MASK (CR0_UNUSED_56 | CR0_INTERRUPT_KEY_SUBMASK | \ - CR0_MEASUREMENT_ALERT_SUBMASK) -#define CR14_INITIAL_MASK (CR14_UNUSED_32 | CR14_UNUSED_33 | \ - CR14_EXTERNAL_DAMAGE_SUBMASK) - -#define SIDAD_SIZE_MASK 0xff -#define sida_addr(sie_block) phys_to_virt((sie_block)->sidad & PAGE_MASK) -#define sida_size(sie_block) \ - ((((sie_block)->sidad & SIDAD_SIZE_MASK) + 1) * PAGE_SIZE) - -#define CPUSTAT_STOPPED 0x80000000 -#define CPUSTAT_WAIT 0x10000000 -#define CPUSTAT_ECALL_PEND 0x08000000 -#define CPUSTAT_STOP_INT 0x04000000 -#define CPUSTAT_IO_INT 0x02000000 -#define CPUSTAT_EXT_INT 0x01000000 -#define CPUSTAT_RUNNING 0x00800000 -#define CPUSTAT_RETAINED 0x00400000 -#define CPUSTAT_TIMING_SUB 0x00020000 -#define CPUSTAT_SIE_SUB 0x00010000 -#define CPUSTAT_RRF 0x00008000 -#define CPUSTAT_SLSV 0x00004000 -#define CPUSTAT_SLSR 0x00002000 -#define CPUSTAT_ZARCH 0x00000800 -#define CPUSTAT_MCDS 0x00000100 -#define CPUSTAT_KSS 0x00000200 -#define CPUSTAT_SM 0x00000080 -#define CPUSTAT_IBS 0x00000040 -#define CPUSTAT_GED2 0x00000010 -#define CPUSTAT_G 0x00000008 -#define CPUSTAT_GED 0x00000004 -#define CPUSTAT_J 0x00000002 -#define CPUSTAT_P 0x00000001 - -struct kvm_s390_sie_block { - atomic_t cpuflags; /* 0x0000 */ - __u32 : 1; /* 0x0004 */ - __u32 prefix : 19; - __u32 ibc : 12; - __u8 reserved08[4]; /* 0x0008 */ -#define PROG_IN_SIE (1<<0) - __u32 prog0c; /* 0x000c */ - union { - __u8 reserved10[16]; /* 0x0010 */ - struct { - __u64 pv_handle_cpu; - __u64 pv_handle_config; - }; - }; -#define PROG_BLOCK_SIE (1<<0) -#define PROG_REQUEST (1<<1) - atomic_t prog20; /* 0x0020 */ - __u8 reserved24[4]; /* 0x0024 */ - __u64 cputm; /* 0x0028 */ - __u64 ckc; /* 0x0030 */ - __u64 epoch; /* 0x0038 */ - __u32 svcc; /* 0x0040 */ -#define LCTL_CR0 0x8000 -#define LCTL_CR6 0x0200 -#define LCTL_CR9 0x0040 -#define LCTL_CR10 0x0020 -#define LCTL_CR11 0x0010 -#define LCTL_CR14 0x0002 - __u16 lctl; /* 0x0044 */ - __s16 icpua; /* 0x0046 */ -#define ICTL_OPEREXC 0x80000000 -#define ICTL_PINT 0x20000000 -#define ICTL_LPSW 0x00400000 -#define ICTL_STCTL 0x00040000 -#define ICTL_ISKE 0x00004000 -#define ICTL_SSKE 0x00002000 -#define ICTL_RRBE 0x00001000 -#define ICTL_TPROT 0x00000200 - __u32 ictl; /* 0x0048 */ -#define ECA_CEI 0x80000000 -#define ECA_IB 0x40000000 -#define ECA_SIGPI 0x10000000 -#define ECA_MVPGI 0x01000000 -#define ECA_AIV 0x00200000 -#define ECA_VX 0x00020000 -#define ECA_PROTEXCI 0x00002000 -#define ECA_APIE 0x00000008 -#define ECA_SII 0x00000001 - __u32 eca; /* 0x004c */ -#define ICPT_INST 0x04 -#define ICPT_PROGI 0x08 -#define ICPT_INSTPROGI 0x0C -#define ICPT_EXTREQ 0x10 -#define ICPT_EXTINT 0x14 -#define ICPT_IOREQ 0x18 -#define ICPT_WAIT 0x1c -#define ICPT_VALIDITY 0x20 -#define ICPT_STOP 0x28 -#define ICPT_OPEREXC 0x2C -#define ICPT_PARTEXEC 0x38 -#define ICPT_IOINST 0x40 -#define ICPT_KSS 0x5c -#define ICPT_MCHKREQ 0x60 -#define ICPT_INT_ENABLE 0x64 -#define ICPT_PV_INSTR 0x68 -#define ICPT_PV_NOTIFY 0x6c -#define ICPT_PV_PREF 0x70 - __u8 icptcode; /* 0x0050 */ - __u8 icptstatus; /* 0x0051 */ - __u16 ihcpu; /* 0x0052 */ - __u8 reserved54; /* 0x0054 */ -#define IICTL_CODE_NONE 0x00 -#define IICTL_CODE_MCHK 0x01 -#define IICTL_CODE_EXT 0x02 -#define IICTL_CODE_IO 0x03 -#define IICTL_CODE_RESTART 0x04 -#define IICTL_CODE_SPECIFICATION 0x10 -#define IICTL_CODE_OPERAND 0x11 - __u8 iictl; /* 0x0055 */ - __u16 ipa; /* 0x0056 */ - __u32 ipb; /* 0x0058 */ - __u32 scaoh; /* 0x005c */ -#define FPF_BPBC 0x20 - __u8 fpf; /* 0x0060 */ -#define ECB_GS 0x40 -#define ECB_TE 0x10 -#define ECB_SPECI 0x08 -#define ECB_SRSI 0x04 -#define ECB_HOSTPROTINT 0x02 -#define ECB_PTF 0x01 - __u8 ecb; /* 0x0061 */ -#define ECB2_CMMA 0x80 -#define ECB2_IEP 0x20 -#define ECB2_PFMFI 0x08 -#define ECB2_ESCA 0x04 -#define ECB2_ZPCI_LSI 0x02 - __u8 ecb2; /* 0x0062 */ -#define ECB3_AISI 0x20 -#define ECB3_AISII 0x10 -#define ECB3_DEA 0x08 -#define ECB3_AES 0x04 -#define ECB3_RI 0x01 - __u8 ecb3; /* 0x0063 */ -#define ESCA_SCAOL_MASK ~0x3fU - __u32 scaol; /* 0x0064 */ - __u8 sdf; /* 0x0068 */ - __u8 epdx; /* 0x0069 */ - __u8 cpnc; /* 0x006a */ - __u8 reserved6b; /* 0x006b */ - __u32 todpr; /* 0x006c */ -#define GISA_FORMAT1 0x00000001 - __u32 gd; /* 0x0070 */ - __u8 reserved74[12]; /* 0x0074 */ - __u64 mso; /* 0x0080 */ - __u64 msl; /* 0x0088 */ - psw_t gpsw; /* 0x0090 */ - __u64 gg14; /* 0x00a0 */ - __u64 gg15; /* 0x00a8 */ - __u8 reservedb0[8]; /* 0x00b0 */ -#define HPID_KVM 0x4 -#define HPID_VSIE 0x5 - __u8 hpid; /* 0x00b8 */ - __u8 reservedb9[7]; /* 0x00b9 */ - union { - struct { - __u32 eiparams; /* 0x00c0 */ - __u16 extcpuaddr; /* 0x00c4 */ - __u16 eic; /* 0x00c6 */ - }; - __u64 mcic; /* 0x00c0 */ - } __packed; - __u32 reservedc8; /* 0x00c8 */ - union { - struct { - __u16 pgmilc; /* 0x00cc */ - __u16 iprcc; /* 0x00ce */ - }; - __u32 edc; /* 0x00cc */ - } __packed; - union { - struct { - __u32 dxc; /* 0x00d0 */ - __u16 mcn; /* 0x00d4 */ - __u8 perc; /* 0x00d6 */ - __u8 peratmid; /* 0x00d7 */ - }; - __u64 faddr; /* 0x00d0 */ - } __packed; - __u64 peraddr; /* 0x00d8 */ - __u8 eai; /* 0x00e0 */ - __u8 peraid; /* 0x00e1 */ - __u8 oai; /* 0x00e2 */ - __u8 armid; /* 0x00e3 */ - __u8 reservede4[4]; /* 0x00e4 */ - union { - __u64 tecmc; /* 0x00e8 */ - struct { - __u16 subchannel_id; /* 0x00e8 */ - __u16 subchannel_nr; /* 0x00ea */ - __u32 io_int_parm; /* 0x00ec */ - __u32 io_int_word; /* 0x00f0 */ - }; - } __packed; - __u8 reservedf4[8]; /* 0x00f4 */ -#define CRYCB_FORMAT_MASK 0x00000003 -#define CRYCB_FORMAT0 0x00000000 -#define CRYCB_FORMAT1 0x00000001 -#define CRYCB_FORMAT2 0x00000003 - __u32 crycbd; /* 0x00fc */ - __u64 gcr[16]; /* 0x0100 */ - union { - __u64 gbea; /* 0x0180 */ - __u64 sidad; - }; - __u8 reserved188[8]; /* 0x0188 */ - __u64 sdnxo; /* 0x0190 */ - __u8 reserved198[8]; /* 0x0198 */ - __u32 fac; /* 0x01a0 */ - __u8 reserved1a4[20]; /* 0x01a4 */ - __u64 cbrlo; /* 0x01b8 */ - __u8 reserved1c0[8]; /* 0x01c0 */ -#define ECD_HOSTREGMGMT 0x20000000 -#define ECD_MEF 0x08000000 -#define ECD_ETOKENF 0x02000000 -#define ECD_ECC 0x00200000 -#define ECD_HMAC 0x00004000 - __u32 ecd; /* 0x01c8 */ - __u8 reserved1cc[18]; /* 0x01cc */ - __u64 pp; /* 0x01de */ - __u8 reserved1e6[2]; /* 0x01e6 */ - __u64 itdba; /* 0x01e8 */ - __u64 riccbd; /* 0x01f0 */ - __u64 gvrd; /* 0x01f8 */ -} __packed __aligned(512); - -struct kvm_s390_itdb { - __u8 data[256]; -}; - -struct sie_page { - struct kvm_s390_sie_block sie_block; - struct mcck_volatile_info mcck_info; /* 0x0200 */ - __u8 reserved218[360]; /* 0x0218 */ - __u64 pv_grregs[16]; /* 0x0380 */ - __u8 reserved400[512]; /* 0x0400 */ - struct kvm_s390_itdb itdb; /* 0x0600 */ - __u8 reserved700[2304]; /* 0x0700 */ -}; - -#endif /* _ASM_KVM_HOST_TYPES_H */ +#endif /* ASM_KVM_HOST_TYPES_H */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C6FB47989B; Wed, 12 Aug 2026 15:37:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549068; cv=none; b=XrzSYxzR3ujAVBdQsp24HPrqpP65zirnjhotkmc0H5i0cN76w+s4PpZlAf74UHy/shyvHARHrVBiQslvSezJHNA3Edb9mlrCTjMU2B0Bo3Ewx43wZVrn2GSrMpGqWqIcAYkEbvbJ4+fSP8VOo6o0YEbN1VysSUgExalJJCL8wXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549068; c=relaxed/simple; bh=Ef5gnhF7x3talP8mcnjrnwLk41c0TxwtAp6o6ci0dcc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SsT+GIbDEJL+bjLfyXJtnl98zq04v0+0SAgTeOA0VeLJrE7aXNMGIAloXJQXPDTroIoJkhA6LNX7FGFXsLFv30yr/JvopqyYkuERO/g+Jk4/jRHdncbF2xo4RwUbMg1/xUyNt8SxXTogHgs9aRS6rFgioKMkBwSWRYMO/jXuq6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=IwN7xo26; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="IwN7xo26" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1S3x3686405; Wed, 12 Aug 2026 15:36:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=eEIg1Xw4LzW5cs8dP xyjzAXZwHhpDE2Y+1SyF1VqDm0=; b=IwN7xo260tXIwAnCqP5iqEH6pBM0X50u4 bBe1YvnlpHjTz/xLlY6taA+XVQzqgfLM2xcRPAJ3rf46ipvGTlYWLZ4Pxh133eli InEua6EO4COwbd7q6lzMDtZOjBW3xcbbIa8t85cSTMk3ksM7bIeXjtFdk4gJBBxR 602poLr3xFNExIDNNe0danjlaTwI5oznBfhChxxHjAo4puSlwE118faWahgNtYFB EZmRzUqr4pxiC5LtvSL5UEl+73IWUiSPfnlOM3Waa+G1/Zl6NyaBfvmDhL9jhkxL Oka/QwD+iXXrd+lb2iJpKONmQv01ST5t724AXRKHtLmDrMeKbEmtg== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9u5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQTf6024859; Wed, 12 Aug 2026 15:36:42 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpjn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFacer26607904 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:38 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6E6B420040; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1599120067; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 16/33] KVM: s390: Move s390 kvm code into a subdirectory Date: Wed, 12 Aug 2026 17:36:12 +0200 Message-ID: <20260812153631.3376090-17-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8KvD/J/dZhsQ YS7wq0vmF10P0ro7yCi1FFfcy2Kpe/upnIu/jVBfScm8JVu0VQTAgS0rU/O/Z0XlWc/M10qGHDo yCkbdwcJIurX5A+XTyhfjn3L4bgvKwnShrCVNmNq4dvlaCXC5x5F2RhawcmSPMfgTHG8IUfQgzH rkJf52mdNYxsfW+Yz09FgkfZKjMyfqIH5MhdrrSsNzY9aa6utZ+KhcH+mWUnBd7KbZXmgGH7pdF 0KMTBPDRmkib+oiZTiiscnGH6Zjc+hORbO5AYnsfX8unvzM0roa0NuAUI2MbTfoCX5GBm0dKSHc zlhUJ2pSn5BsPVLjhWGSNFEe3aPjQzcCCqyDCPV0g7m8tzhM2/BnR1TaZFG9ADjtbdOtA1fiFDO t5aOAKqQDPDTzrsLBtP8G8nlZS4JekmoYgsMga71hqSqdfCNHLJzEJE7/LxlUByMBy8+wc8UDBl 7fo3meLF2vsVfcDUMYw== X-Proofpoint-ORIG-GUID: Vgn75nfZb8w5zP45uaoqsu3-ApumsbzN X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXxGSscRy5sw92 MkKlE0u86yrVoyr96v2J+dg8IvBumW1fDNrr+7MtJgsFRAriMGZds/iHJpTLQuUmqSE7HMhVzuA kw1SoXeKfI3+QujSwkBB7lFct8f4XMc= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c930c cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=VwQbUJbxAAAA:8 a=l8Pa1nNPRxDDRIpcrlkA:9 X-Proofpoint-GUID: q5_k0aIdYqMZ-vw1puVkrjVtk6VgDvKy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Move all the code required to run s390 KVM guests on s390 to a s390 subdirectory. Move gmap related code into a gmap directory to later share gmap code between KVM implementations. Update S390 VFIO-PCI MAINTAINERS filepath. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- MAINTAINERS | 2 +- arch/s390/kvm/Makefile | 11 +---------- arch/s390/kvm/gmap/Makefile | 5 +++++ arch/s390/kvm/{ =3D> gmap}/dat.c | 0 arch/s390/kvm/{ =3D> gmap}/dat.h | 0 arch/s390/kvm/{ =3D> gmap}/faultin.c | 0 arch/s390/kvm/{ =3D> gmap}/faultin.h | 0 arch/s390/kvm/{ =3D> gmap}/gmap.c | 0 arch/s390/kvm/{ =3D> gmap}/gmap.h | 0 arch/s390/kvm/{ =3D> gmap}/trace_gmap.h | 2 +- arch/s390/kvm/{ =3D> s390}/Makefile | 9 ++++----- arch/s390/kvm/{ =3D> s390}/diag.c | 0 arch/s390/kvm/{ =3D> s390}/gaccess.c | 0 arch/s390/kvm/{ =3D> s390}/gaccess.h | 0 arch/s390/kvm/{ =3D> s390}/guestdbg.c | 0 arch/s390/kvm/{ =3D> s390}/intercept.c | 0 arch/s390/kvm/{ =3D> s390}/interrupt.c | 0 arch/s390/kvm/{ =3D> s390}/pci.c | 0 arch/s390/kvm/{ =3D> s390}/pci.h | 0 arch/s390/kvm/{ =3D> s390}/priv.c | 0 arch/s390/kvm/{ =3D> s390}/pv.c | 0 arch/s390/kvm/{ =3D> s390}/s390.c | 0 arch/s390/kvm/{ =3D> s390}/s390.h | 0 arch/s390/kvm/{ =3D> s390}/sigp.c | 0 arch/s390/kvm/{ =3D> s390}/trace-s390.h | 0 arch/s390/kvm/{ =3D> s390}/trace.h | 0 arch/s390/kvm/{ =3D> s390}/vsie.c | 0 27 files changed, 12 insertions(+), 17 deletions(-) create mode 100644 arch/s390/kvm/gmap/Makefile rename arch/s390/kvm/{ =3D> gmap}/dat.c (100%) rename arch/s390/kvm/{ =3D> gmap}/dat.h (100%) rename arch/s390/kvm/{ =3D> gmap}/faultin.c (100%) rename arch/s390/kvm/{ =3D> gmap}/faultin.h (100%) rename arch/s390/kvm/{ =3D> gmap}/gmap.c (100%) rename arch/s390/kvm/{ =3D> gmap}/gmap.h (100%) rename arch/s390/kvm/{ =3D> gmap}/trace_gmap.h (96%) copy arch/s390/kvm/{ =3D> s390}/Makefile (62%) rename arch/s390/kvm/{ =3D> s390}/diag.c (100%) rename arch/s390/kvm/{ =3D> s390}/gaccess.c (100%) rename arch/s390/kvm/{ =3D> s390}/gaccess.h (100%) rename arch/s390/kvm/{ =3D> s390}/guestdbg.c (100%) rename arch/s390/kvm/{ =3D> s390}/intercept.c (100%) rename arch/s390/kvm/{ =3D> s390}/interrupt.c (100%) rename arch/s390/kvm/{ =3D> s390}/pci.c (100%) rename arch/s390/kvm/{ =3D> s390}/pci.h (100%) rename arch/s390/kvm/{ =3D> s390}/priv.c (100%) rename arch/s390/kvm/{ =3D> s390}/pv.c (100%) rename arch/s390/kvm/{ =3D> s390}/s390.c (100%) rename arch/s390/kvm/{ =3D> s390}/s390.h (100%) rename arch/s390/kvm/{ =3D> s390}/sigp.c (100%) rename arch/s390/kvm/{ =3D> s390}/trace-s390.h (100%) rename arch/s390/kvm/{ =3D> s390}/trace.h (100%) rename arch/s390/kvm/{ =3D> s390}/vsie.c (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 15c7dc516f7c..29802f061063 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -24150,7 +24150,7 @@ L: linux-s390@vger.kernel.org L: kvm@vger.kernel.org S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux.git -F: arch/s390/kvm/pci* +F: arch/s390/kvm/s390/pci* F: drivers/vfio/pci/vfio_pci_zdev.c F: include/uapi/linux/vfio_zdev.h =20 diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile index 961de97b8e80..a4e3875b5bdd 100644 --- a/arch/s390/kvm/Makefile +++ b/arch/s390/kvm/Makefile @@ -3,13 +3,4 @@ # # Copyright IBM Corp. 2008 =20 -include $(srctree)/virt/kvm/Makefile.kvm - -ccflags-y :=3D -I$(src) - -kvm-y +=3D s390.o intercept.o interrupt.o priv.o sigp.o -kvm-y +=3D diag.o gaccess.o guestdbg.o vsie.o pv.o -kvm-y +=3D dat.o gmap.o faultin.o - -kvm-$(CONFIG_VFIO_PCI_ZDEV_KVM) +=3D pci.o -obj-$(CONFIG_KVM) +=3D kvm.o +obj-$(CONFIG_KVM) +=3D s390/ diff --git a/arch/s390/kvm/gmap/Makefile b/arch/s390/kvm/gmap/Makefile new file mode 100644 index 000000000000..3a4f8df11622 --- /dev/null +++ b/arch/s390/kvm/gmap/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +GMAP ?=3D ../gmap + +gmap-y +=3D $(GMAP)/dat.o $(GMAP)/gmap.o $(GMAP)/faultin.o diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/gmap/dat.c similarity index 100% rename from arch/s390/kvm/dat.c rename to arch/s390/kvm/gmap/dat.c diff --git a/arch/s390/kvm/dat.h b/arch/s390/kvm/gmap/dat.h similarity index 100% rename from arch/s390/kvm/dat.h rename to arch/s390/kvm/gmap/dat.h diff --git a/arch/s390/kvm/faultin.c b/arch/s390/kvm/gmap/faultin.c similarity index 100% rename from arch/s390/kvm/faultin.c rename to arch/s390/kvm/gmap/faultin.c diff --git a/arch/s390/kvm/faultin.h b/arch/s390/kvm/gmap/faultin.h similarity index 100% rename from arch/s390/kvm/faultin.h rename to arch/s390/kvm/gmap/faultin.h diff --git a/arch/s390/kvm/gmap.c b/arch/s390/kvm/gmap/gmap.c similarity index 100% rename from arch/s390/kvm/gmap.c rename to arch/s390/kvm/gmap/gmap.c diff --git a/arch/s390/kvm/gmap.h b/arch/s390/kvm/gmap/gmap.h similarity index 100% rename from arch/s390/kvm/gmap.h rename to arch/s390/kvm/gmap/gmap.h diff --git a/arch/s390/kvm/trace_gmap.h b/arch/s390/kvm/gmap/trace_gmap.h similarity index 96% rename from arch/s390/kvm/trace_gmap.h rename to arch/s390/kvm/gmap/trace_gmap.h index a3cad705021b..15ec88bdce55 100644 --- a/arch/s390/kvm/trace_gmap.h +++ b/arch/s390/kvm/gmap/trace_gmap.h @@ -7,7 +7,7 @@ #undef TRACE_SYSTEM #define TRACE_SYSTEM kvm #undef TRACE_INCLUDE_PATH -#define TRACE_INCLUDE_PATH . +#define TRACE_INCLUDE_PATH ../gmap #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE trace_gmap =20 diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/s390/Makefile similarity index 62% copy from arch/s390/kvm/Makefile copy to arch/s390/kvm/s390/Makefile index 961de97b8e80..762a63826423 100644 --- a/arch/s390/kvm/Makefile +++ b/arch/s390/kvm/s390/Makefile @@ -1,15 +1,14 @@ # SPDX-License-Identifier: GPL-2.0 -# Makefile for kernel virtual machines on s390 -# -# Copyright IBM Corp. 2008 =20 +KVM :=3D ../../../../virt/kvm include $(srctree)/virt/kvm/Makefile.kvm +include $(srctree)/arch/s390/kvm/gmap/Makefile =20 -ccflags-y :=3D -I$(src) +ccflags-y :=3D -I$(src) -I$(srctree)/arch/s390/kvm/gmap =20 kvm-y +=3D s390.o intercept.o interrupt.o priv.o sigp.o kvm-y +=3D diag.o gaccess.o guestdbg.o vsie.o pv.o -kvm-y +=3D dat.o gmap.o faultin.o +kvm-y +=3D $(gmap-y) =20 kvm-$(CONFIG_VFIO_PCI_ZDEV_KVM) +=3D pci.o obj-$(CONFIG_KVM) +=3D kvm.o diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/s390/diag.c similarity index 100% rename from arch/s390/kvm/diag.c rename to arch/s390/kvm/s390/diag.c diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/s390/gaccess.c similarity index 100% rename from arch/s390/kvm/gaccess.c rename to arch/s390/kvm/s390/gaccess.c diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/s390/gaccess.h similarity index 100% rename from arch/s390/kvm/gaccess.h rename to arch/s390/kvm/s390/gaccess.h diff --git a/arch/s390/kvm/guestdbg.c b/arch/s390/kvm/s390/guestdbg.c similarity index 100% rename from arch/s390/kvm/guestdbg.c rename to arch/s390/kvm/s390/guestdbg.c diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/s390/intercept.c similarity index 100% rename from arch/s390/kvm/intercept.c rename to arch/s390/kvm/s390/intercept.c diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/s390/interrupt.c similarity index 100% rename from arch/s390/kvm/interrupt.c rename to arch/s390/kvm/s390/interrupt.c diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/s390/pci.c similarity index 100% rename from arch/s390/kvm/pci.c rename to arch/s390/kvm/s390/pci.c diff --git a/arch/s390/kvm/pci.h b/arch/s390/kvm/s390/pci.h similarity index 100% rename from arch/s390/kvm/pci.h rename to arch/s390/kvm/s390/pci.h diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/s390/priv.c similarity index 100% rename from arch/s390/kvm/priv.c rename to arch/s390/kvm/s390/priv.c diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/s390/pv.c similarity index 100% rename from arch/s390/kvm/pv.c rename to arch/s390/kvm/s390/pv.c diff --git a/arch/s390/kvm/s390.c b/arch/s390/kvm/s390/s390.c similarity index 100% rename from arch/s390/kvm/s390.c rename to arch/s390/kvm/s390/s390.c diff --git a/arch/s390/kvm/s390.h b/arch/s390/kvm/s390/s390.h similarity index 100% rename from arch/s390/kvm/s390.h rename to arch/s390/kvm/s390/s390.h diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/s390/sigp.c similarity index 100% rename from arch/s390/kvm/sigp.c rename to arch/s390/kvm/s390/sigp.c diff --git a/arch/s390/kvm/trace-s390.h b/arch/s390/kvm/s390/trace-s390.h similarity index 100% rename from arch/s390/kvm/trace-s390.h rename to arch/s390/kvm/s390/trace-s390.h diff --git a/arch/s390/kvm/trace.h b/arch/s390/kvm/s390/trace.h similarity index 100% rename from arch/s390/kvm/trace.h rename to arch/s390/kvm/s390/trace.h diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/s390/vsie.c similarity index 100% rename from arch/s390/kvm/vsie.c rename to arch/s390/kvm/s390/vsie.c --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82CD547010D; Wed, 12 Aug 2026 15:37:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; cv=none; b=LKjFHFkCq1WAN7FAySdBHexiNTsQ74f1YavT7i1jQdI7E01fhnCzKmQvB42wMhuhlUDIXFkFZgoXxYIrUsmDxE27bSHVWmvxfGqjG9oJ8LiRE2xRIlBHpAD1a6c0PsAu89FCrcnRcJyplPEJ7mRCXoW4tfCiayJ9cLjAup2E4jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; c=relaxed/simple; bh=w9lz+ST5U53kK0vlGc5alo8GnjBmpYDaSNL5Bz2Wd9U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bgngzikIQT6IGto9VZi9xS/3TJR8uPzdcojY9g3/CKuqivkPs01NEDzxxzqKX1FxuPg9MLq7SztXVpn4+9dTQgvrPPpjpKPmGsaHkclQ2a80N0l1iHLVO7XfOo64Zxv7ectd2i8Q/tgPsz8wzCaRpZnWAKiKAwqLMQ8zaf9jDT4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=jkRaOv13; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="jkRaOv13" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1uZ53594454; Wed, 12 Aug 2026 15:36:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=14LSQB2Ua2JnbWDG5 vBR62154KgGG9UD45CnK8iJMI8=; b=jkRaOv13XNyrfFB6tsxOS/nfBtB5IW7bx wZ91m2TnSZUV/AFyl9Dyx33ys6MzcSTlEhm/CcynMhrVg85yVw3np9pfKmMNJ2U6 m4pCFCo/o71c8GfUFsBPJ09wLRvki3NNr+8utAA5sIlYpIdJY+BHWPnUMjBKJujA jhIPvkfFSZgIeEvlE+Xu6mHA3RMKpu5f6Aipo3F0UX85PwNTVLP2dFCJluX0Ijqs H9VQP0qDtlY6l/PfVj2KoGGKX4gO+hE8STm1f57Lt8E2HKzfrH5qO6yvOHoJrOxv E0s4ADpD8AiMYo5KskONnB8VBOk799Hi1WkInGzQf7vswgcme8VgQ== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e1r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQIVW023680; Wed, 12 Aug 2026 15:36:42 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gejgf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFacOJ30605700 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:39 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C4B9020040; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7434B20049; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 17/33] KVM: s390: Move PGM code definitions to asm/kvm_host.h Date: Wed, 12 Aug 2026 17:36:13 +0200 Message-ID: <20260812153631.3376090-18-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c930c cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=7A3N2L3ptH-yS8k9SGwA:9 X-Proofpoint-GUID: PAmGJQGQAdbw2nbGtS_kExc-VFhb3xVC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXxH7L9fG7x3WZ nPqIhg0hUh20oebS6tlTTC4N0egBtYWe5jBmRnhTRteoEqa64Q5/lK/tfu7+hri7kCqvnBuIaSd jwcrQn1IC4pB8ag/egOUiUB63izYFzoLbxVOaOzR3bvaxxhke+QC6eZ0MeIdCmot3Ow7CkWD7bI 88yS6Pe0zCjumeLgTb/USujUXuHlv8tBjUj3aOcaIV5rHwq4/MWdeDKBPTQvT8beG2kkxfqBdWj xoIhkXgpxFAdg5/dFABlHSvgBIlODvYT/lYtLeExa6XE1EUd2232fm68TiGOZKPeGZZ+79tVDxP ptzs6lR3RvEzm2pJB2Sp22Oej0A4JD/snjowG3b1I7oYaU+237avL5GJd4kcrBpKuGa+Ah8UACR HmIBViGh1m0a5vxdcqdyCHPZZVHZyZelw7ubNt2OzVCN8B9BDr45PI8n0F5imNY77oTjsEqtrNo h9RairFhIag0LdThslA== X-Proofpoint-ORIG-GUID: w_FE-BSIIpBCRU0KVMbNrwNM4lQk4Aq0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX3yDz3oh0pOhd jPqF78rcCa3vHqkgJFIiXlKXDHv2yTe/qXpdCgO9PUPwGlhZjxBqjEMDGJuVnzwT1mC280NQUVk ML4cem6TTb685CW2qjYFiLpGRpWsP8A= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Move PGM code definitions from kvm_host_s390.h (back) to the generic kvm_host.h. These definitions are needed by multiple KVM implementations and should be in a shared location. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/include/asm/kvm_host.h | 57 +++++++++++++++++++++++++++ arch/s390/include/asm/kvm_host_s390.h | 57 --------------------------- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost.h index e76ceee11ef5..147325978225 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -5,4 +5,61 @@ =20 #include =20 +#define PGM_OPERATION 0x01 +#define PGM_PRIVILEGED_OP 0x02 +#define PGM_EXECUTE 0x03 +#define PGM_PROTECTION 0x04 +#define PGM_ADDRESSING 0x05 +#define PGM_SPECIFICATION 0x06 +#define PGM_DATA 0x07 +#define PGM_FIXED_POINT_OVERFLOW 0x08 +#define PGM_FIXED_POINT_DIVIDE 0x09 +#define PGM_DECIMAL_OVERFLOW 0x0a +#define PGM_DECIMAL_DIVIDE 0x0b +#define PGM_HFP_EXPONENT_OVERFLOW 0x0c +#define PGM_HFP_EXPONENT_UNDERFLOW 0x0d +#define PGM_HFP_SIGNIFICANCE 0x0e +#define PGM_HFP_DIVIDE 0x0f +#define PGM_SEGMENT_TRANSLATION 0x10 +#define PGM_PAGE_TRANSLATION 0x11 +#define PGM_TRANSLATION_SPEC 0x12 +#define PGM_SPECIAL_OPERATION 0x13 +#define PGM_OPERAND 0x15 +#define PGM_TRACE_TABEL 0x16 +#define PGM_VECTOR_PROCESSING 0x1b +#define PGM_SPACE_SWITCH 0x1c +#define PGM_HFP_SQUARE_ROOT 0x1d +#define PGM_PC_TRANSLATION_SPEC 0x1f +#define PGM_AFX_TRANSLATION 0x20 +#define PGM_ASX_TRANSLATION 0x21 +#define PGM_LX_TRANSLATION 0x22 +#define PGM_EX_TRANSLATION 0x23 +#define PGM_PRIMARY_AUTHORITY 0x24 +#define PGM_SECONDARY_AUTHORITY 0x25 +#define PGM_LFX_TRANSLATION 0x26 +#define PGM_LSX_TRANSLATION 0x27 +#define PGM_ALET_SPECIFICATION 0x28 +#define PGM_ALEN_TRANSLATION 0x29 +#define PGM_ALE_SEQUENCE 0x2a +#define PGM_ASTE_VALIDITY 0x2b +#define PGM_ASTE_SEQUENCE 0x2c +#define PGM_EXTENDED_AUTHORITY 0x2d +#define PGM_LSTE_SEQUENCE 0x2e +#define PGM_ASTE_INSTANCE 0x2f +#define PGM_STACK_FULL 0x30 +#define PGM_STACK_EMPTY 0x31 +#define PGM_STACK_SPECIFICATION 0x32 +#define PGM_STACK_TYPE 0x33 +#define PGM_STACK_OPERATION 0x34 +#define PGM_ASCE_TYPE 0x38 +#define PGM_REGION_FIRST_TRANS 0x39 +#define PGM_REGION_SECOND_TRANS 0x3a +#define PGM_REGION_THIRD_TRANS 0x3b +#define PGM_SECURE_STORAGE_ACCESS 0x3d +#define PGM_NON_SECURE_STORAGE_ACCESS 0x3e +#define PGM_SECURE_STORAGE_VIOLATION 0x3f +#define PGM_MONITOR 0x40 +#define PGM_PER 0x80 +#define PGM_CRYPTO_OPERATION 0x119 + #endif /* ASM_KVM_HOST_H */ diff --git a/arch/s390/include/asm/kvm_host_s390.h b/arch/s390/include/asm/= kvm_host_s390.h index 0c4e061d7437..22e8d7c4a755 100644 --- a/arch/s390/include/asm/kvm_host_s390.h +++ b/arch/s390/include/asm/kvm_host_s390.h @@ -150,63 +150,6 @@ struct kvm_vcpu_stat { u64 signal_exits; }; =20 -#define PGM_OPERATION 0x01 -#define PGM_PRIVILEGED_OP 0x02 -#define PGM_EXECUTE 0x03 -#define PGM_PROTECTION 0x04 -#define PGM_ADDRESSING 0x05 -#define PGM_SPECIFICATION 0x06 -#define PGM_DATA 0x07 -#define PGM_FIXED_POINT_OVERFLOW 0x08 -#define PGM_FIXED_POINT_DIVIDE 0x09 -#define PGM_DECIMAL_OVERFLOW 0x0a -#define PGM_DECIMAL_DIVIDE 0x0b -#define PGM_HFP_EXPONENT_OVERFLOW 0x0c -#define PGM_HFP_EXPONENT_UNDERFLOW 0x0d -#define PGM_HFP_SIGNIFICANCE 0x0e -#define PGM_HFP_DIVIDE 0x0f -#define PGM_SEGMENT_TRANSLATION 0x10 -#define PGM_PAGE_TRANSLATION 0x11 -#define PGM_TRANSLATION_SPEC 0x12 -#define PGM_SPECIAL_OPERATION 0x13 -#define PGM_OPERAND 0x15 -#define PGM_TRACE_TABEL 0x16 -#define PGM_VECTOR_PROCESSING 0x1b -#define PGM_SPACE_SWITCH 0x1c -#define PGM_HFP_SQUARE_ROOT 0x1d -#define PGM_PC_TRANSLATION_SPEC 0x1f -#define PGM_AFX_TRANSLATION 0x20 -#define PGM_ASX_TRANSLATION 0x21 -#define PGM_LX_TRANSLATION 0x22 -#define PGM_EX_TRANSLATION 0x23 -#define PGM_PRIMARY_AUTHORITY 0x24 -#define PGM_SECONDARY_AUTHORITY 0x25 -#define PGM_LFX_TRANSLATION 0x26 -#define PGM_LSX_TRANSLATION 0x27 -#define PGM_ALET_SPECIFICATION 0x28 -#define PGM_ALEN_TRANSLATION 0x29 -#define PGM_ALE_SEQUENCE 0x2a -#define PGM_ASTE_VALIDITY 0x2b -#define PGM_ASTE_SEQUENCE 0x2c -#define PGM_EXTENDED_AUTHORITY 0x2d -#define PGM_LSTE_SEQUENCE 0x2e -#define PGM_ASTE_INSTANCE 0x2f -#define PGM_STACK_FULL 0x30 -#define PGM_STACK_EMPTY 0x31 -#define PGM_STACK_SPECIFICATION 0x32 -#define PGM_STACK_TYPE 0x33 -#define PGM_STACK_OPERATION 0x34 -#define PGM_ASCE_TYPE 0x38 -#define PGM_REGION_FIRST_TRANS 0x39 -#define PGM_REGION_SECOND_TRANS 0x3a -#define PGM_REGION_THIRD_TRANS 0x3b -#define PGM_SECURE_STORAGE_ACCESS 0x3d -#define PGM_NON_SECURE_STORAGE_ACCESS 0x3e -#define PGM_SECURE_STORAGE_VIOLATION 0x3f -#define PGM_MONITOR 0x40 -#define PGM_PER 0x80 -#define PGM_CRYPTO_OPERATION 0x119 - /* irq types in ascend order of priorities */ enum irq_types { IRQ_PEND_SET_PREFIX =3D 0, --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF753470425; Wed, 12 Aug 2026 15:37:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; cv=none; b=iKOM4efebxIDaKlcwlhlZEilQUkhEsZgKmuaA+Vmt8IhgkhrLCgpqCovfNRg0AoaKxsk7C4jQ5QKWrBG6ELbYt5r8K2VaAeSvl/yng1sLi2xMDGWWTXfreXu4/u0tDwuIWe3O0L6XumBWS4jr9QRrVIcN9bgcyRDOQyhnOzh7nI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549040; c=relaxed/simple; bh=ylZ12ONA0BRyx/2IlkL8HKefq+dPZbQP9gWF/D36g60=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DokJgBhWZimK8RgxU9KT0HuNDvT7aFrUBHEBkzakxqIrZ6tRQjTaEOQJim88EQ+jLMN4X2Jp4/SI8WPQUhtiYlJQnbSL4OeKbs0ZLe1AenWKV8NDsodzicHm/wESk011jBUyToGZQUqrAIDYzuLEyOuwf2HA5p+W0X0c8CJWNoU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=NYhOztxV; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="NYhOztxV" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1RsU3686399; Wed, 12 Aug 2026 15:36:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=i1Iw5QCf5DqXqBr20 R8kUd7tujRZmrVCexv0lf7uwAI=; b=NYhOztxV5228n6I6vlSGC6cIQCoZtOtcO hq3q2Ag95raRmVc40O+RJWzksukhEZvMRq3oWC0GdN8mBPUETEwZkjX235gj5v49 TpOU4H1NJRKYQm3OHjub6hRpeFrDIZoaYfU7wWfMURSsB13465gBAI64FQghWxGL xpbdVHIBZvbYBB/7bf92bAw0DfCL+Dmky38p7CMnuwoZ0FXIszIIyl57vywXfwo/ EZ/tC/fjDhIgPFNKpWMNeuTSSGicKPRvmv+hsgCxVqT0Hp4Z5cV0w0RDstH3VwV+ C75veuksqSvpsJ6vgWf/4mrw8h5mNin6xyg1wnDA4wItACzH+QhRA== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9u8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQKsP012299; Wed, 12 Aug 2026 15:36:43 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq6utf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFadNn36438298 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:39 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2E8BB20040; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CAB012004D; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:38 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 18/33] KVM: s390: Prepare gmap for a second KVM implementation Date: Wed, 12 Aug 2026 17:36:14 +0200 Message-ID: <20260812153631.3376090-19-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXxODMZ/ojjEKL 0uizNULYMmZSJE9kDlHRe9Gvi42N0H4XYXSpXu33sjjV/hNM5gxrVvb/E5jxSD7WtklpmIQb0hS jwgZot27XopiIEYwchD5kgE0mrHC3eLi5nK5wBSky/QEc5Pt8VCiIphbUwO2GjA0ojoGBNGbPI8 s1IPgmMu8O7a3qq7RewU3gHeg4VvoiJbeu9HT+AOl7rMBRJ3D0LNPwktO64QkzyR5I34UUfwSJd V6iCmh4CvKsXqtrl9xdAqUHlzx8YxpEKE6F145cU/bzEenJdtcDdI/M25HINWtjtMS8CN4kFsbK UhHQd/zlBoAm3R3V91yeIwno6192wLpDAZmVfqjviqMtUSC9owxbtnQ++zBrZk0muRNM8PUahoJ D65NZsaavCNzfo6kHTmoKNE7vWcN3zomxsGkfCGaUi65OaD4Lq8Nuyy+3bcbJ2cjFB7yV5A+CPJ ei9M5yR9V0WO6xdnz3A== X-Proofpoint-ORIG-GUID: y22NoNWYfaxloMbjhhszp18qEJ1oZqN- X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX7n79Xn9drciy 04g/RWTNDBipN/uZ6v/qiE+zkPMkneO7mxrKM3OgvdD7AlvOM1uFuPGyUo42MfDrxRKQy7qfc9D itX7zppOFrpVqP2EwqZFMR3DVnHxXSY= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c930c cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=G2WYc9OQ16fb5gd5Pq8A:9 X-Proofpoint-GUID: 5o6TiX6gLmV2inZaFeRrlE0sF8m1Bqk4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Refactor gmap code such that a second s390 (host) KVM implementation can use the gmap code as well. Move mmu code from s390 to gmap so the other KVM implementation can use it as well. No functional change. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/gmap/Makefile | 2 +- arch/s390/kvm/gmap/kvm_mmu.c | 133 +++++++++++++++++++++++++++++++++++ arch/s390/kvm/gmap/kvm_mmu.h | 18 +++++ arch/s390/kvm/s390/s390.c | 126 ++++----------------------------- arch/s390/kvm/s390/s390.h | 8 +++ 5 files changed, 175 insertions(+), 112 deletions(-) create mode 100644 arch/s390/kvm/gmap/kvm_mmu.c create mode 100644 arch/s390/kvm/gmap/kvm_mmu.h diff --git a/arch/s390/kvm/gmap/Makefile b/arch/s390/kvm/gmap/Makefile index 3a4f8df11622..dd4ef062c536 100644 --- a/arch/s390/kvm/gmap/Makefile +++ b/arch/s390/kvm/gmap/Makefile @@ -2,4 +2,4 @@ =20 GMAP ?=3D ../gmap =20 -gmap-y +=3D $(GMAP)/dat.o $(GMAP)/gmap.o $(GMAP)/faultin.o +gmap-y +=3D $(GMAP)/dat.o $(GMAP)/gmap.o $(GMAP)/faultin.o $(GMAP)/kvm_mmu= .o diff --git a/arch/s390/kvm/gmap/kvm_mmu.c b/arch/s390/kvm/gmap/kvm_mmu.c new file mode 100644 index 000000000000..b08b8229bb6f --- /dev/null +++ b/arch/s390/kvm/gmap/kvm_mmu.c @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include + +#include "s390.h" +#include "gmap.h" +#include "dat.h" +#include "kvm_mmu.h" + +/* + * Get (and clear) the dirty memory log for a memory slot. + */ +int s390_kvm_mmu_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) +{ + int r; + unsigned long n; + struct kvm_memory_slot *memslot; + int is_dirty; + + if (kvm_is_ucontrol(kvm)) + return -EINVAL; + + mutex_lock(&kvm->slots_lock); + + r =3D -EINVAL; + if (log->slot >=3D KVM_USER_MEM_SLOTS) + goto out; + + r =3D kvm_get_dirty_log(kvm, log, &is_dirty, &memslot); + if (r) + goto out; + + /* Clear the dirty log */ + if (is_dirty) { + n =3D kvm_dirty_bitmap_bytes(memslot); + memset(memslot->dirty_bitmap, 0, n); + } + r =3D 0; +out: + mutex_unlock(&kvm->slots_lock); + return r; +} + +int s390_kvm_mmu_prepare_memory_region(struct kvm *kvm, + const struct kvm_memory_slot *old, + struct kvm_memory_slot *new, + enum kvm_mr_change change) +{ + if (kvm_is_ucontrol(kvm) && new && new->id < KVM_USER_MEM_SLOTS) + return -EINVAL; + + /* When we are protected, we should not change the memory slots */ + if (kvm_s390_pv_get_handle(kvm)) + return -EINVAL; + + if (change !=3D KVM_MR_DELETE && change !=3D KVM_MR_FLAGS_ONLY) { + /* + * A few sanity checks. The memory in userland is ok to be + * fragmented into various different vmas. It is okay to mmap() + * and munmap() stuff in this slot after doing this call at any + * time. + */ + if (new->userspace_addr & ~PAGE_MASK) + return -EINVAL; + if ((new->base_gfn + new->npages) * PAGE_SIZE > kvm->arch.mem_limit) + return -EINVAL; + if (!asce_contains_gfn(kvm->arch.gmap->asce, new->base_gfn + new->npages= - 1)) + return -EINVAL; + } + + if (!kvm_s390_is_migration_mode(kvm)) + return 0; + + /* + * Turn off migration mode when: + * - userspace creates a new memslot with dirty logging off, + * - userspace modifies an existing memslot (MOVE or FLAGS_ONLY) and + * dirty logging is turned off. + * Migration mode expects dirty page logging being enabled to store + * its dirty bitmap. + */ + if (change !=3D KVM_MR_DELETE && + !(new->flags & KVM_MEM_LOG_DIRTY_PAGES)) + WARN(kvm_s390_vm_stop_migration(kvm), + "Failed to stop migration mode"); + + return 0; +} + +void s390_kvm_mmu_commit_memory_region(struct kvm *kvm, + struct kvm_memory_slot *old, + const struct kvm_memory_slot *new, + enum kvm_mr_change change) +{ + struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) =3D NULL; + int rc =3D 0; + + guard(mutex)(&kvm->slots_arch_lock); + + if (change =3D=3D KVM_MR_FLAGS_ONLY) + return; + + mc =3D kvm_s390_new_mmu_cache(); + if (!mc) { + rc =3D -ENOMEM; + goto out; + } + + scoped_guard(write_lock, &kvm->mmu_lock) { + kvm_s390_update_cmma_dirty(kvm, old); + switch (change) { + case KVM_MR_DELETE: + rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); + break; + case KVM_MR_MOVE: + rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); + if (rc) + break; + fallthrough; + case KVM_MR_CREATE: + rc =3D dat_create_slot(mc, kvm->arch.gmap->asce, new->base_gfn, new->np= ages); + break; + case KVM_MR_FLAGS_ONLY: + break; + default: + WARN(1, "Unknown KVM MR CHANGE: %d\n", change); + } + } +out: + if (rc) + pr_warn("failed to commit memory region\n"); +} diff --git a/arch/s390/kvm/gmap/kvm_mmu.h b/arch/s390/kvm/gmap/kvm_mmu.h new file mode 100644 index 000000000000..cdbd390bd33c --- /dev/null +++ b/arch/s390/kvm/gmap/kvm_mmu.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef ARCH_KVM_GMAP_KVM_MMU_H +#define ARCH_KVM_GMAP_KVM_MMU_H + +#include + +int s390_kvm_mmu_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log); +int s390_kvm_mmu_prepare_memory_region(struct kvm *kvm, + const struct kvm_memory_slot *old, + struct kvm_memory_slot *new, + enum kvm_mr_change change); +void s390_kvm_mmu_commit_memory_region(struct kvm *kvm, + struct kvm_memory_slot *old, + const struct kvm_memory_slot *new, + enum kvm_mr_change change); + +#endif /* ARCH_KVM_GMAP_KVM_MMU_H */ diff --git a/arch/s390/kvm/s390/s390.c b/arch/s390/kvm/s390/s390.c index ff09ffc10f0d..1d0d94f000f7 100644 --- a/arch/s390/kvm/s390/s390.c +++ b/arch/s390/kvm/s390/s390.c @@ -55,6 +55,7 @@ #include "gmap.h" #include "faultin.h" #include "pci.h" +#include "kvm_mmu.h" =20 #define CREATE_TRACE_POINTS #include "trace.h" @@ -745,33 +746,7 @@ static void sca_del_vcpu(struct kvm_vcpu *vcpu); int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) { - int r; - unsigned long n; - struct kvm_memory_slot *memslot; - int is_dirty; - - if (kvm_is_ucontrol(kvm)) - return -EINVAL; - - mutex_lock(&kvm->slots_lock); - - r =3D -EINVAL; - if (log->slot >=3D KVM_USER_MEM_SLOTS) - goto out; - - r =3D kvm_get_dirty_log(kvm, log, &is_dirty, &memslot); - if (r) - goto out; - - /* Clear the dirty log */ - if (is_dirty) { - n =3D kvm_dirty_bitmap_bytes(memslot); - memset(memslot->dirty_bitmap, 0, n); - } - r =3D 0; -out: - mutex_unlock(&kvm->slots_lock); - return r; + return s390_kvm_mmu_get_dirty_log(kvm, log); } =20 static void icpt_operexc_on_all_vcpus(struct kvm *kvm) @@ -1266,7 +1241,7 @@ static int kvm_s390_vm_start_migration(struct kvm *kv= m) * Must be called with kvm->slots_arch_lock to avoid races with ourselves, * kvm_s390_vm_start_migration() and kvm_s390_get_cmma_bits(). */ -static int kvm_s390_vm_stop_migration(struct kvm *kvm) +int kvm_s390_vm_stop_migration(struct kvm *kvm) { /* migration mode already disabled */ if (!kvm->arch.migration_mode) @@ -5770,45 +5745,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, struct kvm_memory_slot *new, enum kvm_mr_change change) { - if (kvm_is_ucontrol(kvm) && new && new->id < KVM_USER_MEM_SLOTS) - return -EINVAL; - - /* When we are protected, we should not change the memory slots */ - if (kvm_s390_pv_get_handle(kvm)) - return -EINVAL; - - if (change !=3D KVM_MR_DELETE && change !=3D KVM_MR_FLAGS_ONLY) { - /* - * A few sanity checks. The memory in userland is ok to be - * fragmented into various different vmas. It is okay to mmap() - * and munmap() stuff in this slot after doing this call at any - * time. - */ - if (new->userspace_addr & ~PAGE_MASK) - return -EINVAL; - if ((new->base_gfn + new->npages) * PAGE_SIZE > kvm->arch.mem_limit) - return -EINVAL; - if (!asce_contains_gfn(kvm->arch.gmap->asce, new->base_gfn + new->npages= - 1)) - return -EINVAL; - } - - if (!kvm->arch.migration_mode) - return 0; - - /* - * Turn off migration mode when: - * - userspace creates a new memslot with dirty logging off, - * - userspace modifies an existing memslot (MOVE or FLAGS_ONLY) and - * dirty logging is turned off. - * Migration mode expects dirty page logging being enabled to store - * its dirty bitmap. - */ - if (change !=3D KVM_MR_DELETE && - !(new->flags & KVM_MEM_LOG_DIRTY_PAGES)) - WARN(kvm_s390_vm_stop_migration(kvm), - "Failed to stop migration mode"); - - return 0; + return s390_kvm_mmu_prepare_memory_region(kvm, old, new, change); } =20 static long cmma_d_count_pte(union pte *ptep, gfn_t gfn, gfn_t next, struc= t dat_walk *walk) @@ -5824,55 +5761,22 @@ static long cmma_d_count_pte(union pte *ptep, gfn_t= gfn, gfn_t next, struct dat_ return 0; } =20 -void kvm_arch_commit_memory_region(struct kvm *kvm, - struct kvm_memory_slot *old, - const struct kvm_memory_slot *new, - enum kvm_mr_change change) +void kvm_s390_update_cmma_dirty(struct kvm *kvm, struct kvm_memory_slot *o= ld) { const struct dat_walk_ops ops =3D { .pte_entry =3D cmma_d_count_pte, }; - struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) =3D NULL; - int rc =3D 0; =20 - guard(mutex)(&kvm->slots_arch_lock); - - if (change =3D=3D KVM_MR_FLAGS_ONLY) - return; - - mc =3D kvm_s390_new_mmu_cache(); - if (!mc) { - rc =3D -ENOMEM; - goto out; + if (kvm->arch.migration_mode && kvm->arch.use_cmma && old) { + _dat_walk_gfn_range(old->base_gfn, old->base_gfn + old->npages, + kvm->arch.gmap->asce, &ops, DAT_WALK_IGN_HOLES, + &kvm->arch.cmma_dirty_pages); } +} =20 - scoped_guard(write_lock, &kvm->mmu_lock) { - if (kvm->arch.migration_mode && kvm->arch.use_cmma && old) { - _dat_walk_gfn_range(old->base_gfn, old->base_gfn + old->npages, - kvm->arch.gmap->asce, &ops, DAT_WALK_IGN_HOLES, - &kvm->arch.cmma_dirty_pages); - } - - switch (change) { - case KVM_MR_DELETE: - rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); - break; - case KVM_MR_MOVE: - rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); - if (rc) - break; - fallthrough; - case KVM_MR_CREATE: - rc =3D dat_create_slot(mc, kvm->arch.gmap->asce, new->base_gfn, new->np= ages); - break; - case KVM_MR_FLAGS_ONLY: - break; - default: - WARN(1, "Unknown KVM MR CHANGE: %d\n", change); - } - } -out: - if (rc) - pr_warn("failed to commit memory region\n"); - return; +void kvm_arch_commit_memory_region(struct kvm *kvm, struct kvm_memory_slot= *old, + const struct kvm_memory_slot *new, + enum kvm_mr_change change) +{ + s390_kvm_mmu_commit_memory_region(kvm, old, new, change); } =20 /** diff --git a/arch/s390/kvm/s390/s390.h b/arch/s390/kvm/s390/s390.h index e144ca2e6d5e..d284a263ba70 100644 --- a/arch/s390/kvm/s390/s390.h +++ b/arch/s390/kvm/s390/s390.h @@ -472,6 +472,9 @@ int __kvm_s390_mprotect_many(struct gmap *gmap, gpa_t g= pa, u8 npages, unsigned i unsigned long bits); =20 bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu); +void kvm_s390_update_cmma_dirty(struct kvm *kvm, struct kvm_memory_slot *o= ld); +int kvm_s390_vm_stop_migration(struct kvm *kvm); + =20 /* implemented in diag.c */ int kvm_s390_handle_diag(struct kvm_vcpu *vcpu); @@ -594,6 +597,11 @@ static inline bool kvm_s390_cur_gmap_fault_is_write(vo= id) return test_facility(75) && (current->thread.gmap_teid.fsi =3D=3D TEID_FS= I_STORE); } =20 +static __always_inline int kvm_s390_is_migration_mode(struct kvm *kvm) +{ + return kvm->arch.migration_mode; +} + /** * kvm_s390_vcpu_crypto_reset_all * --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABA9946AA67; Wed, 12 Aug 2026 15:37:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549055; cv=none; b=Vm2OC03cfhkTBFbwRxknv7xMD5fQM/QT5Po3mUs8b4gVbq6A45IBu1Q2YXma53yX/Bxm6Ls+jwewg1qdTCR6nluWJl+DFJ+N64eii7pgw7fsnXQi+Fw48TBBem6QjFdRlyvOlghXqewORo9RTnByyZFfPKNUccHi++DT5Gbcf5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549055; c=relaxed/simple; bh=CDJvkD+GorJY/rKrFLmD2OdCkEr3Y/CnwuB4T8ljRIo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eaNchgVKupU6d1ZizzX3tSqJNtASkZMvPdSJUXO+uHWlD4EmmDT1P52bdz5ksSIvrUC/ZWXUF2eZTcV3MHoUGuUe4YMtPTDGP6rzFwX81Fic8L/WxYqsOkwyXTqirRv+GpE5AS+8M0a3wPOwXPPBAJrIcsDAI56/6ehx9n07RIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=M4avp7S9; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="M4avp7S9" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1fY13640434; Wed, 12 Aug 2026 15:36:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=rjtUUE8j1yKxyJ0dd NpLv7+uS88vcpzyl7hxEatF5Es=; b=M4avp7S9iR2an/fxSleMz5R4Oor9Rs1Mk du0CxsYi+v61bhBWMM8wTaEoa0Wh64gDOykshiPQ/WiTe8HNw4VLK+Bgd7QHMm4G V/VR5CiVcEAqWYBkzSBl4cpQ6ycCKmqTi1UNAVthp3Xqd2klZMsiTjbOO+vUbTR7 +KTmsU8/xlrO+rtALwDPtegLXEMCwKn27BEBiyJ5506jLCsKbZBCYV6ELxAcpbQC cU2tco8Wm1XplTpiBF3o2z/KJDh9YCxa24PC8kwzv9+aykPdjRZKhLMU1N70K5l4 PIu2xB9m/0ht7DArb3ap8+Q8LmEkfg9/26oIyQ1PtDsURQVXKnqHw== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7cc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQMVh023731; Wed, 12 Aug 2026 15:36:43 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gejgh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFadkm29425948 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:39 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8496920049; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 33EA62004E; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 19/33] KVM: s390: gmap: Make storage keys optional Date: Wed, 12 Aug 2026 17:36:15 +0200 Message-ID: <20260812153631.3376090-20-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: 7ngys5bZeOtxKlkLS41mjg3JW7x3c-f5 X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c930c cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=FRKyy_LW2YnNPCwhDngA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8LJtQPw+e1KN qEkM6X2axqYusjzmt6zbgGyCIvD4CyUj2ZD2i9g5nuUSM+GpbK+l9cKMf7UnSLyFvq9TYDSKL0L hRZg3x+MRdn1fll9YtY3r2yk+NwB4lNNPu8wwydOrzfdkjbgX3d2qlXsUsLAsC/8ZKv5wkMFNL6 X+PS2CUmskEuZi/ZLlogLmmacQkviY8GAx4UWCoXMu1HPjOJoIyj4sV9kwXBcArB7LmiMJtxrNc 6Uh5ZcO4JVfBnF0aDWaFMKryHIWnWgKUPXTGnNrINasspufGsrRrBP/zde0OCwMGq3btLcIeVZ8 ELievFHWZwSLMWByyffBR0JpR/YC7JnQ+k6ipiggQOVZjK1rZiy6cIyHgsJ5ShHNuHJLZ3w4dSz xD7tiVqoNiJR8IZ1J6P+i27r5tbZbPzESWWH3wl5BXyI4IvO5UQKb0uewBRGdPkUKNT8D/RfpBb XJgT+izaCScI9iX4oYA== X-Proofpoint-ORIG-GUID: XfalMYnwlJHB6WT6HGLeUI0P_9VDHTU- X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXwG4CNAm4Mg// yJzGuH1Btr+DKWxsFjWoFh1DA6Rkr4TIPZipQcqkCFTY56xVEbR9TpxZyhT2gkGWj6iaU5CX2V1 kUDCwq5pZohbiPDQga+crvhd0LkaQis= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Guard guest storage key handling behind `KVM_S390_MANAGES_S390_GUEST`. This enables other KVM implementations to use gmap without implementing storage key infrastructure. Define KVM_S390_MANAGES_S390_GUEST to 1 for KVM hosts managing s390 guests (in kvm_host_s390.h). A KVM implementation not implementing those features must define KVM_S390_MANAGES_S390_GUEST to 0 in its kvm_host_.h. No functional changes besides the new guard. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/include/asm/kvm_host_s390.h | 2 ++ arch/s390/kvm/gmap/dat.c | 2 ++ arch/s390/kvm/gmap/dat.h | 4 ++++ arch/s390/kvm/gmap/gmap.c | 3 +++ arch/s390/kvm/gmap/gmap.h | 6 ++++++ 5 files changed, 17 insertions(+) diff --git a/arch/s390/include/asm/kvm_host_s390.h b/arch/s390/include/asm/= kvm_host_s390.h index 22e8d7c4a755..cd692f8fb764 100644 --- a/arch/s390/include/asm/kvm_host_s390.h +++ b/arch/s390/include/asm/kvm_host_s390.h @@ -32,6 +32,8 @@ =20 #define KVM_INTERNAL_MEM_SLOTS 1 =20 +#define KVM_S390_MANAGES_S390_GUEST 1 + /* * These seem to be used for allocating ->chip in the routing table, which= we * don't use. 1 is as small as we can get to reduce the needed memory. If = we diff --git a/arch/s390/kvm/gmap/dat.c b/arch/s390/kvm/gmap/dat.c index 3f2d6e8902d7..f4e142995367 100644 --- a/arch/s390/kvm/gmap/dat.c +++ b/arch/s390/kvm/gmap/dat.c @@ -613,6 +613,7 @@ long _dat_walk_gfn_range(gfn_t start, gfn_t end, union = asce asce, return dat_crste_walk_range(start, min(end, asce_end(asce)), table, &walk= ); } =20 +#if KVM_S390_MANAGES_S390_GUEST int dat_get_storage_key(union asce asce, gfn_t gfn, union skey *skey) { union crste *crstep; @@ -839,6 +840,7 @@ long dat_reset_skeys(union asce asce, gfn_t start) =20 return _dat_walk_gfn_range(start, asce_end(asce), asce, &ops, DAT_WALK_IG= N_HOLES, NULL); } +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 struct slot_priv { unsigned long token; diff --git a/arch/s390/kvm/gmap/dat.h b/arch/s390/kvm/gmap/dat.h index 87108f51228e..2cc072168810 100644 --- a/arch/s390/kvm/gmap/dat.h +++ b/arch/s390/kvm/gmap/dat.h @@ -9,6 +9,7 @@ #ifndef ARCH_KVM_GMAP_DAT_H #define ARCH_KVM_GMAP_DAT_H =20 +#include #include #include #include @@ -532,6 +533,8 @@ int dat_entry_walk(struct kvm_s390_mmu_cache *mc, gfn_t= gfn, union asce asce, in void dat_free_level(struct crst_table *table, bool owns_ptes); struct crst_table *dat_alloc_crst_sleepable(unsigned long init); int dat_set_asce_limit(struct kvm_s390_mmu_cache *mc, union asce *asce, in= t newtype); + +#if KVM_S390_MANAGES_S390_GUEST int dat_get_storage_key(union asce asce, gfn_t gfn, union skey *skey); int dat_set_storage_key(struct kvm_s390_mmu_cache *mc, union asce asce, gf= n_t gfn, union skey skey, bool nq); @@ -539,6 +542,7 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cache = *mmc, union asce asce, gf union skey skey, union skey *oldkey, bool nq, bool mr, bool mc); int dat_reset_reference_bit(union asce asce, gfn_t gfn, union skey *skey); long dat_reset_skeys(union asce asce, gfn_t start); +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 unsigned long dat_get_ptval(struct page_table *table, struct ptval_param p= aram); void dat_set_ptval(struct page_table *table, struct ptval_param param, uns= igned long val); diff --git a/arch/s390/kvm/gmap/gmap.c b/arch/s390/kvm/gmap/gmap.c index b5b920392378..c1b0e2572818 100644 --- a/arch/s390/kvm/gmap/gmap.c +++ b/arch/s390/kvm/gmap/gmap.c @@ -944,6 +944,8 @@ void gmap_split_huge_pages(struct gmap *gmap) } while (start); } =20 +#if KVM_S390_MANAGES_S390_GUEST + static int _gmap_enable_skeys(struct gmap *gmap) { gfn_t start =3D 0; @@ -975,6 +977,7 @@ int gmap_enable_skeys(struct gmap *gmap) mmap_write_unlock(gmap->kvm->mm); return rc; } +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 static long _destroy_pages_pte(union pte *ptep, gfn_t gfn, gfn_t next, str= uct dat_walk *walk) { diff --git a/arch/s390/kvm/gmap/gmap.h b/arch/s390/kvm/gmap/gmap.h index c54c35e47d6d..328a81c72c7a 100644 --- a/arch/s390/kvm/gmap/gmap.h +++ b/arch/s390/kvm/gmap/gmap.h @@ -10,6 +10,8 @@ #ifndef ARCH_KVM_GMAP_GMAP_H #define ARCH_KVM_GMAP_GMAP_H =20 +#include + #include "dat.h" =20 /** @@ -98,7 +100,11 @@ int gmap_set_limit(struct gmap *gmap, gfn_t limit); int gmap_ucas_translate(struct kvm_s390_mmu_cache *mc, struct gmap *gmap, = gpa_t *gaddr); int gmap_ucas_map(struct gmap *gmap, gfn_t p_gfn, gfn_t c_gfn, unsigned lo= ng count); void gmap_ucas_unmap(struct gmap *gmap, gfn_t c_gfn, unsigned long count); + +#if KVM_S390_MANAGES_S390_GUEST int gmap_enable_skeys(struct gmap *gmap); +#endif /* KVM_S390_MANAGES_S390_GUEST */ + int gmap_pv_destroy_range(struct gmap *gmap, gfn_t start, gfn_t end, bool = interruptible); int gmap_insert_rmap(struct kvm_s390_mmu_cache *mc, struct gmap *sg, gfn_t= p_gfn, gfn_t r_gfn, int level); --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A27CE43F0B0; Wed, 12 Aug 2026 15:37:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549065; cv=none; b=WNjcWbfIiK4IFOwyZBe4QfiwY86W/QegCbXGFKqfL71XwmT+cYenF0lSsla9uJDgGyMAc2rqJIQYA2QFflHmeezhZVrzlCIaA41u7asm9ZoSytNVNbAzsUZrFNbUtsRx/c7wE8wyU32qNaRGSGnDLcPYk4Ph/qBJquaz3dGcLAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549065; c=relaxed/simple; bh=6q3PngeZ1hyi+tVAWj8ORRjbK5g9L1BDdRmFLtI8tRU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WMXGm6WvVcYLrBh4+iV+umHReGNyXFL/TiYoZ7Hj4Lt5a1GjivsOQgYPvzoItM/dD4u5CRxE6kCY1HwlsnJXagP2j+Extk7JPTxpgCMk/kTnhdJFbQvVaK4MdQztB+lZWdRk7ebmMu/vwIPDhVztlbYifBbhztIsJSZpcjSDlk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=dYQRnXNY; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="dYQRnXNY" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE2IqY3595592; Wed, 12 Aug 2026 15:36:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=mbc7MwJqZ/oVGq1aC bVY0xikGd/ZXjZ5Sb3UUIYFWbs=; b=dYQRnXNYotm7frMv7VWiZW6wNtSiNfnaD e0wItjx10TNZVJ4hHnXjZqMt3lf9/PuEcAw8AJ072A1VWz9BkgfrkTt8RT+5gPgc vx+ZalvtrsnGTNg5HXdQp5fFQuOQRA33D8iwnpPvSkgmQW+33j/71TAgaPwmCKXi vjA+m2ael5Uq1CL/UciQ8EAvIcjIMkpVQevFnY/j37uwZrnVf8c3J8rf4+Fh2lIO 598fMhb40PZikRgMcpkOp48JggMJY79zAjqc70bE0t2OiHukWnsNBGC1EM0xX1jU si0Wco5kAidpC6lLeWgOx2aezNK6Xehfgvz3LPke+ZP1cIIqk6SjA== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e1x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFBKqP018660; Wed, 12 Aug 2026 15:36:44 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5w6tdc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaeAx29425952 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:40 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DADF32004D; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8A0A92004B; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 20/33] KVM: s390: gmap: Make CMMA optional Date: Wed, 12 Aug 2026 17:36:16 +0200 Message-ID: <20260812153631.3376090-21-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c930d cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=xXhVJQDoiGTxmNljp-oA:9 X-Proofpoint-GUID: fsAwtltayVLSvOkRwSMx1HbJvAQEEUbx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1UIm/jR5T6w2 SkLMqY0X8cljbMkJRx+SHGPxMB1svlxS3fAzWF0hFNyPmX0XDyVKBakrBWTvEskHbwNre5DYIze cjDzBVErIAOmvWovQYZX0MAz0msDPnTFoED1tpcKfXmcWItn+aNuPHk6VDPHS9QsbCMa+v7aP6u 5IR3qpp5NDRJkYEFYZ66td4/UOnCr2Bogi+Hw44+/9vuxqeoxF/qQoQXzkYvjTAafwT6OmGuew9 Su+tT4FkwWUGqcoCrbXIUkKBqoZfLqOYVIr54Fm5rBzIbFKPu/6GG4SBmzwna68QPOOAhHtc3y9 3ohEtouSwrB/YTAMAJJVWIwOjRvzLo/PKqMTM6YtbDJ9Q9YJylTWf2c44uECzQP9zR/U6ebDc3v DR75QfWziYEWusO/1aoW+fUPYNZ6BVaj5imfvJYEAbAdOWziulqdeiNPiQTLwSRe3FkKpaNdICw WeyRHTL1jMPI7/IKWcw== X-Proofpoint-ORIG-GUID: EozK7Pm1xakV4njc29zNzW026GCiJ_VO X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX2ORiOJgtG1qd /2gsj0NmpZpvGAhhfyRHvaCpLD1VOHKYP/Q6LK6ndh/y5q42RDmnp0gcqS0Xq1c6geNqeBK2occ GoA1D6WAOayP8WXxRCUxciqPtErAQak= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Guard guest CMMA behind `KVM_S390_MANAGES_S390_GUEST`. This enables other KVM implementations to use gmap without implementing CMMA. No functional changes. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/gmap/dat.c | 2 ++ arch/s390/kvm/gmap/dat.h | 2 ++ arch/s390/kvm/gmap/gmap.c | 2 ++ arch/s390/kvm/gmap/gmap.h | 4 +++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/s390/kvm/gmap/dat.c b/arch/s390/kvm/gmap/dat.c index f4e142995367..43ebafb56ce5 100644 --- a/arch/s390/kvm/gmap/dat.c +++ b/arch/s390/kvm/gmap/dat.c @@ -1059,6 +1059,7 @@ int dat_set_prefix_notif_bit(union asce asce, gfn_t g= fn) return 0; } =20 +#if KVM_S390_MANAGES_S390_GUEST /** * dat_perform_essa() - Perform ESSA actions on the PGSTE. * @asce: The asce to operate on. @@ -1336,3 +1337,4 @@ int dat_set_cmma_bits(struct kvm_s390_mmu_cache *mc, = union asce asce, gfn_t gfn, } return _dat_walk_gfn_range(gfn, gfn + count, asce, &ops, DAT_WALK_IGN_HOL= ES, &state); } +#endif /* KVM_S390_MANAGES_S390_GUEST */ diff --git a/arch/s390/kvm/gmap/dat.h b/arch/s390/kvm/gmap/dat.h index 2cc072168810..4f11f9bbd83a 100644 --- a/arch/s390/kvm/gmap/dat.h +++ b/arch/s390/kvm/gmap/dat.h @@ -552,12 +552,14 @@ int dat_set_slot(struct kvm_s390_mmu_cache *mc, union= asce asce, gfn_t start, gf int dat_set_prefix_notif_bit(union asce asce, gfn_t gfn); bool dat_test_age_gfn(union asce asce, gfn_t start, gfn_t end); =20 +#if KVM_S390_MANAGES_S390_GUEST int dat_perform_essa(union asce asce, gfn_t gfn, int orc, union essa_state= *state, bool *dirty); long dat_reset_cmma(union asce asce, gfn_t start_gfn); int dat_peek_cmma(gfn_t start, union asce asce, unsigned int *count, u8 *v= alues); int dat_get_cmma(union asce asce, gfn_t *start, unsigned int *count, u8 *v= alues, atomic64_t *rem); int dat_set_cmma_bits(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_= t gfn, unsigned long count, unsigned long mask, const uint8_t *bits); +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 int kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc); =20 diff --git a/arch/s390/kvm/gmap/gmap.c b/arch/s390/kvm/gmap/gmap.c index c1b0e2572818..86513f653850 100644 --- a/arch/s390/kvm/gmap/gmap.c +++ b/arch/s390/kvm/gmap/gmap.c @@ -1098,6 +1098,7 @@ int gmap_protect_rmap(struct kvm_s390_mmu_cache *mc, = struct gmap *sg, gfn_t p_gf return 0; } =20 +#if KVM_S390_MANAGES_S390_GUEST static long __set_cmma_clean_pte(union pte *ptep, gfn_t gfn, gfn_t next, s= truct dat_walk *walk) { union pgste pgste; @@ -1140,6 +1141,7 @@ void _gmap_set_cmma_all(struct gmap *gmap, bool dirty) &gmap->kvm->arch.cmma_dirty_pages); } while (gfn); } +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 static void gmap_unshadow_level(struct gmap *sg, gfn_t r_gfn, int level) { diff --git a/arch/s390/kvm/gmap/gmap.h b/arch/s390/kvm/gmap/gmap.h index 328a81c72c7a..6f3bf11d2166 100644 --- a/arch/s390/kvm/gmap/gmap.h +++ b/arch/s390/kvm/gmap/gmap.h @@ -110,7 +110,6 @@ int gmap_insert_rmap(struct kvm_s390_mmu_cache *mc, str= uct gmap *sg, gfn_t p_gfn gfn_t r_gfn, int level); int gmap_protect_rmap(struct kvm_s390_mmu_cache *mc, struct gmap *sg, gfn_= t p_gfn, gfn_t r_gfn, kvm_pfn_t pfn, int level, bool wr); -void _gmap_set_cmma_all(struct gmap *gmap, bool dirty); void _gmap_handle_vsie_unshadow_event(struct gmap *parent, gfn_t gfn); struct gmap *gmap_create_shadow(struct kvm_s390_mmu_cache *mc, struct gmap= *gmap, union asce asce, int edat_level); @@ -204,6 +203,8 @@ static inline bool pte_needs_unshadow(union pte oldpte,= union pte newpte, union return !newpte.h.p || !newpte.s.pr; } =20 +#if KVM_S390_MANAGES_S390_GUEST +void _gmap_set_cmma_all(struct gmap *gmap, bool dirty); static inline void gmap_set_cmma_all_dirty(struct gmap *gmap) { _gmap_set_cmma_all(gmap, true); @@ -213,6 +214,7 @@ static inline void gmap_set_cmma_all_clean(struct gmap = *gmap) { _gmap_set_cmma_all(gmap, false); } +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 static inline union pgste _gmap_ptep_xchg(struct gmap *gmap, union pte *pt= ep, union pte newpte, union pgste pgste, gfn_t gfn, bool needs_lock) --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D30C4749DE; Wed, 12 Aug 2026 15:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549057; cv=none; b=AiWyanqj1VLpLRtKGeCzDn7OLGJW8+o9hJz5DY752fAEZuspBj/8PUGCAd498J6AAuu5/enzdpQyfGnSn1O0QcE1/251tTwP4XDq3DAEh/r8juKRgIq8mIt4yk0iPs0w2d/+jAPX4Hqe0pg42/B63ulZ87X75iFddbW5Xn9mVxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549057; c=relaxed/simple; bh=/y6Q+vjkXebeczrizNISGI2XDjYsBE1o/OAdkx9XAcw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pczQEuhV+yV8kcY9/wTB2xz3ExwP7kx546XQ7njeHv/RB+COetQGuyA/DHzxZEbIydnmhKWIiJ4LCgEXUGd2s9M4iRQszVsELEZbZ67C/7MFPIJkccSoyZtHJM7OGPUdJ1z2rlgpBALd9YpQKVosOMgjyYBFAPSTMWsGafpCCUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=HxChjJBk; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="HxChjJBk" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1pvC3640582; Wed, 12 Aug 2026 15:36:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=aaAObDlEPyOkMHd+7 Cm8L/rvLRRZcLQUEVCbbkCwFzI=; b=HxChjJBk+k7fAePv/DkhdRciorxxPqNVs Fq/JOOl5KtqpPkwPGY6EVq4DBxxZnzJgMxZyIIL34JVvENNvcOvpyFNv1NinuD5N wsA4mk0Zsfe3ptTHwt0GoNmnxxCMlycyPEMtiHtvbLnfPrcOwZTbY9a8zUldAg9E 17odPVqMU73cCmwNjTJExAv+16E+F1+AvqMKxvWzZgrtudGPSSjCaYKkDn+z4lnL tvGM3C5wv830MieC1Nchgx4a/92bgJiwn7b6Xa1SYsjkFvxRtHQ4tZPp9/rrdG3P IRvnzaddKGEAXthubSA2VnVeFs+HLgOWxLOGv6ArynwiOp10zrDrA== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7ch-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:45 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQP1a013797; Wed, 12 Aug 2026 15:36:44 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h6mka-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaeeJ30474914 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:40 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3C7AE20049; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E07562004E; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:39 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 21/33] KVM: s390: gmap: Make prefix handling optional Date: Wed, 12 Aug 2026 17:36:17 +0200 Message-ID: <20260812153631.3376090-22-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: TILkdj32NvlETDYS1R3Kh76anHKPAYH1 X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c930e cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=vumRUvCQ2wGzuXjOa00A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX60u34E28Gevj XaEGSbC9MtGkUrJiKx52XJFcqH1JW1p/+6yPZW55m2JZkohNGyfAKstJ3hqxdp1hpMcW+DDPSQr UZbWl9BtM/P1XTZnQbVNuvbHQbPmM9xl83PwH7rlW7wLaWMRD22o13ElQMR8n28nCmzcKGYawYc sMOw6+dWqoGxQodMUTuYI4MzFdXKij9QkvR52YKOxje2bvVWJLSRoSNMyboyWInHUps+cDfF61j Hb8Ti+9FjXSMW1Z/H7eIdW89UrzIkGmdptuZefXKxcNB7lwlI1KePjP0jqY62c//8gHc9mWtiLc IqqswPHEMaOzRYoSaCIkw74zol1uOVnJgeQccZ0QpFwl5V+JcQn/sWXOTQXRu+l4LVFu6H1Uz92 RYqNcrEcoT4vc20eYgli/HN15wzIW8G0ppqDlL/6XctkVpkHjjT/7ZgaActxrLwW5sF+yVUYVmk qqM41I9xPcSrUFYwbMg== X-Proofpoint-ORIG-GUID: DlOU6DU5XwB_cNfpOlA2Xr09lDEgC93l X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX2Icw4x8d1zYO Ep+tonKZi74jupPab3UY229sbY3VK7tRNjZoFVo2FO8WbvzDCIedp8c2bdKLSTR4850pTCPMoxu RwaWACs6gPLGQVomeDy0Vx6NCTMZsV8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Guard guest prefix handling behind `KVM_S390_MANAGES_S390_GUEST`. This enables other KVM implementations to use gmap without implementing prefix handling. The prefix handling is integrated deeply in the gmap implementation. Therefore, provide safe default implementations for the guarded functions. No functional changes. Signed-off-by: Steffen Eiden Reviewed-by: Christian Borntraeger --- arch/s390/kvm/gmap/dat.c | 2 +- arch/s390/kvm/gmap/dat.h | 9 +++++++++ arch/s390/kvm/gmap/gmap.c | 12 +++++++----- arch/s390/kvm/gmap/gmap.h | 9 ++++++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/arch/s390/kvm/gmap/dat.c b/arch/s390/kvm/gmap/dat.c index 43ebafb56ce5..3038eae1cfcc 100644 --- a/arch/s390/kvm/gmap/dat.c +++ b/arch/s390/kvm/gmap/dat.c @@ -1011,6 +1011,7 @@ bool dat_test_age_gfn(union asce asce, gfn_t start, g= fn_t end) return _dat_walk_gfn_range(start, end, asce, &test_age_ops, 0, NULL) > 0; } =20 +#if KVM_S390_MANAGES_S390_GUEST static long dat_set_pn_crste(union crste *crstep, gfn_t gfn, gfn_t next, s= truct dat_walk *walk) { union crste newcrste, oldcrste; @@ -1059,7 +1060,6 @@ int dat_set_prefix_notif_bit(union asce asce, gfn_t g= fn) return 0; } =20 -#if KVM_S390_MANAGES_S390_GUEST /** * dat_perform_essa() - Perform ESSA actions on the PGSTE. * @asce: The asce to operate on. diff --git a/arch/s390/kvm/gmap/dat.h b/arch/s390/kvm/gmap/dat.h index 4f11f9bbd83a..e452c141b841 100644 --- a/arch/s390/kvm/gmap/dat.h +++ b/arch/s390/kvm/gmap/dat.h @@ -549,7 +549,16 @@ void dat_set_ptval(struct page_table *table, struct pt= val_param param, unsigned =20 int dat_set_slot(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_t sta= rt, gfn_t end, u16 type, u16 param); + +#if KVM_S390_MANAGES_S390_GUEST int dat_set_prefix_notif_bit(union asce asce, gfn_t gfn); +#else +static inline int dat_set_prefix_notif_bit(union asce asce, gfn_t gfn) +{ + return 0; +} +#endif /* KVM_S390_MANAGES_S390_GUEST */ + bool dat_test_age_gfn(union asce asce, gfn_t start, gfn_t end); =20 #if KVM_S390_MANAGES_S390_GUEST diff --git a/arch/s390/kvm/gmap/gmap.c b/arch/s390/kvm/gmap/gmap.c index 86513f653850..4968330e9553 100644 --- a/arch/s390/kvm/gmap/gmap.c +++ b/arch/s390/kvm/gmap/gmap.c @@ -24,11 +24,6 @@ #include "s390.h" #include "faultin.h" =20 -static inline bool kvm_s390_is_in_sie(struct kvm_vcpu *vcpu) -{ - return vcpu->arch.sie_block->prog0c & PROG_IN_SIE; -} - static int gmap_limit_to_type(gfn_t limit) { if (!limit) @@ -256,6 +251,12 @@ int s390_replace_asce(struct gmap *gmap) return 0; } =20 +#if KVM_S390_MANAGES_S390_GUEST +static inline bool kvm_s390_is_in_sie(struct kvm_vcpu *vcpu) +{ + return vcpu->arch.sie_block->prog0c & PROG_IN_SIE; +} + bool _gmap_unmap_prefix(struct gmap *gmap, gfn_t gfn, gfn_t end, bool hint) { struct kvm *kvm =3D gmap->kvm; @@ -278,6 +279,7 @@ bool _gmap_unmap_prefix(struct gmap *gmap, gfn_t gfn, g= fn_t end, bool hint) } return true; } +#endif /* KVM_S390_MANAGES_S390_GUEST */ =20 struct clear_young_pte_priv { struct gmap *gmap; diff --git a/arch/s390/kvm/gmap/gmap.h b/arch/s390/kvm/gmap/gmap.h index 6f3bf11d2166..8f47f29c89fd 100644 --- a/arch/s390/kvm/gmap/gmap.h +++ b/arch/s390/kvm/gmap/gmap.h @@ -85,7 +85,6 @@ struct gmap_cache { for (pos =3D (head); n =3D pos ? pos->next : NULL, pos; pos =3D n) =20 int s390_replace_asce(struct gmap *gmap); -bool _gmap_unmap_prefix(struct gmap *gmap, gfn_t gfn, gfn_t end, bool hint= ); bool gmap_age_gfn(struct gmap *gmap, gfn_t start, gfn_t end); bool gmap_unmap_gfn_range(struct gmap *gmap, struct kvm_memory_slot *slot,= gfn_t start, gfn_t end); int gmap_try_fixup_minor(struct gmap *gmap, struct guest_fault *fault); @@ -163,6 +162,14 @@ static inline void gmap_handle_vsie_unshadow_event(str= uct gmap *parent, gfn_t gf _gmap_handle_vsie_unshadow_event(parent, gfn); } =20 +#if KVM_S390_MANAGES_S390_GUEST +bool _gmap_unmap_prefix(struct gmap *gmap, gfn_t gfn, gfn_t end, bool hint= ); +#else +static inline bool _gmap_unmap_prefix(struct gmap *gmap, gfn_t gfn, gfn_t = end, bool hint) +{ + return true; +} +#endif /* KVM_S390_MANAGES_S390_GUEST */ static inline bool gmap_mkold_prefix(struct gmap *gmap, gfn_t gfn, gfn_t e= nd) { return _gmap_unmap_prefix(gmap, gfn, end, true); --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 770FC4302F0; Wed, 12 Aug 2026 15:42:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549332; cv=none; b=e2g6ZAWGe3bKZDm/3QdLsZ7rIvPXhu0O2NqDbo2gyVk1VxvZz03SPbA2YVLRNddhXjE6UsI9mxEBp0E2jnzVKaFLaF26n6XjQ1Dc34+pPGJYtdoOayCxG8iyFfTE/vQ9EMO1jKKugDwRYK2DrZEwS52cB2Pot2BsQWH4hMGxz2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549332; c=relaxed/simple; bh=toUuq+e8+AhEgq4luBQMAPg2nLKcYYOSDvgjOF8SIYw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kO0jEli9g2PT/jiW+LvL8v2xCBsZHGe5ArfURgmdquyj9jIbcNS5IHvPIdcOiNrKeXyVJfNbdi8buvAIISzHtJc8pN3Ms/VdRp51SgEKngHAqA0un1cAXVAuETENXHQHZFC5ANXfP14Xh7en9jaX4+1AUYmRYgbGXCKYTKAb940= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=ZDCY0KHp; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="ZDCY0KHp" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1uFi3594446; Wed, 12 Aug 2026 15:36:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=FXg4mQ5ABYtlMNvWj pCpG3Ntfpr0j+KTb6BbqGNeJIo=; b=ZDCY0KHpMU8MmeBfRS6QGw///hNC05IK/ dBu5SEQIVK6ywmHcxyWsE+DCII0pokJDWCKBajygZusqYZp39qfDJEZLyJ/+Ivj6 4lnlRC61OdbTiJMWiKr2Tof9e+uHjb0pTQSnAZgA+Nznp/F24n9Dxr5O6/OZFjZY FfXTUgGI4AvqHlZWAtf5Id1C6IJmip2T3bGmz0pLLhPdUq2XCRePD3YqxDwzf//3 0Xya2y8n9GfaqA9b/HeiWDDMe576wDzcl+wdVG3SgqiG6MPeZZQQmnSkxl59tRiV gQRaxKOaoqeqw4hEsk7mfdjgZZrSCOSGyrxcsPk5YlseYIANDdA8w== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e1y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:45 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQGeB021692; Wed, 12 Aug 2026 15:36:44 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g4a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaeEK31130130 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:40 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 912B220063; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 41B502004B; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 22/33] KVM: s390: Prepare KVM/s390 for a second KVM module Date: Wed, 12 Aug 2026 17:36:18 +0200 Message-ID: <20260812153631.3376090-23-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c930d cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=m33X-YrdrFVFgJ0cfecA:9 X-Proofpoint-GUID: sYLW8VJ-mz1HbBc_1dqJ-6AQWIHpYnSe X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9zZF7x4XLFTE QcKiZ7F5+UvLQrlCiYPhvrRqg5Xr79Y6QuGeTyZgbzJFhKRdeL+9lr/4frbiEQoU+wEisdbuuU3 HDqS4JDk/4rbaoJ9yKYEoF4wsbX/G8q1pchaonPc4fi3s6So/lguJ0sOI210c7AyVjOjh5y55ZF d7ZQbmxga80OZOTdjZBq5pctMkltUydyDjJOOn1SW5Aa8Lfy2xrv3hZ8IVSZ+wf92QSINknL9BG Bhfp06UeSTFxLNPPbm/NZ3QLUg1aRmUxaLrzbkf4mBadaSVr07zP9H8VOC5tM/E7x+GAMK7C9vx qZzo/PC7O2YiKT2vZGlfAFiKPSOMg74UmMQhK1ftutYk04wkac3wH7O7RWp6V9XxqTXr9F32dxc 1+/yWR9f74G4RX+PeSRx10ehPrz/WoT/iRizZYv7SRymTVk/i/b/Jc0tGF5Vknkmplk9ccfFgWH AOF7Wt/FZIAPuuZtBkA== X-Proofpoint-ORIG-GUID: AU-9JOyLvryHb86NGv5uDMXjFShF84y8 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXylZPU5qhyBZW fbC5/BKDb9fY4B5/4pyxSD6eK8QZjc8Hj6uYWVgyKZZx1tzKt3BT/BZa2geJCvqUPj2z46TcsXy cNNbSw6pm4en88xvosDt9vfmm2On9Fw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" The second KVM module will have a different Kconfig set. When both modules are compiled the Kconfig sets get merged and the native s390 KVM needs to implement functionality required by the respective config options. Ensure that s390-KVM will still compile by implementing a stub for kvm_arch_vcpu_run_pid_change if CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE is enabled and defining KVM_NO_MMIO to disable KVM_MMIO. Signed-off-by: Steffen Eiden --- arch/s390/include/asm/kvm_host_s390.h | 1 + arch/s390/kvm/s390/s390.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/arch/s390/include/asm/kvm_host_s390.h b/arch/s390/include/asm/= kvm_host_s390.h index cd692f8fb764..207f44cb86d9 100644 --- a/arch/s390/include/asm/kvm_host_s390.h +++ b/arch/s390/include/asm/kvm_host_s390.h @@ -29,6 +29,7 @@ =20 #define KVM_HAVE_MMU_RWLOCK #define KVM_MAX_VCPUS 255 +#define KVM_NO_MMIO =20 #define KVM_INTERNAL_MEM_SLOTS 1 =20 diff --git a/arch/s390/kvm/s390/s390.c b/arch/s390/kvm/s390/s390.c index 1d0d94f000f7..d1e736e1f06f 100644 --- a/arch/s390/kvm/s390/s390.c +++ b/arch/s390/kvm/s390/s390.c @@ -5868,6 +5868,14 @@ bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm= _gfn_range *range) return gmap_unmap_gfn_range(kvm->arch.gmap, range->slot, range->start, ra= nge->end); } =20 +#ifdef CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE +/* Make s390 compile if arm64-on-s390 is selected */ +int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu) +{ + return 0; +} +#endif /* CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE */ + static inline unsigned long nonhyp_mask(int i) { unsigned int nonhyp_fai =3D (sclp.hmfai << i * 2) >> 30; --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2AAE247DF89; Wed, 12 Aug 2026 15:37:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549077; cv=none; b=XJtVmIgLpEPzGA7hlsDSxFnNfsjnZAFbCU3x4pqblfJM45nW8TlRz/t7+bPU00oS71s4ze2q6PZyqLRm2zH34m9/QpErg6v4LRbSovUn10qRberBw8IfkqYIdgObpGX7xd6EmuWFHluc9i2coBRZV+V8O9ybneLnYMzts722Bg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549077; c=relaxed/simple; bh=gvHNcI7rzaiml8o7re/h02yGcfSyB0tGNa2jqyagcPw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gq80X6qnPVRYfrPbgrtbUwTKTUBh8cHmTP4WNMaugv3lYBoQmJdJ8FH8jg+jsVJIdYyeAPM3UlAg0i8jiebCFc9nP1BwWVxTuLXXXbYucPQ6A/bBHE61Pct+37oMxEMZzYk/ujTXTBIaYI5VeKDKH6/y8YDnu+oFD+gWx361Wac= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=k2E5Jjon; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="k2E5Jjon" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1e7T2585766; Wed, 12 Aug 2026 15:36:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=kXGIDIlS244Wb3drV u/TJHHrzeZieIF7N4UX4NU/+mk=; b=k2E5JjonFpw7qGjs4AaC8n7gz97RTbPmo oDW1hT2U07RSaVPDlh4YCpc0YkXIkbSyYfR1R2CikxTWNQocqfZBX4iWjL+rYIyv V6vOKtRfJcMRSSSvkg/YU+Hxcqh1PBwL+FRFC3363XjuHyViQJkE1NLhrZ4qVpmt ybTXsJtdWMTH53rtP1Fgq942Z8c0+iuFrq2JviRSq1E1u+mwiAI/D+dERt+BiYmO +qCmglnGZUZoclJrROKnN1NbLuBgGUsLejdSdY8O6jsUGY2tjyFdBz/sfB3Vr6DH ahIiXKpw037PBWBX3BfmUYCsFPwBsmY1OtcTKa2kMs0Y/0m/TpDww== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fyb23usgn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:46 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQJrv024780; Wed, 12 Aug 2026 15:36:45 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpjw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFafAf39846240 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:41 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E5E8F2004E; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 969E720065; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:40 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 23/33] s390: Use arm64 headers Date: Wed, 12 Aug 2026 17:36:19 +0200 Message-ID: <20260812153631.3376090-24-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7c930e cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=ZhoKsAT7EqIUtuKD8d0A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX4f80eGbjIPKk 6cRkVZxiZPn3K8uPLEB0/JJfpg75wdl1KtWnC8qPyc/RImpLf+MvWG+eVYd3RQ/nEhYFoxstlKd einnEJYLqbavrv3rqxYECWZHmkr3WBIbKwhYoC2LIRNqYfXQCNpzSTm9X8SOc5nWo15drIXhhyy aCO3n1bTePiZqoqyq9xyDLrMFAQORDw3vls7nUpNvXxHbaTw2UJy/6Mig7HoKORmGsex95PabPu YllyFJr5eiK16DmqWKnIV0gQs5asSaPH6N+TRSunzKYQoUgG7bvUMzh+nj+VmVD+NluK3HKTaq5 jDDAfvvroDdh7kadBoksQSZm+6B7SLKAdW6Rb5a0UHeD6C2rvx7XTXIqlxupBp32rSbLGpDXvNn 5KehgICeQ4EVY0/Qi4IpMJcXeFMN/JDXkKcnW+DobXexBnLoIAQ7TOmSYUlGOHQYT9G8SyQFZul bmUqrV9ewYeH8TnkdGA== X-Proofpoint-ORIG-GUID: n3hRj_FrNtEpFkuGDOE7zHtPK1cS0aDl X-Proofpoint-GUID: 2ih5OeKAX2XYO5NZTEwlS1cfSlPTMWhS X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX5fXzTNDO4F2l wxMJsbs8w2lvVyVCga5Z1gEOSAsGAcYQPy/RedBhDQA5YZ+TP0UPXOyDxYokMGz8ugi+KFzQtet pXknKKLcjvQAu/gSojbuv8ILd/lFmxw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Introduce a flexible system for sharing ARM64 headers with s390 KVM. Selected arm64 headers or snippet of headers will be reachable by s390 code through asm/header.h. Add copy-arm64h.awk that detects ARM64_S390_COMMON markers and extracts marked section into a generated header consumable by s390. Falls back to full file copy when no markers are found. Transform copied includes by replacing '#include ' with '#include ' and similar for uapi headers to ensure correct path resolution on s390 and allow for a clear separation of s390 asm headers and arm64 asm headers. Integrate this extraction into the s390/kapi target, conditional on (the not yet existing) CONFIG_KVM_ARM64. Signed-off-by: Steffen Eiden --- arch/s390/tools/Makefile | 9 +++- arch/s390/tools/Makefile.arm64h | 57 ++++++++++++++++++++++ arch/s390/tools/copy-arm64h-full.awk | 47 ++++++++++++++++++ arch/s390/tools/copy-arm64h.awk | 72 ++++++++++++++++++++++++++++ 4 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 arch/s390/tools/Makefile.arm64h create mode 100644 arch/s390/tools/copy-arm64h-full.awk create mode 100644 arch/s390/tools/copy-arm64h.awk diff --git a/arch/s390/tools/Makefile b/arch/s390/tools/Makefile index f2862364fb42..a624b2639b43 100644 --- a/arch/s390/tools/Makefile +++ b/arch/s390/tools/Makefile @@ -3,12 +3,19 @@ # Makefile for s390 specific build tools # =20 +include $(srctree)/arch/s390/tools/Makefile.arm64h + kapi :=3D arch/$(ARCH)/include/generated/asm kapi-hdrs-y :=3D $(kapi)/facility-defs.h $(kapi)/dis-defs.h =20 +targets +=3D $(addprefix ../../../,$(kapi-hdrs-y)) +targets +=3D $(patsubst $(objtree)/%,../../../%,$(ARM64_TARGETS)) + +kapi-hdrs-$(CONFIG_KVM_ARM64) +=3D $(ARM64_TARGETS) + PHONY +=3D kapi =20 -kapi: $(kapi-hdrs-y) +kapi: $(kapi-hdrs-y) $(kapi-hdrs-m) =20 hostprogs +=3D gen_facilities hostprogs +=3D gen_opcode_table diff --git a/arch/s390/tools/Makefile.arm64h b/arch/s390/tools/Makefile.arm= 64h new file mode 100644 index 000000000000..3e033630470a --- /dev/null +++ b/arch/s390/tools/Makefile.arm64h @@ -0,0 +1,57 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Share ARM64 headers with s390 KVM +# + +arm64api :=3D $(objtree)/arch/$(ARCH)/include/generated/arm64 +arm64uapi :=3D $(objtree)/arch/$(ARCH)/include/generated/uapi/arm64 + +# List of ARM64 headers to share with s390 KVM +# Format: [uapi:]header.h or header-gen.h +# +# * header.h - from arch/arm64/include/asm/ to arm64/ +# * uapi:header.h - from arch/arm64/include/uapi/asm/ to uapi/arm64/ +# * header-gen.h - generated as header-gen.h from ARM64 header header.h +# If a header contains partial markers (#ifdef ARM64_S390_COMMON) only thi= s part will be copied. +# If the file does not contain any markers the whole file will be copied. +ARM64_SHARED_HEADERS :=3D \ + brk-imm.h \ + esr.h \ + kvm_arm.h \ + kvm_emulate-gen.h \ + kvm_host.h \ + ptrace-gen.h \ + sysreg-gen.h \ + uapi:hwcap.h \ + uapi:kvm.h \ + uapi:ptrace.h \ + uapi:sve_context.h \ + +quiet_cmd_gen_arm_hdr =3D GEN $@ + cmd_gen_arm_hdr =3D mkdir -p $(dir $@); \ + $(AWK) -f $(src)/copy-arm64h.awk $< > $@ || \ + $(AWK) -f $(src)/copy-arm64h-full.awk -v srcfile=3D"= $(subst $(srctree)/,,$(subst $(srctree)/../,,$<))" $< > $@ || \ + { echo "Error: Unbalanced ARM64_S390_COMMON markers in $<" >&2; rm= -f $@; exit 1; } + +arm64-type =3D $(firstword $(subst :, ,$(1))) +arm64-base =3D $(or $(word 2,$(subst :, ,$(1))),$(1)) +arm64-src-base =3D $(patsubst %-gen.h,%.h,$(call arm64-base,$(1))) + +arm64-src =3D $(srctree)/arch/arm64/include/$(if $(filter uapi,$(call arm6= 4-type,$(1))),uapi/)asm/$(call arm64-src-base,$(1)) +arm64-dst =3D $(if $(filter uapi,$(call arm64-type,$(1))),$(arm64uapi),$(a= rm64api))/$(call arm64-base,$(1)) + +$(foreach hdr,$(ARM64_SHARED_HEADERS),\ + $(eval $(call arm64-dst,$(hdr)): $(call arm64-src,$(hdr)) $(src)/copy-arm= 64h.awk $(src)/copy-arm64h-full.awk)) + +ARM64_TARGETS :=3D $(sort $(foreach hdr,$(ARM64_SHARED_HEADERS),$(call arm= 64-dst,$(hdr)))) + +$(ARM64_TARGETS): + $(call cmd,gen_arm_hdr) + +quiet_cmd_gen_sysreg_arm64 =3D GEN $@ + cmd_gen_sysreg_arm64 =3D mkdir -p $(dir $@); $(AWK) -f $(srctree)/ar= ch/arm64/tools/gen-sysreg.awk $(srctree)/arch/arm64/tools/sysreg > $@ + +$(arm64api)/sysreg-defs.h: $(srctree)/arch/arm64/tools/gen-sysreg.awk $(sr= ctree)/arch/arm64/tools/sysreg FORCE + $(call if_changed,gen_sysreg_arm64) + +ARM64_TARGETS +=3D $(arm64api)/sysreg-defs.h diff --git a/arch/s390/tools/copy-arm64h-full.awk b/arch/s390/tools/copy-ar= m64h-full.awk new file mode 100644 index 000000000000..a6aaf9cc3332 --- /dev/null +++ b/arch/s390/tools/copy-arm64h-full.awk @@ -0,0 +1,47 @@ +#!/usr/bin/awk -f +# SPDX-License-Identifier: GPL-2.0 +# +# Process entire ARM64 headers for sharing with s390 KVM +# +# Usage: copy-arm64h-full.awk -v srcfile=3D +# +# This processes the entire file (unlike copy-arm64h.awk which only extrac= ts marked sections) + +BEGIN { + max_guard_line =3D 25 + guard_found =3D 0 + header_added =3D 0 +} + +# Find and process the include guard in the first few lines +NR <=3D max_guard_line && !guard_found && /^#ifndef [A-Z_0-9]+$/ { + guard_name =3D $2 + guard_found =3D 1 + print "/* This header was copied from " srcfile " */" + print "" + print + header_added =3D 1 + next +} + +# Transform include directives +/^#include +# +# Extracts all sections between start/end markers. If no markers found, si= gnals for fallback. +#TODO verification script or c file for arm to verify the ifdef things kee= p working +BEGIN { + # Constants + start_pattern =3D "^#ifdef ARM64_S390_COMMON$" + end_pattern =3D "^#endif \\/\\* ARM64_S390_COMMON \\*\\/$" + max_guard_line =3D 25 + + # State variables + copying =3D found_marker =3D 0 + guard_name =3D "" + file_header_done =3D 0 +} + +NR <=3D max_guard_line && !guard_name && /^#ifndef [A-Za-z0-9_]+$/ { + guard_name =3D $2 + filename =3D FILENAME + sub(/^.*arch\/arm64\//, "arch/arm64/", filename) + print "/*" + print " * This header was automatically generated from " filename + print " * Do not modify this file directly." + print " */" + print "#ifndef " guard_name + print "#define " guard_name + print "" + next +} + +NR > max_guard_line && !guard_name && !file_header_done { + print "error: no include guard found in first " max_guard_line " lines" >= "/dev/stderr" + file_header_done =3D 1 + exit 1 +} + +!guard_name { + print + next +} + +$0 ~ start_pattern { + if (copying) { exit 1 } + copying =3D found_marker =3D 1 + next +} + +guard_name && !found_marker { + next +} + +$0 ~ end_pattern { copying =3D 0; next } + +copying { + gsub(/#include To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 24/33] KVM: s390: Use arm64 code Date: Wed, 12 Aug 2026 17:36:20 +0200 Message-ID: <20260812153631.3376090-25-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX0ph/DOSarjSF +YiRgT7n4se5StELOZgOig+FH1QpKID4M+XSqExSP2n0dZ9jxJUp6zG9Kv7J4Z2GgJ9MFUpn1by hZNtVIcNABkAWpJE05aZj+9DqVUyuk7pyBlP8uWaJDBGv+qm6zL8IsfuAJ7x2WOCCULX5mfXiOc 2ZVjGgOnAmnY6RRtsI6Fp4DdnBF2dYintlc+2J8wsYsVMWnFuZ4nBAuEGEJt4+zI4ZovJoDEah8 cJ5OgsnzO88BEzbHIu9fDrUo39SkuwUiA9yR1TJjrJnRE/wWIsF260N2uZv5HvFwrVBHzvpi4z2 ZYN7hEjuNd0ec/mobm6lDSaetQIuJ1FbwIeaulQJe8tCK9HYARh0mO43K8Qal7f0sGw2nEPZfvC f3AZuhjWbBIWtUoxWJ5V6jw20l0Or+34q8uTY2PXTgwbudzUxq9VqDmk+xby1iiPILzQCDWaqjC +NPd5VioinmjVuqWyXA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9bJhdGGOurDP MZDfYggZkGcmXiq6XkqeOxK7e15GiwjbcJptNIHL5Oouqf+y4Rkmum3mB/IR0voa8lczzPFcrrr NujtGumglCd/WkomMVzc6jRv9zR766A= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7c930f cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=x1b9RNJZmR4nZInT6RoA:9 X-Proofpoint-GUID: Wk3lkGnltghMJCG-hewYrwIZFT9DP1a2 X-Proofpoint-ORIG-GUID: cTH3nKZmSq9UlDzDntXatl3wgED-Qsy8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Add the infrastructure to extract KVM/arm64 code into s390 at built time similar to the arm64 header sharing. Add copy-arm64c.awk hat detects ARM64_S390_COMMON markers and extracts marked section into an .inc file that can be consumed by arm on s390 host code. If no marker is found make will fail. To ensure that no code is consumed twice by accident a guard is added during file generation. A s390 C file wanting to consume such an inc file must first define __INCL_GEN_ARM_FILE otherwise the inc file will emit a compile error. Example: #define __INCL_GEN_ARM_FILE #include #undef __INCL_GEN_ARM_FILE Signed-off-by: Steffen Eiden --- arch/s390/kvm/arm64/.gitignore | 2 + arch/s390/kvm/arm64/Makefile.gen | 29 ++++++++++++ arch/s390/kvm/arm64/copy-arm64c.awk | 72 +++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 arch/s390/kvm/arm64/.gitignore create mode 100644 arch/s390/kvm/arm64/Makefile.gen create mode 100644 arch/s390/kvm/arm64/copy-arm64c.awk diff --git a/arch/s390/kvm/arm64/.gitignore b/arch/s390/kvm/arm64/.gitignore new file mode 100644 index 000000000000..bd9d90694676 --- /dev/null +++ b/arch/s390/kvm/arm64/.gitignore @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +generated/* diff --git a/arch/s390/kvm/arm64/Makefile.gen b/arch/s390/kvm/arm64/Makefil= e.gen new file mode 100644 index 000000000000..cb9482eb947b --- /dev/null +++ b/arch/s390/kvm/arm64/Makefile.gen @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Extracts ARM64 marked sections to .inc files that are included by main s= ource +# files + +# List of ARM64 C files to extract +ARM64_CFILES :=3D \ + arm.c \ + guest.c \ + handle_exit.c \ + mmio.c \ + +quiet_cmd_extract_inc =3D GEN $@ + cmd_extract_inc =3D mkdir -p $(dir $@); \ + $(AWK) -f $(src)/copy-arm64c.awk $< > $@ || \ + { echo "Error: No or unbalanced ARM64_S390_COMMON = markers in $<" >&2; rm -f $@; exit 1; } + +$(obj)/generated/%.inc: $(srctree)/arch/arm64/kvm/%.c $(src)/copy-arm64c.a= wk FORCE + $(call if_changed,extract_inc) + +ARM64_INC_FILES :=3D $(foreach cfile,$(ARM64_CFILES),generated/$(basename = $(cfile)).inc) + +targets +=3D $(ARM64_INC_FILES) +clean-files +=3D generated/*.inc + +$(addprefix $(obj)/,$(kvm-arm64-obj)): $(addprefix $(obj)/,$(ARM64_INC_FIL= ES)) + +$(foreach cfile,$(basename $(ARM64_CFILES)),\ + $(eval $(obj)/$(cfile).o: $(obj)/generated/$(cfile).inc)) diff --git a/arch/s390/kvm/arm64/copy-arm64c.awk b/arch/s390/kvm/arm64/copy= -arm64c.awk new file mode 100644 index 000000000000..20bd73c52ec4 --- /dev/null +++ b/arch/s390/kvm/arm64/copy-arm64c.awk @@ -0,0 +1,72 @@ +#!/usr/bin/awk -f +# SPDX-License-Identifier: GPL-2.0 +# +# Extract marked sections from ARM64 C files for sharing with s390 KVM +# +# Usage: share-arm64-cfile.awk +# +# Extracts all sections between start/end markers. If no markers found, si= gnals failure. + +BEGIN { + # Constants + start_pattern =3D "^#ifdef ARM64_S390_COMMON$" + end_pattern =3D "^#endif /\\* ARM64_S390_COMMON \\*/$" + + # State variables + copying =3D found_marker =3D 0 + file_header_done =3D 0 +} + +!file_header_done { + if (/^\/\*/ || /^\/\/ SPDX-License-Identifier:/) { + print + next + } + if (/[[:space:]]\*([[:space:]]|$)/) { + print + next + } + if (/\*\//) { + print " *" + } else { + print "/*" + } + + filename =3D FILENAME + sub(/^.*arch\/arm64\//, "arch/arm64/", filename) + print " * This file was automatically generated from " filename + print " * Do not modify this file directly." + print " */" + print "" + print "#ifndef __INCL_GEN_ARM_FILE" + print "#error included .inc file w/o proper guard definition" + print "#else" + print "#undef __INCL_GEN_ARM_FILE" + print "#endif /* __INCL_GEN_ARM_FILE */" + print "" + + file_header_done =3D 1 +} + +$0 ~ start_pattern { + if (copying) { exit 1 } + copying =3D found_marker =3D 1 + next +} + +$0 ~ end_pattern { + if (!copying) { exit 1 } + copying =3D 0 + next +} + +copying { + gsub(/#include To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 25/33] s390: Introduce Start Arm Execution instruction Date: Wed, 12 Aug 2026 17:36:21 +0200 Message-ID: <20260812153631.3376090-26-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX0f4vayRwwAqe 0dybKUrtLTXQTY+giZLwhK34zTHolcQqb3i5Ur2JP4W2grXCSe1e2sANcL9EKCrsb6iWvFYD/iK 9x5CRQBvCs5zndgxf52RLVQHARVor00h99oX7QxSdNG/TNr8za7puO09sZNJxN471zzXEYPiOfo 7d+Nz04LmxomBmN9D+qgFXga34ZXBz5tg0edH3CycbZhOFUwj+ILtGg1+b6YOQC6eU/CqX2b5yY v2aR6kdwZiyYpm3WGXM5llURK/aT609PMwZKU7xqtsxgxNEEALkN5Pqyv56AV/U/9Ybvw7+ICA7 Ae8F5XkGPfFoiMAlH+AhYmQTQNRNbRZQf6dhOUyElZ/k0KuBG0+bwMTv7QIiGkxzWKJQtUkstzk z4HBP8VHpl8kw/bZm8fe/vrFUIf+HhyEK6BV4B8QrOQp247NoIUPQgs0h0DjZxcrqC23ibVBGMk 9KeXwwYnZp7EpYC13OA== X-Proofpoint-ORIG-GUID: Af73KvlMLJc2djHV6ibRNXZzLUo0u_aV X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX4YcY6SdklKYh vYbPnMCk1SuoMWaYYdenfYI6ODECLQYH/3qGvpzj4zf/93bbvgxAdGBgCLHe3JN/lB/xcka2Ylz Qevgt1Eji2jeu9yxKWFyBhPfLt87hpw= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c930e cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=D7HF9d94yUUfLUezzdoA:9 X-Proofpoint-GUID: U-MEctnJOdPHvX1QDKK_G8f5hXQcWSAq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" The Start Arm Execution (SAE) instruction is the centerpiece for executing arm64 (KVM) guests on s390. Its purpose is, similar to SIE, to enable accelerated execution of arm64 virtual machines. SAE expects the physical address of a control block as the only argument. The host is responsible to save & restore - GPRs 0-13 - access register 0-15 - breaking event register (BEAR) - vector/floating point registers between SAE executions to guarantee host consistency. GPRs and BEAR are save and restores in the asm functions. The other register are handled in within C code. Access registers are handled in a later patch and SVEs will be handled when they are introduced in a future series. Most arm64 registers are handled by a satellite block called save_area. Some registers, frequently used by hypervisors, are placed into the SAE control block itself. Enlighten asm/kvm_host_types.h for the new header variant. The new header is chosen instead of asm/kvm_host_s390_types.h if KVM_S390_ARM64 is defined. Co-developed-by: Andreas Grapentin Signed-off-by: Andreas Grapentin Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- arch/s390/include/asm/asm-prototypes.h | 1 + arch/s390/include/asm/kvm_host_arm64_types.h | 118 +++++++++++++++++++ arch/s390/include/asm/kvm_host_types.h | 4 + arch/s390/include/asm/sae.h | 57 +++++++++ arch/s390/include/asm/stacktrace.h | 5 + arch/s390/kernel/asm-offsets.c | 1 + arch/s390/kernel/entry.S | 22 ++++ arch/s390/tools/opcodes.txt | 3 + 8 files changed, 211 insertions(+) create mode 100644 arch/s390/include/asm/kvm_host_arm64_types.h create mode 100644 arch/s390/include/asm/sae.h diff --git a/arch/s390/include/asm/asm-prototypes.h b/arch/s390/include/asm= /asm-prototypes.h index d4da4436d02b..faa2afb259a1 100644 --- a/arch/s390/include/asm/asm-prototypes.h +++ b/arch/s390/include/asm/asm-prototypes.h @@ -6,6 +6,7 @@ #include #include #include +#include #include =20 #endif /* _ASM_S390_PROTOTYPES_H */ diff --git a/arch/s390/include/asm/kvm_host_arm64_types.h b/arch/s390/inclu= de/asm/kvm_host_arm64_types.h new file mode 100644 index 000000000000..d112ca8c6bc1 --- /dev/null +++ b/arch/s390/include/asm/kvm_host_arm64_types.h @@ -0,0 +1,118 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef ASM_KVM_HOST_ARM64_TYPES_H +#define ASM_KVM_HOST_ARM64_TYPES_H + +#include +#include +#include +#include +#include + +struct kvm_sae_block { + u64 _0000[16]; /* 0x0000 */ +#define SAE_ICPTR_SPURIOUS 0x00 +#define SAE_ICPTR_VALIDITY 0x01 +#define SAE_ICPTR_HOST_ACCESS_EXCEPTION 0x02 +#define SAE_ICPTR_SYNCHRONOUS_EXCEPTION 0x03 +#define SAE_ICPTR_TIMER 0x04 +#define SAE_ICPTR_PE_INTERCOMM 0x05 +#define SAE_ICPTR_GUEST_ADDRESS_SIZE 0x06 +#define SAE_ICPTR_STOP 0x07 +#define SAE_ICPTR_SYSTEM_REGISTER 0x08 +#define SAE_ICPTR_PMU 0x09 +#define SAE_ICPTR_MAINTENANCE 0x0a + u8 icptr; /* 0x0080 */ + u8 _0081[7]; /* 0x0081 */ + u64 scad; /* 0x0088 */ + u64 _0090[16]; /* 0x00b0 */ + u32 cntp_ctl; /* 0x0110 */ + u32 cntv_ctl; /* 0x0114 */ + u8 irq_ctl; /* 0x0118 */ + u8 _0119[7]; /* 0x0119 */ + struct { + u64 ich_hcr_el2; /* 0x0120 */ + u64 ich_vmcr_el2; /* 0x0128 */ + u64 ich_ap0r0_el2; /* 0x0130 */ + u64 ich_ap1r0_el2; /* 0x0138 */ + u64 _0140[2]; /* 0x0140 */ + u64 ich_lrn_el2[4]; /* 0x0150 */ + u64 _0170[4]; /* 0x0170 */ + } ic_regs; + u64 _0190[12]; /* 0x0190 */ + u64 contextidr_el1; /* 0x01f0 */ + u32 wip; /* 0x01f8 */ + u32 _01fc; /* 0x01fc */ +#define SAE_SD_FORMAT_0 0x00 + u8 sdf; /* 0x0200 */ + u8 _0201[7]; /* 0x0201 */ + u64 mso; /* 0x0208 */ + u64 msl; /* 0x0210 */ + u64 hbasce; /* 0x0218 */ + u64 _0220; /* 0x0220 */ + u64 gpto; /* 0x0228 */ + u64 ic; /* 0x0230 */ + u64 ec; /* 0x0238 */ + u64 save_area; /* 0x0240 */ + u64 _0248[7]; /* 0x0248 */ + u8 _0280[6]; /* 0x0280 */ + u16 lrcpua; /* 0x0286 */ + u64 pstate; /* 0x0288 */ + u64 pc; /* 0x0290 */ + u64 sp_el0; /* 0x0298 */ + u64 sp_el1; /* 0x02a0 */ + u64 _02a8; /* 0x02a8 */ + u64 fpcr; /* 0x02b0 */ + u64 fpsr; /* 0x02b8 */ + u16 sve_pregs[16]; /* 0x02c0 */ + u16 sve_ffr; /* 0x02e0 */ + u8 _02e2[6]; /* 0x02e2 */ + u64 _02e8[3]; /* 0x02e8 */ + + u64 gpr[31]; /* 0x0300 */ + u64 _03f8; /* 0x03f8 */ + + union { + u64 icptd[8]; /* 0x0400 */ + /* validity-interception reason; icptr 0x01 */ + u16 vir; /* 0x0400 */ + /* host access interception details; icptr 0x02 */ + struct { + u64 esr_elz; /* 0x0400 */ + u8 _0408[6]; /* 0x0408 */ + u16 pic; /* 0x040e */ + union teid teid; /* 0x0410 */ + gva_t far_elz; /* 0x0418 */ + gva_t vaddr; /* 0x0420 */ + u64 suppl; /* 0x0428 */ + u8 gltl; /* 0x0430 */ + u8 _0431[7]; /* 0x0431 */ + u64 _0438; /* 0x0438 */ + } hai; + /* exception-interception details; icptr 0x03 */ + struct { + u64 esr_elz; /* 0x0400 */ + u64 _0408[2]; /* 0x0408 */ + gva_t far_elz; /* 0x0418 */ + } trap; + /* timer-interception reason; icptr 0x04 */ +#define SAE_IR_TIMER_ID_VIRT BIT(6) +#define SAE_IR_TIMER_ID_PHYS BIT(7) + u8 tir; /* 0x0400 */ + }; + u64 _0440[376]; /* 0x0440 */ +} __packed __aligned(PAGE_SIZE); +static_assert(sizeof(struct kvm_sae_block) =3D=3D PAGE_SIZE); + +struct kvm_sae_save_area { +#define SAE_SAVE_AREA_FORMAT_0 0x00 + u8 saf; /* 0x0000 */ + u8 _0001[5]; /* 0x0001 */ +#define SAE_SAS_VALID BIT(0) + u16 sas; /* 0x0006 */ + u64 sdo; /* 0x0008 */ + u64 _0010[2]; /* 0x0010 */ + u64 regs[508]; /* 0x0020 */ +} __packed __aligned(PAGE_SIZE); +static_assert(sizeof(struct kvm_sae_save_area) =3D=3D PAGE_SIZE); + +#endif /* ASM_KVM_HOST_ARM64_TYPES_H */ diff --git a/arch/s390/include/asm/kvm_host_types.h b/arch/s390/include/asm= /kvm_host_types.h index e5bdba07cab0..d308739ebcf5 100644 --- a/arch/s390/include/asm/kvm_host_types.h +++ b/arch/s390/include/asm/kvm_host_types.h @@ -3,6 +3,10 @@ #ifndef ASM_KVM_HOST_TYPES_H #define ASM_KVM_HOST_TYPES_H =20 +#ifdef KVM_S390_ARM64 +#include +#else #include +#endif /* KVM_S390_ARM64 */ =20 #endif /* ASM_KVM_HOST_TYPES_H */ diff --git a/arch/s390/include/asm/sae.h b/arch/s390/include/asm/sae.h new file mode 100644 index 000000000000..389c5ac2a36c --- /dev/null +++ b/arch/s390/include/asm/sae.h @@ -0,0 +1,57 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_S390_SAE_H +#define __ASM_S390_SAE_H + +#include +#include + +#ifndef __ASSEMBLER__ + +/* defined in arch/s390/kernel/entry.S */ +asmlinkage void __sae64a(phys_addr_t sae_block_phys); + +#include +#include + +/** + * __sae64a() - Start Arm Execution + */ +static inline void sae64a(struct kvm_sae_block *sae_block) +{ + __sae64a(virt_to_phys(sae_block)); +} + +/** + * stiasrm() - STore and Invalidate Arm System Register Multiple + * @save_area: Pointer to SAE save area + * + * Store the guest system register to the save area. + * The values in the guest are not valid anymore.. + */ +static __always_inline void stiasrm(struct kvm_sae_save_area *save_area) +{ + asm volatile( + " .insn rre,0xb9a70000,%[r1],0\n" + : "+m"(*save_area) + : [r1] "a"(save_area) + ); +} + +/** + * lasrm() - Load Arm System Register Multiple + * + * @save_area: Pointer to SAE save area + * + * Load the system registers from save_area into the guest. + */ +static __always_inline void lasrm(struct kvm_sae_save_area *save_area) +{ + asm volatile( + " .insn rre,0xb9a60000,%[r1],0\n" + : + : "m"(*save_area), [r1] "a"(save_area) + ); +} + +#endif /* !__ASSEMBLER__ */ +#endif /* __ASM_S390_SAE_H */ diff --git a/arch/s390/include/asm/stacktrace.h b/arch/s390/include/asm/sta= cktrace.h index ac3606c3babe..2d332d7c8145 100644 --- a/arch/s390/include/asm/stacktrace.h +++ b/arch/s390/include/asm/stacktrace.h @@ -59,6 +59,7 @@ static inline bool on_stack(struct stack_info *info, struct stack_frame { union { unsigned long empty[9]; + /* SIE stack frame */ struct { unsigned long sie_control_block; unsigned long sie_savearea; @@ -68,6 +69,10 @@ struct stack_frame { unsigned long sie_guest_asce; unsigned long sie_irq; }; + /* SAE stack frame */ + struct { + unsigned long sae_bear; + }; }; unsigned long gprs[10]; unsigned long back_chain; diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index f6dd2b67dcee..f9f9c2246074 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c @@ -70,6 +70,7 @@ int main(void) OFFSET(__SF_SIE_CONTROL_PHYS, stack_frame, sie_control_block_phys); OFFSET(__SF_SIE_GUEST_ASCE, stack_frame, sie_guest_asce); OFFSET(__SF_SIE_IRQ, stack_frame, sie_irq); + OFFSET(__SF_SAE_BEAR, stack_frame, sae_bear); DEFINE(STACK_FRAME_OVERHEAD, sizeof(struct stack_frame)); BLANK(); OFFSET(__SFUSER_BACKCHAIN, stack_frame_user, back_chain); diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 10dd9bbdf985..5d9817acab0b 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -245,6 +245,28 @@ EXPORT_SYMBOL(__sie64a) EXPORT_SYMBOL(sie_exit) #endif =20 +#if IS_ENABLED(CONFIG_KVM_ARM64) +/* + * __sae64a calling convention: + * %r2 pointer to sae control block physical address + */ +SYM_FUNC_START(__sae64a) + stmg %r6,%r14,__SF_GPRS(%r15) # store kernel registers + STBEAR __SF_SAE_BEAR(%r15) # save breaking event address register + .insn rre,0xb9a50000,%r2,0 # Start Arm Execution + LBEAR __SF_SAE_BEAR(%r15) # restore breaking event address register + lmg %r6,%r14,__SF_GPRS(%r15) # restore kernel registers + xgr %r0,%r0 # clear guest registers to + xgr %r1,%r1 # prevent speculative use + xgr %r2,%r2 + xgr %r3,%r3 + xgr %r4,%r4 + xgr %r5,%r5 + BR_EX %r14 +SYM_FUNC_END(__sae64a) +EXPORT_SYMBOL(__sae64a) +#endif + /* * SVC interrupt handler routine. System calls are synchronous events and * are entered with interrupts disabled. diff --git a/arch/s390/tools/opcodes.txt b/arch/s390/tools/opcodes.txt index def2659f6602..0e4773c94af0 100644 --- a/arch/s390/tools/opcodes.txt +++ b/arch/s390/tools/opcodes.txt @@ -594,6 +594,9 @@ b9a0 clp RRF_U0RR b9a1 tpei RRE_RR b9a2 ptf RRE_R0 b9a4 uvc RRF_URR +b9a5 sae RRE_R0 +b9a6 lasrm RRE_R0 +b9a7 stiasrm RRE_R0 b9aa lptea RRF_RURR2 b9ab essa RRF_U0RR b9ac irbm RRE_RR --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABCBB471CED; Wed, 12 Aug 2026 15:37:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; cv=none; b=SOX8Gz4v6T6D2FY3gcXnARF8XVD+vYXsX0fUaDfiFtWeIEl4GcMRBXZIsmpkroRE+O0qrusMsHndbRgyFBaT+Y01TpCRuCfzev3CC8BJdj43vw2+bBSrJaWpiIu/4Mb9by1OJuN9cqwNvxGMfFO3akZpQSg69AG29uxJR/AC0zo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; c=relaxed/simple; bh=x/ZjU7Uj1RWHl/AmJuJPwoRA/mPFZOnx6wBXE54Z+A8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M8G8qjoqXik9JXsYJAme808oSjfwMyHsmVusCSwqGS7NparzUTTjyk2XL/D5M5qblKAUZMN/2bNLEO+CqyG1tw2pObFJJKRP6xcyhVKxhMB19FL3QBmnKRPgmnEZIKXICER7Q/hCWD7JFOtlKBtnT1rRC+s+qt59vYTVQW8zW1s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=m6Qqd7PT; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="m6Qqd7PT" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1fY23640434; Wed, 12 Aug 2026 15:36:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=H25bAw4HLzyZZD/1V qpp7CJhWwsxKelfUtshIBBNIWg=; b=m6Qqd7PTod7Yb+U/BOdPJ99vnnC9O90Lz lPAs+HbZbfZzSfbuK29KvUc9G471yH32lSRyAFzR7MeyXLgfd6c/rKprK9sCVkcv MgrhX9G174/X9hA68RfzCbi7vaJSFUBf5IlVBIUmvqialT436KrGq49Y8K9Yk47v rXS6w1YjRlql5iu6daN+MEI3Ir8O3hFzBLFDH22NWZwHi3XrmvVHMB0Gt0mtYMPA wa3o55yMeKIgCQD/5FwkLRN1KJddAU1g2OTk8hQxHgZX7rWPXS70coS5zPRUJd0R 1UhepG/eF2ynfxJwCjfYFF41HGPhJS5aZarQsWXvj3bbxhivS194Q== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7cn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:47 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFBKx4018652; Wed, 12 Aug 2026 15:36:46 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5w6tdh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:46 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaga038797672 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:42 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0E8FC2004B; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B39CC2004E; Wed, 12 Aug 2026 15:36:41 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:41 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 26/33] KVM: s390: arm64: Introduce host definitions Date: Wed, 12 Aug 2026 17:36:22 +0200 Message-ID: <20260812153631.3376090-27-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: RAYggf5VcZ7dUQtVn0gwi4mGnDODcrd3 X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c930f cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=NkYWUXnGwG2_pH3cPtwA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1sgKyZLmGcAI OGUHBY/L8Cw4l16olF4omsbKlc3kjGwUXBEoP22m+YSCVOAr3F1Lav/7mkI4qprPif5JtU3Cdpl IfhS6eSsY4jZ4YCy2sIyan9i7dJCZluQs5XQ5mkIFlhtAMCzy+1KkX8Tc/UnpQ9IxTtr2gRGeQH K3ct7AsvLsPW4NpLPSAuAc6utT/94NSMm79+VHmirQfHAZT1pBFfEZxXe0tJrjeQ5KL1Yver20/ Pt3K6fxHciXzvymanjDZyv5xG8FNRv3JIw+JfWI2go0NnSPnA8iOYK85O32x5LaGJC+pcirrvys s2dPQJkzJiOqCqJ1RvofsSHncc1SbW6wLhXoagF48jPbDQXY8RMZu0w/WeqUK2NgK4aexqO90AW 89OB3QdeBMcOLMl0bNi6y5Sk9hcnWiVKeHZRX2CNHJ8JZRkcFN9G4vt1SkAwuLjr+5uz7ZxFB6p fpr1dZUAUmMYat901EQ== X-Proofpoint-ORIG-GUID: 0wtBmBzsvROsXEyg0Sj8Trfp2lzDLqnM X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX+OGrLqwbb5Ea /CAUqa/QAGqzk3o529rpwqgU2H6vjdyuH+ZB+KMZNDySqAV4Sbv5R4za2ajo7mou89TOM8P2gcv psBrZc/8naiFqTr6Yip8n3qdsJvKP8M= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Add all basic definitions the arm on s390 KVM host requires. Including, but not limited to, struct kvm*arch definitions, various functions (to be implemented in the following patches), and various defines required to run arm64 guests. Enlighten asm/kvm_host.h for the new header variant. The new header is chosen instead of asm/kvm_host_s390.h if KVM_S390_ARM64 is defined. Co-developed-by: Andreas Grapentin Signed-off-by: Andreas Grapentin Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- arch/s390/include/asm/kvm.h | 6 + arch/s390/include/asm/kvm_host.h | 9 + arch/s390/include/asm/kvm_host_arm64.h | 220 +++++++++++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 arch/s390/include/asm/kvm.h create mode 100644 arch/s390/include/asm/kvm_host_arm64.h diff --git a/arch/s390/include/asm/kvm.h b/arch/s390/include/asm/kvm.h new file mode 100644 index 000000000000..aeb11dc631d5 --- /dev/null +++ b/arch/s390/include/asm/kvm.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifdef KVM_S390_ARM64 +#include +#else +#include +#endif diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost.h index 147325978225..cd6d572883ab 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -3,7 +3,16 @@ #ifndef ASM_KVM_HOST_H #define ASM_KVM_HOST_H =20 +#ifdef KVM_S390_ARM64 +#include +#else #include +#endif + +static inline bool kvm_arch_pmi_in_guest(struct kvm_vcpu *vcpu) +{ + return false; +} =20 #define PGM_OPERATION 0x01 #define PGM_PRIVILEGED_OP 0x02 diff --git a/arch/s390/include/asm/kvm_host_arm64.h b/arch/s390/include/asm= /kvm_host_arm64.h new file mode 100644 index 000000000000..8088409bb041 --- /dev/null +++ b/arch/s390/include/asm/kvm_host_arm64.h @@ -0,0 +1,220 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef ASM_KVM_HOST_ARM64_H +#define ASM_KVM_HOST_ARM64_H + +#include + +#include +#include + +#define vcpu_gp_regs(v) ((v)->arch.sae_block.gpr) + +#include +#include + +#include + +#define KVM_HAVE_MMU_RWLOCK +#define KVM_MAX_VCPUS 1 +#define KVM_S390_ARM64_IMPL_FEATURES \ + (BIT(KVM_ARM_VCPU_PTRAUTH_ADDRESS) | BIT(KVM_ARM_VCPU_PTRAUTH_GENERIC)) + +#define KVM_HALT_POLL_NS_DEFAULT 50000 + +#define KVM_S390_MANAGES_S390_GUEST 0 + +/* Minimal (=3Dno) vgic definitions */ +#define KVM_IRQCHIP_NUM_PINS 1 +#define irqchip_in_kernel(_k) false + +#define __ctxt_sys_reg(ctx, reg) NULL +struct kvm_cpu_context { + /* + * These are just for 32 bit, which we don't have, making them RES0. + * They are exposed to user space. + */ + u64 spsr_abt; + u64 spsr_und; + u64 spsr_irq; + u64 spsr_fiq; + + __vector128 __aligned(16) vregs[32]; +}; + +struct kvm_vcpu_arch { + struct kvm_sae_block sae_block; + struct kvm_sae_save_area save_area; + struct kvm_cpu_context ctxt; + + u32 host_acrs[NUM_ACRS]; + + /* Hypervisor Configuration Register */ + u64 hcr_elz; + + /* Configuration flags, set once and for all before the vcpu can run */ + u8 cflags; + + /* Input flags to the hypervisor code, potentially cleared after use */ + u8 iflags; + + /* State flags for kernel bookkeeping, unused by the hypervisor code */ + u8 sflags; + + /* + * Don't run the guest (internal implementation need). + * + * Contrary to the flags above, this is set/cleared outside of + * a vcpu context, and thus cannot be mixed with the flags + * themselves (or the flag accesses need to be made atomic). + */ + bool pause; + + /* vcpu power state */ + struct kvm_mp_state mp_state; + /* lock for mp_state & reset_state.reset */ + spinlock_t mp_state_lock; + + /* vcpu reset state */ + struct vcpu_reset_state reset_state; + + /* GMAP */ + struct gmap *gmap; + struct kvm_s390_mmu_cache *mc; + + void *debugfs_state_data; +}; + +struct kvm_vcpu_stat { + struct kvm_vcpu_stat_generic generic; + /* ARM64 stats */ + u64 hvc_exit_stat; + u64 wfe_exit_stat; + u64 wfi_exit_stat; + u64 mmio_exit_user; + u64 mmio_exit_kernel; + u64 signal_exits; + u64 exits; + /* GMAP stats */ + u64 pfault_sync; +}; + +#define _vcpu_get_flag(v, flagset, ...) \ + __vcpu_get_flag(&(v)->arch.flagset, __VA_ARGS__) +#define _vcpu_set_flag(v, flagset, ...) \ + __vcpu_set_flag(&(v)->arch.flagset, __VA_ARGS__) +#define _vcpu_clear_flag(v, flagset, ...) \ + __vcpu_clear_flag(&(v)->arch.flagset, __VA_ARGS__) +#define _vcpu_test_and_clear_flag(v, flagset, ...) \ + __vcpu_test_and_clear_flag(&(v)->arch.flagset, __VA_ARGS__) + +#define kvm_has_mte(_kvm) false +#define vcpu_has_sve(_vcpu) false +#define vcpu_has_ptrauth(_vcpu) false + +struct kvm_arch_memory_slot { +}; + +struct kvm_arch { + struct gmap *gmap; + u64 guest_phys_size; + + /* VM-wide vCPU feature set */ + unsigned long flags; + + /* Protects VM-scoped configuration data */ + struct mutex config_lock; + + debug_info_t *dbf; + + DECLARE_BITMAP(vcpu_features, KVM_VCPU_MAX_FEATURES); + + unsigned long mem_limit; +}; + +static inline bool __vcpu_has_feature(const struct kvm_arch *ka, int featu= re) +{ + return test_bit(feature, ka->vcpu_features); +} + +struct kvm_vm_stat { + struct kvm_vm_stat_generic generic; +}; + +static inline bool system_has_full_ptr_auth(void) +{ + return true; +} + +#define kvm_vm_is_protected(_kvm) false +#define vcpu_is_protected(_vcpu) false + +#define vcpu_is_loaded(_vcpu) ((_vcpu)->cpu !=3D -1) + +#define KVM_HVA_ERR_BAD -1UL +#define KVM_HVA_ERR_RO_BAD -2UL + +#define kvm_phys_size(__kvm) ((__kvm)->arch.guest_phys_size) +static inline bool kvm_is_error_hva(unsigned long addr) +{ + return IS_ERR_VALUE(addr); +} + +u32 get_kvm_ipa_limit(void); + +/* unused, but required functions */ +static inline void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memor= y_slot *slot) {} +static inline void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen) {} +static inline void kvm_arch_flush_shadow_all(struct kvm *kvm) {} +static inline void kvm_arch_flush_shadow_memslot(struct kvm *kvm, struct k= vm_memory_slot *slot) {} +static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) {} +static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {} +static inline void kvm_arch_sync_events(struct kvm *kvm) {} +static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} +static inline void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm, + struct kvm_memory_slot *slot, + gfn_t gfn_offset, + unsigned long mask) {} + +int kvm_handle_guest_abort(struct kvm_vcpu *vcpu); + +/* arm64 guests do not use async-pf. Defined because Kbuild requires it as= s390 kvm turns it on. */ +#define ASYNC_PF_PER_VCPU 0 +struct kvm_arch_async_pf { + unsigned long pfault_token; +}; + +#define __unsupp_async_call(fn) WARN_ONCE(true, "async not supported on kv= m-arm64 %s", fn) + +static inline bool kvm_arch_can_dequeue_async_page_present(struct kvm_vcpu= *vcpu) +{ + __unsupp_async_call(__func__); + return false; +}; + +static inline void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, + struct kvm_async_pf *work) +{ + __unsupp_async_call(__func__); +}; + +static inline bool kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, + struct kvm_async_pf *work) +{ + __unsupp_async_call(__func__); + return false; +}; + +static inline void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, + struct kvm_async_pf *work) +{ + __unsupp_async_call(__func__); +}; + +static inline void kvm_arch_async_page_present_queued(struct kvm_vcpu *vcp= u) +{ + __unsupp_async_call(__func__); +}; + +#define kvm_supports_32bit_el0() false + +#endif /* ASM_KVM_HOST_ARM64_H */ --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C44F4749C1; Wed, 12 Aug 2026 15:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; cv=none; b=rz1NNqoLJJz/XcWoZXwn+Hj9r+ir343yq3lZNvjhPaYpKqoRrBDW1L3u2w4DDVYrpjU9WVcOQbJEXdUzwBBtnMu5HKYcFdg2fvDJhBgIhX+wrVdVQ30h59y2TYRqewo14oK6zNSD/YkConF+z6/L20NOGgXzMP9fyzhIwEHDYFA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; c=relaxed/simple; bh=tmItWwCbeld3hacr1W/IAEWGRv9LaAVfUr4NMchFF/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kJfnnIwh/fLPQiJ8B2TSoFEX5E3SLbS6IE0nKnWhALHSCkM27g5ltqlIylqAT5cHaXpNtxtAh51WlCdcA+WZzva1EJIGZd8VyTYAMiDlj2Td/OuuzvzfLQfg+eGu2sjJfoX0nAxuy4JE4x/Ez9Nu9PL+IKQnU0jLsp4OvCcgJsc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=OWbsfROD; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="OWbsfROD" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1hKB1816625; Wed, 12 Aug 2026 15:36:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=ywId08J7Tbx4MqC2r zjHWK754WaVxW5lbY11LpqyFpM=; b=OWbsfRODcbtZ+jG23VuVnoqLvcmFf/vzB DF1THDv7D8up8Ybg8CwimGIGsMfzDd9IdCDkofSzc+BPd7GMHjy3BznoiTge4bQW Qrv3emIm7G67P7nttCyl/sP0hBohQiCpimBHMWXsKV29KV/jJQgbd5K8pH2jocpO uybMKXqYIn/MVsWj6xIYqMwo7cAxLqzQM4vpa625lPizppLpJ/0BANUQ7UsGguN1 K+xXd8KrY9yFjFkgQ+nmE+HPVzgAObYA00ktToBc+UYWP01lrA3xCFTY6+tKEiLc jwzSnItuzBfqjtRo9wwP9jYa0b/DhVMApZq7g4guSqN5btDTcyAhg== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvk0381j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:47 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQKuF013754; Wed, 12 Aug 2026 15:36:46 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h6mkh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:46 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFagkI32833894 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:42 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6DFDB2004B; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1E15220063; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 27/33] s390/hwcaps: Report SAE support as hwcap Date: Wed, 12 Aug 2026 17:36:23 +0200 Message-ID: <20260812153631.3376090-28-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8L2/FKqxGSlW vgNmx14J9IYgW0LX1+/tVAEcSlua2VHHEVeD0Xs96Dff2m8h6FXfm8iWNlDvDbyrTBS9Oshpt0z cXASFlwn4ETMPiKzCoiBCxRiV2cPR7Ya7X4jaGQ+DHExuYCZ7GE+6PSL+kBLgeN4431uwdFKgjv 2lfrnn7kg5Wj7LvHofPVIAhEb38lG/tFOP630i++dH8E9UIZ/d8wZ1kRJpXMOk3qqjaEEP5gexd Fuqrc1Hu9MBiPou7wfGdOLQm5n5CqVJ0iBsUakBYyv2iAzzIjb2lNTIiaX01ERIfoLcWXusz3Ud tE/Vyka4zSOjfnMKL7ys6YII6PbFxx/u9JO1kW/+cOKqLGh9YaDvYYAZLJYx7s2CGUwimSWQXHi UEMiacGHe4kitz8e8aj75TUGhxBhXnCFsIu+c52fGzRcO53iJYinaa8iHSJwJJIDQEH4jPAwLiF g0IQWezDUfLcPPzJOtQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX156oRYZPK18E 1C6gzisMf98MnNZ03CSyWWzoG7/znmvwMyxnj5alA713M4//fxyypAhXvm9T0t2T2HLOPTSOerf dtmHpmU15HnpG0oVxX/G+6o3uiFlGK4= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7c9310 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=MMtvGDNtdIwsdepEW5QA:9 X-Proofpoint-GUID: 0-Sx_h0QMZJtm-CgfA5ljB4a-Bs0AUo5 X-Proofpoint-ORIG-GUID: h9o-llhFTRv1ZcMcdsqAjo28CI0ugT_- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" From: Hendrik Brueckner Report SAE support as hwcap (and /proc/cpuinfo) Signed-off-by: Hendrik Brueckner Reviewed-by: Steffen Eiden Signed-off-by: Steffen Eiden Reviewed-by: Janosch Frank --- arch/s390/include/asm/elf.h | 2 ++ arch/s390/include/asm/sclp.h | 5 ++++- arch/s390/kernel/processor.c | 3 +++ drivers/s390/char/sclp_early.c | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h index bb63fa4d20bb..ad3108ecfb07 100644 --- a/arch/s390/include/asm/elf.h +++ b/arch/s390/include/asm/elf.h @@ -123,6 +123,7 @@ enum { HWCAP_NR_NNPA =3D 20, HWCAP_NR_PCI_MIO =3D 21, HWCAP_NR_SIE =3D 22, + HWCAP_NR_SAE =3D 23, HWCAP_NR_MAX }; =20 @@ -150,6 +151,7 @@ enum { #define HWCAP_NNPA BIT(HWCAP_NR_NNPA) #define HWCAP_PCI_MIO BIT(HWCAP_NR_PCI_MIO) #define HWCAP_SIE BIT(HWCAP_NR_SIE) +#define HWCAP_SAE BIT(HWCAP_NR_SAE) =20 /* * These are used to set parameters in the core dumps. diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h index 44066550b9b1..68f61b71a2d5 100644 --- a/arch/s390/include/asm/sclp.h +++ b/arch/s390/include/asm/sclp.h @@ -56,7 +56,9 @@ struct sclp_core_entry { u8 siif : 1; u8 sigpif : 1; u8 : 3; - u8 reserved2[3]; + u8 aef: 1; + u8 : 7; + u8 reserved2[2]; u8 : 2; u8 ib : 1; u8 cei : 1; @@ -109,6 +111,7 @@ struct sclp_info { unsigned char has_aeni : 1; unsigned char has_aisi : 1; unsigned char has_astfleie2 : 1; + unsigned char has_aef : 1; unsigned int ibc; unsigned int mtid; unsigned int mtid_cp; diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c index e33a3eccda56..6da55a158027 100644 --- a/arch/s390/kernel/processor.c +++ b/arch/s390/kernel/processor.c @@ -150,6 +150,7 @@ static void show_cpu_summary(struct seq_file *m, void *= v) [HWCAP_NR_NNPA] =3D "nnpa", [HWCAP_NR_PCI_MIO] =3D "pcimio", [HWCAP_NR_SIE] =3D "sie", + [HWCAP_NR_SAE] =3D "sae", }; int i, cpu; =20 @@ -254,6 +255,8 @@ static int __init setup_hwcaps(void) /* virtualization support */ if (sclp.has_sief2) elf_hwcap |=3D HWCAP_SIE; + if (sclp.has_aef) + elf_hwcap |=3D HWCAP_SAE; =20 return 0; } diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c index 22dd797e6229..e58d24b95bd1 100644 --- a/drivers/s390/char/sclp_early.c +++ b/drivers/s390/char/sclp_early.c @@ -96,6 +96,7 @@ static void __init sclp_early_facilities_detect(void) sclp.has_ib =3D cpue->ib; sclp.has_cei =3D cpue->cei; sclp.has_skey =3D cpue->skey; + sclp.has_aef =3D cpue->aef; break; } =20 --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D19E24772BB; Wed, 12 Aug 2026 15:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; cv=none; b=bB2f+tJf3+kabaF4B5gU2757y88ZuPYtjM33YFIyZeFFdepUWZe5HR5GceQJaAt/T1OMZJphLiU8MS4sJR2nvLlE6lN653caorAmxmiZ99F8NFWp3I4nM9uDU4t2LUnBvD0nMFhgtYCyWWk/T9ZdEsY/XlVCCK4KvRovitcmGC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549056; c=relaxed/simple; bh=QeN/dVsBYu1PpvTDcnbwL/bgoYazhHgGwQfqHM85wMI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rFh/54nigSt0G2Ez5g0QRet270YaJjT4WFy27SPgy1M8vK3UdRbVq7DDJGfNE30klo5SkRDYXs/FnyuYy8Hexf1XRnvztrPjZjkxL9uWS7LjA5fxhVwLsNLWXH5/rz5NIQWNP/v1Owtfat0E8nT5QhdnB5fAuvYKHNKPGlQrO8s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Qlixo0pq; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Qlixo0pq" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1wv03594490; Wed, 12 Aug 2026 15:36:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=GKbbFOvINxKNwNvuj FCoMbtxWQXvW5tCYzYMDrhF8e8=; b=Qlixo0pqzko/a33eTxhdZ+GARM4eBIDgI udk3Ew2M1FJnNMxvXw40gYtwPiw4rH0oJWP6Nh+qJMbrBmjixnvdvqn98B8XBHXx /o5HAm5AsXizaWQHUOuelrdvC1CHn6h7COWakppYLBzLtYB0WctUYVhvrjlQVFDy 8eN48BOSM98YYGxfCMn5CEGq6V5G0Q3BHqm5hO8MZmC2dY8th1FUcp9FB68ZxSoH JOX4t0R+p7Qc9aUFfLZtigC5V7SCpGKlYfpeAYcc5gDv3BTLVZIbN9Y3CAhEQwUk C3/21J2rykYyUvZKZ/yKjxfUgz5MTVpYGqpCVUxFEGN2aK1RQDOHw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e27-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:47 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQH7u024770; Wed, 12 Aug 2026 15:36:47 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjxpk2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:46 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFagJ932833898 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:43 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CC6B520040; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 73B1820049; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 28/33] KVM: s390: Add basic arm64 kvm module Date: Wed, 12 Aug 2026 17:36:24 +0200 Message-ID: <20260812153631.3376090-29-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c9310 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=36xwF7fJQ_K8JzKkrRgA:9 X-Proofpoint-GUID: MSmZkIEocjEidJm8N0KUnoXrF6kkrnCR X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXwZVGjy4mRb5O vkWHDNIaVrhss64moXW/jilc576cU4xCEBcVZC+gmgjS4+bN+1vncsekIP2jOhgXmTY6GtMh1Rl 4lWzXr31mMnYxSY8CJBnpjceXpSSM8hvb66OMLpbGJojDNmgdIIOf0LQIxMJuRPpRW+PDUWDWsR 1UOAgZ/PY70b5yODENtzL43a0UBS8VkGtqZFJrioFdpCFm4oHauvw+K4aw2HeSzX5tj7WNFMIRM iuYcKoFHnVbAyj79/nyUOYJDycFFYRk7cZRkMgnAHwHD4DMTU/m6vHJ56tN2kjOlHEvdUCNDz1y kuUu/llSoZQ08+3emdo8OeI3ththpOAx6k5SxcT0C7LOn6HwQWT09+oUbeKaDSMxMMmn6wmUWa9 v0iRpHZ/8+AWv/m6L1dYp+lKPiS8XtFZxZpHYT9UJzCnDyCI05q3/+jfIfzsNfDggN6Id2wrFWh Bp74dUoBOz2bdJJ50xA== X-Proofpoint-ORIG-GUID: afF--hPW_zm3t0TumRqGkqvCyBqklH6W X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1BDEH4QRUbD2 qLsDOkHoieelIrPB3m2E5iGskzzJUhMiNsREW1kNDBx6Zn93m1blOsaiB4eidw9eIsjgKaEWZ1P dX44MoQ08LeRO0DxyH6iGvvBGw/+iEg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Add basic code for the new arm64 on s390 KVM implementation. Add kernel module boilerplate code and trivial functions. Add tracing scaffolding. Signed-off-by: Steffen Eiden --- arch/s390/kvm/arm64/arm.c | 157 ++++++++++++++++++++++++++++++++++++ arch/s390/kvm/arm64/arm.h | 7 ++ arch/s390/kvm/arm64/guest.c | 92 +++++++++++++++++++++ arch/s390/kvm/arm64/trace.h | 18 +++++ 4 files changed, 274 insertions(+) create mode 100644 arch/s390/kvm/arm64/arm.c create mode 100644 arch/s390/kvm/arm64/arm.h create mode 100644 arch/s390/kvm/arm64/guest.c create mode 100644 arch/s390/kvm/arm64/trace.h diff --git a/arch/s390/kvm/arm64/arm.c b/arch/s390/kvm/arm64/arm.c new file mode 100644 index 000000000000..8e17b7eef813 --- /dev/null +++ b/arch/s390/kvm/arm64/arm.c @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: GPL-2.0 + +#define KMSG_COMPONENT "kvm-s390-arm64" +#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt + +#include +#include +#include +#include + +#include "arm.h" + +#define CREATE_TRACE_POINTS +#include "trace.h" + +static unsigned long system_supported_vcpu_features(void); + +#define __INCL_GEN_ARM_FILE +#include "generated/arm.inc" +#undef __INCL_GEN_ARM_FILE + +int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) +{ + int ret; + + switch (ext) { + case KVM_CAP_NR_VCPUS: + case KVM_CAP_MAX_VCPUS: + case KVM_CAP_MAX_VCPU_ID: + ret =3D KVM_MAX_VCPUS; + break; + case KVM_CAP_ARM_VM_IPA_SIZE: + ret =3D get_kvm_ipa_limit(); + break; + case KVM_CAP_IOEVENTFD: + ret =3D 1; + break; + default: + ret =3D 0; + } + + return ret; +} + +static u64 kvm_max_guest_address(void) +{ + u64 max_addr; + + if (sclp.hamax =3D=3D U64_MAX) + max_addr =3D TASK_SIZE_MAX; + else + max_addr =3D min_t(u64, TASK_SIZE_MAX, sclp.hamax); + return ALIGN_DOWN(max_addr + 1, 1 << 30) - 1; +} + +vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) +{ + return VM_FAULT_SIGBUS; +} + +long kvm_arch_dev_ioctl(struct file *filp, + unsigned int ioctl, unsigned long arg) +{ + return -EINVAL; +} + +u32 get_kvm_ipa_limit(void) +{ + return fls64(kvm_max_guest_address() + 1) - 1; +} + +int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id) +{ + return 0; +} + +void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) +{ +} + +int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, + struct kvm_mp_state *mp_state) +{ + *mp_state =3D READ_ONCE(vcpu->arch.mp_state); + return 0; +} + +int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, + struct kvm_mp_state *mp_state) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) +{ + return 0; +} + +static unsigned long system_supported_vcpu_features(void) +{ + unsigned long features =3D KVM_S390_ARM64_IMPL_FEATURES; + + return features; +} + +bool kvm_arch_irqchip_in_kernel(struct kvm *kvm) +{ + return false; +} + +int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, struct kvm *kvm, + int irq_source_id, int level, bool line_status) +{ + return -EINVAL; +} + +int kvm_set_routing_entry(struct kvm *kvm, + struct kvm_kernel_irq_routing_entry *e, + const struct kvm_irq_routing_entry *ue) +{ + return -EINVAL; +} + +int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) +{ + return 0; +} + +#ifdef CONFIG_HAVE_KVM_NO_POLL +__weak bool kvm_arch_no_poll(struct kvm_vcpu *vcpu) +{ + return false; +} +#endif + +long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl, + unsigned long arg) +{ + return -ENOIOCTLCMD; +} + +static int __init kvm_s390_arm64_init(void) +{ + if (!sclp.has_aef) + return -ENXIO; + + return kvm_init_with_dev(sizeof(struct kvm_vcpu), 0, THIS_MODULE, + KVM_DEV_NAME, MISC_DYNAMIC_MINOR); +} + +static __exit void kvm_s390_arm64_exit(void) +{ + kvm_exit(); +} + +module_init(kvm_s390_arm64_init); +module_exit(kvm_s390_arm64_exit); diff --git a/arch/s390/kvm/arm64/arm.h b/arch/s390/kvm/arm64/arm.h new file mode 100644 index 000000000000..a3db254462c0 --- /dev/null +++ b/arch/s390/kvm/arm64/arm.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef ARCH_S390_KVM_ARM64_H +#define ARCH_S390_KVM_ARM64_H + +#define KVM_DEV_NAME "kvm-arm64" + +#endif /* ARCH_S390_KVM_ARM64_H */ diff --git a/arch/s390/kvm/arm64/guest.c b/arch/s390/kvm/arm64/guest.c new file mode 100644 index 000000000000..fd6442d9e4f4 --- /dev/null +++ b/arch/s390/kvm/arm64/guest.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include + +#include +#include + +#include "guest.h" + +#define __INCL_GEN_ARM_FILE +#include "generated/guest.inc" +#undef __INCL_GEN_ARM_FILE + +const struct kvm_stats_desc kvm_vm_stats_desc[] =3D { + KVM_GENERIC_VM_STATS() +}; + +const struct kvm_stats_header kvm_vm_stats_header =3D { + .name_size =3D KVM_STATS_NAME_SIZE, + .num_desc =3D ARRAY_SIZE(kvm_vm_stats_desc), + .id_offset =3D sizeof(struct kvm_stats_header), + .desc_offset =3D sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE, + .data_offset =3D sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE + + sizeof(kvm_vm_stats_desc), +}; + +const struct kvm_stats_desc kvm_vcpu_stats_desc[] =3D { + KVM_GENERIC_VCPU_STATS(), + /* ARM64 stats */ + STATS_DESC_COUNTER(VCPU, hvc_exit_stat), + STATS_DESC_COUNTER(VCPU, wfe_exit_stat), + STATS_DESC_COUNTER(VCPU, wfi_exit_stat), + STATS_DESC_COUNTER(VCPU, mmio_exit_user), + STATS_DESC_COUNTER(VCPU, mmio_exit_kernel), + STATS_DESC_COUNTER(VCPU, signal_exits), + STATS_DESC_COUNTER(VCPU, exits), + /* GMAP stats */ + STATS_DESC_COUNTER(VCPU, pfault_sync), +}; + +const struct kvm_stats_header kvm_vcpu_stats_header =3D { + .name_size =3D KVM_STATS_NAME_SIZE, + .num_desc =3D ARRAY_SIZE(kvm_vcpu_stats_desc), + .id_offset =3D sizeof(struct kvm_stats_header), + .desc_offset =3D sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE, + .data_offset =3D sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE + + sizeof(kvm_vcpu_stats_desc), +}; + +int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *r= egs) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *r= egs) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, + struct kvm_sregs *sregs) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, + struct kvm_sregs *sregs) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, + struct kvm_translation *tr) +{ + return -EINVAL; +} + +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, + struct kvm_guest_debug *dbg) +{ + return -EINVAL; +} diff --git a/arch/s390/kvm/arm64/trace.h b/arch/s390/kvm/arm64/trace.h new file mode 100644 index 000000000000..3a5dcd039c13 --- /dev/null +++ b/arch/s390/kvm/arm64/trace.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#if !defined(KVM_ARM64_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) +#define KVM_ARM64_TRACE_KVM_H + +#include + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM kvm + +#endif /* KVM_ARM64_TRACE_KVM_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE trace + +/* This part must be outside protection */ +#include --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FDB94582F7; Wed, 12 Aug 2026 15:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; cv=none; b=X8m7dMXMAmV6h2aasAqY19ohBwbvWOt1OYj/3cQQGS7VEbb9bVTtIFCG1/5RK1A5CSRfmopbxUx3Jehs0W1CSkaYCGT2tyiCNRyMI1QYoEsrKYlOO6YILxKXJZ+M58H8B0Zvk9kmlA46c7p0gQ2QgrXkWjP6R/378d6bjDGnGBk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549051; c=relaxed/simple; bh=Vqp6INyP6Prq4vau1DL00nlrCkUyPcqlRdcrADAzn3Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PjouWIEULG0pI4038UZAuYgkpKou5EaBUG8n972Z5zCMRMU7hgU0fX8T4Ozjmrf34Ww48ULYQaWSt43ZEGLGCMNq169CagD28MnUrNbV26qeGPDVpsXm8+EPVtby+Ocbfmdf3RkaT7xupmz3tcbYtsLZNTwhEh/3O3IQmXHqCOo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=tX7N93Eg; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="tX7N93Eg" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1pHD3640585; Wed, 12 Aug 2026 15:36:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=DBTFroyfL0MElbYeL wi6dbzynFuGif5TH6/KOYyRyXE=; b=tX7N93EgaZuAFzLSD9Q9855IDmeGZR3ZT GQ8vuubZ4HKkiG8r49nxo5rz6RVDyZ6QbRPDNH3/xY5TpWg1t4FL88iY60GP+4G2 /gmMRzOkv0hJp83Tz9YG8Q1oPHM8Bydl9URIObOmJf148O1umTpJaHcz2U7OMciq H+x4Pu9U8lV6G9Ars3w1y4lMn/fdnBOwT1cBv839GZTAbx0sHiII5DxAd9stEukZ 66gegO3EpDopa7z1IGRyUA2/BnMugOfeT1DY43UuhpZLb+pe3yuTpX/jBv5MBuKz /oqHqJQy9Y4CstulXk+/YnwQDb1JKKucZHHuahE6gd2nrKZqzJLwg== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7cu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:48 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFBGfL018618; Wed, 12 Aug 2026 15:36:47 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5w6tdk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:47 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFahTv42074518 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:43 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 35DBF2004F; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D26D02004B; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:42 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 29/33] KVM: s390: arm64: Implement required functions Date: Wed, 12 Aug 2026 17:36:25 +0200 Message-ID: <20260812153631.3376090-30-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: McwIXT2T-3HfZpc1tEkRZCAfqqd3TfEB X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c9311 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=FvtiEy3qvhp2I5fuxrcA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX9P2NdrHhks0M V8isYreBxBSuYTYSAegKA+COltRFIPnaga9ZIN2BEyEfBeh+h5eQoW+SFuCknZDs9xyAP/VTb2n aNpdGrHInBOC7TEDvhwgyJV1I2/6B2At6vI0J3p2q5ZS/3AsaQ+7KeKjWZTlWUqwEB8JN7qEf9f fwignUh7MfQ55b6QeW2Gd0VALMPOibKeIa6Gb+qmIpjQG8yby7oxtlRNalkk2lQdTbmr28juFNi 71LoKeKdlmrtAJoxF8hQ7tl4+7+ngp81LXaqG7FGnJYzb32Onbz9Zxmql7yDoJ4pe4hkdkp406c n74nkIa/20B8w/Nwhd1yR6zVyz5GGCrVB8vsIMYTG63FOBbjRjBGcAriYdYUAPU6OwsW8Mqxt9c 0ppCgjlD07eXqV9oiz1nMVn7OfkZZEcNUUR9+p1HQ93Zsah25QLH6CXBW9WJELDdyVM7K/XNPfA 17jPMBwpuY+PXqH6Btw== X-Proofpoint-ORIG-GUID: tdXtZcf_EKpf50SqA_ffBuXxURSLiB-i X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX+nAGu4Q7hZB9 N86ddfqB+MSRUo0TRBSz+L5JYdvIB345mPQal7+v8t0eS0e3uwPXTKC+qYo71ZmJLDkp31bWZRP r3ejfCeW6vhRBk60qz6UsL86YaCwnXw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Implement the mostly trivial functions that the shared arm64 (kvm) code & headers oblige s390 to implement. Implement a very basic smccc handler that (non-compliantly) is just able to stop a vcpu. Signed-off-by: Steffen Eiden --- arch/s390/include/arm64/kvm_emulate.h | 130 ++++++++++++++++++++++++++ arch/s390/include/arm64/kvm_nested.h | 11 +++ arch/s390/include/arm64/ptrace.h | 11 +++ arch/s390/include/arm64/sysreg.h | 13 +++ arch/s390/kvm/arm64/handle_exit.c | 98 +++++++++++++++++++ arch/s390/kvm/arm64/inject_fault.c | 21 +++++ 6 files changed, 284 insertions(+) create mode 100644 arch/s390/include/arm64/kvm_emulate.h create mode 100644 arch/s390/include/arm64/kvm_nested.h create mode 100644 arch/s390/include/arm64/ptrace.h create mode 100644 arch/s390/include/arm64/sysreg.h create mode 100644 arch/s390/kvm/arm64/handle_exit.c create mode 100644 arch/s390/kvm/arm64/inject_fault.c diff --git a/arch/s390/include/arm64/kvm_emulate.h b/arch/s390/include/arm6= 4/kvm_emulate.h new file mode 100644 index 000000000000..c1551e3da8f4 --- /dev/null +++ b/arch/s390/include/arm64/kvm_emulate.h @@ -0,0 +1,130 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __S390_ARM64_KVM_EMULATE_H__ +#define __S390_ARM64_KVM_EMULATE_H__ + +#include +#include + +#include +#include +#include +#include + +static __always_inline unsigned long *vcpu_pc(const struct kvm_vcpu *vcpu) +{ + return (unsigned long *)&vcpu->arch.sae_block.pc; +} + +static __always_inline unsigned long *vcpu_cpsr(const struct kvm_vcpu *vcp= u) +{ + return (unsigned long *)&vcpu->arch.sae_block.pstate; +} + +static __always_inline unsigned long *vcpu_sp_el0(const struct kvm_vcpu *v= cpu) +{ + return (unsigned long *)&vcpu->arch.sae_block.sp_el0; +} + +static __always_inline u64 *vcpu_sp_el1(struct kvm_vcpu *vcpu) +{ + return &vcpu->arch.sae_block.sp_el1; +} + +static __always_inline __vector128 *vcpu_vreg(struct kvm_vcpu *vcpu, int o= ff) +{ + return &vcpu->arch.ctxt.vregs[off]; +} + +static __always_inline u64 *vcpu_fpsr(struct kvm_vcpu *vcpu) +{ + return &vcpu->arch.sae_block.fpsr; +} + +static __always_inline u64 *vcpu_fpcr(struct kvm_vcpu *vcpu) +{ + return &vcpu->arch.sae_block.fpcr; +} + +static __always_inline bool vcpu_mode_is_32bit(const struct kvm_vcpu *vcpu) +{ + return false; +} + +static __always_inline u64 kvm_vcpu_get_esr(const struct kvm_vcpu *vcpu) +{ + return vcpu->arch.sae_block.hai.esr_elz; +} + +static inline unsigned long *vcpu_hcr(struct kvm_vcpu *vcpu) +{ + return (unsigned long *)&vcpu->arch.hcr_elz; +} + +static __always_inline unsigned long kvm_vcpu_get_hfar(const struct kvm_vc= pu *vcpu) +{ + return vcpu->arch.sae_block.hai.far_elz; +} + +static __always_inline phys_addr_t kvm_vcpu_get_fault_ipa(const struct kvm= _vcpu *vcpu) +{ + return vcpu->arch.sae_block.hai.teid.addr * PAGE_SIZE; +} + +static inline u16 kvm_vcpu_fault_pic(const struct kvm_vcpu *vcpu) +{ + return vcpu->arch.sae_block.hai.pic & PGM_INT_CODE_MASK; +} + +static __always_inline +bool kvm_vcpu_trap_is_permission_fault(const struct kvm_vcpu *vcpu) +{ + return kvm_vcpu_fault_pic(vcpu) =3D=3D PGM_PROTECTION; +} + +static __always_inline bool kvm_condition_valid(const struct kvm_vcpu *vcp= u) +{ + return true; +} + +static __always_inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu) +{ + return false; +} + +static inline bool kvm_vcpu_is_be(struct kvm_vcpu *vcpu) +{ + return false; +} + +static inline int kvm_vcpu_abt_gltl(struct kvm_vcpu *vcpu) +{ + return vcpu->arch.sae_block.hai.gltl; +} + +static inline bool vcpu_mode_priv(const struct kvm_vcpu *vcpu) +{ + u32 mode =3D *vcpu_cpsr(vcpu) & PSR_MODE_MASK; + + return mode !=3D PSR_MODE_EL0t; +} + +static inline void kvm_skip_instr(struct kvm_vcpu *vcpu) +{ + *vcpu_pc(vcpu) +=3D 4; + *vcpu_cpsr(vcpu) &=3D ~PSR_BTYPE_MASK; + + /* advance the singlestep state machine */ + *vcpu_cpsr(vcpu) &=3D ~SPSR_ELx_SS; +} + +static inline void kvm_reset_fpsimd(struct kvm_vcpu *vcpu) +{ + memset(vcpu->arch.ctxt.vregs, 0, sizeof(vcpu->arch.ctxt.vregs)); + vcpu->arch.sae_block.fpsr =3D 0; + vcpu->arch.sae_block.fpcr =3D 0; +} + +#include + +#endif /* __S390_ARM64_KVM_EMULATE_H__ */ diff --git a/arch/s390/include/arm64/kvm_nested.h b/arch/s390/include/arm64= /kvm_nested.h new file mode 100644 index 000000000000..e950b1a10c41 --- /dev/null +++ b/arch/s390/include/arm64/kvm_nested.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef ASM_KVM_NESTED_H +#define ASM_KVM_NESTED_H + +static inline bool vcpu_has_nv(const struct kvm_vcpu *vcpu) +{ + return false; +} + +#endif /* ASM_KVM_NESTED_H */ diff --git a/arch/s390/include/arm64/ptrace.h b/arch/s390/include/arm64/ptr= ace.h new file mode 100644 index 000000000000..449b85582c97 --- /dev/null +++ b/arch/s390/include/arm64/ptrace.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __S390_ARM64_PTRACE_H__ +#define __S390_ARM64_PTRACE_H__ + +#include +#include + +#include + +#endif /* __S390_ARM64_PTRACE_H__ */ diff --git a/arch/s390/include/arm64/sysreg.h b/arch/s390/include/arm64/sys= reg.h new file mode 100644 index 000000000000..ac6b638fef56 --- /dev/null +++ b/arch/s390/include/arm64/sysreg.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __S390_ARM64_SYSREG_H__ +#define __S390_ARM64_SYSREG_H__ + +#include +#include +#include +#include + +#include + +#endif /* __S390_ARM64_SYSREG_H__ */ diff --git a/arch/s390/kvm/arm64/handle_exit.c b/arch/s390/kvm/arm64/handle= _exit.c new file mode 100644 index 000000000000..ed872cd804dc --- /dev/null +++ b/arch/s390/kvm/arm64/handle_exit.c @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include + +#include +#include + +typedef int (*exit_handle_fn)(struct kvm_vcpu *); +static exit_handle_fn arm_exit_handlers[ESR_ELx_EC_MAX + 1]; + +#define __INCL_GEN_ARM_FILE +#include "generated/handle_exit.inc" +#undef __INCL_GEN_ARM_FILE + +#define PSCI_0_2_FN_SYSTEM_OFF 0x84000008 +#define PSCI_RET_NOT_SUPPORTED -1 +#define PSCI_RET_INTERNAL_FAILURE -6 +/* + * Temporary smc/hvc handler. Non-compliant implementation (features missi= ng). + * Implements only system off so that test programs are able to end their = execution + */ +static int kvm_smccc_call_handler(struct kvm_vcpu *vcpu) +{ + u32 func_id =3D vcpu_get_reg(vcpu, 0); + u64 val =3D PSCI_RET_NOT_SUPPORTED; + int ret =3D 1; + + if (func_id =3D=3D PSCI_0_2_FN_SYSTEM_OFF) { + scoped_guard(spinlock, &vcpu->arch.mp_state_lock) { + WRITE_ONCE(vcpu->arch.mp_state.mp_state, KVM_MP_STATE_STOPPED); + } + kvm_make_all_cpus_request(vcpu->kvm, KVM_REQ_SLEEP); + memset(&vcpu->run->system_event, 0, + sizeof(vcpu->run->system_event)); + vcpu->run->system_event.type =3D KVM_SYSTEM_EVENT_SHUTDOWN; + vcpu->run->system_event.ndata =3D 1; + vcpu->run->system_event.data[0] =3D 0; + vcpu->run->exit_reason =3D KVM_EXIT_SYSTEM_EVENT; + val =3D PSCI_RET_INTERNAL_FAILURE; + ret =3D 0; + } + vcpu_set_reg(vcpu, 0, val); + + return ret; +} + +static int handle_hvc(struct kvm_vcpu *vcpu) +{ + vcpu->stat.hvc_exit_stat++; + return kvm_smccc_call_handler(vcpu); +} + +static exit_handle_fn arm_exit_handlers[] =3D { + [0 ... ESR_ELx_EC_MAX] =3D kvm_handle_unknown_ec, + [ESR_ELx_EC_HVC64] =3D handle_hvc, +}; + +/* manually copied from arch/arm64/kernel/traps.c */ +static const char * const esr_class_str[] =3D { + [0 ... ESR_ELx_EC_MAX] =3D "UNRECOGNIZED EC", + [ESR_ELx_EC_UNKNOWN] =3D "Unknown/Uncategorized", + [ESR_ELx_EC_WFx] =3D "WFI/WFE", + [ESR_ELx_EC_FP_ASIMD] =3D "ASIMD", + [ESR_ELx_EC_PAC] =3D "PAC", + [ESR_ELx_EC_BTI] =3D "BTI", + [ESR_ELx_EC_ILL] =3D "PSTATE.IL", + [ESR_ELx_EC_SVC64] =3D "SVC (AArch64)", + [ESR_ELx_EC_HVC64] =3D "HVC (AArch64)", + [ESR_ELx_EC_SMC64] =3D "SMC (AArch64)", + [ESR_ELx_EC_SYS64] =3D "MSR/MRS (AArch64)", + [ESR_ELx_EC_SVE] =3D "SVE", + [ESR_ELx_EC_ERET] =3D "ERET/ERETAA/ERETAB", + [ESR_ELx_EC_FPAC] =3D "FPAC", + [ESR_ELx_EC_SME] =3D "SME", + [ESR_ELx_EC_IMP_DEF] =3D "EL3 IMP DEF", + [ESR_ELx_EC_IABT_LOW] =3D "IABT (lower EL)", + [ESR_ELx_EC_IABT_CUR] =3D "IABT (current EL)", + [ESR_ELx_EC_PC_ALIGN] =3D "PC Alignment", + [ESR_ELx_EC_DABT_LOW] =3D "DABT (lower EL)", + [ESR_ELx_EC_DABT_CUR] =3D "DABT (current EL)", + [ESR_ELx_EC_SP_ALIGN] =3D "SP Alignment", + [ESR_ELx_EC_MOPS] =3D "MOPS", + [ESR_ELx_EC_FP_EXC64] =3D "FP (AArch64)", + [ESR_ELx_EC_GCS] =3D "Guarded Control Stack", + [ESR_ELx_EC_SERROR] =3D "SError", + [ESR_ELx_EC_BREAKPT_LOW] =3D "Breakpoint (lower EL)", + [ESR_ELx_EC_BREAKPT_CUR] =3D "Breakpoint (current EL)", + [ESR_ELx_EC_SOFTSTP_LOW] =3D "Software Step (lower EL)", + [ESR_ELx_EC_SOFTSTP_CUR] =3D "Software Step (current EL)", + [ESR_ELx_EC_WATCHPT_LOW] =3D "Watchpoint (lower EL)", + [ESR_ELx_EC_WATCHPT_CUR] =3D "Watchpoint (current EL)", + [ESR_ELx_EC_BRK64] =3D "BRK (AArch64)", +}; + +const char *esr_get_class_string(unsigned long esr) +{ + return esr_class_str[ESR_ELx_EC(esr)]; +} diff --git a/arch/s390/kvm/arm64/inject_fault.c b/arch/s390/kvm/arm64/injec= t_fault.c new file mode 100644 index 000000000000..425dbeaa421c --- /dev/null +++ b/arch/s390/kvm/arm64/inject_fault.c @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include + +/** + * kvm_inject_undefined - inject an undefined instruction into the guest + * @vcpu: The vCPU in which to inject the exception + * + * It is assumed that this code is called from the VCPU thread and that the + * VCPU therefore is not currently executing guest code. + */ +void kvm_inject_undefined(struct kvm_vcpu *vcpu) +{ + /* Stub until s390 supports arm64 sysregs TODO sysregs*/ +} + +int kvm_inject_sea(struct kvm_vcpu *vcpu, bool iabt, u64 addr) +{ + /* Stub until s390 supports arm64 sysregs TODO sysregs*/ + return 1; +} --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88AE34749F6; Wed, 12 Aug 2026 15:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549059; cv=none; b=pnDN43qNWQW0Q0dFKhC/Ot5gt/9Gmvqd6gSsuRmyAfr+3fGpK1m3xi7761x5RVvCpZ/WvTZRO0mgfIBBgCS5ubOFCLr+mwUmD2R/2OfS/0OYEnVtBM/zb0aGUoUnODJiwRjwkRb8WG0VaDTCNJ5TAPBk1ERilz0ApskCoItg1TY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549059; c=relaxed/simple; bh=toIlu60ROTI0s+1sOtFWsoPEuQ2T3HbMD0NBt2eTq5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UVMs000EPt6vAVvBNrhSUqnTOtUdetGSvxdYkL2rmlddJTOtr8YwVECbCMRTIP14ATrAxZT6l7QL/GetbrUOGqem4sWcjtA+CDw3JHBccXnjxRtN7qo81N5pI19AmqnN2QDMoYVyIjy7xmXWAy5qLJe5duz6sfbLkWUuLo96PlI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=ang2rdmf; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="ang2rdmf" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1amT3640234; Wed, 12 Aug 2026 15:36:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=PQEF6ckFHTFVzsAQ9 om8xxPXHSQWdhPe1FR7O+DKa4c=; b=ang2rdmfWVTRd4JMOhTKjoVzxDUV/pZrH PUQhrolTpKHO6HV89YHvvihwTwLPzW66viv4fUL9mGWRYcQF23r0dZVfIQBAUV00 MeuVElT8dzd000FCUkk7utdseKYfA6dETNwEj8hfC1ZrFQckYRTfnIHSFH4/wWBs l7KL9d16MtKCEcVmu22qhlwntX535IfkKslL+UDHl1xeLDIvgwtsyQMD6VWt9S1c KRTazq46ZUJnFdfHQIbH2gquDMjkfS975xQ/XDU8jKrqOJ13UFw2Me6UF6NK/amo JEi7RORVc14UjIws/8Nis7RAucpTgJNZhH7oPo7fsvq66YE2XCOsA== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9k7ct-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:48 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQLfX023705; Wed, 12 Aug 2026 15:36:47 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gejgv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:47 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFahlY51314986 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:43 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8A94A2004D; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3B8E92005A; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 30/33] KVM: s390: arm64: Implement vm/vcpu create destroy. Date: Wed, 12 Aug 2026 17:36:26 +0200 Message-ID: <20260812153631.3376090-31-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: 5PC_kFEfkyxsqEaOQtdJaJCQHp50PJxe X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7c9310 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=aGtVslEeawfIErUAdXYA:9 a=O8hF6Hzn-FEA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1M1sOocROMWD uXd2LsGYkQNlyBvnYoJc29hOmqVNoQ8S1+8+Jd9NKqI+dRpTG0MSHi1wf60IFEV9glzfk9V1ca5 gqm388FLK3heQ8jnMQKTNZggaBIQIPKnrooFBK2cyGNH/f1gg9BJmFajAnpVRxCcVSTkEPMptU4 gYa6gekXqZvNnmHCNcZDQCF+6NXqWumvaqtnau0xb9qWduDDnmVqBZBX+t9XirP4GEq/n04ohGh LFTG7M5x96S1NSsrt6F0g3NxBZDsbFDbrV5KkCktNYOhGpFGcBrW4B/Ry4t+Gdw5tnPXTXzkvfM P3fYIoxZZ8tPG/mLGOyS+XqoD69rAb2nWJrk16fiPQZ80jWetjLODEQfoqlWX35njfzdf/rP8sq FWT/P9ES7dTU4Asef4E/F4DZhMjddd9tCFJzFGzsJO2sVc5inSlhmHeIJakh/Q7Nbb7ULkZzGni 7ZvQ5LgqLCtxFPfKlYg== X-Proofpoint-ORIG-GUID: 6QXhFFEg77akVkyg3G5971X5lKSJDmeK X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfXw8Qho+ogrKRA KDqF+D/zBBdz08I0lAIq1Mpsgd2I5hkG7dLd5qJ8HYCiQFRzKf2boK34FkOxzbkOuJghIQotPoK iT8fe9A0l9++Sj8Ql26GIoTLbMA1o2w= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Implement init and destroy IOCTLS for vcpu and vm. Implement arch vm IOCTL. Use s390 gmap and gmap plumbing. Implement function (stubs) required by gamp. Co-developed-by: Janosch Frank Signed-off-by: Janosch Frank Co-developed-by: Andreas Grapentin Signed-off-by: Andreas Grapentin Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- arch/s390/kvm/arm64/arm.c | 197 ++++++++++++++++++++++++++++++++ arch/s390/kvm/arm64/arm.h | 56 +++++++++ arch/s390/kvm/gmap/faultin.c | 5 + arch/s390/kvm/gmap/gmap.c | 4 + arch/s390/kvm/gmap/kvm_mmu.c | 4 + arch/s390/kvm/gmap/trace_gmap.h | 17 +++ 6 files changed, 283 insertions(+) diff --git a/arch/s390/kvm/arm64/arm.c b/arch/s390/kvm/arm64/arm.c index 8e17b7eef813..69d43066f9e1 100644 --- a/arch/s390/kvm/arm64/arm.c +++ b/arch/s390/kvm/arm64/arm.c @@ -8,6 +8,9 @@ #include #include =20 +#include +#include + #include "arm.h" =20 #define CREATE_TRACE_POINTS @@ -19,6 +22,8 @@ static unsigned long system_supported_vcpu_features(void); #include "generated/arm.inc" #undef __INCL_GEN_ARM_FILE =20 +#define KVM_PHYS_SHIFT (40) + int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) { int ret; @@ -53,6 +58,83 @@ static u64 kvm_max_guest_address(void) return ALIGN_DOWN(max_addr + 1, 1 << 30) - 1; } =20 +static int kvm_gmap_init(struct kvm *kvm) +{ + struct crst_table *table; + + kvm->arch.gmap =3D gmap_new(kvm, gpa_to_gfn(kvm->arch.guest_phys_size)); + + if (!kvm->arch.gmap) + return -ENOMEM; + + /* arm64 (on s390) do not have pfault */ + clear_bit(GMAP_FLAG_PFAULT_ENABLED, &kvm->arch.gmap->flags); + set_bit(GMAP_FLAG_ALLOW_HPAGE_1M, &kvm->arch.gmap->flags); + + table =3D dereference_asce(kvm->arch.gmap->asce); + crst_table_init((void *)table, _CRSTE_HOLE(table->crstes[0].h.tt).val); + + return 0; +} + +static int kvm_vm_type_ipa_size_shift(unsigned long type) +{ + int phys_shift; + + phys_shift =3D KVM_VM_TYPE_ARM_IPA_SIZE(type); + if (phys_shift) { + if (phys_shift > get_kvm_ipa_limit() || + phys_shift < ARM64_MIN_PARANGE_BITS) + return -EINVAL; + } else { + phys_shift =3D KVM_PHYS_SHIFT; + if (phys_shift > get_kvm_ipa_limit()) { + pr_warn_once("%s using unsupported default IPA limit\n", + current->comm); + return -EINVAL; + } + } + + return phys_shift; +} + +int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) +{ + char debug_name[32]; + int ret; + + if (type & ~KVM_VM_TYPE_ARM_IPA_SIZE_MASK) + return -EINVAL; + + ret =3D kvm_vm_type_ipa_size_shift(type); + if (ret < 0) + return ret; + kvm->arch.guest_phys_size =3D 1UL << ret; + + mutex_init(&kvm->arch.config_lock); + bitmap_zero(kvm->arch.vcpu_features, KVM_VCPU_MAX_FEATURES); + + snprintf(debug_name, sizeof(debug_name), "kvm-arm64-%u-%u", + current->pid, get_random_u32()); + kvm->arch.dbf =3D debug_register(debug_name, 32, 1, 7 * sizeof(long)); + if (!kvm->arch.dbf) + return -ENOMEM; + debug_register_view(kvm->arch.dbf, &debug_sprintf_view); + + ret =3D kvm_gmap_init(kvm); + if (ret) + goto out_err; + kvm->arch.mem_limit =3D kvm_max_guest_address(); + + VM_EVENT(kvm, 3, "vm created with type %lu", type); + return 0; + +out_err: + debug_unregister(kvm->arch.dbf); + + return ret; +} + vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) { return VM_FAULT_SIGBUS; @@ -64,6 +146,13 @@ long kvm_arch_dev_ioctl(struct file *filp, return -EINVAL; } =20 +void kvm_arch_destroy_vm(struct kvm *kvm) +{ + kvm_destroy_vcpus(kvm); + debug_unregister(kvm->arch.dbf); + kvm->arch.gmap =3D gmap_put(kvm->arch.gmap); +} + u32 get_kvm_ipa_limit(void) { return fls64(kvm_max_guest_address() + 1) - 1; @@ -74,10 +163,43 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned = int id) return 0; } =20 +int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) +{ + struct kvm_sae_block *sae_block =3D &vcpu->arch.sae_block; + struct kvm_sae_save_area *save_area =3D &vcpu->arch.save_area; + + spin_lock_init(&vcpu->arch.mp_state_lock); + + /* Force users to call KVM_ARM_VCPU_INIT */ + vcpu_clear_flag(vcpu, VCPU_INITIALIZED); + + vcpu->arch.mc =3D kvm_s390_new_mmu_cache(); + if (!vcpu->arch.mc) + return -ENOMEM; + + sae_block->hbasce =3D vcpu->kvm->arch.gmap->asce.val; + sae_block->mso =3D 0L; + sae_block->msl =3D kvm_max_guest_address(); + sae_block->save_area =3D virt_to_phys(save_area); + + VM_EVENT(vcpu->kvm, 3, + "create cpu %d at 0x%p, sae block at 0x%p, satellite at 0x%p", + vcpu->vcpu_id, vcpu, &vcpu->arch.sae_block, + &vcpu->arch.save_area); + return 0; +} + void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) { } =20 +void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) +{ + kvm_s390_free_mmu_cache(vcpu->arch.mc); + + VCPU_EVENT(vcpu, 3, "%s", "free cpu"); +} + int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state) { @@ -103,6 +225,81 @@ static unsigned long system_supported_vcpu_features(vo= id) return features; } =20 +int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, + struct kvm_dirty_log *log) +{ + return s390_kvm_mmu_get_dirty_log(kvm, log); +} + +bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) +{ + scoped_guard(read_lock, &kvm->mmu_lock) + return gmap_age_gfn(kvm->arch.gmap, range->start, range->end); +} + +void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *mems= lot) +{ + gfn_t last_gfn =3D memslot->base_gfn + memslot->npages; + + scoped_guard(read_lock, &kvm->mmu_lock) + gmap_sync_dirty_log(kvm->arch.gmap, memslot->base_gfn, last_gfn); +} + +int kvm_arch_prepare_memory_region(struct kvm *kvm, + const struct kvm_memory_slot *old, + struct kvm_memory_slot *new, + enum kvm_mr_change change) +{ + return s390_kvm_mmu_prepare_memory_region(kvm, old, new, change); +} + +void kvm_arch_commit_memory_region(struct kvm *kvm, struct kvm_memory_slot= *old, + const struct kvm_memory_slot *new, + enum kvm_mr_change change) +{ + s390_kvm_mmu_commit_memory_region(kvm, old, new, change); +} + +bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range) +{ + return gmap_unmap_gfn_range(kvm->arch.gmap, range->slot, range->start, ra= nge->end); +} + +bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) +{ + scoped_guard(read_lock, &kvm->mmu_lock) + return dat_test_age_gfn(kvm->arch.gmap->asce, range->start, range->end); +} + +#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY +long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, + struct kvm_pre_fault_memory *range) +{ + return -EOPNOTSUPP; +} +#endif /* CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY*/ + +int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long= arg) +{ + void __user *argp =3D (void __user *)arg; + + switch (ioctl) { + case KVM_ARM_PREFERRED_TARGET: { + struct kvm_vcpu_init init =3D { + .target =3D KVM_ARM_TARGET_GENERIC_V8, + }; + + if (copy_to_user(argp, &init, sizeof(init))) + return -EFAULT; + + return 0; + } + + default: + return -EINVAL; + } +} + bool kvm_arch_irqchip_in_kernel(struct kvm *kvm) { return false; diff --git a/arch/s390/kvm/arm64/arm.h b/arch/s390/kvm/arm64/arm.h index a3db254462c0..289e148a6b02 100644 --- a/arch/s390/kvm/arm64/arm.h +++ b/arch/s390/kvm/arm64/arm.h @@ -2,6 +2,62 @@ #ifndef ARCH_S390_KVM_ARM64_H #define ARCH_S390_KVM_ARM64_H =20 +#include +#include + #define KVM_DEV_NAME "kvm-arm64" =20 +#define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\ +do { \ + debug_sprintf_event((d_kvm)->arch.dbf, d_loglevel, KVM_DEV_NAME ": " d_st= ring "\n", d_args); \ +} while (0) + +#define VCPU_EVENT(d_vcpu, d_loglevel, d_string, d_args...) \ + do { \ + debug_sprintf_event( \ + (d_vcpu)->kvm->arch.dbf, d_loglevel, \ + KVM_DEV_NAME " %02d[%016llx-%016llx]: " d_string "\n", \ + (d_vcpu)->vcpu_id, (d_vcpu)->arch.sae_block.pstate, \ + (d_vcpu)->arch.sae_block.pc, d_args); \ + } while (0) + +static __always_inline int kvm_is_ucontrol(struct kvm *kvm) +{ + return 0; +} + +static __always_inline int __kvm_s390_pv_destroy_page(struct page *page) +{ + return 0; +} + +static __always_inline void kvm_s390_vsie_gmap_notifier(struct gmap *gmap,= gpa_t start, gpa_t end) +{ +} + +static __always_inline int kvm_s390_pv_get_handle(struct kvm *kvm) +{ + return 0; +} + +static __always_inline int kvm_s390_is_migration_mode(struct kvm *kvm) +{ + return false; +} + +static __always_inline bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu) +{ + return false; +} + +static __always_inline void kvm_s390_update_cmma_dirty(struct kvm *kvm, st= ruct kvm_memory_slot *old) +{ +} + +/* should never be called */ +static __always_inline int kvm_s390_vm_stop_migration(struct kvm *kvm) +{ + return -EINVAL; +} + #endif /* ARCH_S390_KVM_ARM64_H */ diff --git a/arch/s390/kvm/gmap/faultin.c b/arch/s390/kvm/gmap/faultin.c index 1dc79807012c..2e93bd563d5c 100644 --- a/arch/s390/kvm/gmap/faultin.c +++ b/arch/s390/kvm/gmap/faultin.c @@ -10,6 +10,11 @@ =20 #include "gmap.h" #include "faultin.h" +#ifdef KVM_S390_ARM64 +#include "arm.h" +#else +#include "s390.h" +#endif =20 bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu); #define CREATE_TRACE_POINTS diff --git a/arch/s390/kvm/gmap/gmap.c b/arch/s390/kvm/gmap/gmap.c index 4968330e9553..b7071f50f7ad 100644 --- a/arch/s390/kvm/gmap/gmap.c +++ b/arch/s390/kvm/gmap/gmap.c @@ -21,7 +21,11 @@ =20 #include "dat.h" #include "gmap.h" +#ifdef KVM_S390_ARM64 +#include "arm.h" +#else #include "s390.h" +#endif #include "faultin.h" =20 static int gmap_limit_to_type(gfn_t limit) diff --git a/arch/s390/kvm/gmap/kvm_mmu.c b/arch/s390/kvm/gmap/kvm_mmu.c index b08b8229bb6f..a26a16193467 100644 --- a/arch/s390/kvm/gmap/kvm_mmu.c +++ b/arch/s390/kvm/gmap/kvm_mmu.c @@ -3,7 +3,11 @@ #include #include =20 +#ifdef KVM_S390_ARM64 +#include "arm.h" +#else #include "s390.h" +#endif #include "gmap.h" #include "dat.h" #include "kvm_mmu.h" diff --git a/arch/s390/kvm/gmap/trace_gmap.h b/arch/s390/kvm/gmap/trace_gma= p.h index 15ec88bdce55..431c9442b10c 100644 --- a/arch/s390/kvm/gmap/trace_gmap.h +++ b/arch/s390/kvm/gmap/trace_gmap.h @@ -5,12 +5,28 @@ #include =20 #undef TRACE_SYSTEM +#ifdef KVM_S390_ARM64 +#define TRACE_SYSTEM kvm_arm64 +#else #define TRACE_SYSTEM kvm +#endif #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH ../gmap #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE trace_gmap =20 +#ifdef KVM_S390_ARM64 +#define __KVM_FIELDS \ + __field(unsigned long, pstate) \ + __field(unsigned long, pc) +#define __KVM_ASSIGN ({\ + __entry->pstate =3D vcpu->arch.sae_block.pstate; \ + __entry->pc =3D vcpu->arch.sae_block.pc; \ + }) +#define __KVM_PRINT \ + __entry->pstate, \ + __entry->pc +#else #define __KVM_FIELDS \ __field(unsigned long, pswmask) \ __field(unsigned long, pswaddr) @@ -21,6 +37,7 @@ #define __KVM_PRINT \ __entry->pswmask,\ __entry->pswaddr +#endif =20 TRACE_EVENT(kvm_s390_major_guest_pfault, TP_PROTO(struct kvm_vcpu *vcpu), --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D1C34746D8; Wed, 12 Aug 2026 15:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549066; cv=none; b=olL8lC0havEXWjrXf4/YtbQ1GRKpz/nDTUH3pGbenmlzispL+OJlz/mSbeXelWms6XRNDzQ09KIHTARzAbTwzTLcoDP6SMLhLpVHecJNt037JjU24wH+YH6Q1d0PIko1d5BPBXCJl1k5i4oV2wqySTeQ6Cd2R4TAA0LgbZRyU/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549066; c=relaxed/simple; bh=kJ55o+4Q9xcB6jQUsMiFUNt3LZUMxrT6yQkicjYYRRA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cqcCNb/EZVIIHpWtjtzcc/8kweOoID5rmVgD1qSK2aRNOuzbX+Wrxar/mYj19f0gh8ZXd10nHp12Fi9vS9DCiG8hqbXK6mx10RT0qkwwE3Nt2JcntdNlZKGes9suJcXdbE6dCnDWEaMfmhGwtN3Jmc+41BaoIgOqjaekHw9ipvI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Lxw7lvFU; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Lxw7lvFU" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1X9Y3686574; Wed, 12 Aug 2026 15:36:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=7zNHdVTpKc06XwSZL oZvd60RBGRQIkYoYWkcmnFYkuQ=; b=Lxw7lvFUjpotvN6qbg745i/6FSVKqW8Ua RMTlrdSQGiMLOWwMP44OxA0qHMRMNV2XgmzQgFv4N8MGzpUWV2HY4xJmcl1LB4Hy R27wRaIMI9jbdLySAjUiFIi/OLErUciJQ551swyzYYdm0OI1lDtgxWgOLg2DtBsg ZcPaFccnrdoRz4h3qNKeq876sSn5gBjoGeZ7eOH1sNChSTpbfQjGMwA+Ae7SwxZP CvELDZFwqMB0Cca4O2K7fsy4A9kBvkQqFypBv67FNfUBq0BLpvBtFC7HXqSWwPJ7 UDiI4Ki+ycjAiUDfkrRPewDa3ZBF4z6NFYl6oloDmIleI12e5sFyQ== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9u9uv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:49 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQLCF021738; Wed, 12 Aug 2026 15:36:48 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6g4f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:48 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaiYZ36503828 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:44 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 09C6720049; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9A18A2004E; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:43 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 31/33] KVM: s390: arm64: Implement vCPU IOCTLs Date: Wed, 12 Aug 2026 17:36:27 +0200 Message-ID: <20260812153631.3376090-32-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX+E5G2GINJymg u1nQ7mckqC2k6m6but/kgXbZZDmB6sjDlFHFJLKmldd6Qt9W7Zi/Wgh7MzbYjb2Tf0SOzYjRBEg rjXP+VWk1QLte/eLp6XWl3P9TF2jzghPeeERelKoQLv7ESPcvrBhZAVAxv0B7ZHfxsEKtDuSZVr l5OPKk5heGqUYDIGkF8njNY0I+6wfWs0V/h8j5qgtywfXYBSwp5hfWXul+GFxdGJFIwuCYRWoGq 3ebOR3u3tJa6SMMNKUCazgVkWyUPIkBHQ4xcv4nZQmop8y9eOZ/iLx2oGNKIjZlgoRTxagYSIHx B3YtB74SHOdbU7amuBPjsyq6Jqx2yQl5zVgwXVuS4jZZoNQZgs96k4I30V/1/651udUa1aC4qYB TIl/TycTZGw9PVXxT2kcp1ri5IJs3OhuZft21QWSHSE409P8fUQA0qkA8OdF9QUClMmozx5/i+R rW+iwMZt9BzYk5gcgtg== X-Proofpoint-ORIG-GUID: Lo-QgZ3-q7QgKcVZ2fi8vzlfgJYP72GM X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX3xsU+Xe4BVSw u3z9wWGtF3ro4ya7GIm5ywro2mEuftInces5AeGnAV/X2F6tM9Uw++xM0mcVA/dgjKX9Ie6WJEH LkhisvjMzQb51K4PtUCTNAhfqNPw270= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7c9311 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=u96BciJK5rm203yUjl8A:9 X-Proofpoint-GUID: 8XBm1cCN1PeMEVJkLxAIN_bPFylD-ieJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Implement all required vCPU IOCTLs. Co-developed-by: Andreas Grapentin Signed-off-by: Andreas Grapentin Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- arch/s390/kvm/arm64/arm.c | 392 ++++++++++++++++++++++++++++++ arch/s390/kvm/arm64/guest.c | 47 +++- arch/s390/kvm/arm64/handle_exit.c | 31 +++ arch/s390/kvm/arm64/handle_exit.h | 9 + arch/s390/kvm/arm64/reset.c | 73 ++++++ arch/s390/kvm/arm64/reset.h | 11 + arch/s390/kvm/arm64/trace.h | 2 +- 7 files changed, 562 insertions(+), 3 deletions(-) create mode 100644 arch/s390/kvm/arm64/handle_exit.h create mode 100644 arch/s390/kvm/arm64/reset.c create mode 100644 arch/s390/kvm/arm64/reset.h diff --git a/arch/s390/kvm/arm64/arm.c b/arch/s390/kvm/arm64/arm.c index 69d43066f9e1..ef941f408744 100644 --- a/arch/s390/kvm/arm64/arm.c +++ b/arch/s390/kvm/arm64/arm.c @@ -7,11 +7,20 @@ #include #include #include +#include +#include + +#include + +#include +#include =20 #include #include =20 #include "arm.h" +#include "handle_exit.h" +#include "reset.h" =20 #define CREATE_TRACE_POINTS #include "trace.h" @@ -200,6 +209,22 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) VCPU_EVENT(vcpu, 3, "%s", "free cpu"); } =20 +void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) +{ + save_access_regs(&vcpu->arch.host_acrs[0]); + vcpu->cpu =3D cpu; + + lasrm(&vcpu->arch.save_area); +} + +void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) +{ + stiasrm(&vcpu->arch.save_area); + + vcpu->cpu =3D -1; + restore_access_regs(&vcpu->arch.host_acrs[0]); +} + int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, struct kvm_mp_state *mp_state) { @@ -225,6 +250,373 @@ static unsigned long system_supported_vcpu_features(v= oid) return features; } =20 +bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) +{ + return vcpu_mode_priv(vcpu); +} + +int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu) +{ + struct kvm *kvm =3D vcpu->kvm; + + if (!kvm_vcpu_initialized(vcpu)) + return -ENOEXEC; + + if (!kvm_arm_vcpu_is_finalized(vcpu)) + return -EPERM; + + if (likely(READ_ONCE(vcpu->pid))) + return 0; + + scoped_guard(mutex, &kvm->arch.config_lock) + set_bit(KVM_ARCH_FLAG_HAS_RAN_ONCE, &kvm->arch.flags); + + return 0; +} + +/** + * check_vcpu_requests - check and handle pending vCPU requests + * @vcpu: the VCPU pointer + * + * Return: 1 if we should enter the guest + * 0 if we should exit to userspace + * < 0 if we should exit to userspace, where the return value indicates + * an error + */ +static int check_vcpu_requests(struct kvm_vcpu *vcpu) +{ + if (kvm_request_pending(vcpu)) { + if (kvm_check_request(KVM_REQ_VCPU_RESET, vcpu)) + kvm_reset_vcpu(vcpu); + /* + * Clear IRQ_PENDING requests that were made to guarantee + * that a VCPU sees new virtual interrupts. + */ + kvm_check_request(KVM_REQ_IRQ_PENDING, vcpu); + } + + return 1; +} + +static int kvm_vcpu_initialize(struct kvm_vcpu *vcpu, + const struct kvm_vcpu_init *init) +{ + unsigned long features =3D init->features[0]; + struct kvm *kvm =3D vcpu->kvm; + + scoped_guard(mutex, &kvm->arch.config_lock) { + if (test_bit(KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED, + &kvm->arch.flags) && + kvm_vcpu_init_changed(vcpu, init)) + return -EINVAL; + + bitmap_copy(kvm->arch.vcpu_features, &features, + KVM_VCPU_MAX_FEATURES); + + kvm_reset_vcpu(vcpu); + + set_bit(KVM_ARCH_FLAG_VCPU_FEATURES_CONFIGURED, + &kvm->arch.flags); + vcpu_set_flag(vcpu, VCPU_INITIALIZED); + } + + return 0; +} + +static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu, + const struct kvm_vcpu_init *init) +{ + int ret; + + if (init->target !=3D KVM_ARM_TARGET_GENERIC_V8) + return -EINVAL; + + ret =3D kvm_vcpu_init_check_features(vcpu, init); + if (ret) + return ret; + + if (!kvm_vcpu_initialized(vcpu)) + return kvm_vcpu_initialize(vcpu, init); + + if (kvm_vcpu_init_changed(vcpu, init)) + return -EINVAL; + + kvm_reset_vcpu(vcpu); + + return 0; +} + +static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu, + struct kvm_vcpu_init *init) +{ + struct kvm_sae_save_area *save_area =3D &vcpu->arch.save_area; + struct kvm_sae_block *sae_block =3D &vcpu->arch.sae_block; + int ret; + + sae_block->save_area =3D virt_to_phys(save_area); + save_area->sdo =3D virt_to_phys(sae_block); + + ret =3D kvm_vcpu_set_target(vcpu, init); + if (ret) + return ret; + + scoped_guard(spinlock, &vcpu->arch.mp_state_lock) { + WRITE_ONCE(vcpu->arch.mp_state.mp_state, KVM_MP_STATE_RUNNABLE); + } + + return 0; +} + +int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level, + bool line_status) +{ + /* stub for now*/ + return -EINVAL; +} + +static void adjust_pc(struct kvm_vcpu *vcpu) +{ + if (vcpu_get_flag(vcpu, INCREMENT_PC)) { + kvm_skip_instr(vcpu); + vcpu_clear_flag(vcpu, INCREMENT_PC); + } +} + +static void arm_vcpu_run(struct kvm_vcpu *vcpu) +{ + struct kvm_sae_block *sae_block =3D &vcpu->arch.sae_block; + + adjust_pc(vcpu); + + local_irq_disable(); + guest_enter_irqoff(); + local_irq_enable(); + + sae_block->icptr =3D 0; + + sae64a(sae_block); + + local_irq_disable(); + guest_exit_irqoff(); + local_irq_enable(); +} + +/** kvm_arch_vcpu_ioctl_run() - run arm64 vCPU + * + * Execute arm64 guest instructions using SAE. + * + * Returns: + * 1 enter the guest (should not be observed by userspace) + * 0 exit to userspace + * < 0 exit to userspace, where the return value indicates n error + * + * + */ +int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) +{ + DECLARE_KERNEL_FPU_ONSTACK32(fpu_save); + struct kvm_run *kvm_run =3D vcpu->run; + int ret; + + if (kvm_run->exit_reason =3D=3D KVM_EXIT_MMIO) { + ret =3D kvm_handle_mmio_return(vcpu); + if (ret <=3D 0) + return ret; + } + + vcpu_load(vcpu); + + kernel_fpu_begin(&fpu_save, KERNEL_FPC | KERNEL_VXR); + load_vx_regs((vcpu->arch.ctxt.vregs)); + + if (!vcpu->wants_to_run) { + ret =3D -EINTR; + goto out; + } + + kvm_sigset_activate(vcpu); + + might_fault(); + + ret =3D 1; + do { + if (signal_pending(current)) { + kvm_run->exit_reason =3D KVM_EXIT_INTR; + ret =3D -EINTR; + continue; + } + + if (need_resched()) + schedule(); + + if (ret > 0) + ret =3D check_vcpu_requests(vcpu); + + vcpu->arch.sae_block.icptr =3D 0; + + arm_vcpu_run(vcpu); + + ret =3D handle_exit(vcpu); + + } while (ret > 0); + + kvm_sigset_deactivate(vcpu); +out: + if (unlikely(vcpu_get_flag(vcpu, INCREMENT_PC))) + adjust_pc(vcpu); + + save_vx_regs(vcpu->arch.ctxt.vregs); + kernel_fpu_end(&fpu_save, KERNEL_FPC | KERNEL_VXR); + vcpu_put(vcpu); + + return ret; +} + +static int kvm_arm_vcpu_set_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + int ret; + + switch (attr->group) { + default: + ret =3D -ENXIO; + break; + } + + return ret; +} + +static int kvm_arm_vcpu_get_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + int ret; + + switch (attr->group) { + default: + ret =3D -ENXIO; + break; + } + + return ret; +} + +static int kvm_arm_vcpu_has_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + int ret; + + switch (attr->group) { + default: + ret =3D -ENXIO; + break; + } + + return ret; +} + +long kvm_arch_vcpu_ioctl(struct file *filp, unsigned int ioctl, unsigned l= ong arg) +{ + struct kvm_vcpu *vcpu =3D filp->private_data; + void __user *argp =3D (void __user *)arg; + struct kvm_device_attr attr; + int ret; + + switch (ioctl) { + case KVM_ARM_VCPU_INIT: { + struct kvm_vcpu_init init; + + ret =3D -EFAULT; + if (copy_from_user(&init, argp, sizeof(init))) + break; + + ret =3D kvm_arch_vcpu_ioctl_vcpu_init(vcpu, &init); + break; + } + case KVM_SET_ONE_REG: + case KVM_GET_ONE_REG: { + struct kvm_one_reg reg; + + ret =3D -ENOEXEC; + if (unlikely(!kvm_vcpu_initialized(vcpu))) + break; + + ret =3D -EFAULT; + if (copy_from_user(®, argp, sizeof(reg))) + break; + + if (kvm_check_request(KVM_REQ_VCPU_RESET, vcpu)) + kvm_reset_vcpu(vcpu); + + if (ioctl =3D=3D KVM_SET_ONE_REG) + ret =3D kvm_arm_set_reg(vcpu, ®); + else + ret =3D kvm_arm_get_reg(vcpu, ®); + break; + } + case KVM_GET_REG_LIST: { + struct kvm_reg_list __user *user_list =3D argp; + struct kvm_reg_list reg_list; + unsigned int n; + + ret =3D -ENOEXEC; + if (unlikely(!kvm_vcpu_initialized(vcpu))) + break; + ret =3D -EPERM; + if (!kvm_arm_vcpu_is_finalized(vcpu)) + break; + ret =3D -EFAULT; + if (copy_from_user(®_list, user_list, sizeof(reg_list))) + break; + n =3D reg_list.n; + reg_list.n =3D kvm_arm_num_regs(vcpu); + if (copy_to_user(user_list, ®_list, sizeof(reg_list))) + break; + ret =3D -E2BIG; + if (n < reg_list.n) + break; + ret =3D kvm_arm_copy_reg_indices(vcpu, user_list->reg); + break; + } + case KVM_ARM_VCPU_FINALIZE: { + int what; + + if (!kvm_vcpu_initialized(vcpu)) + return -ENOEXEC; + + if (get_user(what, (const int __user *)argp)) + return -EFAULT; + + ret =3D kvm_arm_vcpu_finalize(vcpu, what); + break; + } + case KVM_SET_DEVICE_ATTR: { + ret =3D -EFAULT; + if (copy_from_user(&attr, argp, sizeof(attr))) + break; + ret =3D kvm_arm_vcpu_set_attr(vcpu, &attr); + break; + } + case KVM_GET_DEVICE_ATTR: { + ret =3D -EFAULT; + if (copy_from_user(&attr, argp, sizeof(attr))) + break; + ret =3D kvm_arm_vcpu_get_attr(vcpu, &attr); + break; + } + case KVM_HAS_DEVICE_ATTR: { + ret =3D -EFAULT; + if (copy_from_user(&attr, argp, sizeof(attr))) + break; + ret =3D kvm_arm_vcpu_has_attr(vcpu, &attr); + break; + } + default: + ret =3D -EINVAL; + } + + return ret; +} + int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) { diff --git a/arch/s390/kvm/arm64/guest.c b/arch/s390/kvm/arm64/guest.c index fd6442d9e4f4..4ea6fe2c270d 100644 --- a/arch/s390/kvm/arm64/guest.c +++ b/arch/s390/kvm/arm64/guest.c @@ -5,8 +5,6 @@ #include #include =20 -#include "guest.h" - #define __INCL_GEN_ARM_FILE #include "generated/guest.inc" #undef __INCL_GEN_ARM_FILE @@ -47,6 +45,51 @@ const struct kvm_stats_header kvm_vcpu_stats_header =3D { sizeof(kvm_vcpu_stats_desc), }; =20 +int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices) +{ + int ret; + + ret =3D copy_core_reg_indices(vcpu, uindices); + if (ret < 0) + return ret; + uindices +=3D ret; + + return 0; +} + +unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu) +{ + return num_core_regs(vcpu); +} + +int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) +{ + /* We currently use nothing arch-specific in upper 32 bits */ + if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 !=3D KVM_REG_ARM64 >> 32) + return -EINVAL; + + switch (reg->id & KVM_REG_ARM_COPROC_MASK) { + case KVM_REG_ARM_CORE: + return get_core_reg(vcpu, reg); + default: + return -EINVAL; + } +} + +int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) +{ + /* We currently use nothing arch-specific in upper 32 bits */ + if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 !=3D KVM_REG_ARM64 >> 32) + return -EINVAL; + + switch (reg->id & KVM_REG_ARM_COPROC_MASK) { + case KVM_REG_ARM_CORE: + return set_core_reg(vcpu, reg); + default: + return -EINVAL; + } +} + int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *r= egs) { return -EINVAL; diff --git a/arch/s390/kvm/arm64/handle_exit.c b/arch/s390/kvm/arm64/handle= _exit.c index ed872cd804dc..1286a64783e0 100644 --- a/arch/s390/kvm/arm64/handle_exit.c +++ b/arch/s390/kvm/arm64/handle_exit.c @@ -5,6 +5,8 @@ #include #include =20 +#include "handle_exit.h" + typedef int (*exit_handle_fn)(struct kvm_vcpu *); static exit_handle_fn arm_exit_handlers[ESR_ELx_EC_MAX + 1]; =20 @@ -55,6 +57,35 @@ static exit_handle_fn arm_exit_handlers[] =3D { [ESR_ELx_EC_HVC64] =3D handle_hvc, }; =20 +/* + * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on + * proper exit to userspace. + */ +int handle_exit(struct kvm_vcpu *vcpu) +{ + u8 icptr =3D vcpu->arch.sae_block.icptr; + int ret =3D 1; + + switch (icptr) { + case SAE_ICPTR_SPURIOUS: + break; + case SAE_ICPTR_VALIDITY: + WARN_ONCE(true, "SAE: validity intercept. vir: 0x%04x", + vcpu->arch.sae_block.vir); + ret =3D -EINVAL; + break; + case SAE_ICPTR_HOST_ACCESS_EXCEPTION: + case SAE_ICPTR_SYNCHRONOUS_EXCEPTION: + ret =3D handle_trap_exceptions(vcpu); + break; + default: + WARN_ONCE(true, "SAE: unknown interception reason 0x%02x", + icptr); + ret =3D -EINVAL; + } + return ret; +} + /* manually copied from arch/arm64/kernel/traps.c */ static const char * const esr_class_str[] =3D { [0 ... ESR_ELx_EC_MAX] =3D "UNRECOGNIZED EC", diff --git a/arch/s390/kvm/arm64/handle_exit.h b/arch/s390/kvm/arm64/handle= _exit.h new file mode 100644 index 000000000000..65ae58721537 --- /dev/null +++ b/arch/s390/kvm/arm64/handle_exit.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef KVM_ARM64_HANDLE_EXIT_H +#define KVM_ARM64_HANDLE_EXIT_H + +#include + +int handle_exit(struct kvm_vcpu *vcpu); + +#endif /* KVM_ARM64_HANDLE_EXIT_H */ diff --git a/arch/s390/kvm/arm64/reset.c b/arch/s390/kvm/arm64/reset.c new file mode 100644 index 000000000000..d107d2ae47f4 --- /dev/null +++ b/arch/s390/kvm/arm64/reset.c @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include + +#include +#include + +#include "reset.h" + +bool kvm_arm_vcpu_is_finalized(struct kvm_vcpu *vcpu) +{ + return true; +} + +static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu) +{ + vcpu->arch.hcr_elz =3D HCR_EL2_E2H | HCR_EL2_RW | HCR_EL2_AMO | + HCR_EL2_IMO | HCR_EL2_FMO | HCR_EL2_PTW; + /* traps */ + vcpu->arch.hcr_elz |=3D HCR_EL2_TSC | HCR_EL2_TID1 | HCR_EL2_TID2 | + HCR_EL2_TID3 | HCR_EL2_TID4 | HCR_EL2_TID5 | + HCR_EL2_TIDCP; +} + +void kvm_reset_vcpu(struct kvm_vcpu *vcpu) +{ + struct vcpu_reset_state reset_state; + bool loaded; + + scoped_guard(spinlock, &vcpu->arch.mp_state_lock) { + reset_state =3D vcpu->arch.reset_state; + vcpu->arch.reset_state.reset =3D false; + } + + /* + * Disable preemption around the vcpu reset as we might otherwise race wi= th + * preempt notifiers which call stiasrm/lasrm from put/load + */ + preempt_disable(); + + /* The reset must run with an unloaded save area */ + loaded =3D vcpu_is_loaded(vcpu); + if (loaded) + vcpu_put(vcpu); + + kvm_reset_vcpu_core(vcpu); + + /* Reset special registers */ + vcpu_reset_hcr(vcpu); + + if (reset_state.reset) { + *vcpu_pc(vcpu) =3D reset_state.pc; + vcpu_clear_flag(vcpu, PENDING_EXCEPTION); + vcpu_clear_flag(vcpu, EXCEPT_MASK); + vcpu_clear_flag(vcpu, INCREMENT_PC); + vcpu_set_reg(vcpu, 0, reset_state.r0); + } + + /* Load new vx-regs into HW if they are currently loaded */ + if (current->thread.kfpu_flags) + load_vx_regs(vcpu->arch.ctxt.vregs); + + if (loaded) + vcpu_load(vcpu); + + preempt_enable(); +} + +int kvm_arm_vcpu_finalize(struct kvm_vcpu *vcpu, int feature) +{ + return 0; +} diff --git a/arch/s390/kvm/arm64/reset.h b/arch/s390/kvm/arm64/reset.h new file mode 100644 index 000000000000..a5c5304e47bc --- /dev/null +++ b/arch/s390/kvm/arm64/reset.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef KVM_ARM_RESET_H +#define KVM_ARM_RESET_H + +#include + +bool kvm_arm_vcpu_is_finalized(struct kvm_vcpu *vcpu); +void kvm_reset_vcpu(struct kvm_vcpu *vcpu); +int kvm_arm_vcpu_finalize(struct kvm_vcpu *vcpu, int feature); + +#endif /* KVM_ARM_RESET_H */ diff --git a/arch/s390/kvm/arm64/trace.h b/arch/s390/kvm/arm64/trace.h index 3a5dcd039c13..1e3cb6108196 100644 --- a/arch/s390/kvm/arm64/trace.h +++ b/arch/s390/kvm/arm64/trace.h @@ -5,7 +5,7 @@ #include =20 #undef TRACE_SYSTEM -#define TRACE_SYSTEM kvm +#define TRACE_SYSTEM kvm_arm64 =20 #endif /* KVM_ARM64_TRACE_KVM_H */ =20 --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0995F4519A1; Wed, 12 Aug 2026 15:37:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549074; cv=none; b=Ou3drpfkWDQHTbacMOie8UZpJoHzK5HO1tv5BdT7cLEh9/MEY2C3a0rmKJVasMeQVbW7PpnxH99FtMEqebCRIX7xCei+94/eg/emNGFKG2fRyz3yy0nL1S2FFUfWqNqOa4PI/RkE09uKi4Tqb9FRuDhAuJjX6R5nGu9EkASmip8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549074; c=relaxed/simple; bh=j2kfX5eobTqRWqzZZCkAyf0bOyWR845KY8ql96DSY5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DhO/1SmP1PDe9LGPrypyxIuIN+jnQOwvLhaUOZqIuEcuJjOLpr7SOrxvXMToUIBmJD0fGjAmDIu1tGWoYyiPCfsiidwa5vMqB+j+SGJSEUywgyhMYY0arS4ycPMV+2atKDUF3he3JL1zldMjTvdJfwzOHgZF0Ut0yQHgf+5UHDM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=LbJc+CRP; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="LbJc+CRP" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1uZ73594454; Wed, 12 Aug 2026 15:36:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=qSu8bwDZ+aGCQK1eF gu7S1KQ5t4ACPBfNdWyb7UcZAE=; b=LbJc+CRPX3OvTAtzxG6ZEL1LZYk+OhosE hkX/CubjeKKvDlJB5x5y1Vr3uJy0vC2BzVrFoZVXFgy1dfLSGddX+I5Yqh8394B4 bCj5mSs/R+JZMOvtMkgThJA9ZiNLcij3HJwXR05jd6wI56WWJADOlq0s8FPCX6jx xsY2LZrLMVVvphA+JKPaRwOUfn2dUV41HhlLcljwsINfdcLCyViVz0y3BMTeFfF8 b/LP1NpH6/XwFx+U7N5x2du8jJgcEgBRiRUXuhLQCsC5rB9UOVVz/j+7ylO1L3E/ seUsHM/wiXl8bX8vowTKCPGDqCgZEkL+NIjmM/Yb+m4vwESuUFnXw== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e2b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:49 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFQHml011835; Wed, 12 Aug 2026 15:36:48 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq6utu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:48 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaidx49611246 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:44 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 67E812004B; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0F8D02004D; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 32/33] KVM: s390: arm64: Implement basic page fault handler Date: Wed, 12 Aug 2026 17:36:28 +0200 Message-ID: <20260812153631.3376090-33-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c9311 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=SwCwYoEPLhOQ47qcL8QA:9 X-Proofpoint-GUID: z9Wf4XDDoPA8ssSxJ7wK1-nncozbLjol X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX96KW5AxmL/Vv Po4zU8j/p6e2j4e4gQ7fZgs7VOqoTOORH1ZYH8hrDbPEMt16IhrMFeuQZBrr2ePhoYxXu0Uecf4 UDFu096uPZFkp4fOjicEO+at7HtiyEm0FHSnqO9R1fikGF7JW2xqufeMVubMeWlInNf585Do5BZ FJiKaS1hKKkhVpQbUkp510JXyT+f4K/rv81bq5E6Q8y2ZHEV7L0iQ0JP3L1o0//682yxeZbm76f Tok3iMZ2jN/SBCL3Yrw9kOc9OkGyK5coKzrzRnfzfqIw/YECxy5dcaXls5GFGPHc98LZ66pB2kv l8w8OTFilRqs3n+3jVzwZlRndjHnnrN4aHieGuzLD3Ti8sTZb8TeY/47j/IUY2voHlCub75bU4c v/BDXmorKIqc3wTKFpFKeqi8MFeFg50XXxqYBvwcqQ1HrVDKF+oka/zPEi6TjTXOpjo7U4uG/EF /jsiXpJXmmAb/eoOnfA== X-Proofpoint-ORIG-GUID: upMz9HiFek0k5r6bWFFZ3JDv0B6EYifj X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX1fSfefC/vJBL j67QZcbsbOJ/YYNWaxPGD5bhahLndZnSlR4e4SeyR7xu/DHD8p77vbd6NsT3XDqBlg7uH3Fvb7k pmNoj+F59do1y/iSeqMMyBUy9ffiRc4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Add host functionality to page in guest memory. If the guest does something unexpected or illegal exit to userspace abort guest execution. This behaviour will be changed to guest error injects once all sysregs are accessible for the host. Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Steffen Eiden --- arch/s390/kvm/arm64/handle_exit.c | 2 + arch/s390/kvm/arm64/mmio.c | 15 +++ arch/s390/kvm/arm64/mmu.c | 177 ++++++++++++++++++++++++++++++ arch/s390/kvm/arm64/trace.h | 24 ++++ 4 files changed, 218 insertions(+) create mode 100644 arch/s390/kvm/arm64/mmio.c create mode 100644 arch/s390/kvm/arm64/mmu.c diff --git a/arch/s390/kvm/arm64/handle_exit.c b/arch/s390/kvm/arm64/handle= _exit.c index 1286a64783e0..8b03e8ee5acf 100644 --- a/arch/s390/kvm/arm64/handle_exit.c +++ b/arch/s390/kvm/arm64/handle_exit.c @@ -55,6 +55,8 @@ static int handle_hvc(struct kvm_vcpu *vcpu) static exit_handle_fn arm_exit_handlers[] =3D { [0 ... ESR_ELx_EC_MAX] =3D kvm_handle_unknown_ec, [ESR_ELx_EC_HVC64] =3D handle_hvc, + [ESR_ELx_EC_IABT_LOW] =3D kvm_handle_guest_abort, + [ESR_ELx_EC_DABT_LOW] =3D kvm_handle_guest_abort, }; =20 /* diff --git a/arch/s390/kvm/arm64/mmio.c b/arch/s390/kvm/arm64/mmio.c new file mode 100644 index 000000000000..908a6b43ddf7 --- /dev/null +++ b/arch/s390/kvm/arm64/mmio.c @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include + +#include + +#include +#include + +#include "trace.h" + +#define __INCL_GEN_ARM_FILE +#include "generated/mmio.inc" +#undef __INCL_GEN_ARM_FILE diff --git a/arch/s390/kvm/arm64/mmu.c b/arch/s390/kvm/arm64/mmu.c new file mode 100644 index 000000000000..71cd582f24ff --- /dev/null +++ b/arch/s390/kvm/arm64/mmu.c @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: GPL-2.0 +#include + +#include + +#include + +static inline bool kvm_s390_cur_gmap_fault_is_write(struct kvm_vcpu *vcpu) +{ + return vcpu->arch.sae_block.hai.pic =3D=3D PGM_PROTECTION || + vcpu->arch.sae_block.hai.teid.fsi =3D=3D TEID_FSI_STORE; +} + +/* + * user_mem_abort() - handle a dat fault for the gmap of a vcpu + * + * Return: 0 on success, < 0 in case of error. + * Context: The mm lock must not be held before calling. May sleep. + */ +static int user_mem_abort(struct kvm_vcpu *vcpu, gpa_t fault_ipa, + struct kvm_memory_slot *slot, hva_t hva) +{ + struct guest_fault f =3D { }; + int ret; + + if (kvm_s390_cur_gmap_fault_is_write(vcpu)) + f.write_attempt =3D FOLL_WRITE; + f.gfn =3D gpa_to_gfn(fault_ipa); + + ret =3D kvm_s390_faultin_gfn(vcpu, NULL, &f); + if (ret <=3D 0) + return ret; + if (ret =3D=3D PGM_ADDRESSING) + /* + * Without the relevant sysregs we cannot do anything for now. + * Go back to userspace with an error. TODO sysreg handling + */ + return -ENOEXEC; + KVM_BUG_ON(ret, vcpu->kvm); + return -EINVAL; +} + +static int kvm_handle_pic(struct kvm_vcpu *vcpu, bool *translation) +{ + switch (kvm_vcpu_fault_pic(vcpu)) { + /* expected cases: */ + case PGM_ASCE_TYPE: + case PGM_REGION_FIRST_TRANS: + case PGM_REGION_SECOND_TRANS: + case PGM_REGION_THIRD_TRANS: + case PGM_SEGMENT_TRANSLATION: + case PGM_PAGE_TRANSLATION: + *translation =3D true; + break; + case PGM_PROTECTION: + break; + /* unexpected cases: */ + case 0: + KVM_BUG(1, vcpu->kvm, "On MMU fault path but no fault occurred"); + return -EFAULT; + default: + KVM_BUG(1, vcpu->kvm, "Unexpected program interrupt 0x%x, TEID 0x%016lx", + vcpu->arch.sae_block.hai.pic, vcpu->arch.sae_block.hai.teid.val); + send_sig(SIGSEGV, current, 0); + return -EFAULT; + } + + return 0; +} + +int kvm_handle_guest_abort(struct kvm_vcpu *vcpu) +{ + struct kvm_memory_slot *memslot; + bool translation =3D false; + phys_addr_t fault_ipa; + unsigned long esr; + unsigned long hva; + bool write_fault; + bool guest_size_err; + bool writable; + bool is_iabt; + int ret; + gfn_t gfn; + int idx; + + esr =3D kvm_vcpu_get_esr(vcpu); + fault_ipa =3D kvm_vcpu_get_fault_ipa(vcpu); + is_iabt =3D kvm_vcpu_trap_is_iabt(vcpu); + guest_size_err =3D vcpu->arch.sae_block.icptr =3D=3D SAE_ICPTR_GUEST_ADDR= ESS_SIZE; + + if (guest_size_err) { + translation =3D true; + } else { + ret =3D kvm_handle_pic(vcpu, &translation); + if (ret) + return ret; + } + + if (translation) { + /* + * For both cases: + * Without the relevant sysregs we cannot do anything for now. + * Go back to userspace with an error. TODO sysreg handling + */ + if (fault_ipa >=3D BIT_ULL(get_kvm_ipa_limit())) + return -ENOEXEC; + + if (fault_ipa >=3D kvm_phys_size(vcpu->kvm)) + return -ENOEXEC; + } + + idx =3D srcu_read_lock(&vcpu->kvm->srcu); + + gfn =3D fault_ipa >> PAGE_SHIFT; + + memslot =3D gfn_to_memslot(vcpu->kvm, gfn); + hva =3D gfn_to_hva_memslot_prot(memslot, gfn, &writable); + write_fault =3D kvm_is_write_fault(vcpu); + if (kvm_is_error_hva(hva) || (write_fault && !writable)) { + ret =3D -ENOEXEC; + /* + * The guest has put either its instructions or its page-tables + * somewhere it shouldn't have. Userspace won't be able to do + * anything about this (there's no syndrome for a start). + * + * Without the relevant sysregs we cannot do anything for now. + * Go back to userspace with an error. TODO sysreg handling + */ + if (is_iabt) + goto out_unlock; + + if (kvm_vcpu_abt_iss1tw(vcpu)) { + /* + * Without the relevant sysregs we cannot do anything for now. + * Go back to userspace with an error. TODO sysreg handling + */ + goto out_unlock; + } + + /* + * Check for a cache maintenance operation. Assume the guest is + * cautious and skip instruction + */ + if (kvm_is_error_hva(hva) && kvm_vcpu_dabt_is_cm(vcpu)) { + kvm_incr_pc(vcpu); + ret =3D 1; + goto out_unlock; + } + + /* + * The IPA is reported as [MAX:12], so we need to + * complement it with the bottom 12 bits from the + * faulting VA. This is always 12 bits, irrespective + * of the page size. + */ + fault_ipa |=3D kvm_vcpu_get_hfar(vcpu) & ((1 << 12) - 1); + ret =3D io_mem_abort(vcpu, fault_ipa); + goto out_unlock; + } + + /* Userspace should not be able to register out-of-bounds IPAs */ + VM_BUG_ON(fault_ipa >=3D kvm_phys_size(vcpu->kvm)); + /* + * Proper guest size faults have been injected. + * In theory it's fine to have device memory higher than MSL, + * even if not currently possible, but that would have been handled above. + * So if we get here with a guest size intercept, we have a bug somewhere. + */ + VM_BUG_ON(guest_size_err); + + ret =3D user_mem_abort(vcpu, fault_ipa, memslot, hva); + if (!ret) + ret =3D 1; +out_unlock: + srcu_read_unlock(&vcpu->kvm->srcu, idx); + return ret; +} diff --git a/arch/s390/kvm/arm64/trace.h b/arch/s390/kvm/arm64/trace.h index 1e3cb6108196..2a205ba0165c 100644 --- a/arch/s390/kvm/arm64/trace.h +++ b/arch/s390/kvm/arm64/trace.h @@ -7,6 +7,30 @@ #undef TRACE_SYSTEM #define TRACE_SYSTEM kvm_arm64 =20 +TRACE_EVENT(kvm_mmio_nisv, + TP_PROTO(unsigned long vcpu_pc, unsigned long esr, + unsigned long far, unsigned long ipa), + TP_ARGS(vcpu_pc, esr, far, ipa), + + TP_STRUCT__entry( + __field( unsigned long, vcpu_pc ) + __field( unsigned long, esr ) + __field( unsigned long, far ) + __field( unsigned long, ipa ) + ), + + TP_fast_assign( + __entry->vcpu_pc =3D vcpu_pc; + __entry->esr =3D esr; + __entry->far =3D far; + __entry->ipa =3D ipa; + ), + + TP_printk("ipa %#016lx, esr %#016lx, far %#016lx, pc %#016lx", + __entry->ipa, __entry->esr, + __entry->far, __entry->vcpu_pc) +); + #endif /* KVM_ARM64_TRACE_KVM_H */ =20 #undef TRACE_INCLUDE_PATH --=20 2.53.0 From nobody Tue Sep 29 04:09:45 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 130F5463B96; Wed, 12 Aug 2026 15:37:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549063; cv=none; b=uRzLzhhWAHCBC4euMDN+WK0dA1kbc1Pa5B5VnriMVV8TjPgGh9aXGRee6i1ARzQ7IsJdGgVVqewkHJjnDookmilu4kebMOyQHvYerGBbBkA4w0bnbzd5kCB30A10HJRMWTrej5YP+qQAXG30QLri8Ab9mdvE/UYlCOgb3vaOBss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786549063; c=relaxed/simple; bh=Q3V1fV2UiRA7NlhhFjbKpz5/RmcZ7ZH6e2dtJXlEWA0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=daZFk4l+4AyUAN5K4mCepRp45uwoZZJxZFFvkvQ3Ikouhw8ZKa70mNPsuRkSn7ZglnIOhkRUQCCFrJP6rs6YfOsBxu47/puQT0MgdKbhFgIpz380jFvPlBdkwwCsHVpHe4I3MmR6xaOb8BhIkvyCkFOGAqVaU/9H9kRCPI1XjwI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=PMtvZvhQ; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="PMtvZvhQ" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CE1ul73594450; Wed, 12 Aug 2026 15:36:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=jVS/eptWk9BWdaIbR /CUPt7Ls4tHWU9C6ehAb/XDVBg=; b=PMtvZvhQVNw3GIBzFTxycxIa+b5g21P0+ 5Gy0IpQnVVwd6hQmOVBntFaN9VNxQTcsKnhQA4/Wp9XSJYHGgZvy5xnPXedU6Rj5 myrTacCALKmrmRxU0WaR5+JqPbpR8yBLMbl/NXhYJ7yJckA+3m5LtX4PiiW3hMfr fj1vElP+5WWyDd+8qcDftPQ1Ua621SC/APeR/Dr5hsokgAcAjpeVkZ9z+22o8fYT aKUTMUwC77QaUQqHQ6HlUiiQlX3PFRJg87n1rBhxjhZXqnFlU5a+9f4ZstMFXmPV IRYRI+4uJVwBDcuAyuJpTlAMAEg8PixBA1mTMG+3W3hk6YSwZNXJw== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32e2d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:49 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CFBJva018649; Wed, 12 Aug 2026 15:36:48 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5w6tdq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 15:36:48 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CFaiFu49611248 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 15:36:45 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B8C832004B; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6D7022004E; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 15:36:44 +0000 (GMT) From: Steffen Eiden To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Cc: Alexander Gordeev , Andreas Grapentin , Arnd Bergmann , Catalin Marinas , Christian Borntraeger , Claudio Imbrenda , David Hildenbrand , Friedrich Welter , Fuad Tabba , Gautam Gala , Hariharan Mari , Heiko Carstens , Hendrik Brueckner , Ilya Leoshkevich , Janosch Frank , Joey Gouly , Marc Zyngier , Nico Boehr , Nina Schoetterl-Glausch , Oliver Upton , Paolo Bonzini , Sean Christopherson , Suzuki K Poulose , Sven Schnelle , Ulrich Weigand , Vasily Gorbik , Will Deacon , Zenghui Yu Subject: [PATCH v6 33/33] KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild Date: Wed, 12 Aug 2026 17:36:29 +0200 Message-ID: <20260812153631.3376090-34-seiden@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812153631.3376090-1-seiden@linux.ibm.com> References: <20260812153631.3376090-1-seiden@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7c9312 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=5Rhiwhz_oZ9PaowiqMUA:9 X-Proofpoint-GUID: 2jy0ZOfnTwWKa9WdY8_dJzRZtqb_A_dW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX610+YksT6HcR fOgkf4CgSrI1q2fwKEuwi8nSIA0CijtlCKzjyqJPplp6VZ7cL94zoaxSIFkdhRqVQ5hVWxAdFMm dwWMwNF5dbYQThJT0RJ02wNv+e1ppO5O7fEWgTsKTFbmrR/yiRZbjG3wdE4nV54WmSk/DI74Ezb rZXBVjU7TZNB0Cwpf5Ku1M+xOklhSfA32vpHz4jI1rWeSEqpPkN5dXIRIHQAehpGAxAdjE6QsjY +h+pCWqxNjGIxmNRAIVvY1mFA8GC8Wcaxq1CIEjEc1hKYVq0MhF7Dx9j9USYchXRbUJceHdU3gV qyxwzos3J+w6aU38p9tiMyAh1XT5nQEBa4rYo71xO4AMr3wla69TTwRl0qmJHsPg57OLZAEuzsS pZy49/bkVv2mxne/h06KIv/wcUm33cD486/uqRZpZ+zFR8pJFE5OopZ2ucy9H+2o8EOdM8bD3/Z 85DjrURJEhbZ3wzQGjg== X-Proofpoint-ORIG-GUID: ELIrTYqo7DEmPYIxAyh5MZi1vcDwPNp8 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEyNiBTYWx0ZWRfX8CE1fBojE2pU QnBKMSI/Z5/8CoowH2E/0+5nRYxhrRrLSq6GFQDjwFnfQYL87fSQWWbynfn+lMVR+Jz1KjOpsBa 4GonvTTaHSjS9w01Z6eAjg/I8cGwYNE= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_04,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120126 Content-Type: text/plain; charset="utf-8" Add all Kbuild/Makefile configurations to build a second KVM module on s390 implementing the arm64-KVM API. To prevent symbol conflicts with kvm-s390 all internal symbols in kvm-arm64 are mangled if compiled as built-in. The new module ins named kvm-arm64. As in this case the build does not go through the normal build process the module parameter handling would be messed up. By forcing KBUILD_MODNAME to kvm-arm64 all parameters are at the same location and not at object/basename of the object file the parameter is introduced. Co-developed-by: Andreas Grapentin Signed-off-by: Andreas Grapentin Co-developed-by: Nina Schoetterl-Glausch Signed-off-by: Nina Schoetterl-Glausch Co-developed-by: Gautam Gala Signed-off-by: Gautam Gala Signed-off-by: Steffen Eiden --- arch/s390/configs/debug_defconfig | 1 + arch/s390/configs/defconfig | 1 + arch/s390/include/asm/Kbuild | 3 + arch/s390/kvm/Kconfig | 29 ++++++++++ arch/s390/kvm/Makefile | 1 + arch/s390/kvm/arm64/Makefile | 91 +++++++++++++++++++++++++++++++ 6 files changed, 126 insertions(+) create mode 100644 arch/s390/kvm/arm64/Makefile diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_de= fconfig index 3dae71474333..a05ea2204cdc 100644 --- a/arch/s390/configs/debug_defconfig +++ b/arch/s390/configs/debug_defconfig @@ -66,6 +66,7 @@ CONFIG_CMM=3Dm CONFIG_APPLDATA_BASE=3Dy CONFIG_S390_HYPFS_FS=3Dy CONFIG_KVM=3Dm +CONFIG_KVM_ARM64=3Dm CONFIG_KVM_S390_UCONTROL=3Dy CONFIG_S390_UNWIND_SELFTEST=3Dm CONFIG_S390_KPROBES_SANITY_TEST=3Dm diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig index 6f5722634b4d..3497f2959b93 100644 --- a/arch/s390/configs/defconfig +++ b/arch/s390/configs/defconfig @@ -64,6 +64,7 @@ CONFIG_CMM=3Dm CONFIG_APPLDATA_BASE=3Dy CONFIG_S390_HYPFS_FS=3Dy CONFIG_KVM=3Dm +CONFIG_KVM_ARM64=3Dm CONFIG_S390_UNWIND_SELFTEST=3Dm CONFIG_S390_KPROBES_SANITY_TEST=3Dm CONFIG_S390_MODULES_SANITY_TEST=3Dm diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index 0c1fc47c3ba0..40a81419e353 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -8,3 +8,6 @@ generic-y +=3D asm-offsets.h generic-y +=3D mcs_spinlock.h generic-y +=3D mmzone.h generic-y +=3D ring_buffer.h + +generated-y +=3D sysreg-defs.h +generated-y +=3D kvm_arm64_modname.h diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig index 8d3ee17a1bcb..ee5c1cdc4580 100644 --- a/arch/s390/kvm/Kconfig +++ b/arch/s390/kvm/Kconfig @@ -53,4 +53,33 @@ config KVM_S390_UCONTROL =20 If unsure, say N. =20 +config KVM_ARM64 + def_tristate y + prompt "KVM support for hardware accelerated arm64 guests" + depends on HAS_IOMEM + depends on KVM + select GUEST_PERF_EVENTS if PERF_EVENTS + select HAVE_KVM_CPU_RELAX_INTERCEPT + select HAVE_KVM_IRQCHIP + select HAVE_KVM_VCPU_RUN_PID_CHANGE + select IRQ_BYPASS_MANAGER + select KVM_COMMON + select KVM_MMIO + select KVM_VFIO + select SCHED_INFO + select XARRAY_MULTI + help + Enable support for hosting paravirtualized, hardware-accelerated + arm64 virtual machines on s390 systems using the Start ARM Execution + (SAE) instruction. This requires hardware models that support the Arm + execution facility (AEF). + + The module provides a character device named /dev/kvm-arm64 to expose + the hardware capabilities. + + To compile this driver as a module, choose M here. The module will + be called kvm-arm64. + + If unsure, say N. + endif # VIRTUALIZATION diff --git a/arch/s390/kvm/Makefile b/arch/s390/kvm/Makefile index a4e3875b5bdd..d00efd58f94f 100644 --- a/arch/s390/kvm/Makefile +++ b/arch/s390/kvm/Makefile @@ -4,3 +4,4 @@ # Copyright IBM Corp. 2008 =20 obj-$(CONFIG_KVM) +=3D s390/ +obj-$(CONFIG_KVM_ARM64) +=3D arm64/ diff --git a/arch/s390/kvm/arm64/Makefile b/arch/s390/kvm/arm64/Makefile new file mode 100644 index 000000000000..2ae4a5624151 --- /dev/null +++ b/arch/s390/kvm/arm64/Makefile @@ -0,0 +1,91 @@ +# SPDX-License-Identifier: GPL-2.0 + +KVM :=3D ../../../../virt/kvm +include $(srctree)/virt/kvm/Makefile.kvm +include $(srctree)/arch/s390/kvm/gmap/Makefile +include $(src)/Makefile.gen + +ccflags-y +=3D -I $(src) -I $(objtree)/$(obj) -I$(srctree)/arch/s390/kvm/g= map -DKVM_S390_ARM64 + +kvm-arm64-obj :=3D \ + arm.o \ + guest.o \ + handle_exit.o \ + inject_fault.o \ + mmu.o \ + mmio.o \ + reset.o \ + +kvm-arm64-obj +=3D $(patsubst %.o,%-arm64.o,$(kvm-y)) +kvm-arm64-obj +=3D $(patsubst %.o,%-arm64.o,$(gmap-y)) + +targets +=3D $(kvm-arm64-obj) + +$(obj)/%-arm64.o: $(src)/%.c FORCE + @mkdir -p $(dir $@) + $(call if_changed_rule,cc_o_c) + +ifeq ($(CONFIG_KVM_ARM64),m) + +kvm-arm64-y =3D $(kvm-arm64-obj) + +else ifeq ($(CONFIG_KVM_ARM64),y) + +KVM_ARM64_GEN_DIR :=3D $(objtree)/arch/${SRCARCH}/include/generated/asm +KVM_ARM64_MODNAME_H :=3D $(KVM_ARM64_GEN_DIR)/kvm_arm64_modname.h +ccflags-y +=3D -include $(KVM_ARM64_MODNAME_H) + +targets +=3D $(KVM_ARM64_MODNAME_H) + +quiet_cmd_kvm_arm64_modname_h =3D GEN $@ + cmd_kvm_arm64_modname_h =3D { \ + echo '/* Automatically generated; do not edit. */'; \ + echo '\#ifndef _KVM_ARM64_MODNAME_H'; \ + echo '\#define _KVM_ARM64_MODNAME_H'; \ + echo '\#undef KBUILD_MODNAME'; \ + echo '\#define KBUILD_MODNAME "kvm_arm64"'; \ + echo '\#endif /* _KVM_ARM64_MODNAME_H */'; \ + } > $@ + +$(addprefix $(obj)/,$(kvm-arm64-obj)): $(KVM_ARM64_MODNAME_H) + +$(KVM_ARM64_MODNAME_H): + @mkdir -p $(KVM_ARM64_GEN_DIR) + $(call cmd,kvm_arm64_modname_h) + +prereq-o-cmd =3D $(foreach o, $(filter %.o, $^), $(dir $(o)).$(notdir $(o)= ).cmd) +cmd_gen_symversions_o =3D \ + grep --no-filename "^\#SYMVER" $(prereq-o-cmd) >> $(dot-target).cmd || tr= ue + +define rule_ld_o_o + $(call cmd_and_savecmd,ld) + $(call cmd,gen_symversions_o) +endef + +LDFLAGS_kvm-unnamespaced.o :=3D -r --whole-archive +$(obj)/kvm-unnamespaced.o: $(addprefix $(obj)/,$(kvm-arm64-obj)) FORCE + $(call if_changed_rule,ld_o_o) + +quiet_cmd_nm_filter =3D NMFLTR $@ + cmd_nm_filter =3D $(NM) -jU $< | sort -u > $@ + +$(obj)/kvm_symbol_list: $(obj)/kvm-unnamespaced.o FORCE + $(call if_changed,nm_filter) + +define rule_oc_o_o + $(call cmd_and_savecmd,objcopy) + $(call cmd,gen_objtooldep) + $(call cmd,gen_symversions_o) +endef + +OBJCOPYFLAGS_kvm-namespaced.o :=3D -O default --localize-symbols=3D$(obj)/= kvm_symbol_list +$(obj)/kvm-namespaced.o: $(obj)/kvm-unnamespaced.o $(obj)/kvm_symbol_list = FORCE + $(call if_changed_rule,oc_o_o) + +kvm-arm64-y =3D kvm-namespaced.o + +targets +=3D kvm-unnamespaced.o kvm_symbol_list kvm-namespaced.o + +endif + +obj-$(CONFIG_KVM_ARM64) +=3D kvm-arm64.o --=20 2.53.0