From nobody Sat Sep 26 22:55:47 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 B1C8444A418; Fri, 28 Aug 2026 11:54:55 +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=1787918099; cv=none; b=HTDQASdtfC4QZ/Qnn7hiMd1UdY5CMwnwfPtEDgXIZhAKNpYm6Jpe+swunPjP7IvNd72yGaOJA3xFItyCkPWYrx1wVNYBNwciw4/NGgxK1jAvD3W+b1Akobf2Cwpi/oZYNQiJUEehEW3d3Y9EK1nGFY/Uu4M2u0qC1Si7NLDZQ2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918099; c=relaxed/simple; bh=3FngtgTbuMXZ40qcU84HyhR7+G6Ridtsg1fcvbsn2DE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hfk3xduLPFacLKV6uAs1x8BaFki6nZCn+T4nEe7V0Bw5c9bmVfm7jF3M+5cCpRY4UKLvN07zI77RvkxXrOMDzf8iO51j3ZGPc4wGiqaSHM0fi8cPGTtqrmLo/DSlNuPllvhH8pjRVz0PBEbs5O4Lb+urLwEhs+QPgVj742n13cw= 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=sBLXTmWF; 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="sBLXTmWF" 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 67SAWEN61735097; Fri, 28 Aug 2026 11:54: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=+CQgPiou56CTQNfmJ w8ncF4wBm2BJO8qaARArfkmTK0=; b=sBLXTmWFknvUWjv5hJtng1ZUg+OSIG23c +8ptD9SrJ+N+z3vYxd9A7m3k5nb7SmDkgAzRxtVPH8Ub3ezlgf2NFO2q4sUA8bek IR69hKaqo0V5I4nx4U0Y2SDC1QYBiw2XnAIfu6/V5ZN//zgZ0os9KnrLiqq3vGQl TaNW+ffEvO6MVTjch1fX8EvYN6R3XDoBN5hMOvh3CUhpqZXwYRJoUF0i/E4GZ0EM mUzsc2lCHhqFAklNPE3wOGfuLnSy62VaEKti4xVEIuQM1ZY9ISaQwekEGbLFUfWN r8auD/BImstbqrURsWrncqfbG1VuaGrEHsRqmDZzZikfaa8bh4nUg== 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 4g73g5c009-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67SBfJsx009435; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4g7qkhnva5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBsdZ842074388 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CFF7D2004B; Fri, 28 Aug 2026 11:54:39 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AB0D92004D; Fri, 28 Aug 2026 11:54:39 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:39 +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 v3 1/8] KVM: s390: Fix dirty marking in adapter_indicators_set*() Date: Fri, 28 Aug 2026 13:54:32 +0200 Message-ID: <20260828115439.145885-2-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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-ORIG-GUID: Kf6Qk55tAkrdcvk9hgBUJqpMrcQ1RNjc X-Proofpoint-Spam-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX/t1uX2X3yNCN KuJHjnA6o+o1FDVSHJZ0FSznpfWnAidf+6j7ocUf4HpIaBewTBMW6kfhHBF+frU4qccKoGlfk9l NWJbSAEHCpefyw5AMJeE7+iFDH2bT5M= X-Proofpoint-GUID: Kf6Qk55tAkrdcvk9hgBUJqpMrcQ1RNjc X-Authority-Analysis: v=2.4 cv=JZyMa0KV c=1 sm=1 tr=0 ts=6a917707 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=EkfAVvxasnAm74aL7hAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX2ODoIlG5OsVa HPiKi8MKzhp0901NbPQ6XLvUR7IVY8OPzUT1KKoC2TAOplcwQmMdV2+wvQDWtmJkR3alHmqdp1g JVUxKYVwNNkWmwn6KAbaGlOBIs72R5Ne0I9GXCjDJ97Oeafj2/UuZWoq0xMda060DMIUFCheo8o fcU5jF1j5ZEu3yAA6ZV3Ge1Oj5RXaiLpAw0fjxBHvEfiI+JiWBIr2RVp6R32MnZT2MDhEGMqZeZ kaZoh42Ef5aownPfmOGqH1f8R9MiiWMbL/9oeb7mrgXHGpdQ04Xk1bVkAIZ9IY+iUMc4rDAOJtW S8OXeN29+gF2G6+Cpnl3QQkdzXXOQYpvqyj5A8spNinm5l2XDQOFXZM/QL9RnZAkVodMtufRsKz VfcrDgNRXBicO9jGpi1xKIBa5pcc5hDeMC7NwOfRBME9280Dshr4+WC+GLAfGCWF3mGNDyoLr2b Zl7v22lsWn2RedrYCtg== 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 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/s390/interrupt.c | 75 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/arch/s390/kvm/s390/interrupt.c b/arch/s390/kvm/s390/interrupt.c index 0381ae981703..49b4e233e791 100644 --- a/arch/s390/kvm/s390/interrupt.c +++ b/arch/s390/kvm/s390/interrupt.c @@ -2984,61 +2984,58 @@ 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; =20 ind_page =3D NULL; =20 - spin_lock_irqsave(&adapter->maps_lock, flags); - ind_info =3D get_map_info(adapter, adapter_int->ind_addr); + scoped_guard(spinlock_irqsave, &adapter->maps_lock) { + ind_info =3D get_map_info(adapter, adapter_int->ind_addr); + if (ind_info) { + map =3D page_address(ind_info->page); + bit =3D get_ind_bit(ind_info->addr, adapter_int->ind_offset, adapter->s= wap); + set_bit(bit, map); + } + } if (!ind_info) { - spin_unlock_irqrestore(&adapter->maps_lock, flags); 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); } + scoped_guard(srcu, &kvm->srcu) + 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); + scoped_guard(spinlock_irqsave, &adapter->maps_lock) { + summary_info =3D get_map_info(adapter, adapter_int->summary_addr); + if (summary_info) { + map =3D page_address(summary_info->page); + bit =3D get_ind_bit(summary_info->addr, adapter_int->summary_offset, + adapter->swap); + summary_set =3D test_and_set_bit(bit, map); + } + } if (!summary_info) { - spin_unlock_irqrestore(&adapter->maps_lock, flags); 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); - bit =3D get_ind_bit(summary_info->addr, adapter_int->summary_offset, - adapter->swap); - summary_set =3D test_and_set_bit(bit, map); - spin_unlock_irqrestore(&adapter->maps_lock, flags); } + scoped_guard(srcu, &kvm->srcu) + mark_page_dirty(kvm, gpa_to_gfn(adapter_int->summary_gaddr)); =20 return summary_set ? 0 : 1; } @@ -3048,26 +3045,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 +3077,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 Sat Sep 26 22:55:47 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 D9E6C4457A6; Fri, 28 Aug 2026 11:54: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=1787918108; cv=none; b=ohMp7lxwk1o/FXXkQbeF3I3W5iQu6ag4oT9EO/qLr/yPZqdCsx+JMmWqKl8hiHmr3jPGorVsj7gB1w8O1xLCmmLRNN9Iwgz1Z3oPXtJjRmrg17Zopi+VWne1ENKCmLYtC41RzePKHTYrArwURfvBYoYO+pXQ9/b3kYotY6SoBeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918108; c=relaxed/simple; bh=f/bWae/hQLJZYilQXor2eUlSONxnat/edMva3cLxK3k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vjq/yJEFBnihIhF838USmwNKUkFanYX9fSio2Wl/tKPqjibNGfVoghO/jkMgIhFp5jft47cwBlsPpKJjRsD5cXBATy5fMjlw/Gd7mMQ/P+lFWT3FZOTfg3ffgzS8sL3L9cn4CYYXBOavtUt4tAVtPHhnxSY48iWxf4+N7Mnw7cQ= 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=MS4QSmDf; 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="MS4QSmDf" 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 67SAVd5S1622909; Fri, 28 Aug 2026 11:54: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=bnirQgVhquIjJ4r7+ Eyl3TC86tJXdTToo8VCwupGmSY=; b=MS4QSmDfp24uJVXFfkQ/sRbDT2P3m5Duw Rww8DTSpiq6UJtXiMpfyFQccFMrp4GixrXmVf+Ci+uXclwVfzKNHZ5uNXKU16v9F 2SrYsOJ8LMJTIZTo7HptghzWz/ui5SlNIS1bLL8tfpcrGdQkqD4wEdmEzZvYK/+O 8tpHk8YustBrGPownLteyI8mzk/FzSUvCp3fXLpcb9yGS9gWturwah3HEthpqrUw jBWoTNbRvV+ed8gJqvJauvl2sVugwIif3zw3+2DajAgGev70ZgsAr1yxIr74Am5K cUjitO2pLOfkaD3xdBG07dz/VRGkDFiwMA1+wabdlNoL2H7sdgL1Q== 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 4g716jbx0j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +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 67SBfGjs011687; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g7p3qp5p2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBseKt12779998 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 068D420043; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D758520040; Fri, 28 Aug 2026 11:54:39 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:39 +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 v3 2/8] KVM: s390: Fix compile warning for kvm_s390_update_cmma_dirty() Date: Fri, 28 Aug 2026 13:54:33 +0200 Message-ID: <20260828115439.145885-3-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX1wKIE7ufBIs7 NnCJlIbVeTTLcDPxhvmzlYxhlnq+O/4yS8mye2Y8k5Gg73BAVOPq+eGOVjYTy0IhEbSMD67K+yO Tu9RRbnel6EIYI1nSVonJxsNUjGkPIk= X-Proofpoint-GUID: U_H33x7G5sUk7EbPchc8l-8ROj80eUiJ X-Proofpoint-ORIG-GUID: U_H33x7G5sUk7EbPchc8l-8ROj80eUiJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX1ujIfKbASY/t OlI0AdNtWF/S66YrPEbmKXOiddoFe30a0lLH8NQofmQQMsfJthZHf2Ns9tTvEogh4/bWyaLnaQi 5NPWngivY4OklddnLeON/BQzGwawmYd5taimIjaTGnjYk/UwV4xyrUZrkSquoBx3irfsuvAczZS G62ndotJkKNWGOfAcbkxw3Z6B1PL4qg63OUBsd2ppW+665w4L+FzBAF4urv5DNda+taxHltgP1B +urTHMLG1n9dNRmHYaWxVhnbrVtCayIaQvSlBvnVOkfcpAgj9lsrvkR7w5Aljmff4UElnDawRVt 9tqezKDCF0mAn4AGwkUfhad//cfzht7aL+spoSovGjSjVuwSY4KNDRjdSiPYivNfDb7QW7a81PH ATFduwAuVtoBzDImFKhXo8fb4KjTU33h6nBezxYq+qprmxTjBDObW/PJMShESoYc8LKoLF9Ces6 mk5mniqFXvaZkHsdbNw== X-Authority-Analysis: v=2.4 cv=H7brBeYi c=1 sm=1 tr=0 ts=6a917707 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=UaRUjzXUzZSuBrJintwA:9 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 Content-Type: text/plain; charset="utf-8" The parameter "old" should be marked as const, to prevent compile-time warnings. Fixes: d487a24041c2 ("KVM: s390: Prepare gmap for a second KVM implementati= on") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/s390/s390.c | 2 +- arch/s390/kvm/s390/s390.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/s390/kvm/s390/s390.c b/arch/s390/kvm/s390/s390.c index b0839e887221..8f7e09d7d049 100644 --- a/arch/s390/kvm/s390/s390.c +++ b/arch/s390/kvm/s390/s390.c @@ -5766,7 +5766,7 @@ static long cmma_d_count_pte(union pte *ptep, gfn_t g= fn, gfn_t next, struct dat_ return 0; } =20 -void kvm_s390_update_cmma_dirty(struct kvm *kvm, struct kvm_memory_slot *o= ld) +void kvm_s390_update_cmma_dirty(struct kvm *kvm, const struct kvm_memory_s= lot *old) { const struct dat_walk_ops ops =3D { .pte_entry =3D cmma_d_count_pte, }; =20 diff --git a/arch/s390/kvm/s390/s390.h b/arch/s390/kvm/s390/s390.h index d284a263ba70..aa0d1d062f8d 100644 --- a/arch/s390/kvm/s390/s390.h +++ b/arch/s390/kvm/s390/s390.h @@ -472,7 +472,7 @@ int __kvm_s390_mprotect_many(struct gmap *gmap, gpa_t g= pa, u8 npages, unsigned i unsigned long bits); =20 bool kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu); -void kvm_s390_update_cmma_dirty(struct kvm *kvm, struct kvm_memory_slot *o= ld); +void kvm_s390_update_cmma_dirty(struct kvm *kvm, const struct kvm_memory_s= lot *old); int kvm_s390_vm_stop_migration(struct kvm *kvm); =20 =20 --=20 2.55.0 From nobody Sat Sep 26 22:55:47 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 7C14B444713; Fri, 28 Aug 2026 11:54:51 +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=1787918105; cv=none; b=YlYuZxJsfrep9iyy2K/ZWGiyr5o6FpUFzTRos/vRIbMNlOY+FRAROwOUntp0dVCRgXnABRQxzMx4vCn7gzFRVvMNmvxXu9lLjrHXyW4rhG6zOsXol9psHWzVD4dCdxCocxolwLU1aQLsOiDR/7dN+Z6g472FJwuhv5p/IDXPEDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918105; c=relaxed/simple; bh=4fTjndJ76uUoI7yVRhh0k5oQoMlLrUxNqcADBgeqrco=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rTo+WHWsRTmQbtAy9wcdRCCQAF13/7M8vAAzAYJbwuuypPW3CqtBqE+hleIWgnWz1LFrflbXxx3ZZM2M4N1O2DF1jqtzVusRp4v7iW+TB1UdlSR4kawo5LFVj0yI95Guvfr1BzH4tJsyOKdP4KTTVyJCSAcwc44UnICQbeH6tEU= 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=PawubOHO; 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="PawubOHO" 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 67SAVjgn1623140; Fri, 28 Aug 2026 11:54: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=y/flbizZG3jev8wUX CCHvXb9riq71ahNc3V3BymdysU=; b=PawubOHOODkUAXWpHS3wiGVYEqFrDFu3V FgxS4QAzGAGaqryGXC4jPSGBrR9y8Sm+6ZVtIbYy8kc6AR55Z8gAK7yfmeWP12ao IUQvIBTZeXUTHOBGcEBsyiV3W0ToetUbPfcrS/MjrodaIr7BGXQSzWLGgwftwXkI E6LUi1oH/pUebcPlUFN9DnKb8aTJuB1+6hn1VWLhn/EMigyY71Gx/PcmdEntiZXK 6Bfx63AnUI8kqaJMBlM2LLFlpRWAcVp7b2c0TzTPOKoT27IGFPG0OhXlyEQxwLIR 9fja85D1fVpMDPndZ+UK54pYDcNso/mAJD2iBvnXULK5fZp/xC3/A== 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 4g716jbx0k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67SBfbGs001311; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4g7pfwp0qf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBseqN28312252 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2E80520040; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0AFBA2004B; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:39 +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 v3 3/8] KVM: s390: Fix _gaccess_shadow_fault() Date: Fri, 28 Aug 2026 13:54:34 +0200 Message-ID: <20260828115439.145885-4-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX+fvmCLIsIRnN 2LRTlpG/RAHvUsPNxQV2fUwLJVI+YG+p3NH1pXgmp1aDV/kmF8j59IeKcVPneLy0i+maLMyaLEM DANpT2Bs4r7XNQAtIXjBcgRRJkg6BZs= X-Proofpoint-GUID: jIe1mqgYP02znFku8LQrgHiLVkkNHKR5 X-Proofpoint-ORIG-GUID: jIe1mqgYP02znFku8LQrgHiLVkkNHKR5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX3bIE8/puaqM3 UakEeag2LCWOZUoCJ+G8fBtBpkCnhiWBa26r3c8t9GszBm8iv/AjRRWzN/ThEDrHJ1SDYz/ar0G VNr69TeiFo7+rqNTKIbH0mHAUJcc8YVTtBDDN5d1+DDIBgp2Gf7E2lVrtF0qf7i7bNmkpsxkKr1 oL5N8BoVcOBhv0n6OzbJtt6Cd9BcdhM91QapPcHbSB7F77oY9+UeJYRi858WX3nhFu62Fr/4W3G V41kG4r7ZFOvPrK45SudxFlZXUYP8nfUMjYT/nE5ANAx4B3wQWQv6z8VjLXwW3Sl2VMc5ILDarH vy4xQCKpqyos94YsHWtapt+mZVnUpNXtNTVexafe/tce6DLkoIkJGIQ5WNMk7jDNFm1w4qEUc92 1Lvt7tZFicYUiD+rcv+7C8B+ED21jcZo/vAJOU+mjinKth4kPOPG7LCNLIe2IzbceoFshzYV/Yg 7slRq5AO5GUz1CFQaUA== X-Authority-Analysis: v=2.4 cv=H7brBeYi c=1 sm=1 tr=0 ts=6a917707 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=E-UwkBRaFZ51XR-txJMA:9 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 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/s390/gaccess.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/s390/kvm/s390/gaccess.c b/arch/s390/kvm/s390/gaccess.c index e5c064f263df..405345ccc4f1 100644 --- a/arch/s390/kvm/s390/gaccess.c +++ b/arch/s390/kvm/s390/gaccess.c @@ -1589,12 +1589,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, 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 Sat Sep 26 22:55:47 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 487F4447806; Fri, 28 Aug 2026 11:54: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=1787918099; cv=none; b=uFaLayMh/ZFPeQJyJ/jZgntzfXUuoH67k5I79XtANk4HxHEEj8ZhiuKZ1m7Rui6JGIlAzCJarSGYNEIcKeCHoZZTr2AFSif6qwZZ31Lc8l8OneHgS9Ub3u5S2j4V1QGJ/kj59MUnOyjcdJOy746KCfnilSX35/VLyXhqbNifKw0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918099; c=relaxed/simple; bh=UXzMxOA/F5Wpk/wIIrcQD1e3a0cCfMHiFaPCobTVW44=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MDiLyVRLhh17ArBrdPD2P77kklLC8sMoPRSEybTHOY6mPzqWQ3XOVrX/owheHeMhzo2m5b5AytVxp4lZsgnIsGrffRwFK5l9hZ37cXJq7JXMcHkwlE7gOY0FpbyQuW+297w6Hh+tS9q6flkpxuZnAY8WnDDooZTRn55FgQHc7W8= 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=n0w4qIWj; 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="n0w4qIWj" 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 67SAVbjY1733548; Fri, 28 Aug 2026 11:54:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=a35CCf2wzD5NLbaFo t0AtVwpPca5U4ydL+s555X/69U=; b=n0w4qIWjS4/bh0T28C3hlEeT3rCporMkC f2YBC/FUq6WCkgoVq0AITI1maux0P4Jsca3IDFhM9NVahqVcbFe2RQwCsgMldWsr ePs6g/Hi4mYdBPDdK92jj9j/UBENw9+fctEaADfynO5epMKQt5LfY/O93MCyskZH XxOsHkkksbkHGOO7Vfs1r2+QmDhWEEQw2It2IoFnDwx21mfOpuEeKBYaVsO9XfN+ Ht9vcuo2yy6iJIjqc6leneQm7XhwK6wiX2IGjcfsBJA1oLTOKo9+/PWbKLWJGylL ka4jVXxcCb/4HVFzUdV1IQCqWv+F0dTeMffkj1j5FPkRAZk0cTBZA== 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 4g73g5c00a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67SBfLuR009452; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4g7qkhnva6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBsemW7799068 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 54A5820043; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 32C642004D; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:40 +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 v3 4/8] KVM: s390: Refactor dat_set_slot() Date: Fri, 28 Aug 2026 13:54:35 +0200 Message-ID: <20260828115439.145885-5-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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-ORIG-GUID: p4Ku6UgQkuhpyECh-k_UsVezohhphL01 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX8Alq+vo+fSOj jCtJDiZmsLoFzL90zc+m3xWLSF2KHcrqgKDoYolgKnWytV6KqhvAXiokBT/4v/7Twiv7FvSVfws ITdKDAUycj5d6zUq6kUccsOvyD0TNSg= X-Proofpoint-GUID: p4Ku6UgQkuhpyECh-k_UsVezohhphL01 X-Authority-Analysis: v=2.4 cv=JZyMa0KV c=1 sm=1 tr=0 ts=6a917708 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=Dh8sLtxf0uV7TDLfvswA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfXyxWQaeAmn0Fl rFXG2gTT5NuuNB929pIilU/3es7UC5EwnyHmwEmFVMOtfkYnMmzce/I5qBLzccQT4Z7eSse8pah 49gUxNsf0uTBbz75NRjBOGAH35Gu+Is6wu4x5khyOS37jpmY5mWubmg5Es2IbgpsoDEsx3fnyf1 8g6KdyBJzSxPUY812/v5r+Ij2PAlbzza2EfR80II2SBHJhkJv0cRPW6AuPrLa2FeAjOefD3Vo1T 9fJsEoMOCm2bxanD0Lqoc4GMYynaMG6qKBQO43FfAJVWkqzxwhWmqtRFYYfywo2c1VuT9CXkRKY aVkWizTTdQM0FisHOQ/lj5knfxAeorOHB5emgxLtww/qlJs2pObX4A2w7pUwKOU1lK4ajeXLMb9 2QDwsuZoQu1rcdMKUFeF4qpQYR/c+cX7wmacyzM/Jv6hec2vOV7jbWxVOtYtXzDDFkzxDJ1FkWl GP1rmt06R5RPg2owfYQ== 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 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/gmap/dat.c | 29 +++++++++-------------------- arch/s390/kvm/gmap/dat.h | 10 ++++------ arch/s390/kvm/gmap/kvm_mmu.c | 4 ++-- 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/arch/s390/kvm/gmap/dat.c b/arch/s390/kvm/gmap/dat.c index 24547e39fab2..dcedd5479d82 100644 --- a/arch/s390/kvm/gmap/dat.c +++ b/arch/s390/kvm/gmap/dat.c @@ -846,19 +846,12 @@ long dat_reset_skeys(union asce asce, gfn_t start) } #endif /* KVM_S390_MANAGES_S390_GUEST */ =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) @@ -875,10 +868,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) @@ -902,7 +894,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 { @@ -910,16 +905,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/gmap/dat.h b/arch/s390/kvm/gmap/dat.h index e452c141b841..90389d47ba4e 100644 --- a/arch/s390/kvm/gmap/dat.h +++ b/arch/s390/kvm/gmap/dat.h @@ -547,8 +547,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); =20 #if KVM_S390_MANAGES_S390_GUEST int dat_set_prefix_notif_bit(union asce asce, gfn_t gfn); @@ -973,16 +972,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/gmap/kvm_mmu.c b/arch/s390/kvm/gmap/kvm_mmu.c index b08b8229bb6f..4c8054e18490 100644 --- a/arch/s390/kvm/gmap/kvm_mmu.c +++ b/arch/s390/kvm/gmap/kvm_mmu.c @@ -111,10 +111,10 @@ void s390_kvm_mmu_commit_memory_region(struct kvm *kv= m, kvm_s390_update_cmma_dirty(kvm, old); switch (change) { case KVM_MR_DELETE: - rc =3D dat_delete_slot(mc, kvm->arch.gmap->asce, old->base_gfn, old->np= ages); + 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); + rc =3D dat_delete_slot(kvm->arch.gmap->asce, old->base_gfn, old->npages= ); if (rc) break; fallthrough; --=20 2.55.0 From nobody Sat Sep 26 22:55:47 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 8FC9D445ADD; Fri, 28 Aug 2026 11:54: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=1787918106; cv=none; b=VOiKBKfYYl7YfFoGEzF9qJW9ELVOVgUd7qGJWGc7XFLzfB3mjAIjlo/6vHRzAHb+N7D8TJ55WFlsmxx5wxF+VotgkeKu6EcL9dCDqeOE9A/gmTXBm40joXMxiNKcOBzkLlXzlSBjKFCGARDRuAKReazCE98KHh/lh9c9Lkc8OUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918106; c=relaxed/simple; bh=EzLjQ3QYSPWodEBYgfMxFm7MZ+LhS3n4I0WeCxb34YE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SaU4xDC+mGNmL2DK3mIRLNCUQ22kZxX9SWqjWuLEd9STslowzh4jCLISTq1lUx+/pNC0cWOwhXAd3OTyNOAARWKxQ6HPQ1A5dDmkq9OYMiI1CY1Eln/j2yWenx2wXnwL/5MUVEzAQpuriWTcgsBt7a4wGY0GRFGzQuhZLJgFP5M= 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=liw2NxWq; 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="liw2NxWq" 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 67SAWYBJ604147; Fri, 28 Aug 2026 11:54: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=MSGaBAdIZ/lnnJ342 a9nyiDB5OQtvOqXd+WYx37VX88=; b=liw2NxWq0eKK9YWAb2XDSzwYbFxS5iWWy 8F4zQKohQp5ddCadpmq1EzlPZZnRSEMe3c3vI7q6eQDp8ZZhsX+oDx83AzkGa0Mm DgpgUA0WMlPySg5MDhzv/YdOQjfKeKNlAbM6wNrgdW/40sN9A9FFaH6Lt16glJ/W ckxzOdm7mDaNSNMZsbvsWMkx4VJD+pWcYWAXoS5H3pWzSxMuilOuv4X7mCjRbk12 KuKhsAXmod/u2whc8ZJEWU18MYylud4h7Wy+w8MEDWBSqCB363qmcX79iVNyymrw 2O7JerO11F1ZUqPuiMVCIqNq9WPUOOaM25c8uy8Ao0FQ2zT9znNRw== 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 4g726f3rjf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +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 67SBfGHR031558; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g7ragwsuq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBseld7799070 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7CB572004B; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5996620040; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:40 +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 v3 5/8] KVM: s390: Move all code into s390_kvm_mmu_prepare_memory_region() Date: Fri, 28 Aug 2026 13:54:36 +0200 Message-ID: <20260828115439.145885-6-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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=TfimcxQh c=1 sm=1 tr=0 ts=6a917707 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=XQGuvBUbV6v71_fLNr4A:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX05wObuSFoToM S0wBXZutBZrTzCMqTBpIycEyt04QGdppnT1pK4sKcjq9rCbCDhRYz7QLirhTXkq9S+/icE7V2e7 6J2KYwvmUEYzTvlmilDHXOEjMxTokGY= X-Proofpoint-GUID: f91U8Li3JdN0YHzWtKX5wfF1Gexa2gFz X-Proofpoint-ORIG-GUID: f91U8Li3JdN0YHzWtKX5wfF1Gexa2gFz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX2czpOgQKckBg NoMso2/EAhcTXaBe6MIcB9uYPwnttKbAk3//nMh+lzNs51ZQ1yf6XvQVSqNLdhlaXJIMaJxg4rK Whw2BFdwe5LPKsssIUH13B2C2gVPeap6eoz2jATgO/NrwiSPBxXrSaiVQ4rfs71xz10mkDo0WaS wKW5Cn/dtWD2JstxgICiSU3sVtooA0956GG61A61HGMdXgcSkQTrJiH5y4r3BOL9vY9XRvH1xbp 8RmrwCfMVUWxpI6RQSz9Mq3mLFTkcmInBTkx53I07ZwryrSCC14vnWay0SFpoe2YwHdv42YZtYJ VRow2SmgembeWa6PPM27njmI9wcCZq28Rzw0IpWfIXJ8chUosFqc79jatI2c6uTVH1x3ZJbKm+o +BzpNq3QTcr09ZDFAEGGLEBARaGR/wprz4SLn83mMJTIEN+qVuLHsfy1GB6WQZCwm1mmGywXhOg 4eG9iUyHYojc0CKU02A== 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 phishscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 Content-Type: text/plain; charset="utf-8" Move all code from s390_kvm_mmu_commit_memory_region() into s390_kvm_mmu_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 inconsistent with the memslots. Fixes: e38c884df921 ("KVM: s390: Switch to new gmap") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/gmap/kvm_mmu.c | 89 +++++++++++++++--------------------- arch/s390/kvm/gmap/kvm_mmu.h | 4 -- arch/s390/kvm/s390/s390.c | 1 - 3 files changed, 36 insertions(+), 58 deletions(-) diff --git a/arch/s390/kvm/gmap/kvm_mmu.c b/arch/s390/kvm/gmap/kvm_mmu.c index 4c8054e18490..c2ffb5e59ec6 100644 --- a/arch/s390/kvm/gmap/kvm_mmu.c +++ b/arch/s390/kvm/gmap/kvm_mmu.c @@ -47,6 +47,9 @@ int s390_kvm_mmu_prepare_memory_region(struct kvm *kvm, struct kvm_memory_slot *new, enum kvm_mr_change change) { + struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) =3D NULL; + int rc =3D 0; + if (kvm_is_ucontrol(kvm) && new && new->id < KVM_USER_MEM_SLOTS) return -EINVAL; =20 @@ -61,6 +64,10 @@ int s390_kvm_mmu_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) @@ -69,65 +76,41 @@ int s390_kvm_mmu_prepare_memory_region(struct kvm *kvm, return -EINVAL; } =20 - if (!kvm_s390_is_migration_mode(kvm)) - return 0; - - /* - * Turn off migration mode when: - * - userspace creates a new memslot with dirty logging off, - * - userspace modifies an existing memslot (MOVE or FLAGS_ONLY) and - * dirty logging is turned off. - * Migration mode expects dirty page logging being enabled to store - * its dirty bitmap. - */ - if (change !=3D KVM_MR_DELETE && - !(new->flags & KVM_MEM_LOG_DIRTY_PAGES)) - WARN(kvm_s390_vm_stop_migration(kvm), - "Failed to stop migration mode"); - - return 0; -} - -void s390_kvm_mmu_commit_memory_region(struct kvm *kvm, - struct kvm_memory_slot *old, - const struct kvm_memory_slot *new, - enum kvm_mr_change change) -{ - struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) =3D NULL; - int rc =3D 0; - - guard(mutex)(&kvm->slots_arch_lock); + if (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"); + } =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; } - scoped_guard(write_lock, &kvm->mmu_lock) { kvm_s390_update_cmma_dirty(kvm, old); - switch (change) { - case KVM_MR_DELETE: - rc =3D dat_delete_slot(kvm->arch.gmap->asce, old->base_gfn, old->npages= ); - break; - case KVM_MR_MOVE: + 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= ); - 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"); + /* + * 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; } diff --git a/arch/s390/kvm/gmap/kvm_mmu.h b/arch/s390/kvm/gmap/kvm_mmu.h index cdbd390bd33c..43cde61bae03 100644 --- a/arch/s390/kvm/gmap/kvm_mmu.h +++ b/arch/s390/kvm/gmap/kvm_mmu.h @@ -10,9 +10,5 @@ int s390_kvm_mmu_prepare_memory_region(struct kvm *kvm, const struct kvm_memory_slot *old, struct kvm_memory_slot *new, enum kvm_mr_change change); -void s390_kvm_mmu_commit_memory_region(struct kvm *kvm, - struct kvm_memory_slot *old, - const struct kvm_memory_slot *new, - enum kvm_mr_change change); =20 #endif /* ARCH_KVM_GMAP_KVM_MMU_H */ diff --git a/arch/s390/kvm/s390/s390.c b/arch/s390/kvm/s390/s390.c index 8f7e09d7d049..eca4a4359ab2 100644 --- a/arch/s390/kvm/s390/s390.c +++ b/arch/s390/kvm/s390/s390.c @@ -5781,7 +5781,6 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, s= truct kvm_memory_slot *old, const struct kvm_memory_slot *new, enum kvm_mr_change change) { - s390_kvm_mmu_commit_memory_region(kvm, old, new, change); } =20 /** --=20 2.55.0 From nobody Sat Sep 26 22:55:47 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 0C14A44A3F8; Fri, 28 Aug 2026 11:54:55 +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=1787918110; cv=none; b=l7jLHiZBI9RakR2NWYZRVn2MfgMaLz9cKm16s3wEjCOxLRpR17iJcvSLL3DtP/QUdGhLpn+iY1QlypoeEGbRq+Tcd1uDE2+5ebLFf5Qj5ItXG+zDhux8Nhgz7ruZDFsI8WyU8R/afscYcHZ+iQIsEkCvmowqaNJpXBGEYL264SE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918110; c=relaxed/simple; bh=+8DraBJue18Yt26wTsZ6AsGQ7f/82RlVFIJXlNAaUCY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i9GvwpkxeMDVHTvF4tHqoWZ9iPc5ZS+IQCTCcos+EbpdNIKCZBOrVqyPf2HFT7FzDngNxjWFsSZLMRWZ0z2e77PEPtz69By/R13ZqUU5R9mV05kV6U9A+b1iYcVlCCbx7o5rnicSx6G7Fs0ZGc0PFQrVtHrDUaRlxRMwrlZZk3M= 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=nKKMKn61; 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="nKKMKn61" 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 67SAW0CF1704293; Fri, 28 Aug 2026 11:54: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=70WwBe+OBFeA2xnbd 77c7mfs6RoDmemPDc1xzByZwrE=; b=nKKMKn61gwSpAr8HeP45xM97zncLkBhZa TOssQ6iLFF5Jcw+BbOeKvGrd2NtaCr/AuJMllKtVPJ+O8vif5ctuXDe87Ooqdu0A 4C5Tyrwdzqt2jyMm1LuYyA+/zpgimnmmm5gnIpBXbDAzTMQ+mkW0YX+QW8iJ3bGk TMILESsov4g0FCBZPlqDHMXIIMqaW1oLaP6C3BbCoK90rsvmkJL3KTLBHSLIqxgZ 228a94hG0yxfQJhO7RwC0wmbDG+H3uY0ROpfNjPiN5m4V19RmNLu2jOxjP51y4XS 4V9Uid97jfkuOki+RYRvFHEWUXAsplRhy1Pc4QBk6ok3kC1nlO85g== 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 4g7394kxhu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +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 67SBfL1N011735; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g7p3qp5p4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBseRv7799072 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:40 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AE36D20040; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 81D042004D; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:40 +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 v3 6/8] KVM: s390: Add missing srcu in kvm_s390_set_irq_state() Date: Fri, 28 Aug 2026 13:54:37 +0200 Message-ID: <20260828115439.145885-7-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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: YgbK8BUnExdehSDP9qUgy6aNAP5erExy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX3DlQoP12FO1W xRJiRSH9mG4YZEe+31feVUrqfl/fPs5xzsNiNW6e4i/97gPLnkJiSN3C2SMSFwrCws3iyXM2PHa HEsYjHtg3x7vtMSgCfBMKxbFu/Du+ygNk76oaOa7+9lxtyazTebmVnxq+qXJ1SNMITQibfs0H2s C1N38z/DQbkA+q+SDV7yF0AwKdyepo3+D8qUadR6iBGxWaPxw2yVfGompmvh/jZxoRFq8dRIfYS lUx+pQWMK3YjqzboaVaCMe+a5fTHpmghR/VQidlj+JciPFgFFMOH2cRkcKfDxhZhNnzM54ibDVh Myt6VN71REEP7Rltq/BWefHpaWMYF92ULUsrW5c1muN1ZFhIzCh/6Te8AiQ6Zr2EjSUlWvJ7h4U Nr+wuvoLApH+YJA0Xlq46pFxDw+Hh3nIH8n26Ql6nyaO1M6kQb740j8w4V0MfFTNjBazU74mG8K 9fK41oOckAyb/P8WSZA== X-Authority-Analysis: v=2.4 cv=Y/nIdBeN c=1 sm=1 tr=0 ts=6a917707 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=r57P7jcG1oT3p7VFzagA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX8blD5ZBkDjEa Xm4XgjTY7pWFjrfRlDASoNAW6nGXLwKP4XXT65UiDxzUlTXWsKwBAGvd4D9yJvU1aThNhdBNFBY ofju3wYpHQgOcjcENeBACDZ6qMnJh10= X-Proofpoint-ORIG-GUID: YgbK8BUnExdehSDP9qUgy6aNAP5erExy 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 priorityscore=1501 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 Content-Type: text/plain; charset="utf-8" Like kvm_s390_inject_vcpu(), kvm_s390_set_irq_state() also needs the kvm->srcu or the slots lock when performing the Store status operation. Fix by taking kvm->srcu in kvm_s390_set_irq_state(). 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/s390/interrupt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/s390/kvm/s390/interrupt.c b/arch/s390/kvm/s390/interrupt.c index 49b4e233e791..f892f4307883 100644 --- a/arch/s390/kvm/s390/interrupt.c +++ b/arch/s390/kvm/s390/interrupt.c @@ -3229,9 +3229,9 @@ int kvm_s390_set_irq_state(struct kvm_vcpu *vcpu, voi= d __user *irqstate, int len break; } } - if (storestatus) { - n =3D kvm_s390_store_status_unloaded(vcpu, KVM_S390_STORE_STATUS_NOADDR); + scoped_guard(srcu, &vcpu->kvm->srcu) + n =3D kvm_s390_store_status_unloaded(vcpu, KVM_S390_STORE_STATUS_NOADDR= ); return r ? r : n; } =20 --=20 2.55.0 From nobody Sat Sep 26 22:55:47 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 CBB8444685D; Fri, 28 Aug 2026 11:54: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=1787918105; cv=none; b=kck44cUURFnzn9rr7rEr2yEs745EUvXMjwpYf7a6lG8/SqvInP/Z3JliZc0KTIyjMFxU18TRkeGscYqqFE48cAY3quARIM1v5O1gmqVAwAe+nEUE6Mksm4oYyqZg5JjG4b4R6/iSRrEU4Ta3NRGXqOsAgn6D3kLRas7XdF/e900= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918105; c=relaxed/simple; bh=CIdmYXkP+AhLkgjkPc45Wi+4Cof/SA8aCBscCAyLlj4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=frX8xKXoOP+LDGHH4i9zk01nHLo45pkoysSlPZrwfjoL9/mDdLYUyzK9zy8TZJKyieBdLlJrTDuOT62gq7Ou/AHwzoFldAyBGIAB83DZbhRnIEMttViQxSDJYAO7HO0VglWqkUK1IMFTNgGTi18wA7uqqGLIFJdAJg3duhCEOGo= 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=nN/zVzGq; 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="nN/zVzGq" 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 67SAVjwF1623150; Fri, 28 Aug 2026 11:54:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=XbyQZJrE9LFi0NS9S 3sqo8CHsRHL8LgaOBYGliHk8XY=; b=nN/zVzGqNap0d/02Gf39o1rh9VybbU3za 9/P7pbIrAPW94OHRkfZ5eCUBEFnEO8/0b8YwHQ1FnvOHDpKv+chaYYOECHh6Xl72 2Sim/d0cB1yM6I4JUGEDP5lIr52FU9oKOCSVFnymN0Paky26CFkH8n7uxc+eoGfQ tJyzRX/5wXQ9zoz6FI9TET8E30nj6Fg3UcnC7aVK1LbCMHXEUYLzok2csAeoiiIh VlbEWzkEhqs8F+qP3mGxuU2OKBvwvc8xDi3gVj4lo9Q8Q8Y1cqO2uMimmMuZrzMb TdAyhoYx0Fi+9BwJHztkdTdJ23daWZJIR3RcV3qDXRZjs1qE3aT2g== 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 4g716jbx0n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54: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 67SBfODD019841; Fri, 28 Aug 2026 11:54:46 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g7rsynnbv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:46 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBsenH9109996 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:41 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D68442004B; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B37C320043; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:40 +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 v3 7/8] KVM: s390: Fix potential races in dat skey functions Date: Fri, 28 Aug 2026 13:54:38 +0200 Message-ID: <20260828115439.145885-8-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX2aOGXbhV5k+o Kvhpee3eJt7QtFD2SxYyFGccjFMSnAU4+oGmTCjQgoBO4ziHBEm1GvaSj9nLrC15tkxldJj8JXV bvQTTk+YRIN/7JrsDEBSI8cidpE2r84= X-Proofpoint-GUID: eNBEnjkVqaizNNB-qD9Fa3BydUnugTHr X-Proofpoint-ORIG-GUID: eNBEnjkVqaizNNB-qD9Fa3BydUnugTHr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX3khf4/Mu8O5N yY2vhZs/uYToxYAOzVcdasb/4S/LJMiwn9RD5FyQQilkc3Ez9dbXGxhSK0+zxwg8xpbj6xaVpSL wwEqHVp/FwlrkGD1Cry6E4L52G++u1JnmbZjEm+IMPQ0VjK2IfRz0xK9qgAT5e7yZ7pgUqBIVQ+ hShQskbS/iRgtWRclHlulGV/vOuYWLW85qFwl4yl7YlXBHmIR4c7mYwQCUpnuqHf9Raj/uJhoIr Os8rF9Lq6YPGVYbwtBT9COhL/KotNGs4O993N8ngJkH1U4lXVsUzMtZRy4XGHrciB/JEsXEMq3t din6k+Z+C18lYcNpPi8HkTygEJZEsfY4lvDefVkhLLLwdULZX/j5dFoxq5TnM2stPL4ONDKrXDm Zf6uq0UQBqXSknUnNwiUrih9X10kMGx/6d+hbixzFpd1K6KaeBz6a1SA8IPeAHymP6vVECr5jrG skyTtD2UIRA230j33OQ== X-Authority-Analysis: v=2.4 cv=H7brBeYi c=1 sm=1 tr=0 ts=6a917707 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=wCyL4Wiu_ChfG3is39wA:9 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 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. Similar issues were also present in dat_set_storage_key(). dat_get_storage_key() and dat_reset_reference_bit() did instead check for a potential concurrent splitting of the large page, but then handled it incorrectly. 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/gmap/dat.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/arch/s390/kvm/gmap/dat.c b/arch/s390/kvm/gmap/dat.c index dcedd5479d82..ff80d02c9f56 100644 --- a/arch/s390/kvm/gmap/dat.c +++ b/arch/s390/kvm/gmap/dat.c @@ -621,17 +621,20 @@ int dat_get_storage_key(union asce asce, gfn_t gfn, u= nion skey *skey) union pte *ptep; int rc; =20 +again: skey->skey =3D 0; rc =3D dat_entry_walk(NULL, gfn, asce, DAT_WALK_ANY, TABLE_TYPE_PAGE_TABL= E, &crstep, &ptep); if (rc) return rc; =20 if (!ptep) { - union crste crste; + union crste crste =3D READ_ONCE(*crstep); =20 - crste =3D READ_ONCE(*crstep); - if (!crste.h.fc || !crste.s.fc1.pr) + if (!crste_leaf(crste) && !crste.h.i) + goto again; + if (!crste.s.fc1.pr) return 0; + skey->skey =3D page_get_storage_key(large_crste_to_phys(crste, gfn)); return 0; } @@ -662,13 +665,20 @@ int dat_set_storage_key(struct kvm_s390_mmu_cache *mc= , union asce asce, gfn_t gf union pte *ptep; int rc; =20 +again: rc =3D dat_entry_walk(mc, gfn, asce, DAT_WALK_LEAF_ALLOC, TABLE_TYPE_PAGE= _TABLE, &crstep, &ptep); if (rc) return rc; =20 if (!ptep) { - page_set_storage_key(large_crste_to_phys(*crstep, gfn), skey.skey, !nq); + union crste crste =3D READ_ONCE(*crstep); + + /* A large page has been split concurrently, try again */ + if (!crste_leaf(crste)) + goto again; + + page_set_storage_key(large_crste_to_phys(crste, gfn), skey.skey, !nq); return 0; } =20 @@ -718,15 +728,22 @@ int dat_cond_set_storage_key(struct kvm_s390_mmu_cach= e *mmc, union asce asce, gf 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) return rc; =20 if (!ptep) { + union crste crste =3D READ_ONCE(*crstep); + + /* A large page has been split concurrently, try again */ + if (!crste_leaf(crste)) + goto again; if (!oldkey) oldkey =3D &prev; - return page_cond_set_storage_key(large_crste_to_phys(*crstep, gfn), skey= , oldkey, + + return page_cond_set_storage_key(large_crste_to_phys(crste, gfn), skey, = oldkey, nq, mr, mc); } =20 @@ -768,7 +785,7 @@ int dat_reset_reference_bit(union asce asce, gfn_t gfn,= union skey *skey) int rc; =20 skey->skey =3D 0; - +again: rc =3D dat_entry_walk(NULL, gfn, asce, DAT_WALK_ANY, TABLE_TYPE_PAGE_TABL= E, &crstep, &ptep); if (rc) return rc; @@ -776,9 +793,12 @@ int dat_reset_reference_bit(union asce asce, gfn_t gfn= , union skey *skey) if (!ptep) { union crste crste =3D READ_ONCE(*crstep); =20 - if (!crste.h.fc || !crste.s.fc1.pr) + /* A large page has been split concurrently, try again */ + if (!crste_leaf(crste) && !crste.h.i) + goto again; + if (!crste.s.fc1.pr) return 0; - skey->skey =3D page_reset_referenced(large_crste_to_phys(*crstep, gfn)) = << 1; + skey->skey =3D page_reset_referenced(large_crste_to_phys(crste, gfn)) <<= 1; return 0; } old =3D pgste_get_lock(ptep); --=20 2.55.0 From nobody Sat Sep 26 22:55:47 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 C125A3DCDBF; Fri, 28 Aug 2026 11:54:56 +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=1787918113; cv=none; b=ZBwtiNvoZSTWM1omfCsJNYDjNhqBniPHYaZ2FrPWIAElJaze2ZDA9nZC0JbUcH6uEjptsifhB7IR3JATJ75gtBMkRsEst+t4VHwN+YKMK5gNkyyyAlOF3AW1CkISCWlmaBStZca5X6ADfWpSwk0tbPGhMmHieMBiBzPiiABfG94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787918113; c=relaxed/simple; bh=J1EnKyiZjyl7nYKOG1GgBPNUDg4B8CoN1WAD+N448jk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b3xwwT8MyWl36fbMTojYidfraru/nZNDtt82EEflAVb/i5DCxdmSaSmzqnJnsp0hLZEmspTiXnOQrrg1Dt4QdLq33GzJzkDTkHsFz3vJjvnubDWlfcWa4f7Oa73C2cUdUTqBGsyKs5UauiFIJmMoMqoazumhez+fK4eVdbc8w84= 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=UJbfKtHv; 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="UJbfKtHv" 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 67SAW0st1704223; Fri, 28 Aug 2026 11:54:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=fjxas85mxsr4UTCgH 6BjTFFYgcfVWEWlnBQDLGbRy88=; b=UJbfKtHvBC3UbTCAG0UnwEquOqZyyCR71 hcGlwToDQFergJFLsEuh0ZHJ+FkiEjhnHMyNINlVoS69owBFQqaHV33S4vjExqy3 W1zV7PtEdCARGseJUOIZwAfE1Jl0OfzxVUQ8FG50CzZQepF6YmYB0g1qmYWpLdaq P6sUgYr9mnl1diqng9g0NZDT8CXRI/KVBgvbgtodGei7/NGRqjj+mfoHuP8BD5zv 48bBhWX/j5elOnHbj3Y1rm9dQaYkGeN7JrxBIGXtQbD0GSdMLxtcqGOn6KwjHKXH gENL55g0E1Z8FQwGAbWJGUwOYNGDUtngM+jzzXL9Vx6wUbQUDRCfw== 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 4g7394kxhw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:48 +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 67SBfGui011682; Fri, 28 Aug 2026 11:54:47 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4g7p3qp5p6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 28 Aug 2026 11:54:47 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67SBsfD444171700 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 28 Aug 2026 11:54:41 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 12F0420043; Fri, 28 Aug 2026 11:54:41 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DB7792004D; Fri, 28 Aug 2026 11:54:40 +0000 (GMT) Received: from p-imbrenda.ehn-de.ibm.com (unknown [9.224.75.30]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 28 Aug 2026 11:54:40 +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 v3 8/8] KVM: s390: Fix race in _destroy_pages_crste() Date: Fri, 28 Aug 2026 13:54:39 +0200 Message-ID: <20260828115439.145885-9-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260828115439.145885-1-imbrenda@linux.ibm.com> References: <20260828115439.145885-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: 1LwTlKzOYUsZDSBUZ-eYbqdLSiewIe-u X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX/kH8CVAeW+Gr DmuOME8M05Js3nsDq4Ke59h1bk63h3oUDujecTsBBRMB9NEx4cV3ovT/8EDgjiuzGomT62VUHbZ /P+LJaIZhJISNGafooBOVNIW1FvwNrnaXp3aDAclOq9glMUhIfKn87r1LDzH12bImOZzog5oPSx z+JSIQvfb6buWRMhNbL3kBbC17NlLQvAWBCDc8VePuEorob6ru5XXiHS7/YAUePNqG9AWHaea1v xO1M7JCpBBPzzAFASvX6hYhg9JnUaCU38q2rIezpQ1KtW67+0aBNGJNHmDHxxn9J/+pm0wpucGg sRU/FPINcw9PID9Num1TiTDGBfcuPbcxPuFn5lS6YJhKC41b+JfuBNd+PQwYBdPHw9Zvxr1Pi7N hKuQ9OOfI6kUDY/8M22PWtayPwCBcl1ysmYfgJTQfTe9tOtNryhrxEWCB9xufpEsAxfp31SkTc2 i68zBrE7rPBF3FQDmMw== X-Authority-Analysis: v=2.4 cv=Y/nIdBeN c=1 sm=1 tr=0 ts=6a917708 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=N6WJw_kgbt6RfBQfb4YA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI4MDA5OSBTYWx0ZWRfX9o6gHJF/YqrK Gd4Psj5GJTLnpAA78067VNr0mDgN2bXmBy/Mrw6M4nHimO6QbEtfzd62vCe1QWhLdt6S6Uz9Lu0 U5GYMophmphcuHKfUmirWENVIDaVVds= X-Proofpoint-ORIG-GUID: 1LwTlKzOYUsZDSBUZ-eYbqdLSiewIe-u 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-28_03,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 priorityscore=1501 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608280099 Content-Type: text/plain; charset="utf-8" Use READ_ONCE() in _destroy_pages_crste() to read the crste, avoid dereferencing the pointer multiple times. Fixes: a2c17f9270cc ("KVM: s390: New gmap code") Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/gmap/gmap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/s390/kvm/gmap/gmap.c b/arch/s390/kvm/gmap/gmap.c index 4968330e9553..3f3fa864cc36 100644 --- a/arch/s390/kvm/gmap/gmap.c +++ b/arch/s390/kvm/gmap/gmap.c @@ -994,11 +994,13 @@ static long _destroy_pages_pte(union pte *ptep, gfn_t= gfn, gfn_t next, struct da static long _destroy_pages_crste(union crste *crstep, gfn_t gfn, gfn_t nex= t, struct dat_walk *walk) { phys_addr_t origin, cur, end; + union crste crste; =20 - if (!crstep->h.fc || !crstep->s.fc1.pr) + crste =3D READ_ONCE(*crstep); + if (!crste.h.fc || !crste.s.fc1.pr) return 0; =20 - origin =3D crste_origin_large(*crstep); + origin =3D crste_origin_large(crste); cur =3D ((max(gfn, walk->start) - gfn) << PAGE_SHIFT) + origin; end =3D ((min(next, walk->end) - gfn) << PAGE_SHIFT) + origin; for ( ; cur < end; cur +=3D PAGE_SIZE) --=20 2.55.0