From nobody Tue Sep 29 06:49:53 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 230CE392C24; Tue, 11 Aug 2026 15:56:52 +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=1786463813; cv=none; b=tDK48mL+0S+njpai7E9ANNiq6YMZeskrCTeEAqcBIz+soRSpTC7VAKvOzk4P6jDn0zwNky6mh6++MT6i4DEKc+PnX0z73qWy0q+Rermr7tsiMtSL2TOTo1iyeka+s4lY0xoTOI0z+B+yVF92TUSsiztkkyuM9BQRCjpjbBPZ4QE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463813; c=relaxed/simple; bh=TsfXF1uoAvHw8iOKgbJyGyELUJ+QFJtep+Z9D3N7NYs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uFBzvYXkpaqujnNi8Sc65j2eLlClkdFF/eMcWi/AM/1NDVzsreQuAqOBHAm4TR9AWk9wSJrYyBWxrLW23RphKvyVx8pJERW08lRcf9Cog/0Ol+tY6GfujPlo04uxsmwH/y3VACAGbB7hBSwMTiLOkPdVF9Q/YUfuTBU0o3eheBE= 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=s2AGl1GP; 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="s2AGl1GP" 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 67BDWwUI3633650; Tue, 11 Aug 2026 15:56: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=gONXhuZ0/B75f/7Lb vu3yDtRU/HMGcTlvdKx7KnRp1s=; b=s2AGl1GPKlYnnzeqKFDfcyJil0qi1yxgC D4wRG9ClGWDOltXyizOn+4vZN+2ncD10bCmLL8P0g7PyQqzZmkw8eQ4hLXq3HVZO kEvvq70XfUAv49y5J5dWTmu8SAb2//gh/T3ka4kUCbHlVooImy3YcTlagJ+ZfsCx zZeGJ0LNTisTKYisx8YonVWi9Nru/nUu0EOUMmLyNA1aACaN0bMHLMZvG4Vh917p 4lz++0c9IW0+lybXQHNc5YgdTNoqQDFqhEXOkW85P0Tp6rAMcB/r2ZUsPfG+E785 30kppjEt5E5syquIn2Sccfv+yd8C8mptaqxluwcFs96ezlMv72njQ== 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 4fyb23pgg4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +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 67BFuLOY032272; Tue, 11 Aug 2026 15:56:48 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0g9ftx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:48 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFugnl16187866 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:42 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9490820040; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6198B2004D; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 01/11] KVM: s390: Properly handle NULL pointer in dat_cond_set_storage_key() Date: Tue, 11 Aug 2026 17:56:31 +0200 Message-ID: <20260811155641.219777-2-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7b4641 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=XqUKgKXUM3VPc0qgLoAA:9 a=zgiPjhLxNE0A:10 a=zZCYzV9kfG8A:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX9jkbhe2OXDuX /EBusXZ5VaK8O1qUcTCErHWpE5YvmMPtkeJN6vsc5rKx5TKY2hxOTWfUVlstFLJ2TR3/u4bAgu3 cV30UDLm5jmJExxuHYQ6QD/Zcy56Ivqi3dkDGOJViMerANsaGfnrNAeS12m9T3JwwbPt+xScBIG VHGsM8cK719IEma+oxcrtnE88MNFKYmMiPYfIoIsVd+7HKReMY7SC45aq0w4hilgNyk+kEqJVN5 4bHXhuXcdQzGRj7CsAmbgoU1PY3jrjks8VF6gm1WrdSc0HQdAgi5ANjlqQMAqj7wttdElpySmOa quxmGia5IkIy6wXZ/fyob7IVX1ht6BaLDHVDY9qz+HdqASVcb6tk/0Qy5QakC8V0B7LoQ9Uf2+N E5swG8Tbk5dtFC0f2YkHK8JkjjCDdFP/H1LLup6QZ+ATQg2x0ZNj5U29+ddEgCfZVUwyxyIlVkg 7bJRwzj16hIeQ8r3LUQ== X-Proofpoint-ORIG-GUID: nsfr9dHt5wV2_Wj41cZWlpncrkU_Lu8n X-Proofpoint-GUID: nsfr9dHt5wV2_Wj41cZWlpncrkU_Lu8n X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX/k3smm2wUHV+ IHlnSkRk3TnlCnFmTxD1GiVGbtLG6MGhtAfnAEV4Kck7x7X5GlPg9f/SacFcQZzmE5jLoqiUhVH vFDK5G7oxCqjKrKBqGiPsB04pAehAqA= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" Some callers pass NULL as oldkey. Calling page_cond_set_storage_key() will cause that NULL pointer to get dereferenced. Fix by checking for NULL and assigning the pointer to a dummy local variable to avoid crashes. Fixes: 8e03e8316eb2 ("KVM: s390: KVM page table management functions: stora= ge keys") Signed-off-by: Claudio Imbrenda Reviewed-by: Christian Borntraeger Reviewed-by: Christoph Schlameuss --- arch/s390/kvm/dat.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index 3f2d6e8902d7..165c704fcf29 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -722,9 +722,12 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cache= *mmc, union asce asce, gf if (rc) return rc; =20 - if (!ptep) + if (!ptep) { + if (!oldkey) + oldkey =3D &prev; return page_cond_set_storage_key(large_crste_to_phys(*crstep, gfn), skey= , oldkey, nq, mr, mc); + } =20 old =3D pgste_get_lock(ptep); pgste =3D old; --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 25BFE3BB9F5; Tue, 11 Aug 2026 15:56:52 +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=1786463813; cv=none; b=Y4EQLLw3Z1Fl3KAEpYgI8JMakIOUmgbnk5ksHdZTzbDrN+dqRt5XYosVfJ/sE1M0I32KQzMhgGw8glk8RDO6Jl8Ie2nQYlAa1eqBdc6/2FQvpbIdp6xmSVn3Ztgmr/ix3nEb1MBxoBwhwFB4FjuSwllvWoaH4vbqAahb1YRs9LY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463813; c=relaxed/simple; bh=x4LU99P+yBdvmaebEK0fA015TQWPLyInHOVflRY022o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E7w2n7hmluYEcPMglsktTX9zYxGb9GF1H0P3w4w8K3SXvcLapP4+VGJ++SBnqpufe0CubYQQPVAxTMP/jWlwyQKYDwI46CcHRlbW5I6q1cm9qmGoDi326qFSMs97Jky7NFTtTEnEpMCOCwmZGEh942WPKogZ+fCJqsmWccDt2Vk= 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=nCLG2jOn; 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="nCLG2jOn" 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 67BDWQXQ2864443; Tue, 11 Aug 2026 15:56: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=zdvRwvXsjk+ewm4fx SBjyBIqNunf0I0CgNv2zaISG18=; b=nCLG2jOnAz8f76A6w4Zs6PmT2UViwhjI+ 0F/TIplUWXe0IwTT870e3gvdA7+ZcljXARYAUZNSSPdoul9JBbI/SwK4z55M2X4n cY+wV1utA2MImCw9XhwmNeKY++7SbT7PfETOzAxc2UTsNOFkGsWiB4+nAUJ0FVTF sGrVRBBxX3yuqxpg7DWlLus4+bTUEMJakNHHwrCfQ58/mXX9EqbGOe6ljJ7Vsns6 dDh23/AqxbwwsB9WECdAJY1k/bVVavyRibBxeygO727kZ8MYgw/tXIdkZOdlpv1E M5qXf2/X5nclQnOBSjjus4Kn5LlHk0LWTI0RyVlziab1d/JJs1irA== 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 4fwvjywsjr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuJm6032683; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjsmpv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFugg230606006 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C754F20040; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9A09F2004B; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 02/11] KVM: s390: Use srcu in kvm_arch_vcpu_unlocked_ioctl() Date: Tue, 11 Aug 2026 17:56:32 +0200 Message-ID: <20260811155641.219777-3-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX35N3SWEJsNqN D3INnqzXJVARpnEnDMnTQcR6/zzNLr/eXjfm5FpbwTJSd9zZYhIpksZOylGhtsCWNLcVTv4jm5X PCLX+et9/lVnlbR4wN2McagyT5TNIkcUTjZ48ZsLKcmAe14VmhfLy0ZRgilcm07VIrGILa+rsRT Mu9rcuz/vZ5mRp/MA/Uv5+QY9q11pzZxQ0NHAtJFMoVpfYEQmxT55KQlkCcuQZbkHq/nBwnXuEf 9brNQ130bgMicuUC0myKq7xGFsTx4+vCvEPVUAqLeYLJdRERu+ZgIBcrPX0zGkYOzPlI0oDc/s9 S0FXItDUQGUwi29rxk0knOrfkpABvUG7YKuU4dOZ35jvwSq0NajDPwkJaO7dW73+zaPO5L8TiF7 9ZeqIkbvTA6bT8EIkjuXnr9X9OG/3BSovm4Aec5JLNEdFGr0KOKOi7n3rfmDiYLALfiCCkKthkf VKMpUSOpuuoRz3XSTqg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX80trbEoq7br5 xSCdcj+MPPzQTGMpcF5ny50H7emyDwH9T3kXZI41eK9TTbG6BwIa0MPluypysMWgzZblHVEtWoA jWgAfTU3h4LjDo4uw24Ypgu7DqlUgH8= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7b4642 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=qtdt0r206yBj_IGTItsA:9 X-Proofpoint-GUID: I019y_3BofoeuFI_AdX-ovyQE2_X94_b X-Proofpoint-ORIG-GUID: I019y_3BofoeuFI_AdX-ovyQE2_X94_b 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" kvm_arch_vcpu_unlocked_ioctl() is called without further locks held, but kvm_s390_inject_vcpu(), which is called from there, needs either the kvm->srcu or the slots lock. Fix by taking the kvm->srcu in kvm_arch_vcpu_unlocked_ioctl(). Fixes: ba5c1e9b6cee ("KVM: s390: interrupt subsystem, cpu timer, waitpsw") Signed-off-by: Claudio Imbrenda Reviewed-by: Christian Borntraeger --- arch/s390/kvm/kvm-s390.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 518a69c55e85..02c5428ba239 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -5444,6 +5444,8 @@ long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, = unsigned int ioctl, void __user *argp =3D (void __user *)arg; int rc; =20 + guard(srcu)(&vcpu->kvm->srcu); + switch (ioctl) { case KVM_S390_IRQ: { struct kvm_s390_irq s390irq; --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 7EA473BE635; Tue, 11 Aug 2026 15:56:53 +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=1786463815; cv=none; b=gzoxjyjR0NuDCTS5nKOspCE3KqnjDU0U/pZnwYM/dlB8iA64bXeV57tvKxitxW2V5U9AEVogjDV7M7HvN4YP4vqfSSCYMbVsBx1L9vQ6e2eamCED2FYiBdSkH/zZHqGQB6vaxEgoEF2U4GtNjek6KGUlXVHH0pWg5bNmF5kFy3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463815; c=relaxed/simple; bh=JQMh3x3ooIJQeODnyzd/1NBcbiTHkVMOqzEQoA+6qrg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZorcwGGOr94fDu4hoSce5Hcchm/Zdn1gb8DjWFzUaxGL+2z8JH6PJlfx07BlwLpL4Ua7yqeSRVfvngh9HMpgPI1dyceNuIRl2AYxwajQbpaPguBqGb2BfnefhnL2M+1WAAvnNjZF8913ANGOQ7OSxFNcuRESIUkd72fjqdwqBoM= 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=nJSTeRMl; 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="nJSTeRMl" 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 67BDWtYi3633607; Tue, 11 Aug 2026 15:56: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=OE4Be9WHs87ZHWaXo CGiEeXU4lC7HNIxNEIo/QJomO8=; b=nJSTeRMlXUSHZIrSFhMcn2JEZJi5FrSHF ksfEHRJ06HU+21MJ2NwEkNtvtXu7NYJumuhR0ofZ+WICHkr/F8FzuD61o84auBMG E5PwheX0Ss49IURznZWu3+wUM38zSUsbzPOarnzM8+NpYe/CBoYcCUW4gPczqIOY 8O7RhqmEJuKIR7lxVViCzJCn9reZyex20xYsV9KPSacBZwReiJgI09dUry47JJ10 zqtUoxKrj1yOajYWRaU8whu6z3CXFlW6mVE+lByG2FO3XS1I3fMtvVxtQNo/Tgwg 9LDYJ3xGcfYYHWhBXnnUiOXwDsqxqFeIhypAO+3aKcBAdCx0ZvhDw== 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 4fyb23pgg6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuGPF031754; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0g9fu2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhlF33685786 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 00AC22004B; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CE54D20043; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 03/11] KVM: s390: Fix get_all_floating_irqs() Date: Tue, 11 Aug 2026 17:56:33 +0200 Message-ID: <20260811155641.219777-4-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7b4642 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=I56Ky5MJo1-tBM2s_1EA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX+vTChXa7Aodq UAmD1X7HAGGEG7xMNAjBd6P6T/3X2wqOPAu9fofdLNlAz/swRiZRrCSpJmjSk+KkBOJi/Oc9mVd X735Pt9wIjzS7WAyUToPcMjA/l6ZVWtTrxAJeGrZWeo91QK0/lDUoR3TQFtOD3D6Mw7YUfs+761 qfGIjTuBSR+dcGnDaKJ+UKRii5X7cFPofuQ8YhTv0SAjTHw7SY3AdC+CFJ8hnv115p8v/+Qvf39 2labLknVXrO1ThlPv+es/trkGchKT+M9RK6rWB65XmlU4zGsyhu7p6MVPPt+Uh0ee6JNYdHbSJ/ /Z4J+D8tlgt/XNo39PKOdMjEb6x2S6EuXoo1JF9tUM/7uYvOqgVYJgOLlcnIAf64Zu17ybDBD1a JdGCv2dt0N8E4jSGrLEJWaLX1x59+Xp4lqKFLcWvpRPe0zX6xkIEQ2sCZPOHOpDeFNklkE1sTe+ /x6CliwoKkkK11GcHfw== X-Proofpoint-ORIG-GUID: tAQKx-M9hmSQU1GLSbqAeGWBS7Qi_xHx X-Proofpoint-GUID: tAQKx-M9hmSQU1GLSbqAeGWBS7Qi_xHx X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfXzEsmMqDSlr6L 6ij61Xnlnd7Dm19CknpXlF3CCT1+Q69kZEQEHaXrj0gqR+QjyLk883RgydHtUgQYn6FkSX69mMM EWxb1MkrWFW/xbBx2oOa5tUigTSKKY4= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" When attempting to report all pending floating interrupt to userspace, the GISA IPM bits are atomically tested and cleared, and the corresponding interrupt description is written in the output buffer. If the output buffer is too small, an error is returned to userspace, but the GISA IPM bits are now lost. Fix by moving the GISA test at the end of the function, and keeping track of which bits have been cleared. In case of error, set the bits again, so they are not lost. Fixes: 24160af6cb28 ("KVM: s390: add GISA interrupts to FLIC ioctl interfac= e") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/interrupt.c | 93 ++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 6b3f97a7513b..30963e05e0e6 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -2211,15 +2211,14 @@ void kvm_s390_clear_float_irqs(struct kvm *kvm) static int get_all_floating_irqs(struct kvm *kvm, u8 __user *usrbuf, u64 l= en) { struct kvm_s390_gisa_interrupt *gi =3D &kvm->arch.gisa_int; + struct kvm_s390_irq *buf __free(kvfree) =3D NULL; struct kvm_s390_interrupt_info *inti; struct kvm_s390_float_interrupt *fi; - struct kvm_s390_irq *buf; struct kvm_s390_irq *irq; + unsigned int tmp =3D 0; int max_irqs; - int ret =3D 0; int n =3D 0; int i; - unsigned long flags; =20 if (len > KVM_S390_FLIC_MAX_BUFFER || len =3D=3D 0) return -EINVAL; @@ -2235,14 +2234,48 @@ static int get_all_floating_irqs(struct kvm *kvm, u= 8 __user *usrbuf, u64 len) =20 max_irqs =3D len / sizeof(struct kvm_s390_irq); =20 + fi =3D &kvm->arch.float_int; + scoped_guard(spinlock_irqsave, &fi->lock) { + for (i =3D 0; i < FIRQ_LIST_COUNT; i++) { + list_for_each_entry(inti, &fi->lists[i], list) { + /* signal userspace to try again */ + if (n =3D=3D max_irqs) + return -ENOMEM; + inti_to_irq(inti, &buf[n]); + n++; + } + } + if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs) || + test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs)) { + /* signal userspace to try again */ + if (n =3D=3D max_irqs) + return -ENOMEM; + irq =3D (struct kvm_s390_irq *)&buf[n]; + irq->type =3D KVM_S390_INT_SERVICE; + irq->u.ext =3D fi->srv_signal; + n++; + } + if (test_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) { + /* signal userspace to try again */ + if (n =3D=3D max_irqs) + return -ENOMEM; + irq =3D (struct kvm_s390_irq *)&buf[n]; + irq->type =3D KVM_S390_MCHK; + irq->u.mchk =3D fi->mchk; + n++; + } + } if (gi->origin && gisa_get_ipm(gi->origin)) { for (i =3D 0; i <=3D MAX_ISC; i++) { if (n =3D=3D max_irqs) { + /* restore removed bits if returning failure */ + __atomic_or(tmp, (void *)&gi->origin->ipm); /* signal userspace to try again */ - ret =3D -ENOMEM; - goto out_nolock; + return -ENOMEM; } if (gisa_tac_ipm_gisc(gi->origin, i)) { + /* set aside the bits we cleared */ + tmp |=3D 1 << (31 - i); irq =3D (struct kvm_s390_irq *) &buf[n]; irq->type =3D KVM_S390_INT_IO(1, 0, 0, 0); irq->u.io.io_int_word =3D isc_to_int_word(i); @@ -2250,53 +2283,15 @@ static int get_all_floating_irqs(struct kvm *kvm, u= 8 __user *usrbuf, u64 len) } } } - fi =3D &kvm->arch.float_int; - spin_lock_irqsave(&fi->lock, flags); - for (i =3D 0; i < FIRQ_LIST_COUNT; i++) { - list_for_each_entry(inti, &fi->lists[i], list) { - if (n =3D=3D max_irqs) { - /* signal userspace to try again */ - ret =3D -ENOMEM; - goto out; - } - inti_to_irq(inti, &buf[n]); - n++; - } - } - if (test_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs) || - test_bit(IRQ_PEND_EXT_SERVICE_EV, &fi->pending_irqs)) { - if (n =3D=3D max_irqs) { - /* signal userspace to try again */ - ret =3D -ENOMEM; - goto out; - } - irq =3D (struct kvm_s390_irq *) &buf[n]; - irq->type =3D KVM_S390_INT_SERVICE; - irq->u.ext =3D fi->srv_signal; - n++; - } - if (test_bit(IRQ_PEND_MCHK_REP, &fi->pending_irqs)) { - if (n =3D=3D max_irqs) { - /* signal userspace to try again */ - ret =3D -ENOMEM; - goto out; - } - irq =3D (struct kvm_s390_irq *) &buf[n]; - irq->type =3D KVM_S390_MCHK; - irq->u.mchk =3D fi->mchk; - n++; -} =20 -out: - spin_unlock_irqrestore(&fi->lock, flags); -out_nolock: - if (!ret && n > 0) { - if (copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n)) - ret =3D -EFAULT; + if (n > 0 && copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n)) { + /* restore removed bits if returning failure */ + if (tmp) + __atomic_or(tmp, (void *)&gi->origin->ipm); + return -EFAULT; } - vfree(buf); =20 - return ret < 0 ? ret : n; + return n; } =20 static int flic_ais_mode_get_all(struct kvm *kvm, struct kvm_device_attr *= attr) --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 6347C3C1411; Tue, 11 Aug 2026 15:56:54 +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=1786463817; cv=none; b=HQc29ZLuaerlp0usf/sWWnyUJOMcnHB3VrJPEXNwPGzcMVsugisH2vxFDfwW++EN9003SNA7RRQGIBKDdbObrK01utrV3ffbq/CFHERk15zeEbih9yxgH61+qpAik7Xc7dHko+3+jS4qd3/Yu4dQsmEfFgnRTz24yYJTKIx+078= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463817; c=relaxed/simple; bh=M+/husYVJLF1oieDU13yrjsntpdbGoxAxvTFpnDqAQ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V62iT8d1IVuxkyVQOW53tG/pogJtzNAYA3bp3+zSxRhl5EjqHPdDStaEZx2UYTQfxbK+GqSLRXZdHbUrt5xQiccZhyEEeq+bCtVLMpQItWdZ9YH6vc5tZFOCDQXqaVr0m2pOhIPIhF2rMOPvr2CbA/EFU9Fm69/G3Tzi2myXhC4= 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=S9ZT/g/z; 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="S9ZT/g/z" 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 67BDXAbd3634704; Tue, 11 Aug 2026 15:56: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=Smvn94HOZetefxrmH ydfEmdWUI20sGeoiLPeRQ2o7H8=; b=S9ZT/g/zuPApS2LbU1Ytmew4rSeU5PZFG Vjfji1KNp0XFT6LeqX3VyCEhLmCa6qxdvq0yFCu+ypUYtVRuKROxraT95mrlu3CU DyojYaZN8p6OOuARaRQ2mKUZ1JKqZRsXOdSKM/wzHQppYj3m1BgMfqk1UMNqfL4m 2PXq07CuImIC8/FDEYELEG4qrnjccAzeodaggrJbH4+qTJhJ+CwIia5i1Pv2swNy D4PzJq7XDC9AQBvq//TmvHNwNSlliBuRzXVrrhx7IrCrmOkhsWQWoLj97d560lAT xeCpbxvLnB+Tz8anpCYNd5LPb1fxTclAx8kflGIwXNodLOmCZGLEg== 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 4fyb23pgg7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuKcC016169; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy1d80-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhnG37290338 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2AA8820040; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 061142004D; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:42 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 04/11] KVM: s390: Fix dirty marking in adapter_indicators_set*() Date: Tue, 11 Aug 2026 17:56:34 +0200 Message-ID: <20260811155641.219777-5-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7b4642 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=5CEK7-iOHuguGwIWKbsA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX+gOI4tyC/V88 Ci7KViEhPDG2c2H8pQ0oH1t0WNq1FqCmCY2xGhIWp8koxJqJ4NimE/k2MN37xCREdlcYbb689J9 2kYVWUbwVG6ZTHEyKiTKAe5jwNnTT4eKUptjwGjh4nSDPXOb9FdLnCykRQHoahWQh8NDSKk+YfR 7YBUECVZwmYUw2sPMm5EgOc7C1CvbWSlu8J/PLqegrtLyUxUQuf0pclZYM9P+lCnN88YHliFuNS Uh0kxFWYXJ5BkU2YvWrerBUx9FWsihgTjjkbHXgWhOlAUH7qzyIOcvrlKztn1ldjB7MBRhd3bNy cuoUmp4DbT7d3Az1F3gQmdfEMjDj0vS2k5QKtYh+zLfcTosB0MwbeMHdNh6vFhAiZzkgTWhYbIU QWvmgD6E+5sxoKoqCucjKkiq6nSNCi1S3orOxiXczCn5go16SgJNq4JJlKr/asq1iUUd6wUFEd/ YCNPMN7tdO2+YLAWqpw== X-Proofpoint-ORIG-GUID: TvKrkgWxxvh7PzYpa-kbyjaR6otH0ogR X-Proofpoint-GUID: TvKrkgWxxvh7PzYpa-kbyjaR6otH0ogR X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX1qx0CSrOXYQA KoP+6WqgeN7WT7vK707ucFnXTXBC0S1hTmfdcc7LMfH3n2fSAbC/igMbele5bp8z6vmCBcsn1dh IQ65QP7sWcCxR8jEnRCkasfQM5kAnw0= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" When the indicator and/or summary bits are set in the guest, the accessed page was only marked dirty if the access was performed using the slow path; accesses through the new kvm_arch_set_irq_inatomic fast inject path would not mark the page as dirty. Fix by adding/moving the missing calls to set_page_dirty_lock() and mark_page_dirty(). Opportunistically reorder the local variables to be in reverse Christmas tree oder. Fixes: 1e95e3bc6b05 ("KVM: s390: Enable adapter_indicators_set to use mappe= d pages") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/interrupt.c | 84 +++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 30963e05e0e6..400ce7195b87 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -2943,12 +2943,14 @@ static int adapter_indicators_set(struct kvm *kvm, struct s390_io_adapter *adapter, struct kvm_s390_adapter_int *adapter_int) { - unsigned long bit; - int summary_set, idx; struct s390_map_info *ind_info, *summary_info; - void *map; struct page *ind_page, *summary_page; unsigned long flags; + unsigned long bit; + int summary_set; + void *map; + + guard(srcu)(&kvm->srcu); =20 ind_page =3D NULL; =20 @@ -2959,21 +2961,20 @@ static int adapter_indicators_set(struct kvm *kvm, ind_page =3D pin_map_page(kvm, adapter_int->ind_addr, 0); if (!ind_page) return -1; - idx =3D srcu_read_lock(&kvm->srcu); map =3D page_address(ind_page); bit =3D get_ind_bit(adapter_int->ind_addr, adapter_int->ind_offset, adapter->swap); set_bit(bit, map); - mark_page_dirty(kvm, adapter_int->ind_gaddr >> PAGE_SHIFT); set_page_dirty_lock(ind_page); - srcu_read_unlock(&kvm->srcu, idx); unpin_user_page(ind_page); } else { map =3D page_address(ind_info->page); bit =3D get_ind_bit(ind_info->addr, adapter_int->ind_offset, adapter->sw= ap); set_bit(bit, map); spin_unlock_irqrestore(&adapter->maps_lock, flags); + set_page_dirty_lock(ind_info->page); } + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->ind_gaddr)); =20 spin_lock_irqsave(&adapter->maps_lock, flags); summary_info =3D get_map_info(adapter, adapter_int->summary_addr); @@ -2982,14 +2983,11 @@ static int adapter_indicators_set(struct kvm *kvm, summary_page =3D pin_map_page(kvm, adapter_int->summary_addr, 0); if (WARN_ON_ONCE(!summary_page)) return -1; - idx =3D srcu_read_lock(&kvm->srcu); map =3D page_address(summary_page); bit =3D get_ind_bit(adapter_int->summary_addr, adapter_int->summary_offset, adapter->swap); summary_set =3D test_and_set_bit(bit, map); - mark_page_dirty(kvm, adapter_int->summary_gaddr >> PAGE_SHIFT); set_page_dirty_lock(summary_page); - srcu_read_unlock(&kvm->srcu, idx); unpin_user_page(summary_page); } else { map =3D page_address(summary_info->page); @@ -2997,7 +2995,9 @@ static int adapter_indicators_set(struct kvm *kvm, adapter->swap); summary_set =3D test_and_set_bit(bit, map); spin_unlock_irqrestore(&adapter->maps_lock, flags); + set_page_dirty_lock(summary_info->page); } + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->summary_gaddr)); =20 return summary_set ? 0 : 1; } @@ -3007,37 +3007,51 @@ static int adapter_indicators_set_fast(struct kvm *= kvm, struct kvm_s390_adapter_int *adapter_int, int setbit) { - unsigned long bit; - int summary_set; struct s390_map_info *ind_info, *summary_info; + int summary_set =3D -1; + unsigned long bit; void *map; =20 - spin_lock(&adapter->maps_lock); - ind_info =3D get_map_info(adapter, adapter_int->ind_addr); - if (!ind_info) { - spin_unlock(&adapter->maps_lock); - return -EWOULDBLOCK; + guard(srcu)(&kvm->srcu); + + scoped_guard(spinlock, &adapter->maps_lock) { + ind_info =3D get_map_info(adapter, adapter_int->ind_addr); + if (!ind_info) + return -EWOULDBLOCK; + + map =3D page_address(ind_info->page); + bit =3D get_ind_bit(ind_info->addr, adapter_int->ind_offset, adapter->sw= ap); + if (setbit) + set_bit(bit, map); + + summary_info =3D get_map_info(adapter, adapter_int->summary_addr); + if (!summary_info) + goto out; + + map =3D page_address(summary_info->page); + bit =3D get_ind_bit(summary_info->addr, adapter_int->summary_offset, + adapter->swap); + /* If setbit then set summary bit. Else if falling back to the slow path= */ + /* with setbit=3D=3D0 then clear the summary bit so the slow path re-inj= ects */ + if (setbit) + summary_set =3D test_and_set_bit(bit, map); + else + summary_set =3D test_and_clear_bit(bit, map); } - map =3D page_address(ind_info->page); - bit =3D get_ind_bit(ind_info->addr, adapter_int->ind_offset, adapter->swa= p); - if (setbit) - set_bit(bit, map); - summary_info =3D get_map_info(adapter, adapter_int->summary_addr); - if (!summary_info) { - spin_unlock(&adapter->maps_lock); - return -EWOULDBLOCK; + +out: + if (setbit) { + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->ind_gaddr)); + set_page_dirty_lock(ind_info->page); } - map =3D page_address(summary_info->page); - bit =3D get_ind_bit(summary_info->addr, adapter_int->summary_offset, - adapter->swap); - /* If setbit then set summary bit. Else if falling back to the slow path = */ - /* with setbit=3D=3D0 then clear the summary bit so the slow path re-inje= cts */ - if (setbit) - summary_set =3D test_and_set_bit(bit, map); - else - summary_set =3D test_and_clear_bit(bit, map); - spin_unlock(&adapter->maps_lock); - return summary_set ? 0 : 1; + + if (summary_set >=3D 0) { + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->summary_gaddr)); + set_page_dirty_lock(summary_info->page); + return !summary_set; + } + + return -EWOULDBLOCK; } =20 /* --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 7E9223BE62A; Tue, 11 Aug 2026 15:56:53 +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=1786463815; cv=none; b=SFVVt69Wevx+0sUaoZKuT3wtzkYMjlB7cnkD1c2kksvPRywuMUTVjpwEQGYmbgzHlIdvMMvnqnKWi2v/A63tQvCJFsTElMXuLu+HvTN4XRnvo1O064JuyuAiK9MXYJYHrRYiCQhhsHhoorxBmuVzhOIcwIR4PSObbKdCKIOpHus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463815; c=relaxed/simple; bh=fwxLwTIGUHdZrrfxqv+nFUBC16NLoM98V6NjTs87gf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fg74aAppOAIfFEvaeMWj8ZMcSU9QUats9aKjoxBllVLX3lAYjBe+Mdqi9GXUiYrUIjl+Ac7LbBU5i1A9wJozKUz7VTAZnkKbN+Xwzf4o+riDIe1Hr1bMdFLJElCvCIhtOWAqKI3KAJc6ttnM6Byw56BcjzcTSQA2EdU5vHh5Wuc= 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=anVWOATn; 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="anVWOATn" 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 67BDXJRX570120; Tue, 11 Aug 2026 15:56: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=L5D/1TQfcEiN1EqcL 6njigH2LUHnlfcrdSPFwsjFGLg=; b=anVWOATnOERahOEkAHKjQDl8f4dpyrD/L 0yweOjBnKRNv5fvEjmCQYMrhFHRkSaUHm6N/lpB2LPx0ivQaZ4X9vcogeBlW2AIb +NxJRO1cN36wB3Q+arBOOHgbxSg8eR4AtH7zY/MamZWBzUJW9hpyGfvhy4vrRTlh Nqfb0J+MGj1At5Ocqk1WRZX4osrdsPgs671GPI4KbcwyllMPsyHyJ+kGQ31nel3w Xq8m2N7NC7wVaVGO1FWVLiaorQWwymvuY8R9xEieO6Z2zYJWD0Kf0G1Go2nsWpe7 +vmHyNMha+SJcfj6Qn+ihvek8NmXuX3mjeEUogk5nX6gKOKVrVwTA== 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 4fwvnw54mr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuKJ9018953; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h1j0j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhAc37290340 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5460E2004D; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2F4AC20043; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 05/11] KVM: s390: Fix pgste_get_trylock_multiple() Date: Tue, 11 Aug 2026 17:56:35 +0200 Message-ID: <20260811155641.219777-6-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7b4642 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=sS5RpU0ZaWfbfMIWq_AA:9 X-Proofpoint-GUID: 5QoEAhTPAiYdO1IlYh3GdDgcfDliLk2w X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX2cln+tp0bXdt VYvEY0uO5WBSzJ1H2YmJdy4y/1+K0doRBZOkkcMBdg9KaD26o1D8QIOqL/ZQuULhI/DhKW9aAV8 apiYJVvgdToIViiQHJSvH+kPE5Hfn0+QluTQz45awXFe8OsOZeXPvUKup6kvJ5zKNTYknUmHnfy WWLYx7d62JGInTPbQDL0ZutEuuimeissdLQXS5z4aME3xXLSFs3CIdoLv9UUQZhg6d3Q1q6RQa7 FT0w2y9ceUb+Ev17n5DyT5urpPI9pJssXfOgj/pyoSmvDQWdyznJIhEeqIIYGF5sNygmXBPfuIn uubXZj2nKNkxdAWDHBz2KDpR7gNS3VHkvHZdRjtpw2nrdykjQ3Uz4vyhw7kh49AKtIH3KLzVfmo VNbyD+scRvhsFylgOYi3b+a9TtMlp31bnM0SNK7kYzCIyOBlhiqORZyWKWurCZMK7yUrC6sT8ZI x/T3Ge25LN4Of2CNTYg== X-Proofpoint-ORIG-GUID: 5QoEAhTPAiYdO1IlYh3GdDgcfDliLk2w X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX+5sU1osuoFTm 5n0G+GPmaiVn3uNzvbmAoyVQ+gPcn4nwau3y845T0uXPE3xGiHJcHvbhRBaNriy6cmON6hH832J tkBucQJc5aVX70nYG5SubJ4vDHQ/BpA= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" In case of failure, pgste_get_trylock_multiple() will attempt to unlock the locked PGSTEs based on whether the PCL is set. In some circumstances this can lead to unlocking PGSTEs that were locked by other threads. Fix by unlocking the amount of PGSTEs that were actually locked, ignoring the PCL bit in the array. Fixes: 94fd9b16cc67 ("KVM: s390: KVM page table management functions: lifec= ycle management") Signed-off-by: Claudio Imbrenda Reviewed-by: Christian Borntraeger --- arch/s390/kvm/dat.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index 165c704fcf29..f4dd6f783417 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -923,11 +923,8 @@ static void pgste_set_unlock_multiple(union pte *first= , int n, union pgste *pgst { int i; =20 - for (i =3D 0; i < n; i++) { - if (!pgstes[i].pcl) - break; + for (i =3D 0; i < n; i++) pgste_set_unlock(first + i, pgstes[i]); - } } =20 static bool pgste_get_trylock_multiple(union pte *first, int n, union pgst= e *pgstes) @@ -940,7 +937,7 @@ static bool pgste_get_trylock_multiple(union pte *first= , int n, union pgste *pgs } if (i =3D=3D n) return true; - pgste_set_unlock_multiple(first, n, pgstes); + pgste_set_unlock_multiple(first, i, pgstes); return false; } =20 --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 DB8283644C1; Tue, 11 Aug 2026 15:56:52 +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=1786463814; cv=none; b=ZMJr1CjKiOmhTA8fgN3aC2/Qg4PKu6tt3dTD+c4u1sj2Glq12W4tgZvTzHJSusT7TtCbx+xY0TL5XucY7tKzOZ5mXnjXbKTJGmSGi1QoS+WztLa8b+uEwqKelRF7wimoHsH45sfZMNSRAcnONMdXQm88+gM7g2fNSThmUz3lrnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463814; c=relaxed/simple; bh=ZoN63DoAA+5EuxaAUzBOfeZ0nWDbRWi/6ScBHZyI5SY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dClmTPv6DtzgGaHwKq9+Ud8WGjCuvxrXWn/otkYy+pif3aQaA8+w0p4EJviTWB4enHM+EidPqPSbTgLXT3dQQI2pZW3Rp6Nuif3JXAawAxQCBVmmmDagPck3PP2MUR0rnLqObMQBQ2pniMgvJrMIdOva7qp5DHEWzNih8obsnIk= 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=TtYAW0S+; 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="TtYAW0S+" 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 67BDWXAh2864613; Tue, 11 Aug 2026 15:56: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=51emZvHNT/K6BJQuj sLxsZkzA+dd5xbBfTdXbPLWPjQ=; b=TtYAW0S+QdZNmqyg4PMzlAclv+asgABVt O5WBLl6zemxgTw0/LGjioPinct8O/Lo0S955CTsh5e89pPuWcQ1CbIVxlvutUhwy uPzmLff53l/tr1qZ4Z2H3BRENBS4Ru9ivcqXOFwdbeVhORCR3Gu+Ma6ZkUD1cukG JMgECF+G2Qq1gO6Q9DL0lVLQ4s/M17T/5AYuVHsG9XxxwRupUFLPLH5EG+vALCll FTINpEVPkdgrbQ0iJm2+MGLDFKHGMWzqn3NRg8hZqn0SDgU8nGzX3+MsPT6SM4nq 9CoOpFW6p+w83OayFNSZGMUSJhkCfLEl1AAFyyzQVSjwkjacjQr1w== 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 4fwvjywsjt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuMnO016183; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy1d81-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhfH37290342 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7E12120040; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 591C82004E; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 06/11] KVM: s390: Introduce extended topup for struct kvm_s390_mmu_cache Date: Tue, 11 Aug 2026 17:56:36 +0200 Message-ID: <20260811155641.219777-7-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX6WFa7Zz8or+j oqPRDDfjJHiWp6EZ8tkBQM2cm5d0+2kcSPXc0p5A9JQEl/O7E43IgVOtSnQJHCM6HaQUjCJi6sU cgwzMIYFtaZo8q0Xm08JAjbZQOKL2QtySLCsvGQ4cEX4vlf6rwAijB+cajy4u970+zQrTcFRC/5 b9kpd1BrDnPejg83NHpocWTuuYtyS3GmUTyvObmKTZ4fVS9GYsTDh38OlMh5rlOB8kz0bbr4+9t OGkzdQ85poZKccnj7sRZ5MbsAlzj/d2oR+GG6kVZitb4k22FzBNLMdx3nuwzUlcLrJHYauq3dy8 r/pmiSPTXtxaYsPCTROGsHYTFh5vTdaXuR6Wgq2IsSzRDk0o8mA0Rjt6nPn+44NCWgeufuGzo77 5Kbadgo613LSpYNX8/B8sRzvuCs3kB7b7haoIiMCfeRNoctqdgxTB/YlZc6HCcxSYb9ORTmckr9 PXgnteQ3wQusGTjOccA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfXwGGh4evghnwU jAOFzSSnZ+ZLNN3u/v2OI5LdWew7d/hYnxKNuakNVE/VP6B0Xe6ZFvlmdR+7tvtaHduvkK++O8V kjLHuIrsgfRv22f8RqTAa1fMiWG3wgU= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7b4642 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=SpkQyuVxaospo0cZ0BUA:9 X-Proofpoint-GUID: QvF27nJUCMSn4yAL6BxxB7ZwOY07OChf X-Proofpoint-ORIG-GUID: QvF27nJUCMSn4yAL6BxxB7ZwOY07OChf 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" In most cases the mmu caches should not blow up in size unnecessarily, since there is one for each vCPU, as it can add up to a quite big amount of memory. In some cases, though, it is necessary to have a particularly large mmu cache, to guarantee that specific operations can complete without needing to refill the cache. This patch refactors the existing kvm_s390_mmu_cache_topup() function to allow for an extended top-up. Two wrappers are also provided, one with the old name and old behaviour, and one that performs the extended top-up. Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/dat.c | 11 +++++++---- arch/s390/kvm/dat.h | 25 +++++++++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index f4dd6f783417..47ff8af1b22f 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -28,23 +28,26 @@ #include #include "dat.h" =20 -int kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc) +int _kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc, bool extended) { + size_t n_crsts =3D extended ? KVM_S390_MMU_CACHE_N_CRSTS_MAX : KVM_S390_M= MU_CACHE_N_CRSTS; + size_t n_pts =3D extended ? KVM_S390_MMU_CACHE_N_PTS_MAX : KVM_S390_MMU_C= ACHE_N_PTS; + size_t n_rmaps =3D extended ? KVM_S390_MMU_CACHE_N_RMAPS_MAX : KVM_S390_M= MU_CACHE_N_RMAPS; void *o; =20 - for ( ; mc->n_crsts < KVM_S390_MMU_CACHE_N_CRSTS; mc->n_crsts++) { + for ( ; mc->n_crsts < n_crsts; mc->n_crsts++) { o =3D (void *)__get_free_pages(GFP_KERNEL_ACCOUNT | __GFP_COMP, CRST_ALL= OC_ORDER); if (!o) return -ENOMEM; mc->crsts[mc->n_crsts] =3D o; } - for ( ; mc->n_pts < KVM_S390_MMU_CACHE_N_PTS; mc->n_pts++) { + for ( ; mc->n_pts < n_pts; mc->n_pts++) { o =3D (void *)__get_free_page(GFP_KERNEL_ACCOUNT); if (!o) return -ENOMEM; mc->pts[mc->n_pts] =3D o; } - for ( ; mc->n_rmaps < KVM_S390_MMU_CACHE_N_RMAPS; mc->n_rmaps++) { + for ( ; mc->n_rmaps < n_rmaps; mc->n_rmaps++) { o =3D kzalloc_obj(struct vsie_rmap, GFP_KERNEL_ACCOUNT); if (!o) return -ENOMEM; diff --git a/arch/s390/kvm/dat.h b/arch/s390/kvm/dat.h index 141ee7b9f019..461302f05e50 100644 --- a/arch/s390/kvm/dat.h +++ b/arch/s390/kvm/dat.h @@ -479,13 +479,20 @@ struct vsie_rmap { =20 static_assert(sizeof(struct vsie_rmap) =3D=3D 2 * sizeof(long)); =20 +/* Used when performing normal top-ups */ #define KVM_S390_MMU_CACHE_N_CRSTS 6 #define KVM_S390_MMU_CACHE_N_PTS 2 #define KVM_S390_MMU_CACHE_N_RMAPS 16 + +/* Used to perform special extended top-ups */ +#define KVM_S390_MMU_CACHE_N_CRSTS_MAX 32 +#define KVM_S390_MMU_CACHE_N_PTS_MAX 8 +#define KVM_S390_MMU_CACHE_N_RMAPS_MAX 16 + struct kvm_s390_mmu_cache { - void *crsts[KVM_S390_MMU_CACHE_N_CRSTS]; - void *pts[KVM_S390_MMU_CACHE_N_PTS]; - void *rmaps[KVM_S390_MMU_CACHE_N_RMAPS]; + void *crsts[KVM_S390_MMU_CACHE_N_CRSTS_MAX]; + void *pts[KVM_S390_MMU_CACHE_N_PTS_MAX]; + void *rmaps[KVM_S390_MMU_CACHE_N_RMAPS_MAX]; short int n_crsts; short int n_pts; short int n_rmaps; @@ -555,7 +562,17 @@ int dat_get_cmma(union asce asce, gfn_t *start, unsign= ed int *count, u8 *values, 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); =20 -int kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc); +int _kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc, bool extended= ); + +static inline int kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc) +{ + return _kvm_s390_mmu_cache_topup(mc, false); +} + +static inline int kvm_s390_mmu_cache_extended_topup(struct kvm_s390_mmu_ca= che *mc) +{ + return _kvm_s390_mmu_cache_topup(mc, true); +} =20 #define GFP_KVM_S390_MMU_CACHE (GFP_ATOMIC | __GFP_ACCOUNT | __GFP_NOWARN) =20 --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 84FE93C2790; Tue, 11 Aug 2026 15:56:54 +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=1786463817; cv=none; b=E84RU6vPOLmaVQqv6+2f1pAXchgR23z887p4t2ejrLnDyg/zAlzMowIHcFodET9YiZOA34iXDscBv4e45Bp5ywH1aO/bGZ4l+hMAPZMp+uavLCjufRaqs3Zyy+t4KU6FqKpq9RnBG6Rgg6D+TczqyTyYbgHYvy/2pu+heq+YxAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463817; c=relaxed/simple; bh=EFw81Acb1G2/PyCUgjTEDnYc+mN3GY2GCy1oaS6PBGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=O3xusR6OseABRoldhu1UVIF2XiPnxeYYt2i/XBSlZc2m+Nuc1eHiZznsDop1rqQHcyVrDTdU3FTLQoJCIvFb++DWtQFjAlzgULRSGJPorLbTNKocHnwejaAA756pfjX4cb5PKP/KpE0NOTDAXYii3aByTCFrPq2iPMmAQ1OEoDk= 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=nYi7QJpW; 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="nYi7QJpW" 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 67BDXD8U570053; Tue, 11 Aug 2026 15:56:51 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=YhESjB02iaQH/SiO5 fSmX42hnZLZ7xVitq8orrHphRk=; b=nYi7QJpWzgdJgrmOtjFQcyLVG6krtElFo IvvG8IhvzZkKzwy320qm+veDtVS/SN+jZvsFmCr0cLo7JGi1ICGkkWNDi3R5K5c0 IxWxwIEnMsmTiCJxD6/PsExo7EU8ttH9rnTjs2ms3+MHDV4WNH7UJKCtaSazbW84 9a9M3/4MDcvlHt4LM2uc1X3+TxfdgETCCyhXubO8cCpQ6hW5h4PTj3OZ7IPJ5NRA EGjABP36wB0BjPx0AY+hAXzoeFFTmnwpxiXY3Q0Xz7Y6p+k/+x+pFzJGZonK/VQV XaqwxqwaYvej3OOMDubY/mZk79f+aCK0ctQ2BXb9Szf6QdaCCEieQ== 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 4fwvnw54ms-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuGWp018926; Tue, 11 Aug 2026 15:56:50 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h1j0k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhHs37290344 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:43 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A6C8E2004B; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8284820043; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 07/11] KVM: s390: Move all code into kvm_arch_prepare_memory_region() Date: Tue, 11 Aug 2026 17:56:37 +0200 Message-ID: <20260811155641.219777-8-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7b4642 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=XQGuvBUbV6v71_fLNr4A:9 X-Proofpoint-GUID: EuSe__kzKG7bJo_LBVr4_fBqczS4ynF6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX4ouYUjMuFLYN Kl1rK4+pNZYb4D5FTwyNciVrthtqsdWMwmPBymynezrFMeYEazc0V5XdOiittt306ILVxAq9HVI Z9dyb+i+QtMTztWxuFgO05wsYZlcHy3D+E0C22rXo7ljFkktiIzrpalpDmewFCBwLQvDwo5mtNo bYW9oz4oXU5uG50BkJ6mtId2r0qcetm6QLuc0WMxGd435L7pGaid+ulVuqSsgPPwZkR51VhuKki YuDNr4lWFpLB5+wo3ygcrRqtPOnDR7sYxzetdCFA0mrdaAXHKF8OKEBacuyRlFX7CcBG5nj+r5c oEmcsRaFjTLv2QdLlufZ3lRJksGxvTeveLBYqWgSdbQgKb9ydoH8QY/lqp+bJUAUgGZr4MzhEAw w069wXEWOLlInkMWhwDf7TMU6snVbDp/LnN1MXVn9rRVny7zte9XQeFs87Zcrz4jq/0X891+Y/P ovhOSceIxL3NvNHB5bg== X-Proofpoint-ORIG-GUID: EuSe__kzKG7bJo_LBVr4_fBqczS4ynF6 X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX5TAV0xGvqyFa pqm9FfthvwKz4+gK4JuaBv8WDTZ8oDdc9kf0UCpLdqrLXp8xAb2g5nqFvCUgX9fKhi8Bv6iTgjF BfTq0z3acEioTyowC14mgUa1hsCQjiU= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" Move all code from kvm_arch_commit_memory_region() into kvm_arch_prepare_memory_region(). This allows the function to fail gracefully if needed. The previous behaviour was to print a warning and continue execution with page tables incosistent with the memslots. The new kvm_s390_mmu_cache_extended_topup() function is used to guarantee that the necessary DAT table updates can be performed successfully. Signed-off-by: Claudio Imbrenda Fixes: e38c884df921 ("KVM: s390: Switch to new gmap") --- arch/s390/kvm/kvm-s390.c | 124 +++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 65 deletions(-) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 02c5428ba239..c4196f9af05d 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -5766,11 +5766,28 @@ bool kvm_arch_irqchip_in_kernel(struct kvm *kvm) } =20 /* Section: memory related */ +static long cmma_d_count_pte(union pte *ptep, gfn_t gfn, gfn_t next, struc= t dat_walk *walk) +{ + union pgste pgste; + + pgste =3D pgste_get_lock(ptep); + if (pgste.cmma_d) { + pgste.cmma_d =3D 0; + atomic64_dec(walk->priv); + } + pgste_set_unlock(ptep, pgste); + return 0; +} + 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) { + 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; + if (kvm_is_ucontrol(kvm) && new && new->id < KVM_USER_MEM_SLOTS) return -EINVAL; =20 @@ -5785,6 +5802,10 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, * and munmap() stuff in this slot after doing this call at any * time. */ + if (change !=3D KVM_MR_MOVE && change !=3D KVM_MR_CREATE) { + WARN(1, "Unknown KVM MR CHANGE: %d\n", change); + return -EINVAL; + } if (new->userspace_addr & ~PAGE_MASK) return -EINVAL; if ((new->base_gfn + new->npages) * PAGE_SIZE > kvm->arch.mem_limit) @@ -5793,57 +5814,27 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, return -EINVAL; } =20 - 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; -} - -static long cmma_d_count_pte(union pte *ptep, gfn_t gfn, gfn_t next, struc= t dat_walk *walk) -{ - union pgste pgste; - - pgste =3D pgste_get_lock(ptep); - if (pgste.cmma_d) { - pgste.cmma_d =3D 0; - atomic64_dec(walk->priv); + if (kvm->arch.migration_mode) { + /* + * 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"); } - pgste_set_unlock(ptep, pgste); - return 0; -} - -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) -{ - 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; - - guard(mutex)(&kvm->slots_arch_lock); =20 if (change =3D=3D KVM_MR_FLAGS_ONLY) - return; + return 0; =20 mc =3D kvm_s390_new_mmu_cache(); - if (!mc) { - rc =3D -ENOMEM; - goto out; - } + if (!mc || kvm_s390_mmu_cache_extended_topup(mc)) + return -ENOMEM; =20 scoped_guard(write_lock, &kvm->mmu_lock) { if (kvm->arch.migration_mode && kvm->arch.use_cmma && old) { @@ -5852,28 +5843,31 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, &kvm->arch.cmma_dirty_pages); } =20 - switch (change) { - case KVM_MR_DELETE: + if (change =3D=3D KVM_MR_DELETE || change =3D=3D KVM_MR_MOVE) 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: + if (!rc && (change =3D=3D KVM_MR_MOVE || change =3D=3D 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; + + /* + * dat_{create,delete}_slot() can only fail in two cases: + * - Internal consistency error in the gmap DAT tables + * - Out of memory while allocating DAT tables + * The first case should not be possible in general, and is a symptom of + * a serious KVM bug; the second should also be impossible because the + * mmu cache has been filled to the brim, and has more than enough + * capacity to handle the worst cases. Hence it is safe to put this + * KVM_BUG_ON() here, as it should not be triggerable unless some + * serious bug has occurred somewhere else. + */ + return KVM_BUG_ON(rc, kvm); +} + +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) +{ } =20 /** --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 6338B3BF662; Tue, 11 Aug 2026 15:56:54 +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=1786463816; cv=none; b=WzwjcDwqUC8Lddh7XkbhmrramahsSiNW7zlDb0YnNel10o4Psu0X8gZLtdLi6OA9kmnVhbWhFnTPcj4yJoO32mi8XSnK4d2/q/wBeQyBqjBn5zTvXRiAGHQJGYSfCFsp0rllWz8H01ErzpFwj2ocGcJT2qZ9rmf9wOW1k4w9XF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463816; c=relaxed/simple; bh=uihA8GEr/2CatiGJCv3/85n/F+bhb6Sq8yUKT4RXTsc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FnwrpaAVavx104Fq63gofgx0sAt7nnmzq8ebYhJwm0/AaB0qGnncgfSqoDsWDjoiWGgFfNu3MrNqk4LZFj/82LQ6EPiBHlyxwwEvnckPmTzxQe9v15Dq1TuFm46+pfg6Na+x4kkmowpavczlj+GWS8FfB+COAjPcSxQN5GLDRRk= 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=tDGOzoVH; 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="tDGOzoVH" 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 67BDX96P451232; Tue, 11 Aug 2026 15:56: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=fyWxpKQHUrSeFEy+s 4gV1QL0/lvKP1pmHExyIDiu2no=; b=tDGOzoVH0MxavuIaHJMKf9Gt+WpJEp+45 h32axnVqob2QBPf2sI5rhsPXq957k25C58kD7huWwhBlXIWVkM0CS9NziWhzrTid Cd6gmyPM2KhfYk541wtfvIDgIjB0iM6znhnOe1xQOzRQ6+9nfbuqlMdGQeMxIZEr /ZR+7cPOI+yI+O9GMr5rDHi/9RDEp1/ZTZb7uAT9uR+EzrIR5WQ9u6uoNYOUxNhe mRiRW8lA7OpctiaHap2POw85FfL6lxg2HdMjzBNfkg9h/5uNwp9n4KqtKgFSrs9T D0QqH7HHaDpg0RG7rQnT+hUDHjjgsUbfGhiU51+tkyRjs1ZHhqyfA== 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 4fwvp2w5bg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuEYb016123; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy1d82-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuhF237290346 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:44 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CEF3F20043; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AB8E720040; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 08/11] KVM: s390: Fix IRQ injection with SIGP Stop and Store Status Date: Tue, 11 Aug 2026 17:56:38 +0200 Message-ID: <20260811155641.219777-9-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7b4642 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=7r_voGox4_RORL1y__EA:9 X-Proofpoint-GUID: 5WBqdSTF8wD1I7OvJuxzouyHbWrHJlcK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX9UKY+eQ0nB2b n5kVx/6ifwTw0xuttN7CamSRNrU/wDGm6xk9/weRequvOUe1VQy18XuZbDuzS/hRacCA9nvQlD5 5S9ln74Pch4kLXKqiRsWrb/B3nIDuJp64ayEAAR/3kjahvfPCMqzHYXbDDt8V2HLGds5JU21mBc nQnIeJ00RzEC1Fit7ADzIj30HCMVm1U8QoRk3eYKS3qj7VwSFOteQft9N0OWu/kFDuEH8ojKdcc pqSbCJo2JPFemaiZBD5JAlmyDrypbu//Yid1/ZZM5ks4BBWJL2jYlK73oJ2vVF4AV4vfyzzvCKE /c/AVJo/ScYsjHzonf64ti0tMCI0VEOfvXa/0weTp6bnBzDRrwuDwTxLnTtZzB80Mb/epFeSNq1 zkERLrnnw7rCMN1i+mY8b4/HUA7aLs3DKLKsgYrI4CDn7Dg/PX4EVFiitPAGBNfMEJL1w3X9vF9 69RJBVA+RVQan/Qub4g== X-Proofpoint-ORIG-GUID: 5WBqdSTF8wD1I7OvJuxzouyHbWrHJlcK X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfXyzQu8g6DXg8g K/4poxrwkDKfW72qgU+fYYCBl4c5zP4iSmRqT3zZXS4hTO9btiFAgu1Rc98HDoKGyZJiE6RFDIB ZwXny8d06R62irG+MNmHbohCHN86U6I= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" When __inject_sigp_stop() is called for a Stop and Store Status operation, if the vCPU is running, the interrupt is marked as pending and the status is stored by the thread performing the KVM_RUN IOCTL. If the vCPU is already stopped, the status is stored immediately. Storing the status means writing into userspace, which might fault, and __inject_sigp_stop() is called from do_inject_vcpu() which in turn is always called holding a spinlock, which is obviously an issue. Fix this by returning -EWOULDBLOCK from __inject_sigp_stop(), and adding a bool flag to indicate whether a store status is needed. The callers of do_inject_vcpu() are modified to pass the pointer to the bool flag; whenever a Store Status operation is needed, the callers can now perform it outside the spinlock. Opportunistically refactor kvm_s390_set_irq_state() to use scoped_guard() and __free(). Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/interrupt.c | 68 +++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 400ce7195b87..d38b9da0d09e 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -1550,23 +1550,21 @@ static int __inject_set_prefix(struct kvm_vcpu *vcp= u, struct kvm_s390_irq *irq) } =20 #define KVM_S390_STOP_SUPP_FLAGS (KVM_S390_STOP_FLAG_STORE_STATUS) -static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *= irq) +static int __inject_sigp_stop(struct kvm_vcpu *vcpu, struct kvm_s390_irq *= irq, bool *storestatus) { struct kvm_s390_local_interrupt *li =3D &vcpu->arch.local_int; struct kvm_s390_stop_info *stop =3D &li->irq.stop; - int rc =3D 0; =20 vcpu->stat.inject_stop_signal++; trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_SIGP_STOP, 0, 0); =20 if (irq->u.stop.flags & ~KVM_S390_STOP_SUPP_FLAGS) return -EINVAL; - if (is_vcpu_stopped(vcpu)) { - if (irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS) - rc =3D kvm_s390_store_status_unloaded(vcpu, - KVM_S390_STORE_STATUS_NOADDR); - return rc; + if (!(irq->u.stop.flags & KVM_S390_STOP_FLAG_STORE_STATUS)) + return 0; + *storestatus =3D true; + return -EWOULDBLOCK; } =20 if (test_and_set_bit(IRQ_PEND_SIGP_STOP, &li->pending_irqs)) @@ -2102,7 +2100,7 @@ void kvm_s390_clear_stop_irq(struct kvm_vcpu *vcpu) spin_unlock(&li->lock); } =20 -static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) +static int do_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq,= bool *storestatus) { int rc; =20 @@ -2114,7 +2112,7 @@ static int do_inject_vcpu(struct kvm_vcpu *vcpu, stru= ct kvm_s390_irq *irq) rc =3D __inject_set_prefix(vcpu, irq); break; case KVM_S390_SIGP_STOP: - rc =3D __inject_sigp_stop(vcpu, irq); + rc =3D __inject_sigp_stop(vcpu, irq, storestatus); break; case KVM_S390_RESTART: rc =3D __inject_sigp_restart(vcpu); @@ -2150,11 +2148,16 @@ static int do_inject_vcpu(struct kvm_vcpu *vcpu, st= ruct kvm_s390_irq *irq) int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq) { struct kvm_s390_local_interrupt *li =3D &vcpu->arch.local_int; + bool storestatus =3D false; int rc; =20 spin_lock(&li->lock); - rc =3D do_inject_vcpu(vcpu, irq); + rc =3D do_inject_vcpu(vcpu, irq, &storestatus); spin_unlock(&li->lock); + + if (rc =3D=3D -EWOULDBLOCK && storestatus) + rc =3D kvm_s390_store_status_unloaded(vcpu, KVM_S390_STORE_STATUS_NOADDR= ); + if (!rc) kvm_s390_vcpu_wakeup(vcpu); return rc; @@ -3178,7 +3181,8 @@ int kvm_set_msi(struct kvm_kernel_irq_routing_entry *= e, struct kvm *kvm, int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, void __user *irqstate, i= nt len) { struct kvm_s390_local_interrupt *li =3D &vcpu->arch.local_int; - struct kvm_s390_irq *buf; + struct kvm_s390_irq *buf __free(kvfree) =3D NULL; + bool tmp, storestatus =3D false; int r =3D 0; int n; =20 @@ -3186,31 +3190,31 @@ int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, v= oid __user *irqstate, int len if (!buf) return -ENOMEM; =20 - if (copy_from_user((void *) buf, irqstate, len)) { - r =3D -EFAULT; - goto out_free; - } + if (copy_from_user((void *)buf, irqstate, len)) + return -EFAULT; =20 - /* - * Don't allow setting the interrupt state - * when there are already interrupts pending - */ - spin_lock(&li->lock); - if (li->pending_irqs) { - r =3D -EBUSY; - goto out_unlock; - } + scoped_guard(spinlock, &li->lock) { + /* + * Don't allow setting the interrupt state + * when there are already interrupts pending + */ + if (li->pending_irqs) + return -EBUSY; =20 - for (n =3D 0; n < len / sizeof(*buf); n++) { - r =3D do_inject_vcpu(vcpu, &buf[n]); - if (r) - break; + for (n =3D 0; n < len / sizeof(*buf); n++) { + tmp =3D false; + r =3D do_inject_vcpu(vcpu, &buf[n], &tmp); + if (r =3D=3D -EWOULDBLOCK && tmp) { + storestatus =3D true; + continue; + } + if (r) + break; + } } =20 -out_unlock: - spin_unlock(&li->lock); -out_free: - vfree(buf); + if (storestatus) + r =3D kvm_s390_store_status_unloaded(vcpu, KVM_S390_STORE_STATUS_NOADDR); =20 return r; } --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 A18FC3C1090; Tue, 11 Aug 2026 15:56:53 +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=1786463816; cv=none; b=KLAy2mqmDw1eWcefKDvPxQTxh6+kJrtGf3Qf7CXavgcO2vh4DVKJYo6RjmnVlcDXnZc/EtnCRsPcYgJxGNCOOgpuKOsHJNJfaAf7+J7aF3yeI/d0rhKKETIyxY8Ia9DMe+V6qmB2UaS87hjTsqzkiyr0yoshlPRmxhKJP1Yo9oI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463816; c=relaxed/simple; bh=ZUGF4+g/Xm6hc0IkCpxtAibniLoi0vrTojyBXJBdpL0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h0p6TyvO/G0di1eHGBZnDONzi8EHRt+kACZ6ZypHzrSdfLX857EXEkihZSDerwVSuX5dZF799j/ZsUIcvCzO1qhK5FEInRAx57xNdcOjW33+4mzu0UkAu2QsJxcIFY+/R/CfxNfHJAo32ZIC/uYCs6dxvEeFse3UIWnUqwoi1dQ= 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=LnmdKqaZ; 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="LnmdKqaZ" 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 67BDWt9j3633608; Tue, 11 Aug 2026 15:56: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=YeeKpF/ql5pXFRpLK Ln6/Fbz33lsnx5mGRrTHWkvgQg=; b=LnmdKqaZgtSXOM3lMVokcGmvzA/A4Yvkt QggQBxRDrjNvFMT0QKr9iCuzNfYnDwDUo1v4/6vGKC08DoAr0yGQu7MbhfOh2pEk ryF+M5OBd3myCZqEZekpsNxMdCWhESrNHGFLTWLhvfcokWVUhWyypcO1I1HH2OqJ JAIgqsJtUx2DtV+COyoGBIRa9nmICEhHaM/Mx8RyI1OgQTIvRLUtMRLyI9Kib4KF QA01zp0vyr3rIDY/RLNFyagiJootTzvNU3TPDrTAWg931FYMuHc5ZNLn0lEGYLZB ADWAE2nIr1PW1BQsdw845oQvgxvYotqF3UZGDgn00OHbq5YYPZCdQ== 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 4fyb23pgg8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +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 67BFuGxo016135; Tue, 11 Aug 2026 15:56:49 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy1d83-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:49 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuiBk40436164 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:44 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 112D620040; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D40472004D; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:43 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 09/11] KVM: s390: Fix kvm_s390_clear_pv_state() Date: Tue, 11 Aug 2026 17:56:39 +0200 Message-ID: <20260811155641.219777-10-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7b4642 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=72NMtMyVgwmTuVVq4s8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX5TqgQAftr3Wa X7EmfXAwL7VVkjNbuuwy29RpE9gwCeUNaj36Bq6b8oW2l9weDMTx/VP2TzwLpnJ4QsCT8OMziEz /SjhvyfzkzZZ57cr1R/GdmZBhwUnwQG/jdUAVT30YcOekUUFvL3NC6a1kbud8mHXKnBl0Axacge w6wGyv+r6dnyi0ybt63IBgNnSAncvfIAkLhG7a357aZyL1FW6qhtc/30lNgd5Vee6x+Ntw2jZ/7 p6dBRix8TDfQ6gSrlUYS3fS6tA7Ia/az88SLY9eFBWZydinLOSVvQ5XpGc1fZYc03tGrrZ/1KK5 K5D6TCdBYcXNu1rLuif61St/rVviQF1HeBHyhdPYdlKlg/QdeC2sr8ybMuq8Mn8tQuEpR8AiTlf y6VVoUP81N4+vhtdl5TLvxgvDaasGcIIvXdAB3ToLpJQoJPxcNGjzMUN6vce8a9DuLvtfit4qh5 XxCQE/Wu59a4aBhIOLQ== X-Proofpoint-ORIG-GUID: 3TTgCdbLe_W3l-Gs4nFAzDlfHrXvO9f6 X-Proofpoint-GUID: 3TTgCdbLe_W3l-Gs4nFAzDlfHrXvO9f6 X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX6imvnuJxyxkV W4WUEFs5HC9S9FcqcdJ1bgZoz2WQOcCJCig8oAooFBXJgSAUQFMeSAVSzGDogW+J+S+0v5CaHVr xezsIVIoQ7w4kMcUjp+hW25AmzCk1QI= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" kvm_s390_clear_pv_state() needs to also clear the dumping flag, to allow the protected VM to be started again (as non-protected, with all protected state safely destroyed) after a forced reboot while a protected dump was ongoing and not completed. Fixes: e40df9efd68a ("KVM: s390: pv: clear the state without memset") Signed-off-by: Claudio Imbrenda Reviewed-by: Christian Borntraeger --- arch/s390/kvm/pv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c index b02e0159d3cd..98a9a57f71b9 100644 --- a/arch/s390/kvm/pv.c +++ b/arch/s390/kvm/pv.c @@ -242,6 +242,10 @@ static void kvm_s390_clear_pv_state(struct kvm *kvm) kvm->arch.pv.guest_len =3D 0; kvm->arch.pv.stor_base =3D 0; kvm->arch.pv.stor_var =3D NULL; + if (kvm->arch.pv.dumping) { + kvm_s390_vcpu_unblock_all(kvm); + kvm->arch.pv.dumping =3D false; + } } =20 static void kvm_s390_pv_dispose_cpu(struct kvm_vcpu *vcpu, bool free_stor_= base) --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 D9AC33C455C; Tue, 11 Aug 2026 15:56:54 +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=1786463817; cv=none; b=NJqDhWv/bYkHc42Isz4sxsWL26KXXJPSoHN8mGBZy/0FpBitnF6icKLoEqTcGZEUQ4spB0hIaUplcQlzuypj3ms3SHpGl0cog+NRVMU8dWVsVuHOY3Y9GEt2tzYiweoZCwMtZDF8zTSXRxAr2uExmkgK5PrFRrSf306u6mjYJbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463817; c=relaxed/simple; bh=rWTE/ty9JwIc7s6n5HVtXgxvhAl0EA6eS6kqY/KFX8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IfAFWgXdPfBsGylMBbKTR86qgosUJSM8CJ3gEwL9cbQ85+beDbnCvgvgcTflO8UoSNxBNqjJ8bGe1w4ZN0D+FWrTh+aEaR3SWBe2K0tDTNeXoEojpNkQsoXW6zL7O5zIba1xRTYqW4vWzHDRZODCCiiztOmxpVQ2i8cxLGRo2l8= 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=EHZvhYWA; 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="EHZvhYWA" 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 67BDX8kb569951; Tue, 11 Aug 2026 15:56:51 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=m1vROgpmHz1ZjMUn5 dyMehJ0+MyaqF6PbP1t6/ot4PQ=; b=EHZvhYWA+s/1ooPqWYBVYrqzQqtIzzEf+ M8dnr73l6pgMCyIvrxHc8DBUS4rCsqGvCB7AMjf6OahYLfODiXbZ3ZnnbhRMas8O EvFgiiyP+c/tkNpYVjfxWsmCrgHdWxtELIwdypuvHQJii5WV6ReLK1d9tv/ile0c OaAh4Cxjlw2wxZnyNHz/TXPeSGOrGYMiULdo8Xgkx3AnJHLPca8lcEIGDCauMx+j gdm/0bIbCiRXyaN+PkQYA0IQdUj5p5Z6YaHJXwHkMkfc0yhrOAPsd/fZuARLiA0w 7uRj4Y8hwYwhl8Ix683frDPufgSuWIYQ3enHwGSyl4zBX2JvtVj8w== 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 4fwvnw54mu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:51 +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 67BFuMnQ016183; Tue, 11 Aug 2026 15:56:50 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy1d87-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuiFP40436166 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:44 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 42BCC20040; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 15EC720043; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 10/11] KVM: s390: Fix potential tiny kernel stack leak Date: Tue, 11 Aug 2026 17:56:40 +0200 Message-ID: <20260811155641.219777-11-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7b4643 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=geH3wxNwSTHpAUJZdnsA:9 X-Proofpoint-GUID: VDJcknpbUZpTH6TGfOW1U-NtjTSzXV8S X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX1GeHrmgpHjxV jvxc6OrysekDvyf8qx4lvy2FCz0Wn2w+hjINZCTxPGpGJAtuBztGC9H/zEYIs6OiDiulk4iE+dU ThHZQuTDuKuqQ24ZG+4IsUYtnOXEJuq1VdS+ZGLN30qezQr//A/s0hbvC3GiMGA2SsTk129vKeW hZZTmEe1J3gV/kyKoFRowpsvU65PZMamWG3Tg771ig4D1KeGhZcTDt+p/0IUOHTzxBDGwJxmzXh B+pBrvpLi/yZoGrRE5ppgoTdU9tXye+mTv88dAqgKfbmTG4ffSaQpJGumUPLTdtjmToQEx0tWvJ aYdNGlu6aw+IGLBt1ZW8PC438hEz8hRAeclxwXuazO0sCTIn+A5TILVHCiZIxf9RbeGOx2XeUhz eywMAbJ6NNGFon0q7r7X6wHWaqt8YBuDpooL9v8DcXvHi2X98gjubplCctDfCSXQ5Zce2kePvFA 1taO9ZVb+zbkLHt9baw== X-Proofpoint-ORIG-GUID: VDJcknpbUZpTH6TGfOW1U-NtjTSzXV8S X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX5n+u6bRyk4nk KitJ55FEenjIVUgjlvJx/wDHy0e1Nlv+CvQzLKLnJfAlyPjmCtHziLMFNXM4ViTfa/Jx4xglE+G hbOAO3QVJAIGutQnGAGylkpPkRObfv4= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" In some circumstances, one bit of kernel stack could have been leaked from dat_cond_set_storage_key(). Fix by clearing prev before use. Fixes: 8e03e8316eb2 ("KVM: s390: KVM page table management functions: stora= ge keys") Signed-off-by: Claudio Imbrenda Reviewed-by: Christian Borntraeger --- arch/s390/kvm/dat.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index 47ff8af1b22f..e2a74eb4d631 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -740,6 +740,7 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cache = *mmc, union asce asce, gf pgste.fp =3D skey.fp; pgste.gc =3D skey.c; pgste.gr =3D skey.r; + prev.skey =3D 0; =20 if (!ptep->h.i) { rc =3D page_cond_set_storage_key(pte_origin(*ptep), skey, &prev, nq, mr,= mc); --=20 2.55.0 From nobody Tue Sep 29 06:49:53 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 D43FC3BFAEE; Tue, 11 Aug 2026 15:56:54 +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=1786463818; cv=none; b=JHnOTCGuoYDOAML/6hJiDRIuZHk+4+ytFeOe1DMm5Hm9XuH/UPiVZsnHDOa2O2DZUuc9NM0T3cz15mZGT5gXjtxgJv38TXljPAfsL7YViGuWPeFIZW8lgVwp+1U62E2AZvfz0J2/JIWbJSTf/eLc2/kwM0i5PAuPiAfMqx0pb9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786463818; c=relaxed/simple; bh=TODtbCC3cth5fnzucKCWcEe+7zIDmmAaKQMpubzKM58=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mvjDiKaAB/4B2AvQ6ZIXIkcyf9NbxcinKw1UWK1JR/cOwcrtc5DegcsZwaJl7Ld8gQ7w2fnqNy35wMoWtXPN6U+eXgPl09ZNwzSex8w1si73tkTHbosgU/G+Pf4NzZRAuZ/6KMYoBX7k28DdFqSyNDX6PXrZKY9agzPuyCeLAps= 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=hdv55OTQ; 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="hdv55OTQ" 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 67BDWSM7492273; Tue, 11 Aug 2026 15:56:51 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=SHMfE6tZjaWLRVp1X Nlc0KPBLh0pkFrmLT7g5aBRxqc=; b=hdv55OTQd/WxFp3NNPkfrRDA+VY1ITKA9 sNgyLszGyKZJVfqvjFaCzqvu60KlXICaSuUAIFbjqUTTvj0by7uBePVExcVySA+W qsY4gmlB29866i4VJjDrfZLpPFjo7fV/4xMEgvYQ2iv9i7jF5otXhhIc7diMeX+x H5VK8qfiZTE9wHnWxFVSzR8+QozHOMuJj/hg8b9mMO2SpigDBmNNSWOLMIejnTRZ aoVzY1nMsm/rIsELRJcOTovblsNnJ0PXUIfZ+OVI9aE7qKpPQGxPQ5P0WLbqGA7u hrk7Si07cMZtrWJWanuU9G70wXfTlQouN8hj2OCaNrr1Z76oiUq/A== 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 4fwvq9dsgm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:51 +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 67BFuKgc018957; Tue, 11 Aug 2026 15:56:50 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h1j0t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 Aug 2026 15:56:50 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67BFuiPm40436168 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 Aug 2026 15:56:44 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6C98C20043; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 487832004B; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 11 Aug 2026 15:56:44 +0000 (GMT) From: Claudio Imbrenda To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, david@kernel.org, seiden@linux.ibm.com, nrb@linux.ibm.com, schlameuss@linux.ibm.com, gra@linux.ibm.com Subject: [PATCH v1 11/11] KVM: s390: Fix _gaccess_shadow_fault() Date: Tue, 11 Aug 2026 17:56:41 +0200 Message-ID: <20260811155641.219777-12-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811155641.219777-1-imbrenda@linux.ibm.com> References: <20260811155641.219777-1-imbrenda@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-GUID: 4AkJh6iew5EKkNn2tTyDpBB0ddY-sGFG X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7b4643 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=E-UwkBRaFZ51XR-txJMA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfXykcDdVOY8z2U 1kAWxK/xlBsTEjw2mUfPohUMyUrqW1zPyRCo8pveO/7Oo2buQ1ktTVOg/tEbk/p/i/oHLA22ZZH f529Gz+uXFnCBFl7FY8Z80zxyjXSf/0gIylZ4d7I3XYe5SiIepuOmJlo84ZKNRUkYsBzCmTUn7j BjsaK5goh9ZEsQw8Ly5ZpilREe2Nndy+UdANJ23Hs8OwowB3vJcucqn+CMAecW6SbcXqGWZLRvm 61Ewkmk8PUzU/qsEGXCn46VU+ZCkO8kDERIDPfLZWMJdvFcpONkuakmz0ychBKOfuLb7yf+3uIU fkXcCv+wwkRXW5w5RhMAfcl26EzprdcLdrMtcOAAeqgdzHi4bWXSOLJ86Lpl+K8no/3sMayLwbb URjGX9HPYks2/pbsDVMqRHYsnCl4odv142Spb7uf34HSiPAE0SD/VK7ODLCwg7zjS2yqsYZ2Cqa oq2ttKdbyua0Cwcoxqg== X-Proofpoint-ORIG-GUID: 4AkJh6iew5EKkNn2tTyDpBB0ddY-sGFG X-Proofpoint-Spam-Info: AW1haW4tMjYwODExMDEzMCBTYWx0ZWRfX7kQ9CzAwJFE3 f8T1+UtdKdKWKZyfmYdZLLDcEytRq+TC6GLtg1/erL9yC14Bk4XTrF6AuihIYzAvYBA0pl9Fq6h YHDg0osESg1/O/Al+o+wVJb/cC4Ghlk= 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-11_03,2026-08-10_03,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-2608110130 Content-Type: text/plain; charset="utf-8" In some circumstances, it is possible that the page of nested guest memory that is being shadowed is not present at all in the parent guest gmap. dat_entry_walk() will not find any leaf entry and return with -ENOENT, which will erroneously be propagated all the way to userspace. Fix by manually calling gmap_link() on the memory of the nested guest that is being shadowed if the mapping was not already present. Fixes: e38c884df921 ("KVM: s390: Switch to new gmap") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/gaccess.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c index 36102b2727fb..f3a889988cdb 100644 --- a/arch/s390/kvm/gaccess.c +++ b/arch/s390/kvm/gaccess.c @@ -1507,6 +1507,7 @@ static int _do_shadow_crste(struct kvm_s390_mmu_cache= *mc, struct gmap *sg, gpa_ static int _gaccess_do_shadow(struct kvm_s390_mmu_cache *mc, struct gmap *= sg, unsigned long saddr, struct pgtwalk *w) { + struct kvm_memory_slot *slot; struct guest_fault *entries; int flags, i, hl, gl, l, rc; union crste *table, *host; @@ -1551,8 +1552,17 @@ static int _gaccess_do_shadow(struct kvm_s390_mmu_ca= che *mc, struct gmap *sg, return -EAGAIN; } =20 +retry: rc =3D dat_entry_walk(NULL, entries[LEVEL_MEM].gfn, sg->parent->asce, DAT= _WALK_LEAF, TABLE_TYPE_PAGE_TABLE, &host, &ptep_h); + if (rc =3D=3D -ENOENT) { + slot =3D gfn_to_memslot(sg->kvm, entries[LEVEL_MEM].gfn); + if (!slot) + return PGM_ADDRESSING; + rc =3D gmap_link(mc, sg->parent, entries + LEVEL_MEM, slot); + if (!rc) + goto retry; + } if (rc) return rc; =20 --=20 2.55.0