From nobody Tue Apr 7 15:27:33 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 0356D2D8387; Thu, 26 Feb 2026 12:49:39 +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=1772110181; cv=none; b=YknHLlilQ6ABMHIHhPIqjhfRDZbp5U0Nm9GQyxPVmA9R43gxaP2S6pdZDJAd/pykqGDjyeIkOu7c2CYNj017NYkrZPBDLrXfwHd//3KKZbpvvOwkivGwn6LqSq9r+wEJ+Epq/MoZAOMV3Nc+U3tbe6hf/fT3k1dfCkyn8IoI8Bo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772110181; c=relaxed/simple; bh=kn+8V/ZGHU3gOg7igBL3PoJ4ABpmXnkqyFL+GoRCfso=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bPv6oBzeWCxNOllVhu2aAOIn2k0KhkCxzOboPIAmx+v5olccLNTQ77Oigj0QOG/nHS19SWOwluJGhMw4YiQ301wdiKke0h2Ou9l+McmvtExTp4Sg74yGlMV8xflblwzwtsjBwn0sWNJrbKOMm1oTXAKMnPK7eXK1Fzfafb8acF0= 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=fv+2YjaD; 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="fv+2YjaD" 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 61QBcjor2632518; Thu, 26 Feb 2026 12:49:37 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=uzPiTM JqC7sKghtCKAd/C8Zu449zu/Zh5lFCvcCGfVQ=; b=fv+2YjaDWuDkEqget1Ih1n TxUdzTcS/K2eMxhqRkJa8pXXYfrW0vDNqAcpWA6B7YX5SP/azRIc4pDLPapoF6aD ek9YVMHgmIkuu6fUuoVMzJOPF37mINdW75RxtR6s68D/ldrNxn8oJifYIEQeWwF9 NjNyF4cQkxuOJK5AClWyZj9EuQ+DncfGA6vKKyMEYZgwwDRV49c48k0Eq5VNusVE /sli3EVLr9Ln2UalqXvDLmvbcjw8jf9DRExY/WJRGW4COHdKweJOhZC6mk5lVT4v xqthMbr+c97Me9HAij0Bk8TAp7H9dl1qHvC5Vd5mM2tFrF6FLmofQssGkqSophiQ == 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 4cf4bs5h40-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:36 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 61QB0Bxq027794; Thu, 26 Feb 2026 12:49:36 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cfsr235hd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:36 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 61QCnW5p57016668 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Feb 2026 12:49:32 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 84F6B20040; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4E0A72004B; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) Received: from [9.52.198.32] (unknown [9.52.198.32]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) From: Christoph Schlameuss Date: Thu, 26 Feb 2026 13:49:04 +0100 Subject: [PATCH v2 1/4] KVM: s390: Minor refactor of base/ext facility lists 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 Message-Id: <20260226-vsie-alter-stfle-fac-v2-1-914974cb922c@linux.ibm.com> References: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> In-Reply-To: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> To: linux-s390@vger.kernel.org Cc: David Hildenbrand , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Sven Schnelle , Hendrik Brueckner , Nina Schoetterl-Glausch , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Schlameuss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4114; i=schlameuss@linux.ibm.com; h=from:subject:message-id; bh=GOYc0/ujLkSItGk5xugosc9SNsw81mJJZQUqk00xEvM=; b=owGbwMvMwCUmoqVx+bqN+mXG02pJDJkLHKMn8G5puxGnxnCn3IR76+tXjrfvvNPas4Bhzvae2 esWVDnZd5SyMIhxMciKKbJUi1vnVfW1Lp1z0PIazBxWJpAhDFycAjCRcH+G/wWvq8IY19VXK/Wd ePT56INL/3nLplfW/fW5Pul92O379tKMDJ/uSXV9euWpVJq1tVbOR3i76gHJ8wyXTm3PlL++9+H 8M2wA X-Developer-Key: i=schlameuss@linux.ibm.com; a=openpgp; fpr=0E34A68642574B2253AF4D31EEED6AB388551EC3 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: GLPOMWR0UUjacfcvB1zfXfHpv7VWXsez X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI2MDExNCBTYWx0ZWRfXzCzE94zXzgpU nbG5XMKj76i3bhUDPH9H+B/Rmwf1OL9ldDuSLaUVLdmTg6rwSFFGA6uz2qjpuCnTlENZOmmj/e+ 7RJJdk6h9YvnlYpW0fzey9Qpcjb8C+HXe1z2RRJJkEuRYNZKXT5nDzQvtEdQ9a1IsRwBxgfYfnO 9wRh0jqFMEGvyuSwIXlkPyU2fjBR4LrV4nZqaiK9Xb2qc+I299bbKRiIBm7kBmHXzLpM7/AoqFm sItv/ADUmKbHiZC55v8j5Cja50Po0Ogj/9oRxgwed+bcuc7RWW4VAiGxHIl1Wi7Yl32pnBmq7aF qSNVtvamq6+ZcxykOoJ2QwCNFQ65kFxy3dEfLno7slCOeik6jN6pE0olg/gzKu9cedjsMnXCfjT lKnhNOqLr/CVY2LBDIbOUMQsDPp5t1YWgJkfXFGT8yZr7AyQWO7SwAWDfo4XTjmwhxWjN9uCebe Ohban1mxGZNtqzyY7SA== X-Authority-Analysis: v=2.4 cv=eNceTXp1 c=1 sm=1 tr=0 ts=69a04161 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=VnNF1IyMAAAA:8 a=V1mMjla59gyM6mHp8IcA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: GLPOMWR0UUjacfcvB1zfXfHpv7VWXsez X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_04,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 lowpriorityscore=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-2601150000 definitions=main-2602260114 From: Nina Schoetterl-Glausch Directly use the size of the arrays instead of going through the indirection of kvm_s390_fac_size(). Don't use magic number for the number of entries in the non hypervisor managed facility bit mask list. Make the constraint of that number on kvm_s390_fac_base obvious. Get rid of implicit double anding of stfle_fac_list. Signed-off-by: Nina Schoetterl-Glausch Co-developed-by: Christoph Schlameuss Signed-off-by: Christoph Schlameuss --- arch/s390/kvm/kvm-s390.c | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 7a175d86cef0359ec71b6b631b5808e9f626fb9e..1a4abac697a40079c4dd6566581= aaed321871a1f 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -232,33 +232,25 @@ static int async_destroy =3D 1; module_param(async_destroy, int, 0444); MODULE_PARM_DESC(async_destroy, "Asynchronous destroy for protected guests= "); =20 -/* - * For now we handle at most 16 double words as this is what the s390 base - * kernel handles and stores in the prefix page. If we ever need to go bey= ond - * this, this requires changes to code, but the external uapi can stay. - */ -#define SIZE_INTERNAL 16 - +#define HMFAI_DWORDS 16 /* * Base feature mask that defines default mask for facilities. Consists of= the * defines in FACILITIES_KVM and the non-hypervisor managed bits. */ -static unsigned long kvm_s390_fac_base[SIZE_INTERNAL] =3D { FACILITIES_KVM= }; +static unsigned long kvm_s390_fac_base[HMFAI_DWORDS] =3D { FACILITIES_KVM = }; +static_assert(ARRAY_SIZE(((long[]){ FACILITIES_KVM })) <=3D HMFAI_DWORDS); +static_assert(ARRAY_SIZE(kvm_s390_fac_base) <=3D S390_ARCH_FAC_MASK_SIZE_U= 64); +static_assert(ARRAY_SIZE(kvm_s390_fac_base) <=3D S390_ARCH_FAC_LIST_SIZE_U= 64); +static_assert(ARRAY_SIZE(kvm_s390_fac_base) <=3D ARRAY_SIZE(stfle_fac_list= )); + /* * Extended feature mask. Consists of the defines in FACILITIES_KVM_CPUMOD= EL * and defines the facilities that can be enabled via a cpu model. */ -static unsigned long kvm_s390_fac_ext[SIZE_INTERNAL] =3D { FACILITIES_KVM_= CPUMODEL }; - -static unsigned long kvm_s390_fac_size(void) -{ - BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_MASK_SIZE_U64); - BUILD_BUG_ON(SIZE_INTERNAL > S390_ARCH_FAC_LIST_SIZE_U64); - BUILD_BUG_ON(SIZE_INTERNAL * sizeof(unsigned long) > - sizeof(stfle_fac_list)); - - return SIZE_INTERNAL; -} +static const unsigned long kvm_s390_fac_ext[] =3D { FACILITIES_KVM_CPUMODE= L }; +static_assert(ARRAY_SIZE(kvm_s390_fac_ext) <=3D S390_ARCH_FAC_MASK_SIZE_U6= 4); +static_assert(ARRAY_SIZE(kvm_s390_fac_ext) <=3D S390_ARCH_FAC_LIST_SIZE_U6= 4); +static_assert(ARRAY_SIZE(kvm_s390_fac_ext) <=3D ARRAY_SIZE(stfle_fac_list)= ); =20 /* available cpu features supported by kvm */ static DECLARE_BITMAP(kvm_s390_available_cpu_feat, KVM_S390_VM_CPU_FEAT_NR= _BITS); @@ -3212,13 +3204,16 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long= type) kvm->arch.sie_page2->kvm =3D kvm; kvm->arch.model.fac_list =3D kvm->arch.sie_page2->fac_list; =20 - for (i =3D 0; i < kvm_s390_fac_size(); i++) { + for (i =3D 0; i < ARRAY_SIZE(kvm_s390_fac_base); i++) { kvm->arch.model.fac_mask[i] =3D stfle_fac_list[i] & - (kvm_s390_fac_base[i] | - kvm_s390_fac_ext[i]); + kvm_s390_fac_base[i]; kvm->arch.model.fac_list[i] =3D stfle_fac_list[i] & kvm_s390_fac_base[i]; } + for (i =3D 0; i < ARRAY_SIZE(kvm_s390_fac_ext); i++) { + kvm->arch.model.fac_mask[i] |=3D stfle_fac_list[i] & + kvm_s390_fac_ext[i]; + } kvm->arch.model.subfuncs =3D kvm_s390_available_subfunc; =20 /* we are always in czam mode - even on pre z14 machines */ @@ -5788,9 +5783,8 @@ static int __init kvm_s390_init(void) return -ENODEV; } =20 - for (i =3D 0; i < 16; i++) - kvm_s390_fac_base[i] |=3D - stfle_fac_list[i] & nonhyp_mask(i); + for (i =3D 0; i < HMFAI_DWORDS; i++) + kvm_s390_fac_base[i] |=3D nonhyp_mask(i); =20 r =3D __kvm_s390_init(); if (r) --=20 2.53.0 From nobody Tue Apr 7 15:27:33 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 548462D838C; Thu, 26 Feb 2026 12:49:40 +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=1772110182; cv=none; b=ZFef3SWbz4cpTCcFFYN30LkBvXCbNJ3BDERgf8WCDemGsb2tk9IwXPp/PZ3XGr9wZFRnFZ1ly4ZA4HTGZbCubVMb/Utgh2tiZBNPM2mMUFQ0MAL1/VuLMwoFrqrQm9XUWQrphF1AkM8IMLEtldfl/8iUDJIxvljLXu5L2Cg3UkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772110182; c=relaxed/simple; bh=Y2vRDuIq0ImHn6M2tBJjx5bpTlIo/fJlH6A2AZpLvmQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rVeH9qqzZ/VVKy7mHdFmSbjjO5Ps7u1uS/ljd8xHWWkLq4Qj/NpwAzL/VFcwI4aIr0rdYy5F9REizfHchk3tqGDmBQ1nm22usPAouvdITMQd4Juon92i7qbl2bKg1VYvT/exjUmPU1rCVEF6TJ/Te/ZFrc5arXF7WaWW/ahZK6g= 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=BsbrxnpK; 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="BsbrxnpK" 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 61Q6TOer2733894; Thu, 26 Feb 2026 12:49: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=e1gU8/ jg/BOhYHKGUo4kE1RBr17UrQtjhAHW38EcUao=; b=BsbrxnpK6KXqVq/o7604YC hfDDKVHGefMyyVF4vRAnx9gVGFN4Ds6XnombLlCaP0Syt+M32bTrCIMEZjVTMadF jjsLbK/D998rDslsR6O2ieYN18vXY2ePHLs6YBe4H4h6n4KA0qjZ8ujEHY8wQIlK EMsvG0CkBbkOwlDO2uMoTjYxQZu7MAmc8WIpCUwzBgGzIWaCkuCQPKUgWgxvXkgQ j+HGmZWitDXVQ6ITuV2mnrcv3wDHE5Jtbwu/VfXU4TxaO3gslxUkZGh39gjY5pl7 w6FFwqLE5nFygxfrsF3Bhoar5vBotgZOqJfx7ueACUOAEFPkKoyFfCG01J8wYQBg == 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 4cf4cr6cqd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:37 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 61QAPhJ9002215; Thu, 26 Feb 2026 12:49:36 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cfr1nbdd2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:36 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 61QCnWxX57016670 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Feb 2026 12:49:32 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BE8AB20040; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8A6DE20043; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) Received: from [9.52.198.32] (unknown [9.52.198.32]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) From: Christoph Schlameuss Date: Thu, 26 Feb 2026 13:49:05 +0100 Subject: [PATCH v2 2/4] s390/sclp: Detect ASTFLEIE 2 facility 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 Message-Id: <20260226-vsie-alter-stfle-fac-v2-2-914974cb922c@linux.ibm.com> References: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> In-Reply-To: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> To: linux-s390@vger.kernel.org Cc: David Hildenbrand , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Sven Schnelle , Hendrik Brueckner , Nina Schoetterl-Glausch , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Schlameuss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1652; i=schlameuss@linux.ibm.com; h=from:subject:message-id; bh=TpvDCmwor6cASpK8/j/9E6R2qUQYOgtE/cgiy7FG0Tg=; b=owGbwMvMwCUmoqVx+bqN+mXG02pJDJkLHKP57fK/iiv8enhDObB7q7HNKdb9hx4w2m2TEzi7c KndvSufOkpZGMS4GGTFFFmqxa3zqvpal845aHkNZg4rE8gQBi5OAZhIgh/DHw6haQ/kTpl0ql1T 27lE5e2SnHW9c1cl1t3bspb1zufArNsM/8y7+Au3nV7o/s5u36Xd7G9XWJzXfnRkL4fdn6s5ry8 G/uICAA== X-Developer-Key: i=schlameuss@linux.ibm.com; a=openpgp; fpr=0E34A68642574B2253AF4D31EEED6AB388551EC3 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: lxR4JP5LWqtAfKVh2vL-EuPr6xZGpIFU X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI2MDExNCBTYWx0ZWRfX0L5DJIvnKkuT OJJp1ur9mqCWzprQ9BshJFNRZh1u3GAMlPHxujh0L9Ek8Q2Qp68u/+LDFNx7r8caLSVp3qtdY91 1W3/DhqAgUO/vKEgydWinDLYT52Q8mFsHbalQsJyfp5Vh1C432RXhK/HnZTB2feq7/4fE33p8F6 Ab2JUhJW43jRQUZUAaHQNWeGGMk6gN5fRvLJW50zEHEOQREY8s9HtnthsMqw005SUx+CayPASak M300Y23I6bTaQnUD7/f37kAUZ7Q+apBPahZmXF+KywGWU6jR0LGRG5AEABJFoG/Dfa2dwxLIYP4 +NXanHYrqcYj9kwgEOKlZPM8pGRCInoVkc1584weqMI+vWmIOi49cwMT4FaVGY4rdk7TIp1NDPa Z9ah+LSTnXXq8FG8g1rlFWdkzqUsH6rwx0huSiqfkLIZ/wromLkKfpuMTsrjovLvbkjh805/GWE Yr64D5euUiuniqzVbsQ== X-Proofpoint-GUID: lxR4JP5LWqtAfKVh2vL-EuPr6xZGpIFU X-Authority-Analysis: v=2.4 cv=bbBmkePB c=1 sm=1 tr=0 ts=69a04161 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=VnNF1IyMAAAA:8 a=txTkv-xiYvDc7-xnE9QA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_04,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 clxscore=1015 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602260114 From: Nina Schoetterl-Glausch Detect alternate STFLE interpretive execution facility 2. Signed-off-by: Nina Schoetterl-Glausch Signed-off-by: Christoph Schlameuss Reviewed-by: Janosch Frank Reviewed-by: Hendrik Brueckner --- arch/s390/include/asm/sclp.h | 1 + drivers/s390/char/sclp_early.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h index 0f184dbdbe5e0748fcecbca38b9e55a56968dc79..0f21501d3e866338895caeed385= aa4f586384d69 100644 --- a/arch/s390/include/asm/sclp.h +++ b/arch/s390/include/asm/sclp.h @@ -104,6 +104,7 @@ struct sclp_info { unsigned char has_aisii : 1; unsigned char has_aeni : 1; unsigned char has_aisi : 1; + unsigned char has_astfleie2 : 1; unsigned int ibc; unsigned int mtid; unsigned int mtid_cp; diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c index 6bf501ad8ff0ea6d3df0a721f29fd24506409493..22dd797e62291fef087d46ac1c7= f805486e3935b 100644 --- a/drivers/s390/char/sclp_early.c +++ b/drivers/s390/char/sclp_early.c @@ -61,8 +61,10 @@ static void __init sclp_early_facilities_detect(void) sclp.has_sipl =3D !!(sccb->cbl & 0x4000); sclp.has_sipl_eckd =3D !!(sccb->cbl & 0x2000); } - if (sccb->cpuoff > 139) + if (sccb->cpuoff > 139) { sclp.has_diag324 =3D !!(sccb->byte_139 & 0x80); + sclp.has_astfleie2 =3D !!(sccb->byte_139 & 0x40); + } sclp.rnmax =3D sccb->rnmax ? sccb->rnmax : sccb->rnmax2; sclp.rzm =3D sccb->rnsize ? sccb->rnsize : sccb->rnsize2; sclp.rzm <<=3D 20; --=20 2.53.0 From nobody Tue Apr 7 15:27:33 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 B85C92D8393; Thu, 26 Feb 2026 12:49:40 +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=1772110182; cv=none; b=N4Nm5DN5SxGHu5Fg4PJLMN1mVM+hTnr7yXGwfgL05n10GXbFj+7BtOSUMXOwjFAFpNp+VZLFTSLe6shTo6tawBO5LsJXWI3eMPMP3hUkQ5UKSpbQLaXSN5mLS5AcsAYdPce7rQ4Cc4YcjC74mtndnHW+wc+xrmqWsFlZx+9gX80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772110182; c=relaxed/simple; bh=iAfu+K6uqWkGAiNb1mvr3e1LfRpy4V9gxn7nK7rICBs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OzOv9UPGyrbpbusDICGpX70ZWHook/ly3wsv9OEK3ny6dtgU5GZZpmvufLd9io9znTkZA0OA9qF8UmCx75WjnP9omYLqA5OSwuYQynv5K1uk5dQv52Os+tScCyiGCkSgTZVCB/jq2h2utnzKNh1U9K+3u3cfO7u8Rp3jk5RYyAA= 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=AxQpuYMU; 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="AxQpuYMU" 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 61Q4G3uW2345995; Thu, 26 Feb 2026 12:49: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=ngJC2M YWASVIvs75lYzR0mC43j3mLFxoRxMGgDbwgcM=; b=AxQpuYMUTiFr5n4IYLvXmx Ff0MPVLJHJomp+6fZZOrC8+5yKtqXCinGfWqzRyGi/UHQPcnb6wz4CqNgfDVQ809 vgzMRIYCKju2odUYrDw5kNd22eQJwIAv5soZqVNzc2lTUMcvQbCncNGWdbpeVtSF nMkinGVL4vs53A8STrk/jBx3FRBmo/tl0TMajEL6avPZAL23LQU5GeD0va/oIv7E gPkh5Smk0RDw/hbqSk2u9kT25nMny5BPhtPw4aL37y2uU8i0DJOmFJw9WEgzBNFQ ubVjFPE4I2v8RNfaOXC4NTR6FGkbHI/FdY/FDvzhrQzYzjdCu5BX9WVzgcy9DDpg == 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 4ch858utwd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:38 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 61QAgKvf030256; Thu, 26 Feb 2026 12:49:37 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cfrhkka8h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:37 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 61QCnXXo14942692 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Feb 2026 12:49:33 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 034C420040; Thu, 26 Feb 2026 12:49:33 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C3C072004E; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) Received: from [9.52.198.32] (unknown [9.52.198.32]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) From: Christoph Schlameuss Date: Thu, 26 Feb 2026 13:49:06 +0100 Subject: [PATCH v2 3/4] KVM: s390: vsie: Refactor handle_stfle 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 Message-Id: <20260226-vsie-alter-stfle-fac-v2-3-914974cb922c@linux.ibm.com> References: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> In-Reply-To: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> To: linux-s390@vger.kernel.org Cc: David Hildenbrand , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Sven Schnelle , Hendrik Brueckner , Nina Schoetterl-Glausch , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Schlameuss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4811; i=schlameuss@linux.ibm.com; h=from:subject:message-id; bh=1BeqlVbLFLKjyKh+VoVQ3ZHt067UkWnk27xOoJ8LXJ4=; b=owGbwMvMwCUmoqVx+bqN+mXG02pJDJkLHKNZCoJ2y1lHbC3/EnzcpVVblqszd6G/hFrh98pZv G9ON67sKGVhEONikBVTZKkWt86r6mtdOueg5TWYOaxMIEMYuDgFYCIrnjIyLHTc+/5+1MviWWya V5Jm36tb8oLt5M3IfRJ7Tp0ItWARq2b47/fyW5LdrSSv8Hffzlj7pfEFcuV9aY60uuRYGPSyf0U RKwA= X-Developer-Key: i=schlameuss@linux.ibm.com; a=openpgp; fpr=0E34A68642574B2253AF4D31EEED6AB388551EC3 X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI2MDExNCBTYWx0ZWRfX2aEMUUJoN4mN PsfVjDQBQjWNYpVySvl4JhhbEYjyQt7a4fCLcjRXmHj+EpO27SDeZPoZE1I6DUgB/Q8Erb7R2jG LtLR7XiwaFVUr7v6+9MnlqWr2U1dC0Wj/aJdZdreXdqTpgLwhTvDc7KnVrj/G5Sia6nVWhx0rIa VABpp/sCozURwxsxHa5Fzc2MMI3EsbyczStis30or3/vPaoeFa79MU1dAC+dfrl/Dc4Qjm4Tz34 0YuYrKkwnSeOmt8b94jO7MEzNgQUaDK+qg00ETu6daC3QUg86l84tLTQ5Q4R+arAVnHKoY1HHJ0 zph3miVxLEgKZ8VrEX4L4/stZEB4zcZR+ZCyLN7F4Q0iGCbwIsWvgWNxNXWnh6CcrlI6GPM5gT6 GICADswH8K7YmIpTId3IkvaY+3wPxPU45JqVyqauPpHml3p1cRiIdBZpUls2aY3yrc6Fd2ec/sH XNjDiT1ZGgR9UxAydZw== X-Proofpoint-GUID: sJ3eoo3f6SN4675YCKpuakY6wLLROd9E X-Authority-Analysis: v=2.4 cv=S4HUAYsP c=1 sm=1 tr=0 ts=69a04162 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=VnNF1IyMAAAA:8 a=XKQQt2AcN9TueXHyMy8A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: sJ3eoo3f6SN4675YCKpuakY6wLLROd9E X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_04,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602260114 From: Nina Schoetterl-Glausch Use switch case in anticipation of handling format-1 and format-2 facility list designations in the future. As the alternate STFLE facilities are not enabled, only case 0 is possible. No functional change intended. Signed-off-by: Nina Schoetterl-Glausch Co-developed-by: Christoph Schlameuss Signed-off-by: Christoph Schlameuss --- arch/s390/include/asm/kvm_host.h | 2 ++ arch/s390/include/uapi/asm/kvm.h | 1 + arch/s390/kvm/vsie.c | 53 ++++++++++++++++++++++++++++--------= ---- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost.h index 64a50f0862aabb994089090c750bd312a7233e2c..23d17700319a5ef2031eabcad34= b6191d1ef9b21 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -484,6 +484,8 @@ struct s390_io_adapter { #define MAX_S390_IO_ADAPTERS ((MAX_ISC + 1) * 8) #define MAX_S390_ADAPTER_MAPS 256 =20 +#define S390_ARCH_FAC_ORIGIN_MASK 0x7ffffff8U + /* 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 \ diff --git a/arch/s390/include/uapi/asm/kvm.h b/arch/s390/include/uapi/asm/= kvm.h index 60345dd2cba2d611b76f8b5c70eab8f0abab4b9b..4192769b5ce069ba28d00d7cf1c= 4f1b34037d633 100644 --- a/arch/s390/include/uapi/asm/kvm.h +++ b/arch/s390/include/uapi/asm/kvm.h @@ -444,6 +444,7 @@ struct kvm_s390_vm_cpu_machine { #define KVM_S390_VM_CPU_FEAT_PFMFI 11 #define KVM_S390_VM_CPU_FEAT_SIGPIF 12 #define KVM_S390_VM_CPU_FEAT_KSS 13 +#define KVM_S390_VM_CPU_FEAT_ASTFLEIE2 14 struct kvm_s390_vm_cpu_feat { __u64 feat[16]; }; diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index d249b10044eb7595295fc20e9287e0629958d896..3a2c644ef4fc630e2a13475fc16= 00c8053520bcd 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -6,12 +6,15 @@ * * Author(s): David Hildenbrand */ +#include #include #include #include +#include #include #include #include +#include #include #include =20 @@ -979,6 +982,23 @@ static void retry_vsie_icpt(struct vsie_page *vsie_pag= e) clear_vsie_icpt(vsie_page); } =20 +static int handle_stfle_0(struct kvm_vcpu *vcpu, struct vsie_page *vsie_pa= ge, + u32 fac_list_origin) +{ + struct kvm_s390_sie_block *scb_s =3D &vsie_page->scb_s; + + /* + * format-0 -> size of nested guest's facility list =3D=3D guest's size + * guest's size =3D=3D host's size, since STFLE is interpretatively execu= ted + * using a format-0 for the guest, too. + */ + if (read_guest_real(vcpu, fac_list_origin, &vsie_page->fac, + stfle_size() * sizeof(u64))) + return set_validity_icpt(scb_s, 0x1090U); + scb_s->fac =3D (u32)virt_to_phys(&vsie_page->fac); + return 0; +} + /* * Try to shadow + enable the guest 2 provided facility list. * Retry instruction execution if enabled for and provided by guest 2. @@ -988,29 +1008,30 @@ static void retry_vsie_icpt(struct vsie_page *vsie_p= age) */ static int handle_stfle(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) { - struct kvm_s390_sie_block *scb_s =3D &vsie_page->scb_s; - __u32 fac =3D READ_ONCE(vsie_page->scb_o->fac); + bool has_astfleie2 =3D test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_= ASTFLEIE2); + u32 fac =3D READ_ONCE(vsie_page->scb_o->fac); + int format_mask, format; + u32 origin; + + BUILD_BUG_ON(!IS_ALIGNED(offsetof(struct vsie_page, fac), 8)); =20 - /* - * Alternate-STFLE-Interpretive-Execution facilities are not supported - * -> format-0 flcb - */ if (fac && test_kvm_facility(vcpu->kvm, 7)) { retry_vsie_icpt(vsie_page); /* * The facility list origin (FLO) is in bits 1 - 28 of the FLD * so we need to mask here before reading. */ - fac =3D fac & 0x7ffffff8U; - /* - * format-0 -> size of nested guest's facility list =3D=3D guest's size - * guest's size =3D=3D host's size, since STFLE is interpretatively exec= uted - * using a format-0 for the guest, too. - */ - if (read_guest_real(vcpu, fac, &vsie_page->fac, - stfle_size() * sizeof(u64))) - return set_validity_icpt(scb_s, 0x1090U); - scb_s->fac =3D (u32)virt_to_phys(&vsie_page->fac); + origin =3D fac & S390_ARCH_FAC_ORIGIN_MASK; + format_mask =3D has_astfleie2 ? 3 : 0; + format =3D fac & format_mask; + switch (format) { + case 0: + return handle_stfle_0(vcpu, vsie_page, origin); + case 1: + case 2: + case 3: + unreachable(); + } } return 0; } --=20 2.53.0 From nobody Tue Apr 7 15:27:33 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 9B8C12DE6F8; Thu, 26 Feb 2026 12:49:42 +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=1772110184; cv=none; b=QuwzlbgvafsSDgXF41cbdtciFgqNFeiRudOPUvZKePaZ16ojDb+ZeC13VB/oWySwyzQtTY7ueVHZey7/neE5QA90IO1CeO8bFVrLYtUypBelU8CYgy1CQLAd556T/JAPLGtf9uItlyj3DRyiqcU0mMmIvoYIaILKUckDmtGu0SA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772110184; c=relaxed/simple; bh=ZIqxY6W0ZcZ5iLLFHa1cyFtDYEEWUpbHS4odS/r1WmE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PM1eUFaOAJ2ogrvOPgyhY9jjY6Ho/SynXPuLE+ZcmaPL/nQGMvhwTab47mjVi5xrxhgeSrZKLPMao99jmW676wqXkFxlq1MlbLvsJvoYMkGQeUbiwmqLRgJGw/G7HE0ZQ1aM2qMVqvzdQuF9h5tPdJFF9Q8SSS1yMqtPaDwxamU= 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=OCg6GjXW; 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="OCg6GjXW" 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 61Q77ass3207066; Thu, 26 Feb 2026 12:49: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=ovunRP X2H9YhBbxfQeE/ZYkdJpTdD9b2gM/uETFqAek=; b=OCg6GjXWtaaT4NvNM9yoC2 EO62GRYWKMN9FzCI2+H7Xm0iSpKqhRKjWkunLWHHpv4ZyVZe/TJ68dlBVA2BMBnY Csn8v4SA460LCC7T9SLKR/+L3KNgeWuoRWGhL3u7cx3Cs+4PX0q8dTQ6p0oRNotK 80oyW5vGmWehCHfj7HW8PCDvP1UGQkRT+uOzRMFrgHoY+MptKImXXwdsoO/v3OV9 1XPqvmGSR1n3G8oLkXgXaZDCui0v4aW9gQ+a6UHjjDoFHDZpU/O/3wcxgF/lvBnP Pdr6K+CCg7XF9h1ZGYyXFkXpHYQRB5jD3zmNW8VevUUxO4DkW0tMO6XVjezeWR4w == 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 4cf24gnrhv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:37 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 61Q9p2AC015970; Thu, 26 Feb 2026 12:49:37 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cfq1sugrv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 Feb 2026 12:49:37 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 61QCnXgZ14942696 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Feb 2026 12:49:33 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 424B620040; Thu, 26 Feb 2026 12:49:33 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0882520043; Thu, 26 Feb 2026 12:49:33 +0000 (GMT) Received: from [9.52.198.32] (unknown [9.52.198.32]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 26 Feb 2026 12:49:32 +0000 (GMT) From: Christoph Schlameuss Date: Thu, 26 Feb 2026 13:49:07 +0100 Subject: [PATCH v2 4/4] KVM: s390: vsie: Implement ASTFLEIE facility 2 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 Message-Id: <20260226-vsie-alter-stfle-fac-v2-4-914974cb922c@linux.ibm.com> References: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> In-Reply-To: <20260226-vsie-alter-stfle-fac-v2-0-914974cb922c@linux.ibm.com> To: linux-s390@vger.kernel.org Cc: David Hildenbrand , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Sven Schnelle , Hendrik Brueckner , Nina Schoetterl-Glausch , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Schlameuss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4464; i=schlameuss@linux.ibm.com; h=from:subject:message-id; bh=9LmIGZVQ/QH/YcfnPYrtIP32NlrCLnbTxCM6e03UlPY=; b=owGbwMvMwCUmoqVx+bqN+mXG02pJDJkLHKPtM5r2ZlhsDGU04Vti0lFUWHnTxU/vZdrdP99iF p9TWi7XUcrCIMbFICumyFItbp1X1de6dM5By2swc1iZQIYwcHEKwETk+Rj+h9z6/0Al9knhjjr2 Y60ab2KdHSf+ORJWtlfw9Wz9hMW/lBn+iptKz01QffNc/mrHhOoja/n3l33If3w2asX6qIZHM/c fYAcA X-Developer-Key: i=schlameuss@linux.ibm.com; a=openpgp; fpr=0E34A68642574B2253AF4D31EEED6AB388551EC3 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=TNRIilla c=1 sm=1 tr=0 ts=69a04161 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=VnNF1IyMAAAA:8 a=F8FVqei25e47uhyEDlAA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: X1isxHoUPp8n2WTyDgOIaXy_grlxIYyM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI2MDExNCBTYWx0ZWRfX8xzyRuhsf+iQ DNLR1RLsn/Nb2hMPkoXkSc5R90YsdkG0F1PCFLGsdOsmV4xdnvLYSxEN4gXuGuqPCeWuoCn/GRY uRj4xpRlWjhUoUH48DqB9FnMyYeCUuzbsHeXE5hrD11Y5gznQ9AOt0g5vjZJ6cfk++qqqSvHrfB cYKV457Qq2rZayEJ1O25eQ+g291hM6pUv+Z6KkoiWdmZt9bOjt67h8HBt/+uKoLt7ymzvN6/SQa LYS7Vt9M56mlJ83Jay+YQGOMgND/O0anJFno4ydGzLwKzEP2yCLxHbGIZuEmV4GDXAR1U4QT7zw +j5uDI8c5OstYvWb+ys5f4tYcfuhL6SeqPy9i9pjIP3hUSvjetv48lzTx1xNRVvdj+0oAMqyeEa e6xPqXHOiZzAdeLQqiOm1FPU7uEzWdBX/8r4/VIMHuXJuDzz6mOzJfrjCSmE8Bb0OYGTXJeQsky DhnwZM1dRVqcQG701yQ== X-Proofpoint-ORIG-GUID: X1isxHoUPp8n2WTyDgOIaXy_grlxIYyM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_04,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 adultscore=0 priorityscore=1501 impostorscore=0 spamscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602260114 From: Nina Schoetterl-Glausch Implement shadowing of format-2 facility list when running in VSIE. ASTFLEIE2 is available since IBM z16. To function G1 has to run this KVM code and G1 and G2 have to run QEMU with ASTFLEIE2 support. Signed-off-by: Nina Schoetterl-Glausch Co-developed-by: Christoph Schlameuss Signed-off-by: Christoph Schlameuss --- arch/s390/include/asm/kvm_host.h | 7 +++++++ arch/s390/kvm/kvm-s390.c | 2 ++ arch/s390/kvm/vsie.c | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_h= ost.h index 23d17700319a5ef2031eabcad34b6191d1ef9b21..89a797e436336b9671119d93b02= f3b39b0ed45e6 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -506,6 +506,13 @@ struct kvm_s390_cpu_model { struct kvm_s390_vm_cpu_uv_feat uv_feat_guest; }; =20 +#define S390_ARCH_FAC_FORMAT_2 2 +struct kvm_s390_f2_flcb { + u8 reserved0[7]; + u8 length; + u64 facilities[S390_ARCH_FAC_LIST_SIZE_U64]; +}; + typedef int (*crypto_hook)(struct kvm_vcpu *vcpu); =20 struct kvm_s390_crypto { diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 1a4abac697a40079c4dd6566581aaed321871a1f..ff9edc7d265b3b5babb265d47ea= 36464f684a040 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -460,6 +460,8 @@ static void __init kvm_s390_cpu_feat_init(void) allow_cpu_feat(KVM_S390_VM_CPU_FEAT_IBS); if (sclp.has_kss) allow_cpu_feat(KVM_S390_VM_CPU_FEAT_KSS); + if (sclp.has_astfleie2) + allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ASTFLEIE2); /* * KVM_S390_VM_CPU_FEAT_SKEY: Wrong shadow of PTE.I bits will make * all skey handling functions read/set the skey from the PGSTE diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index 3a2c644ef4fc630e2a13475fc1600c8053520bcd..bae96ff4a7c7b6e8ea2906007ce= 6fc9a386e0038 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -65,9 +65,9 @@ struct vsie_page { gpa_t scb_gpa; /* 0x0258 */ /* the shadow gmap in use by the vsie_page */ struct gmap_cache gmap_cache; /* 0x0260 */ - __u8 reserved[0x0700 - 0x0278]; /* 0x0278 */ - struct kvm_s390_crypto_cb crycb; /* 0x0700 */ - __u8 fac[S390_ARCH_FAC_LIST_SIZE_BYTE]; /* 0x0800 */ + __u8 reserved[0x06f8 - 0x0278]; /* 0x0278 */ + struct kvm_s390_crypto_cb crycb; /* 0x06f8 */ + __u8 fac[8 + S390_ARCH_FAC_LIST_SIZE_BYTE];/* 0x0800 */ }; =20 static_assert(sizeof(struct vsie_page) =3D=3D PAGE_SIZE); @@ -999,6 +999,28 @@ static int handle_stfle_0(struct kvm_vcpu *vcpu, struc= t vsie_page *vsie_page, return 0; } =20 +static int handle_stfle_2(struct kvm_vcpu *vcpu, struct vsie_page *vsie_pa= ge, u32 fac_list_origin) +{ + struct kvm_s390_f2_flcb *flcb_s =3D (struct kvm_s390_f2_flcb *)vsie_page-= >fac; + struct kvm_s390_sie_block *scb_s =3D &vsie_page->scb_s; + u64 len; + + if (read_guest_real(vcpu, fac_list_origin, &len, sizeof(len))) + return set_validity_icpt(scb_s, 0x1090U); + + /* discard reserved bits */ + len =3D (len & U8_MAX); + flcb_s->length =3D len; + len +=3D 1; + + if (read_guest_real(vcpu, fac_list_origin + offsetof(struct kvm_s390_f2_f= lcb, facilities), + &flcb_s->facilities, len * sizeof(u64))) + return set_validity_icpt(scb_s, 0x1090U); + + scb_s->fac =3D (u32)virt_to_phys(&vsie_page->fac) | S390_ARCH_FAC_FORMAT_= 2; + return 0; +} + /* * Try to shadow + enable the guest 2 provided facility list. * Retry instruction execution if enabled for and provided by guest 2. @@ -1013,6 +1035,8 @@ static int handle_stfle(struct kvm_vcpu *vcpu, struct= vsie_page *vsie_page) int format_mask, format; u32 origin; =20 + /* assert no overflow with maximum len */ + BUILD_BUG_ON(sizeof(vsie_page->fac) < ((S390_ARCH_FAC_LIST_SIZE_U64 + 1) = * sizeof(u64))); BUILD_BUG_ON(!IS_ALIGNED(offsetof(struct vsie_page, fac), 8)); =20 if (fac && test_kvm_facility(vcpu->kvm, 7)) { @@ -1028,9 +1052,11 @@ static int handle_stfle(struct kvm_vcpu *vcpu, struc= t vsie_page *vsie_page) case 0: return handle_stfle_0(vcpu, vsie_page, origin); case 1: + return set_validity_icpt(&vsie_page->scb_s, 0x1330U); case 2: + return handle_stfle_2(vcpu, vsie_page, origin); case 3: - unreachable(); + return set_validity_icpt(&vsie_page->scb_s, 0x1330U); } } return 0; --=20 2.53.0