From nobody Mon Sep 28 23:53:40 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 E07B9476CC6; Fri, 14 Aug 2026 14:40: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=1786718458; cv=none; b=S3e6wnMJrsjMHI6HgRD0+5ukjlSCyiYR6mpzEd9djLOwAcxm7dtvDb933K6xlJ5fB30jWi3GvD+uUGiJEknXZ1NWgiTC9Yg2QGleTuJZlj326NLUBxLeEXAD0imGmK9NyKUDoO6vc3Mr+leBIIkTafc9WlTLBDBb4hAOn4pM/Rk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718458; c=relaxed/simple; bh=38WLb7tJBA54vnYXwUGVTGPnr/7/N2hZdYahs0DftHI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VwHxuHkWCCzkUh3mEZJfS4R+qMvL0aVRyhCqXoo9C0HZkVbqIEDUF61dwzoq8Zayyh/DjvPrSwJ7KPiTr0Q5MUbUACLeKAu5aHlDu120vhxI1WqnseeVL/m+MX5HRDKBeK0Cr4TwCowpcRVfVl2Zz3M1hA/0JZ7j78uzzZdfA8U= 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=ptvlZajY; 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="ptvlZajY" 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 67EE5jQ41370431; Fri, 14 Aug 2026 14:40: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=Kly62Bl/mmZtytbLO I2Iw+g+MeZCeCzbeA6vm4lyVKs=; b=ptvlZajYv0Nn/iFzJfZfp14nsyTWUSrkA IAK7xF+HyL+jZ4ZmQwzcZ9GDwz9/HSmlhoPO2zQIEfDEozPv9FYxYINkNkRDE2uh CcjWsBnRan8E+jpDchPHVHuhLamc9OVHaSa8KEckmPjppkFZ/otqUlCjQROkgfnO oAffAsTalkocc3StwixecVIZb9KlxYmJWWSmry4AbKNO2M5cZGucNYLnyYZyGoVl UbHbjncugUstcaOXvbyuFCwFfGURRUNkfFSeoAOFRwIwNQltLtkRNQTNUWlnZ/6+ aL67sk0ZJSMjapTZy6en0czgubKq0y2vIH9i+Fmv2HRG7/lOQWSSA== 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 4fwvnwm2wy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:49 +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 67EEQJmA004015; Fri, 14 Aug 2026 14:40:48 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsk7n6c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:48 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEegRX37880206 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:42 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 62E9820040; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3C8A82004B; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 1/6] KVM: s390: Fix dirty marking in adapter_indicators_set*() Date: Fri, 14 Aug 2026 16:40:36 +0200 Message-ID: <20260814144041.169025-2-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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=6a7f28f1 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=erwwKp9ikJBr0o1lINgA:9 X-Proofpoint-GUID: Go7x-9ahecc0UR7BdG9hxYdw3ciebVtV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX+gvyftSF2Wo4 VjywaFksegEgkjK1n6/YMdZ86umu4Ab0uN42FVwM/5mYfg1GgrxxeCVTuJnvUIXYpaZRrkG9qud aqYaOWeWqfnMOHGKPEKCGax2Yggo5DHQ+aYQuXa6f+siv8LgnYwtmrCQw5p2UGyFUN5lFpqhIG2 THmVea8Kdna8Sifhmue0plJRWUeM0gK7j+sBKwt3n7yVh1AMtLTTjLIG8x7iBM2Wd9rQaDOkTR/ ypjha2vY+5YA4qUTuP7PnHfqaNhbU8pKn/HKYMce9RwrEKONv4LXdHVSMKN5DqNDUmGQCgHGsb7 8d4X3NqPONgOmkruc1LGodhGwALp1Q9FDphewrPvuGByUpF/moz3govVSt5sfLWLqm8KR86ZeWI JOvNjHwFIWX7usoE+7ESQ6pyCTKC/FMaaSRe8BEFlrBWp7Wg/AebdTC9AB3nzxvHX+pLUUH9Sh4 Tz6p77itBC8nyvJiR4A== X-Proofpoint-ORIG-GUID: Go7x-9ahecc0UR7BdG9hxYdw3ciebVtV X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfXw8eW405SONi9 hiLTOhzf8OSsyh1qeFPppO680sNa4agmfZnCoDN3IztzxluQtCeLfxXO0x71BwPx5Dj8bwV8g8e XiFBCknN85wybYAXFUNC591pMbNr4Kc= 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 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 in KVM 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 mark_page_dirty(). Note that for the inatomic path set_page_dirty{,_lock}() is not needed as the page stays pinned; the unpin path correctly marks it as dirty. Opportunistically reorder the local variables to be in reverse Christmas tree order and refactor to use guard(). Fixes: 1e95e3bc6b05 ("KVM: s390: Enable adapter_indicators_set to use mappe= d pages") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/interrupt.c | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index da740a378a8c..fc4d1f8193d9 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -2984,12 +2984,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 @@ -3000,14 +3002,11 @@ 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); @@ -3015,6 +3014,7 @@ static int adapter_indicators_set(struct kvm *kvm, set_bit(bit, map); spin_unlock_irqrestore(&adapter->maps_lock, flags); } + 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); @@ -3023,14 +3023,11 @@ static int adapter_indicators_set(struct kvm *kvm, summary_page =3D pin_map_page(kvm, adapter_int->summary_addr, 0); if (!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); @@ -3039,6 +3036,7 @@ static int adapter_indicators_set(struct kvm *kvm, summary_set =3D test_and_set_bit(bit, map); spin_unlock_irqrestore(&adapter->maps_lock, flags); } + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->summary_gaddr)); =20 return summary_set ? 0 : 1; } @@ -3048,26 +3046,29 @@ static int adapter_indicators_set_fast(struct kvm *= kvm, struct kvm_s390_adapter_int *adapter_int, int setbit) { + struct s390_map_info *ind_info, *summary_info; unsigned long bit; int summary_set; - struct s390_map_info *ind_info, *summary_info; void *map; =20 - spin_lock(&adapter->maps_lock); + guard(srcu)(&kvm->srcu); + guard(spinlock)(&adapter->maps_lock); + ind_info =3D get_map_info(adapter, adapter_int->ind_addr); - if (!ind_info) { - spin_unlock(&adapter->maps_lock); + 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->swa= p); - if (setbit) + if (setbit) { set_bit(bit, map); + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->ind_gaddr)); + } + summary_info =3D get_map_info(adapter, adapter_int->summary_addr); - if (!summary_info) { - spin_unlock(&adapter->maps_lock); + if (!summary_info) return -EWOULDBLOCK; - } + map =3D page_address(summary_info->page); bit =3D get_ind_bit(summary_info->addr, adapter_int->summary_offset, adapter->swap); @@ -3077,7 +3078,8 @@ static int adapter_indicators_set_fast(struct kvm *kv= m, summary_set =3D test_and_set_bit(bit, map); else summary_set =3D test_and_clear_bit(bit, map); - spin_unlock(&adapter->maps_lock); + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->summary_gaddr)); + return summary_set ? 0 : 1; } =20 --=20 2.55.0 From nobody Mon Sep 28 23:53:40 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 8996C3D5C38; Fri, 14 Aug 2026 14:40:51 +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=1786718455; cv=none; b=ncDKN7kUgv2HCjKm8TrKXzw2CPNfiMrWPzcXcY1AQFgB6mZ791F9jCnh0dOBSAMIZgqBPSNN75cMNVu5veCPolRWu+64pyzgPc5kkoRjI2zd7gBSlYP48VMWLyBZx82yWjrBcimZCU4rmbA5io2xZEGfzrycDQ0lf7c5BbU8YTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718455; c=relaxed/simple; bh=uYxD6tuGNGadbEzwBZNZuVeEt03Xxbyj3l4NXjwaXVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mr22y7ykd/TeL5gybMms8eYsQNdgPlNwZdGaSZ6qUJsQyCwNkIpi8BozauyukoLR4hsSWeiMkQcS5GAvre3GPlj9HM1bGNbLPWFdudIE6VJDoQUHRDGD9mrLjyc73Yn7HkHpCCqSFQqmmLvUBIXXY37gV6JuQobLJjo+LQlUaPk= 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=tlfKSjEs; 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="tlfKSjEs" 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 67EE5x411290155; Fri, 14 Aug 2026 14:40: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=coCVDWh+/kTksNPHX lLkpZ/Tkgvft3DVQ06AbqFqkeI=; b=tlfKSjEsgHzx7gpeZwXahZWwWHFvNlL2j TKDROIzyu1ThWOzFVza5EC8Mqo+IRGBWQrDHY26buHyEpStcuyiNMu4/xfU8GbV4 x2nEA+XugPQHrmOqHAvXplb/Y5P6/ndqdvpp922y738hnUoWYUY2W18fe1K75xAB kpdN3Xmz9IEkUxan1QHHqb9nNU/unuyi6kv8Xs2eRctbYYnJBKxKz68FVuMyup51 vIj7Qy5j6bPYxsuNO+4qMnRge9Mx52bcUclFVGlmOS+qMca0/sz39z6V0gl2jCAT kUvWjzp+ZqPE/Qgb4jZvQgk0yQlO+OQ9PDiCEjevIWhec7AqoFeFQ== 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 4fwvq9w7k7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:49 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67EEQbPA013118; Fri, 14 Aug 2026 14:40:48 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g1rpvad54-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:48 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEegJN37880208 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:42 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8D8DF2004B; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 680E420043; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 2/6] KVM: s390: Fix _gaccess_shadow_fault() Date: Fri, 14 Aug 2026 16:40:37 +0200 Message-ID: <20260814144041.169025-3-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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: JUbLml1G-K0KOS7PaWaWSR8yH35Y7RF9 X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7f28f1 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=nPGPQeRDbKebYXXOS2MA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfXypawup8rVJOT dvKpMzj3nmlejlgIw+Id93bxPI+ec3Pq7MVcGetv7xXKrTrHLamIIxLCfUQwNypgwm2NgUST3Sb 91rX2ml9FyRyqtVjJbe5JerWy+G6/yQQKYSLOjoruGcB8x5v0A4oqyPbPUcdJGylbw93aQF/uM6 SdhTbY5w1pMf+FB9NxFeTJvHia3ax6nMlqzZtvgtf70KVbqsQEiljPCp0QqV8gPPcOyquJX90Hq alq/AUPguzj0WPZbU48aSkN9MdKgMQ6DresfEIbk0/gQOiC1QzumxncROmlFNKDYgQdYrSVaUai 3I53zu70C2haSwBY4wLvkm+M5Tk6f4nScNzAcchZ9y2oO+K0/s5WfcXwrEW4392tpqou0kcg63u 20wm4o3vln2LNn8CEXCe3PndLccM3Mn462hroAGsXkAE0r0JMVrA03WNTyCMtCUal1ebVSM5bQ2 D3T5AiWiaxmQGl7OctA== X-Proofpoint-ORIG-GUID: JUbLml1G-K0KOS7PaWaWSR8yH35Y7RF9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX9dSHhN3FFPwz Ta6YuPsTujJCPzVQ3RTIctXNlIFM/eJwdMWASjOMBLM4AeRtEhxZLE+5cYRZhdnyWevrn/TCpR5 DxGbgWRNkiE1cswnnyEU5/KL6aFVocw= 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 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 | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c index 36102b2727fb..0d5d46d4c66f 100644 --- a/arch/s390/kvm/gaccess.c +++ b/arch/s390/kvm/gaccess.c @@ -1593,12 +1593,25 @@ static inline int ___gaccess_shadow_fault(struct kv= m_vcpu *vcpu, struct gmap *sg parent =3D READ_ONCE(sg->parent); if (!parent) return -EAGAIN; +retry: scoped_guard(spinlock, &parent->children_lock) { if (READ_ONCE(sg->parent) !=3D parent) return -EAGAIN; sg->invalidated =3D false; rc =3D _gaccess_do_shadow(vcpu->arch.mc, sg, saddr, walk); } + if (rc =3D=3D -ENOENT) { + struct kvm_memory_slot *slot; + struct guest_fault *entries; + + entries =3D get_entries(walk); + slot =3D kvm_vcpu_gfn_to_memslot(vcpu, entries[LEVEL_MEM].gfn); + if (!slot) + return PGM_ADDRESSING; + rc =3D gmap_link(vcpu->arch.mc, sg->parent, entries + LEVEL_MEM, slot); + if (!rc) + goto retry; + } if (!rc) kvm_s390_release_faultin_array(vcpu->kvm, walk->raw_entries, false); return rc; --=20 2.55.0 From nobody Mon Sep 28 23:53:40 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 C0CBC4756D4; Fri, 14 Aug 2026 14:40:53 +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=1786718458; cv=none; b=FbpCkTle0nMIe7XU2GFps1plYgRbJhXAjkMS029r6wgtlTm7he1zPXaxuBH4vW4OmmQbSxF3ipK8eecHTQu0WS+6aQ5Av+CyDLD8ZI+c9N/X8NpSaJcIK4C+ZeWGYXXz3kvYWUNAMmTKoxAUMmFIhalcU37iIkFzQ3W6bzR5hA0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718458; c=relaxed/simple; bh=4bvuluFbTdEh4Hx56NI4fikneWt6dgvAi1KIwoQK2I4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=umBD8u8GYfspoxPgzc7epFDTOpMcCtw/rz9+DaZIE5DeiWXCXyoXWSsWjqOjUUIKWXHTw6YZEhroSCHTYtxy3zyQMWrWiS+4estsl0nilGmssVx1p3CFdSSc0hgf/nqUGsWkCb9H4AoMH3rJXpWC1zb1d22jD2Z9UCDVCSW4SVg= 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=O1IhZ4/X; 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="O1IhZ4/X" 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 67EE5XF31289657; Fri, 14 Aug 2026 14:40: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=WkBOYSIYxpAraxZmP ap/T8CHdIrws8UERe+w9ssbQkA=; b=O1IhZ4/XfIqObf4IYBa+EpsNjLCYhNcXb GyGUx8F7xTkCwSAFDCQ6zdIOU5UqcWO/iMKgT4/KH1Z8RDS5pXY/qStTiQt1jCTy 7ve9DqQ7yznmmes/tDVdJFbsQpamK2/4Cd6gBlhjKlzQid1XJNjBZuySPPtD6lon UybDAN7F99mDGVygIVfEIvpsYv7JEQb20AO58BVnhkNi94O/EzqLMCKHj9Hp4H5Y 3isfLm6lCNzeRmOPZxqPXhMHrok+PouHfPPO3qcrjTgJbo8gOfKAibZSnEZl2ICx dK+S68kc9NGqkd5ncQ5d4jmTbA5sPgSowpK2hcipbtVRFTwPnTiJQ== 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 4fwvq9w7k9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40: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 67EEQLOF004030; Fri, 14 Aug 2026 14:40:49 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsk7n6d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:48 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEegJT37880210 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:42 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B755620040; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 924422004E; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 3/6] KVM: s390: Refactor dat_set_slot() Date: Fri, 14 Aug 2026 16:40:38 +0200 Message-ID: <20260814144041.169025-4-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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: FCYvkbfOLydm8vNSz_c45iMW9-EL0cWp X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7f28f2 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=Dh8sLtxf0uV7TDLfvswA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX6FtstgJzCAox nV5pFC7p8HGKCZW0NZ6sg/xJp7raytpgk/fxxbep932fT/kJDatE+wMAusX+NXhsYDGhA1Vmli/ NO1bTk1ofUg/p7KIPc9z0WI/tYeNunG3g0hjxjeSF9pJKBuK4Pwjz75f2ks+NbngihXrHU9WlRM sT5VsTpdy5Avbxp54wjL14dLbZ4p1vvI055EcoTua6WB1oSLEJDDpMiOwjWpLaw0kQQ0oW+Z47y HP0oWBS+wrEIv6IRJ3pkgKFxNowiofCuvy7eOSw+U30D8xV7Nm01MIUieUCOZL70JQsiyPrYSOA ObxZEdXbw0NgwMnPfVurFjhxA/QRaT/vbYCNbJ+Xx0w6AD+kNO/muDXpjf9Lt0Pt7dY34ltj7/W 2ki/SCyDMhjyWIHPjYlTfsQZqYvYsxl94iNTCnjMR0uQKllO6aLrBPKq1ZCH06ov9pqXhAxK4x9 zFzfzn6mDfWghLHHjyg== X-Proofpoint-ORIG-GUID: FCYvkbfOLydm8vNSz_c45iMW9-EL0cWp X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX/+5GZj81oJJy VbhN/UxJ00amTVmh5pX8NhkSbOrwUYqKN2x6DrVwwfV+1iN8IOq0TKjbz7qgdZx4rnthkOqeJzv ldpXD8v9Ls6Hx4XHzYjWKRENZJHFXAA= 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 Content-Type: text/plain; charset="utf-8" Refactor dat_set_slot(), _dat_slot_pte(), _dat_slot_crste(). Now they only take a struct kvm_s390_mmu_cache as priv. For dat_delete_slot(), mc is NULL, as no allocations should take place. This is needed as a prerequisite to move gmap DAT table setup from kvm_arch_commit_memory_region() to kvm_arch_prepare_memory_region(). Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/dat.c | 29 +++++++++-------------------- arch/s390/kvm/dat.h | 10 ++++------ arch/s390/kvm/kvm-s390.c | 2 +- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index f2ea013cb33e..7e5dd5a1eb1e 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -844,19 +844,12 @@ long dat_reset_skeys(union asce asce, gfn_t start) return _dat_walk_gfn_range(start, asce_end(asce), asce, &ops, DAT_WALK_IG= N_HOLES, NULL); } =20 -struct slot_priv { - unsigned long token; - struct kvm_s390_mmu_cache *mc; -}; - static long _dat_slot_pte(union pte *ptep, gfn_t gfn, gfn_t next, struct d= at_walk *walk) { - struct slot_priv *p =3D walk->priv; - union crste dummy =3D { .val =3D p->token }; union pte new_pte, pte =3D READ_ONCE(*ptep); union pgste pgste; =20 - new_pte =3D _PTE_TOK(dummy.tok.type, dummy.tok.par); + new_pte =3D walk->priv ? _PTE_EMPTY : _PTE_TOK(_DAT_TOKEN_PIC, PGM_ADDRES= SING); =20 /* Table entry already in the desired state. */ if (pte.val =3D=3D new_pte.val) @@ -873,10 +866,9 @@ static long _dat_slot_pte(union pte *ptep, gfn_t gfn, = gfn_t next, struct dat_wal static long _dat_slot_crste(union crste *crstep, gfn_t gfn, gfn_t next, st= ruct dat_walk *walk) { union crste new_crste, crste =3D READ_ONCE(*crstep); - struct slot_priv *p =3D walk->priv; + struct kvm_s390_mmu_cache *mc =3D walk->priv; =20 - new_crste.val =3D p->token; - new_crste.h.tt =3D crste.h.tt; + new_crste =3D mc ? _CRSTE_EMPTY(crste.h.tt) : _CRSTE_HOLE(crste.h.tt); =20 /* Table entry already in the desired state. */ if (crste.val =3D=3D new_crste.val) @@ -900,7 +892,10 @@ static long _dat_slot_crste(union crste *crstep, gfn_t= gfn, gfn_t next, struct d if (!crste.h.fc && !crste.h.i) return 0; /* Split (install a lower level table), and handle things there. */ - return dat_split_crste(p->mc, crstep, gfn, walk->asce, false); + if (mc) + return dat_split_crste(mc, crstep, gfn, walk->asce, false); + /* A large page should never cross memslots boundaries */ + return -EINVAL; } =20 static const struct dat_walk_ops dat_slot_ops =3D { @@ -908,16 +903,10 @@ static const struct dat_walk_ops dat_slot_ops =3D { .crste_ops =3D { _dat_slot_crste, _dat_slot_crste, _dat_slot_crste, _dat_= slot_crste, }, }; =20 -int dat_set_slot(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_t sta= rt, gfn_t end, - u16 type, u16 param) +int dat_set_slot(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_t sta= rt, gfn_t end) { - struct slot_priv priv =3D { - .token =3D _CRSTE_TOK(0, type, param).val, - .mc =3D mc, - }; - return _dat_walk_gfn_range(start, end, asce, &dat_slot_ops, - DAT_WALK_IGN_HOLES | DAT_WALK_ANY, &priv); + DAT_WALK_IGN_HOLES | DAT_WALK_ANY, mc); } =20 static void pgste_set_unlock_multiple(union pte *first, int n, union pgste= *pgstes) diff --git a/arch/s390/kvm/dat.h b/arch/s390/kvm/dat.h index 141ee7b9f019..57f32ac9ffed 100644 --- a/arch/s390/kvm/dat.h +++ b/arch/s390/kvm/dat.h @@ -543,8 +543,7 @@ long dat_reset_skeys(union asce asce, gfn_t start); unsigned long dat_get_ptval(struct page_table *table, struct ptval_param p= aram); void dat_set_ptval(struct page_table *table, struct ptval_param param, uns= igned long val); =20 -int dat_set_slot(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_t sta= rt, gfn_t end, - u16 type, u16 param); +int dat_set_slot(struct kvm_s390_mmu_cache *mc, union asce asce, gfn_t sta= rt, gfn_t end); int dat_set_prefix_notif_bit(union asce asce, gfn_t gfn); bool dat_test_age_gfn(union asce asce, gfn_t start, gfn_t end); =20 @@ -958,16 +957,15 @@ static inline int get_level(union crste *crstep, unio= n pte *ptep) return ptep ? TABLE_TYPE_PAGE_TABLE : crstep->h.tt; } =20 -static inline int dat_delete_slot(struct kvm_s390_mmu_cache *mc, union asc= e asce, gfn_t start, - unsigned long npages) +static inline int dat_delete_slot(union asce asce, gfn_t start, unsigned l= ong npages) { - return dat_set_slot(mc, asce, start, start + npages, _DAT_TOKEN_PIC, PGM_= ADDRESSING); + return dat_set_slot(NULL, asce, start, start + npages); } =20 static inline int dat_create_slot(struct kvm_s390_mmu_cache *mc, union asc= e asce, gfn_t start, unsigned long npages) { - return dat_set_slot(mc, asce, start, start + npages, _DAT_TOKEN_NONE, 0); + return dat_set_slot(mc, asce, start, start + npages); } =20 static inline bool crste_is_ucas(union crste crste) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 91b975835457..0a08a3c7b023 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -5860,7 +5860,7 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, =20 switch (change) { case KVM_MR_DELETE: - rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); + rc =3D dat_delete_slot(kvm->arch.gmap->asce, old->base_gfn, old->npages= ); break; case KVM_MR_MOVE: rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); --=20 2.55.0 From nobody Mon Sep 28 23:53:40 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 425643446C4; Fri, 14 Aug 2026 14:40:50 +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=1786718454; cv=none; b=jjwKOQptfJSmzg7nHSk6GMAp3rM6nvAwdAo7LTrck1tQ9DryaDJaxhdKJlG5sAhrbcracUDPCHPMlZXrgZyWGHFigiAcTmMVoxNoryI3llhtMioxBJhTqX16o+Xu40jd8UuPmv86k7+b/23jQkPdtMK0LX9YXcWncx5mJvI/0Ec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718454; c=relaxed/simple; bh=G2LHD3z0k64ylTrt52Mk0kqsYI8nA1DE1czMAAMJmZI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V9blxJ7PSyF7E0uRBmZ/4V4CYuh84fFBtJBzLE4j9VRoYHg7Jg5VNllJyjpYycrfG3uVKSKSmZ3diISPcV6cVmLcD6fJ8oEo8Low87pTyePLL+VIOHysGqxVFpOliptqQ1+Z3u5ceYLyWQ2Prel2luzu70yORQO0qsnyIK7lMvk= 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=K4KVy2xy; 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="K4KVy2xy" 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 67EE5p3I1370805; Fri, 14 Aug 2026 14:40:47 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=lXAIpo3qXkww2zJ+r ZYA9nEJyoE9kM5kto7zlAWBB8E=; b=K4KVy2xyWL1BC6r80sU1cxqgN8hnpnaE3 7or+HY1hBL1O36kRMBHI4wjVYXscrAeJgktfOXonexFsXCI614RQ73RQOkz4Bo1g hD0ERxL9E7A8nqiB+hHoTLXRP6L1VC5ayZFLcB+I/DJCrrUKIkL3HCsCsGuK6Hbd 1aIm397ZQKwFmK7iBowy+BE2S9roTW+4jbWgHyBW5v/MfuetwQxtB7Ol3dcDWUvA eJJnUs+d/XcJnUjh7esys1GKIAdSri/lcsG+JxXGgRjTEcgDSsHGgAP+YLqAHRCm Jj08SePn67KvKEC8IN5JulNoz/DRTVE5q8h7SDb7S+QhcnWx76tHQ== 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 4fwvnwm2wv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:47 +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 67EEQXlI013092; Fri, 14 Aug 2026 14:40:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g1rpvad4y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:46 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEehMs21758604 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:43 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E18232004B; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BCBFA20043; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 4/6] KVM: s390: Move all code into kvm_arch_prepare_memory_region() Date: Fri, 14 Aug 2026 16:40:39 +0200 Message-ID: <20260814144041.169025-5-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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=6a7f28ef 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=XQGuvBUbV6v71_fLNr4A:9 X-Proofpoint-GUID: dGS9JqxA156Knv7k_CaddBEUruGQHMPB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX+oHOh/NDQTFv uxactGENc5ej46153lMxpFVkxVswxDYtxLaweGo/1Zgo8bq0pSNUXUd/0qf5HcxHtNj/Es0shot Sik4SbnKFruVT0YdaXMKAaJntVKiM3JbUW+WFcBQOJ5grpwi41Js0fSCaMbekH74p1umKL2gr7x 9C3VooyvveRXekiwmh/rk32+pZP0qFvXF9Te74s0UOK/yAb7x25N2X1t9YiRUy67rInEuHWtx4W 1ryZTL/QFHJ693S0J8aEwvaHl5iwaVkasognuffoCq/0Dqmwo1itnRd+0uhV0WEVpQ8nx6+SllO 5a6dyixPM9cD7RPeogZ9IiozBb0zJnsmP6m7ky18yFOH7o572tm+HnCYzTNixpVp6MLoUVSaTvB Se+MdiLpifwUmdYpL26WBh/BmmBxIblO8+WAhD0gzgNWEf0pTDI55T1+VQbBWPCitZd+hgX/XbF OyBsRgeR5u9wua77PQQ== X-Proofpoint-ORIG-GUID: dGS9JqxA156Knv7k_CaddBEUruGQHMPB X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX6t2mWyTFT5Jx lEVE4CJNsNOpI/8WIC2NB880iVaP2WPxGDe4FGP92Qim4vHm76x49ytGUhLbKHlKID4yawFGNSn 3KGaLvmQCzNWg2/e+om67LScD8+eclc= 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 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. Fixes: e38c884df921 ("KVM: s390: Switch to new gmap") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/kvm-s390.c | 120 ++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 66 deletions(-) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 0a08a3c7b023..50eb72447fd5 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -5772,11 +5772,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 @@ -5791,6 +5808,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) @@ -5799,56 +5820,28 @@ 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; - - mc =3D kvm_s390_new_mmu_cache(); - if (!mc) { - rc =3D -ENOMEM; - goto out; + return 0; + if (change !=3D KVM_MR_DELETE) { + /* Enough capacity to add a new memslot */ + mc =3D kvm_s390_new_mmu_cache(); + if (!mc) + return -ENOMEM; } =20 scoped_guard(write_lock, &kvm->mmu_lock) { @@ -5858,28 +5851,23 @@ 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(kvm->arch.gmap->asce, old->base_gfn, old->npages= ); - 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; + /* + * Can only be triggered if dat_{create,delete}_slot() found an + * internal inconsistency or if the mmu cache ran out of memory; + * both should be impossible. + */ + KVM_BUG_ON(rc, kvm); + return rc; +} + +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 Mon Sep 28 23:53:40 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 2ED2A3CB8FB; Fri, 14 Aug 2026 14:40: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=1786718457; cv=none; b=enpKAjObQ1TBtA2UgZDCf0y3y7HDnHwlh3uEAjkaf0nS3H12hr/IhGVEXChzzHvQrIaSWviPxsUp08BaftgutjBXVgKj95mbODoJNLJeUONsTUUE4p5IUYaZ7HQdT+fuTsnk4gozyAWAyqJCs8BLhp+MQu6RZAm51IWXN3d2Sqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718457; c=relaxed/simple; bh=VEKAH2aG04ikBOa58wfLWv6i5MqNixHfm/v3B+TXtfc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JsG4hsZWim2gVOUq2zXQDeJw9IhmPSZnZh9LcQ9xncsQOR7RKN3ITx0zkqPGV3JE+w8BouBFjIsS3vJNn7oxddRpb+3f6+k95VJ2XS5n+mwgUY7+aJLhYSAqA7U7SO0pE4eQSMb1dk43/HWFsHR46CUeSYCNVNtOF11ZS/b39hk= 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=KZ62X/tr; 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="KZ62X/tr" 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 67EE5iI31248029; Fri, 14 Aug 2026 14:40: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=1hBt1xRXRrpPDYAMS UBIqNuNmxmAp4rOicpCbXJ+0F4=; b=KZ62X/trNuHT5kkX/RSBUTOMIC8d4DOPT werNAGgLDMlj510JnN4uAqHNTdbOFW6Uhvn6B+zYSlGimMg7/zSanEdif1tYFZMN swLk8VOiHkDmdg93FNmyH05jGkRqZVOfWn0wIADXeHSXgj+ew7tK9mHsTNn5i3X8 DTVVkyLUSAVhwfJ0R//NoKkzqSe+utIMqxcMiTmN6kY4kzA4jNX797+zkg/QryGn dDxQAWrbUdNqGETM/oPQimr/+/+AELa3qak/ldEPXkrWCaVHt6XHHXH4QPaZ/TJB cIz2EwyqcuTHUrVyJyWpgxiWwuI8PqUONzC1iMu5hF4zWfwx/Cwmg== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp3c34m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:49 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67EEQIbO003910; Fri, 14 Aug 2026 14:40:49 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesqftv7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:49 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEehp615860026 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:43 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2065020040; Fri, 14 Aug 2026 14:40:43 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E6E422004E; Fri, 14 Aug 2026 14:40:42 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 5/6] KVM: s390: Add missing srcu in kvm_arch_vcpu_ioctl() Date: Fri, 14 Aug 2026 16:40:40 +0200 Message-ID: <20260814144041.169025-6-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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=6a7f28f1 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=1i_NNJWgbIsdAUWwImEA:9 X-Proofpoint-GUID: 9VAmW-eZ23UNx-Ftx3N0-nvKuvA7x9jx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX/W3xgwZN2csl +COX6sPxz4wtxT4QyZOGJScZ9dsK3ksHxunU64q9JQY7vkRR6emdE4hySe1lDBXf9oM5cTfYT6u 7DBB6826nYepsnVUhybYlOV4yDA99SlrIv+oInwk/JL7+YA0R9yDpgpv6RedUycOlBG5qcvaKuA qexR9IIofPLyhn8Wk5psyLE5kUm5bHU2VRgz9wWT5O5YNutUpPUmsXnfe94QruhGxjxhXenei3Z Q2nf5nYaG0Bd7nRauOvlUG54Op3Q5nPj8+hgfLQ0xitmorEOTTh8F32v2xoIEDoztTV24ASQEJ8 0wuWpInger5dhWvbnLcGjN1wf5+cMmmWNuDXup9VxwJJIW2j6gRvYi+3p0/TcKLK9P68fptDbA5 VQ42PETfdUIDXlAufdib4iQjsoZdBWS+w2We1b2qjXB/QSaQ0DFca39fIFHwR9oY9KXyvd+kcmq LpYLaBn9AuVVmeejPUw== X-Proofpoint-ORIG-GUID: 9VAmW-eZ23UNx-Ftx3N0-nvKuvA7x9jx X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfXx5pBghOfN537 AS00LsvDPAJNatGyqx2Z7Mv4H+q/Y4FPdffzPXCSwDCH7R70i2NHjc8G86gDitWoMwQEDqU7i1n FwMNkfMGs9s/8bTGl7pngXO51U1TsBM= 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 Content-Type: text/plain; charset="utf-8" Like kvm_s390_inject_vcpu(), kvm_s390_set_irq_state() also needs to be called holding kvm->srcu or the slots lock. When fixing kvm_s390_inject_vcpu() in a previous patch, the path through kvm_s390_set_irq_state() was missed. Fix by taking kvm->srcu in kvm_arch_vcpu_ioctl(). Fixes: ba5c1e9b6cee ("KVM: s390: interrupt subsystem, cpu timer, waitpsw") Fixes: 062e44a9319f ("KVM: s390: Use srcu in kvm_arch_vcpu_unlocked_ioctl()= ") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/kvm-s390.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 50eb72447fd5..7fb5a566e2d8 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -5697,9 +5697,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp, break; } /* do not use irq_state.flags, it will break old QEMUs */ - r =3D kvm_s390_set_irq_state(vcpu, - (void __user *) irq_state.buf, - irq_state.len); + scoped_guard(srcu, &vcpu->kvm->srcu) { + r =3D kvm_s390_set_irq_state(vcpu, (void __user *)irq_state.buf, + irq_state.len); + } break; } case KVM_S390_GET_IRQ_STATE: { --=20 2.55.0 From nobody Mon Sep 28 23:53:40 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 DEEDF476699; Fri, 14 Aug 2026 14:40:53 +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=1786718457; cv=none; b=pvNBp9AuBmuvUgr2b9f46I415CX1X1qkLO9EcI5cUIPNe7Gip7vrXSRHhKBHVafx0v0l9mimLbcjj9orMX6c79PDs6Tq1aXuIosxn6nkPpKq9Nn5Rf+uDZYCTlb185IRXp2/QW3u+aRsgcjNnyOaihq+FGU+ciOreS8akJuD6xs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786718457; c=relaxed/simple; bh=99mCpKsKgMSMna3npHucj1EMAgFp+JjZUq4Ju6s9Q7U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lqxzF7Oa7OF0uJql+Xi/SebhQAbu4xGLsp9Ss5pZPOECNGYO/PzA5LRMqC6W+TKTHVKmJb9gDsuEFgNTdkgvNGEyvowRNwCjPEunwdJJ1ksRwB4MLhFbdxHsYOUrHt2EPQ8sf6XUFctTj8Ncq+bS0ozTWofVrYTpK13hW2qdhGg= 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=kPoL3+oz; 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="kPoL3+oz" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67EE5unR1343452; Fri, 14 Aug 2026 14:40: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=30RofdWLxvQ5WcM8V 3wNiAmTmagK9/Yrlbk+TyjGDzc=; b=kPoL3+oz1Vhma5m1GxbF//6eW6lSiaqrC YjvcfItoJN/16+zIVHWewF8ZlwsMXPqEJBm2pvkS6BdzvS/q0RqhJLRVGg2fyU8X Nl/wB398K5ArY9ImOCSiK7BXxHVVDmo1szKGrdn+IveYVqrbEBxoPstJmN1glUun Aw1zcCb7C5Ax2Yyr7bdhd1AYsORHfOHy4TvQsFqp59KYbZjaSR875LrlIq1Dxl4k nZ4dI0J14tWOWto6d13f2jRgszGkbV0CMIeqEjJPKCRu7gS0CpwMQjBGDJKX4B2+ bS067JCZMTQKV53c4SBU9ZNbJTiKS5bzBKTca+eWBQyeoofWsujPA== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvma5b56-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:50 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67EEQKkn016811; Fri, 14 Aug 2026 14:40:49 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxf5wfrty-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Aug 2026 14:40:49 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67EEehrl21758606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Aug 2026 14:40:43 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4880A2004B; Fri, 14 Aug 2026 14:40:43 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 24CD420043; Fri, 14 Aug 2026 14:40:43 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 14 Aug 2026 14:40: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 6/6] KVM: s390: Fix potential race in dat_cond_set_storage_key() Date: Fri, 14 Aug 2026 16:40:41 +0200 Message-ID: <20260814144041.169025-7-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814144041.169025-1-imbrenda@linux.ibm.com> References: <20260814144041.169025-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: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX0dwewHVWXo6O mUnfrSzOOnUdt2Ho+x4EzcTN8w3ajKrDafrVT0NC3dRJZJgRizayhS9u4Fpf9FXt/8tFGeJxE41 fDykx+Ec/wk11aRZ3ALR3GPHZSs7YkJNEmHpdC1C+zCor7qyI9ABwVVNxmZyREyHdvlwrF2LoP+ tVAZ0dEqn7ETbLH+pEzlLsLPsy4vrhvdp4kBVJT7erbK+gH/Zs3AZ4EVMdGNMJWAGxm4/xbkOzZ mUxINNXFfzhXMR0V9DMBZI220L5dX1JyJlKYkWv+ge7EGWC1hc2y7IxZsgejzcPWxPjo7TN8fLE pWIArowIJgMo/ar/8e5/UTA8hfs4qn94jg92wXAsp+6p09BbMZ7WTg5AFici4mH+0Sy7/OG0ZFi tCf6xidPi5SpqcgS7u4LBYBakOdZsqG6r0/OLodMcy/VxFsnkc4aDYBbPAzrCoHT/Zh9l8lL/nn f4i0b5wMcN/jNyCBshQ== X-Proofpoint-ORIG-GUID: j6L-Yk1GktosYrdKTAhUJ3dSxUZBwv2N X-Proofpoint-Spam-Info: AW1haW4tMjYwODE0MDExMSBTYWx0ZWRfX0h3KUbyeBdpO QeY5eT7SxYXpUHey9yEF1MooNyW0Sn8omkAfcmoKru2pobbGM8fr7DKhjCOCtBwQ8LI+oXZaGgA Z8X2CVzOQ6WiDGGesqsvpjkWUpVGbJ4= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7f28f2 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=wsP9SkaD_1DqgBQrQ4IA:9 X-Proofpoint-GUID: j6L-Yk1GktosYrdKTAhUJ3dSxUZBwv2N 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-14_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608140111 Content-Type: text/plain; charset="utf-8" When dat_cond_set_storage_key() finds a large page, it will conditionally set the storage key in absolute memory using large_crste_to_phys() to get the absolute address. There is a race window between dat_entry_walk() and large_crste_to_phys(): the large page could have been split concurrently, and large_crste_to_phys() might be called with a crste that does not designate a large page, leading to crashes. Fix by performing a READ_ONCE on the crste pointer, checking and using the result, instead of dereferencing the pointer again. In case a race is detacted, try dat_entry_walk() again. Fixes: 8e03e8316eb2 ("KVM: s390: KVM page table management functions: stora= ge keys") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/dat.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c index 7e5dd5a1eb1e..b467b95689b2 100644 --- a/arch/s390/kvm/dat.c +++ b/arch/s390/kvm/dat.c @@ -713,10 +713,12 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cach= e *mmc, union asce asce, gf { union pgste pgste, old; union crste *crstep; + union crste crste; union skey prev; union pte *ptep; int rc; =20 +again: rc =3D dat_entry_walk(mmc, gfn, asce, DAT_WALK_LEAF_ALLOC, TABLE_TYPE_PAG= E_TABLE, &crstep, &ptep); if (rc) @@ -725,7 +727,11 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cache= *mmc, union asce asce, gf if (!ptep) { if (!oldkey) oldkey =3D &prev; - return page_cond_set_storage_key(large_crste_to_phys(*crstep, gfn), skey= , oldkey, + crste =3D READ_ONCE(*crstep); + /* A large page has been split concurrently, try again */ + if (!crste_leaf(crste)) + goto again; + return page_cond_set_storage_key(large_crste_to_phys(crste, gfn), skey, = oldkey, nq, mr, mc); } =20 --=20 2.55.0