From nobody Sat Jul 25 05:27:10 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 DBDED3B6C13; Fri, 17 Jul 2026 09:24:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784280270; cv=none; b=anqu52pkTFViMifJmYPGNGIGy0PN/jTz895utwNCucNt3NNhVQmihLHfNVmjY+swqQ//wc8BTyz5xCfOVkgO5JQ2GdR028t3V63I68QjFXtlBgFkYEr8kWpiZDVvbb3DMdYug1tS2OW56SrOkDiYKkzixP+qJM3lgOU9EQB5k2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784280270; c=relaxed/simple; bh=IjeLBwhHcKJx2R9/UA7YjBbGYoPrrwGF1JEiO/k/fVM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SNCer0b3ZMudPEkjpU86sw+ElDYlI5dWcYY6Amw5W5m8qfpt9fQMEU3zDDa3LbWz14i+obmNEhNx22KaLJB7dnRRrx3L0EETXfYgRjeMAs9rQVT2ShSSZP6dZJu9bfSYNcGLox60xUgslFTKt2RNwq3wbglfbTrjYcEF0nmk4i4= 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=k3HcT+En; 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="k3HcT+En" 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 66H6g4441278820; Fri, 17 Jul 2026 09:24:22 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=EWxVEekfbWOfzj5yn WENotOfUnyr3pn/uXxGBu1MBgs=; b=k3HcT+En5Q6rJkqqqxPvpAogf4Bng2OsO 6RQGn/72EtQ9Rx+uP7GXP64p599F0SxWD6WVXwDffwD/hYwU3OUUe+MjCqN35LQl MxjdnwJrJUsXTo181QXMKk7BeU+i62eDxLWMeLY/uSvuMsGR7FP29k0uRdx0QwXx twqI3R+9X3LL0pR+JC9Z5pX6VuWeVkmjv/OUzN5zBoxayuWZD+wtXKeFGLJ8ZqPM KNBUW8LfKFFv8PvxUqW+Rrk6g+7zuAJZDjWuu4WqXZPPDnRJfA+7/xfLxvV+Zqmt zwCM4V0KEU6/dq/pln1rsjrlTdBYLBtb6NOdQ8i9sMT46twIvrFbg== 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 4fbegc4qjr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:22 +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 66H9Jl1t009385; Fri, 17 Jul 2026 09:24:21 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fc1nhrxqx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:21 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66H9OHrg28311862 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 17 Jul 2026 09:24:17 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 54C902004B; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2CE532004F; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) From: Heiko Carstens To: Alexander Gordeev , Sven Schnelle , Vasily Gorbik , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/4] KVM: s390: pv: Use VM_SPARSE area for guest variable storage area Date: Fri, 17 Jul 2026 11:24:12 +0200 Message-ID: <20260717092415.3039699-2-hca@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260717092415.3039699-1-hca@linux.ibm.com> References: <20260717092415.3039699-1-hca@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=fOcJG5ae c=1 sm=1 tr=0 ts=6a59f4c6 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=CGB7rVRhuG4dzmKA8wAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX6zcll7Ny4ncg FEYkJC2wkq0RtKcr2UuTXcacn52qG/wXELoiK3QQdVAFZPP8VJSKDEDTP8E8puD/OBNXBRbjZK1 otBxUtdMAIQSivAjvlEoC3lmgio+r50zSh88YqH7Y/PiONwvOgwrtFUpi6F0bMERObm9rTahCLV ioyVURPP4NcdAfzsmW1J5mqijtx+mhIJrJP+VkpcPLeyXgt4vwHhp3cKYg6uywgUViPCK4+vNHB WNcx//z3+GRPDP/57tx35922o02nVlLpl2fpEPrDpxe1nYDb8Hj6UWg/ftG6UIwJHFqxS7QH5em dBC1aQ4Y/mHYmy/Dl6ry8cbhFSjjg6srZCqtUynz9bldJrnEp8dhOY/KTjGMlNVXoeGuNtP+UQR z6HD2PKnH8Oh8gJEfAbJrgFv1MctydttOcqyrHYn8ksgUYHodOXEEWYlCQMrdNl7Re4ewYSCG6/ lLeX4ccWyR18CGjjnBw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfXyzOC3MOwvVVD 4mV5PSCvtRcZVv9W9m3tbPepB5vJOubdUTLpqJhjht2soDYazBf0xlnjmmBNKzj1yByGrhDITBT FXeKpYnZbPVuQb9H3sp4epfb897Ln+A= X-Proofpoint-GUID: x1VYJxtp1SSNdhPK67_vL5LXzbnSAam3 X-Proofpoint-ORIG-GUID: x1VYJxtp1SSNdhPK67_vL5LXzbnSAam3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-17_02,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 suspectscore=0 adultscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 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-2607170091 Content-Type: text/plain; charset="utf-8" The guest variable storage area is allocated with vmalloc and then donated to the ultravisor. Any kernel access to that area will result in a secure storage access exception (aka fault). This is a problem if such a memory area is read via /proc/kcore. This causes an exception via vread_iter() and results in an unexpected short read. Avoid this by allocating a custom VM_SPARSE area. If such an area is read, vread_iter() returns zeroes for the entire area. Note that the function which frees the area does not update ptes. This is intentional to allow for deferred / lazy pte updates and TLB flushing like the generic vfree() code is doing that. See vunmap_pte_range(). This assumes that s390 will gain full support for lazy_mmu_mode_enable() and lazy_mmu_mode_disable() in the future, since as of now the used ptep_get_and_clear() in vunmap_pte_range() does indeed invalidate and flush every single pte entry, but only for s390. Signed-off-by: Heiko Carstens --- arch/s390/include/asm/uv.h | 2 ++ arch/s390/kernel/uv.c | 65 ++++++++++++++++++++++++++++++++++++++ arch/s390/kvm/pv.c | 6 ++-- 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h index d919e69662f5..153fed63adda 100644 --- a/arch/s390/include/asm/uv.h +++ b/arch/s390/include/asm/uv.h @@ -635,6 +635,8 @@ int s390_wiggle_split_folio(struct mm_struct *mm, struc= t folio *folio); int __make_folio_secure(struct folio *folio, struct uv_cb_header *uvcb); int uv_convert_from_secure(unsigned long paddr); int uv_convert_from_secure_folio(struct folio *folio); +void *uv_alloc_stor_var(unsigned long size); +void uv_free_stor_var(void *stor_var); =20 void setup_uv(void); =20 diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c index a284f98d9716..d1cdc5ae5e27 100644 --- a/arch/s390/kernel/uv.c +++ b/arch/s390/kernel/uv.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -209,6 +210,70 @@ int uv_convert_from_secure_pte(pte_t pte) return uv_convert_from_secure_folio(pfn_folio(pte_pfn(pte))); } =20 +static int uv_free_range_cb(pte_t *ptep, unsigned long addr, void *data) +{ + pte_t pte =3D ptep_get(ptep); + + if (!pte_present(pte)) + return 0; + /* + * Note: do not update the pte here, since there is no code which + * accesses the memory range, besides bugs. The invalidation of ptes + * and TLB flushing is deferred like for regular vfree() calls. + */ + __free_page(pte_page(pte)); + return 0; +} + +void uv_free_stor_var(void *stor_var) +{ + unsigned long addr, size; + struct vm_struct *area; + + if (!stor_var) + return; + area =3D find_vm_area(stor_var); + if (WARN_ON_ONCE(!area || !(area->flags & VM_SPARSE))) + return; + size =3D get_vm_area_size(area); + addr =3D (unsigned long)area->addr; + apply_to_existing_page_range(&init_mm, addr, size, uv_free_range_cb, NULL= ); + free_vm_area(area); +} +EXPORT_SYMBOL_FOR_MODULES(uv_free_stor_var, "kvm"); + +static int uv_alloc_range_cb(pte_t *ptep, unsigned long addr, void *data) +{ + struct page *page; + pte_t pte; + + page =3D alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); + if (!page) + return -ENOMEM; + pte =3D __pte(page_to_phys(page) | pgprot_val(PAGE_KERNEL)); + set_pte(ptep, pte); + return 0; +} + +void *uv_alloc_stor_var(unsigned long size) +{ + struct vm_struct *area; + unsigned long addr; + + size =3D PAGE_ALIGN(size); + area =3D get_vm_area(size, VM_SPARSE); + if (!area) + return NULL; + addr =3D (unsigned long)area->addr; + if (apply_to_page_range(&init_mm, addr, size, uv_alloc_range_cb, NULL)) + goto out; + return area->addr; +out: + uv_free_stor_var(area->addr); + return NULL; +} +EXPORT_SYMBOL_FOR_MODULES(uv_alloc_stor_var, "kvm"); + /* * Calculate the expected ref_count for a folio that would otherwise have = no * further pins. This was cribbed from similar functions in other places in diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c index 1beacc841ca8..dc5ac29b4c31 100644 --- a/arch/s390/kvm/pv.c +++ b/arch/s390/kvm/pv.c @@ -337,7 +337,7 @@ int kvm_s390_pv_create_cpu(struct kvm_vcpu *vcpu, u16 *= rc, u16 *rrc) /* only free resources when the destroy was successful */ static void kvm_s390_pv_dealloc_vm(struct kvm *kvm) { - vfree(kvm->arch.pv.stor_var); + uv_free_stor_var(kvm->arch.pv.stor_var); free_pages(kvm->arch.pv.stor_base, get_order(uv_info.guest_base_stor_len)); kvm_s390_clear_pv_state(kvm); @@ -369,7 +369,7 @@ static int kvm_s390_pv_alloc_vm(struct kvm *kvm) /* Allocate variable storage */ vlen =3D ALIGN(virt * ((npages * PAGE_SIZE) / HPAGE_SIZE), PAGE_SIZE); vlen +=3D uv_info.guest_virt_base_stor_len; - kvm->arch.pv.stor_var =3D vzalloc(vlen); + kvm->arch.pv.stor_var =3D uv_alloc_stor_var(vlen); if (!kvm->arch.pv.stor_var) goto out_err; return 0; @@ -414,7 +414,7 @@ static int kvm_s390_pv_dispose_one_leftover(struct kvm = *kvm, */ free_pages(leftover->stor_base, get_order(uv_info.guest_base_stor_len)); free_pages(leftover->old_gmap_table, CRST_ALLOC_ORDER); - vfree(leftover->stor_var); + uv_free_stor_var(leftover->stor_var); done_fast: atomic_dec(&kvm->mm->context.protected_count); return 0; --=20 2.53.0 From nobody Sat Jul 25 05:27:10 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 5CE333B6BE6; Fri, 17 Jul 2026 09:24:24 +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=1784280268; cv=none; b=ojn4txHk11BH5qzioWQyKmXx50hMP5vEinERWx1ckt+2r4PeOSz9fSh1yfSVf9SqmWXdcCFb9JKJGZVk/E1ISfkvABVJFB3GwQ7FSz0cLoB9pRRldE738VLb5VgiyMIVrnwHVxI82N+4oYx6UZCIilod+Zf9Z8ZxPSPLmuUvDZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784280268; c=relaxed/simple; bh=dUsbDZ6HTSkg65F8EIiTZAdGjRgLUwj4dSaPNOkaeWE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i/T7adhtwoXsW7MgAUJNAwcx2kgIYvLPg3zlhnw5ajwhP0gfHJuhe/OUNG6uiSnwjldbEFrB5DDhjNDWUyzuynkcVuf00fejB8u5rBys3tkTQTc+kEtpbBA4VYt2j8VrQCiFAR1x7oKUlgN+6KaV9XJHJseMzXbtb3zTc50E30M= 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=ZdeMzfZa; 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="ZdeMzfZa" 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 66H6frXT1214125; Fri, 17 Jul 2026 09:24:21 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=2gHV5VMvq54+aU8DI zL9/w8iQMfGX2oJ+rwuYTn0ctY=; b=ZdeMzfZa1NJX9mLHsNnOXfEwvtZuCCcup RGmtJ61/j3/SlTlan8/p/+uCcs9syYsFEjxaHRe7Q6TXjiiGHeQyRzVdBEKllyIM 272uzDgs8Hb/rG4aoAlHMOx2GZc4+4AOLLt1tsOJdgDjcEjoS5/5fnHjjMjGbNMk NE6BG3lsideU7AZpcF/hodgGld5Yql04eQ8fg5a5XBYiZlAX221T71WD1YFI0XZM cj3DkcKjjrL5tKvGDPWkrqCYQ0PAagsPKRO/fEwxkMvtbJyxS6ac/b81OsuU9caz G3Xa7bAfSEkwrXe5gsRGTOfwYioBRExbRZZD0wnDFo6Em960koxAg== 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 4fbf2amqfk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:21 +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 66H9JmE4009394; Fri, 17 Jul 2026 09:24:20 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fc1nhrxqt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:20 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66H9OG6L50528574 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 17 Jul 2026 09:24:16 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8A0B22004F; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 594782004E; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) From: Heiko Carstens To: Alexander Gordeev , Sven Schnelle , Vasily Gorbik , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/4] s390/mm: Fix handling of secure storage access exceptions in vmalloc area Date: Fri, 17 Jul 2026 11:24:13 +0200 Message-ID: <20260717092415.3039699-3-hca@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260717092415.3039699-1-hca@linux.ibm.com> References: <20260717092415.3039699-1-hca@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: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX85BykstiHoKa HJO9tpR/zq4uXW+K2GuDAKd2NaBTZd52PPK7nwt2wlNm+RH7scoXIKCVLpJvix/ukVJdJBXDpXT 1O/O+t6lIjqrZkqS/REr8nFx90n4RxY= X-Proofpoint-GUID: lgjFNo-D_Y4_JVRKUZHxEgCzcpLsLOZK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX5CGwNEbikdxb DfB5eX4l+3W8peS2fNJTJh9yMwVF+4wkW/IDQIAJRR1JM+D8lBRn7o4cRFZVFJdO1s2EeVJVd+e tcTP11Og6uCdnOemNL/nZ9Ha7mG3wWT5U/Vv9bGKlKH7Tsmdp+y6aXEpOdvZSX3aLvuRIdiYWoY OgX721PyLM8NsaPQPI+HyBwY9tu4+uJPmB4KHuIZJOLr0ACBwko74LUkWc+5DY/8UsHsdrMIrrR lg8I0YWhxg1WMYxjoYvE5Ou7IfVsuIHpc2es02FecfTTK0QL6RkBirpnZVopvRtRAIevRsiI2Z9 aKactX+o3UNubjjteVJvL1fyxrNM6zhMDecR06gpxd8W1Jem4B18gTs+irXV/ViRokh1o3VtFB1 GjyH9T7TWRi5voX65vto5nR7Y8TcLXiykdJV4z5u6Kk3trt44j4xK2w2sh2ObbpPOL2NDQ/nXqt vX+ImTCIkfvgtjRkFlQ== X-Proofpoint-ORIG-GUID: lgjFNo-D_Y4_JVRKUZHxEgCzcpLsLOZK X-Authority-Analysis: v=2.4 cv=PvajqQM3 c=1 sm=1 tr=0 ts=6a59f4c5 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=aTeQ_7Lur19LOBhsqlcA:9 a=zZCYzV9kfG8A:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-17_02,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 bulkscore=0 impostorscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 spamscore=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-2607170091 Content-Type: text/plain; charset="utf-8" Secure storage access exceptions in vmalloc area need to be handled separately since folio_try_get() or virt_to_phys() do not work on such addresses. Given that there cannot be a valid access let such exceptions fail immediately. The kernel will either fixup or crash. Signed-off-by: Heiko Carstens --- arch/s390/mm/fault.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 028aeb9c48d6..392e46742039 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c @@ -438,6 +438,8 @@ void do_secure_storage_access(struct pt_regs *regs) panic("Unexpected PGM 0x3d with TEID bit 61=3D0"); } if (is_kernel_fault(regs)) { + if (is_vmalloc_addr((void *)addr)) + return handle_fault_error_nolock(regs, 0); folio =3D virt_to_folio((void *)addr); if (unlikely(!folio_try_get(folio))) return; --=20 2.53.0 From nobody Sat Jul 25 05:27:10 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 EF9C13B71CA; Fri, 17 Jul 2026 09:24:24 +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=1784280268; cv=none; b=ESO4YFvy2atnRF3I9mQwNLaS27HuUjm4zpQHzTZMfJ7Ps8gqPuvRljb2p/COX/vmjGYFtAu0iPR/22renyCJRmz8t7V2+a/iNztm3+YH9Jze/e8V+xosQLv/PQbSsfBQun4/7n6DByP55Ki9fk25eR/mmpNmQB2cbmQo+02WfmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784280268; c=relaxed/simple; bh=nCBnP0pOnJQlo6E6BFjw7Gts6aQqIaZ/ZGXDg8wrSMw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kIRI2hdLsMF5w47V71qSdVnTH2TBn8TuKY0PmTfcf70J5nV5vEMGbVfn4/SshJOaR9N8LoCPQ0LTyI2B+l+6vAJBR8TTDiiZNJ49u0irReujeM3tDN1G/bSMj4s3NtkoJ4Jdpf9B2W4BRh6tegiP1HD9eXBSxM6nWUwj8Dz0mz4= 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=h1eBoxr1; 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="h1eBoxr1" 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 66H6fsod1278635; Fri, 17 Jul 2026 09:24:21 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=nxFeAPIZEhenzqh1F UCHdB2mNGb6NeQE4O3cleETzqU=; b=h1eBoxr1g/PBuiMIFILwtZWApcU4ZC9+n wbwi5NUIAP8nDrcDZClWLdiGLTxm3aeloN5X4WfugK22LBIGG2Q+wbIQXkAH+7AF TETZGfUmtO98Qeifv8MXrz1p7U0oAaXZ4vZDXop0gvvBVfIYgUeuC5fCVvB1dT5o 4YnfHIfuTSqIc5M71dZ0Q1EakObh8gY3N9Nn+gufMTSpzcgjeP/JoNr4y3QJXgP4 EU6/A+B/x2g0bQbXAf+Ft/nQEtD2D9GVP1JWWy8PAwbydP5TzB6JxpmLxcl7sEs0 Z/cHRB7btUdpNTVXVerNn7tbSRiLLRUeY703T1X9O40Vv18RbkiJw== 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 4fbegc4qjp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:21 +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 66H9JgbF026627; Fri, 17 Jul 2026 09:24:20 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fc2uygqxt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:20 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66H9OGrP28311854 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 17 Jul 2026 09:24:16 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B5FA52004E; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8EC412005A; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) From: Heiko Carstens To: Alexander Gordeev , Sven Schnelle , Vasily Gorbik , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/4] s390/mm: Remove folio handling for secure storage access exceptions Date: Fri, 17 Jul 2026 11:24:14 +0200 Message-ID: <20260717092415.3039699-4-hca@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260717092415.3039699-1-hca@linux.ibm.com> References: <20260717092415.3039699-1-hca@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=fOcJG5ae c=1 sm=1 tr=0 ts=6a59f4c5 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=3bIF1FMAx5P9TMvWi0MA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX2M9BqecEAyPC iYeGfzB9XSSzk4Kj3zFGPd5FGd4xB03QcK/a1EKjCdlzDcCl0TuMAv2FOlMEW2Z3avOI+38zFlr s1KoSCD5fEr0shfQBAiBU6NDsAAUgtLBf1Gv6uTzWj2q1j54HV2DUiWyTUCI//5J8wVCqNd9HVj 6qx7yoyKfQaX25T0Grjk29DcXW/F2betAJK30onITHGBl1oanQNl+O4b8wk9GtVgt5cH8VMGUdr 7nzTnSPBK4LcA3MCyTj9x0a9HaVC4+QSWkzqJ4DP+7uiz7HcuzX6PoyIFibXlmQYNCf/XbbgDYz xTYMekagXwNx1qtzsGanM33O2cXHcj6gyCaXu1W0QdfLyVtCX0TiBogY5AaLSuKEMI5DnQpjHUv JbClXKIgo4Zf/1KXsnTE3JupuRcGlMei3KubpMWa21SvlSyNj00JbHmA9dQ1qnay8Vi/v9Qsh3+ mRdgx9x0JRG16sR+uvA== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX4o8D/OOdhJUs TD6H3NU5aCnWO94RdO9zS/kYG6EkZW5sIq2q9PSA+8k8nvjp7yrsCYOqgYEP/dwzAeXmutx91XW Th0rULWxspkTbHEbbNGrX0q7PoosNuk= X-Proofpoint-GUID: g6C1jmzNJQSjpZFR5xXnJNpDYYkyky7H X-Proofpoint-ORIG-GUID: g6C1jmzNJQSjpZFR5xXnJNpDYYkyky7H X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-17_02,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 suspectscore=0 adultscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 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-2607170091 Content-Type: text/plain; charset="utf-8" Remove folio handling for secure storage access exceptions that happen via the kernel mapping. Using folio_try_get() for exceptions via the kernel mapping is racy: for example such an exception may happen on one CPU, while a different CPU frees the corresponding page. Subsequently the page can be part of a folio of different size, before the faulting CPU executes folio_try_get(). This may lead to data corruption. As of now this scenario does not seem to be possible, however with the upcoming load_unaligned_zeropad() this is possible. As a side effect PG_arch_1 is not cleared anymore for such faults via the kernel mapping. However given that this bit is over-indicating it shouldn't matter. Signed-off-by: Heiko Carstens --- arch/s390/mm/fault.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 392e46742039..db77c8c0023e 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c @@ -440,13 +440,7 @@ void do_secure_storage_access(struct pt_regs *regs) if (is_kernel_fault(regs)) { if (is_vmalloc_addr((void *)addr)) return handle_fault_error_nolock(regs, 0); - folio =3D virt_to_folio((void *)addr); - if (unlikely(!folio_try_get(folio))) - return; - rc =3D uv_convert_from_secure(folio_to_phys(folio)); - if (!rc) - clear_bit(PG_arch_1, &folio->flags.f); - folio_put(folio); + rc =3D uv_convert_from_secure(__pa(addr)); /* * There are some valid fixup types for kernel * accesses to donated secure memory. zeropad is one --=20 2.53.0 From nobody Sat Jul 25 05:27:10 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 C1C883B6BFF; Fri, 17 Jul 2026 09:24:24 +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=1784280267; cv=none; b=gVgiJJnF9EAZ4BaA953WpYrP77K6ndtXFSMRpSdd0JWE6nk9cmN29v3966noy3RLNy7Ih5s/CB985rSRcilEvDyY6bCIeFliOR/tUBRei11YLyVtXpPhtbfX8LY3EfiaFt0xd/6m+6NxBlj0pKgztk6iZ5tw/PxsCZ4GNSv7G80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784280267; c=relaxed/simple; bh=zEiwKaXMbPZ11XxOmdgSOBAY1vv4wF2nd62M/NN1IiE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aFdq6RWq9zHBqgVUpcuiWhmX8eml1gpdaKTioI4p+mX1uLAyZpi0Xm1l4VHZCf/L37mlyFoKkTvZkp+XPXstxesGaGjrXmmS5RC2M3jovnKa2QZM4Qq4+Q9Tru+cVRjahxAuf97niZpx/HSEi4Lo5M+0l5mYgvCaN1TsQsSsNFo= 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=qqe73Zl5; 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="qqe73Zl5" 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 66H6fmLG1299620; Fri, 17 Jul 2026 09:24:22 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=+MXo+NOGjI4Y6r1/g x1ahV3bSTRNhyUjZw1SnQZJUO0=; b=qqe73Zl5hwAg+eZNKy5qI2TKh6OVdkA6e ZLHaq028Eyp4r0zVYKVcL0G/lW6TQ9Wfn7kVhoYlRG/Edvb9tCt79dgi+d1UlZQj 7GXWqlb+R3KG0+KS+d848HUcK6Bn62PwDa/mn72chCewqDM4hkI0HtTOnKX+WqR3 eYhL3gS+zleFS6YIZFUCkuIVtS43oLcsTw1Fx24U90L2aK8S1rIM2EIf1966UOFO XrxdB0J7hWlZQL/qoXiBJcNZEpLh18z9YaX8mHz7fb1fUrXJ7S6z7C8CYuf8GI5K MsQeK6hy1CyaAE+jqSn5MEGNyHWjM2qKyZYjw7IZpxZ8H7uA3ix+A== 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 4fbegtnrfj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:22 +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 66H9JiLk020177; Fri, 17 Jul 2026 09:24:21 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fc15k90fw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Jul 2026 09:24:20 +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 66H9OH5Y51577316 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 17 Jul 2026 09:24:17 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E22552005A; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BAF422004F; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.87.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 17 Jul 2026 09:24:16 +0000 (GMT) From: Heiko Carstens To: Alexander Gordeev , Sven Schnelle , Vasily Gorbik , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/4] s390: Add support for DCACHE_WORD_ACCESS (again) Date: Fri, 17 Jul 2026 11:24:15 +0200 Message-ID: <20260717092415.3039699-5-hca@linux.ibm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260717092415.3039699-1-hca@linux.ibm.com> References: <20260717092415.3039699-1-hca@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: JuGxmwsCVxTqi3RNl1UB94jyQ1Q4sIc7 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX2bWyISBEuxSH u4rEVSpXXiLek4jFtMuod6errOCThn4w7A7bp3BpnXsOYY7aSAXu/oPjhdcnQMviX84QcUjBVcc j0u6ByEGtH2kbIoTRh4EMwfEWWEDRHQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE3MDA5MSBTYWx0ZWRfX3GSz+8mFGHxK 1hg0QNaOAT53iitDKle4aLSfLOGmsR59MQyP+8HHtMnkFKB1BLMTTB42way2Yf+bJCAghpCVgJT 8gseOJLBEj5sxsrH01ZACV1TPQtiR1UPLms0FZmCI0zvM2yJj4a0p4adxKKvdaqO5j+IteZ2RYo MYoUKMMXrH9GFhVntFm0qKCGY5RGMr1472fmqpKqLau7Hmkcf+J0EIQ4jjmPA81c0JANGfh9bh6 nyOtDyxg7JHc5SSYp7WHZIk672CevZKlGDxagzsnygnHL56gFEoY2OgPOBIWotPEtZsDJpYJY9E c4i867TZ6ZiqFIg4irvmxvJJQHO0Z4N4D0WqjN8P3InXx+DwoqZc+7KfEiilGdXHCZlFJZFEBDa KR7uSf13F+EE0Uw39pSfMroBiosISZPChlT4wW5MyURi0A4lwO1ez6TkNKzoN8msIFdFDyt6ycY BQdXOhS2JZ+oZHTN7sg== X-Authority-Analysis: v=2.4 cv=IqMutr/g c=1 sm=1 tr=0 ts=6a59f4c6 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=iX4AGcIGDbhQ4BFKoYkA:9 X-Proofpoint-GUID: JuGxmwsCVxTqi3RNl1UB94jyQ1Q4sIc7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-17_02,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 impostorscore=0 malwarescore=0 adultscore=0 phishscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607170091 Content-Type: text/plain; charset="utf-8" Implement load_unaligned_zeropad() and enable DCACHE_WORD_ACCESS to speed up string operations in fs/dcache.c and fs/namei.c. With the secure storage access exception cases addressed, add support for DCACHE_WORD_ACCESS again. Signed-off-by: Heiko Carstens --- arch/s390/Kconfig | 1 + arch/s390/include/asm/asm-extable.h | 4 ++++ arch/s390/include/asm/word-at-a-time.h | 22 ++++++++++++++++++++++ arch/s390/mm/extable.c | 18 ++++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 84404e6778d5..fe81c539ef2f 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -163,6 +163,7 @@ config S390 select ARCH_WANTS_THP_SWAP select BUILDTIME_TABLE_SORT select CLONE_BACKWARDS2 + select DCACHE_WORD_ACCESS if !KMSAN select DYNAMIC_FTRACE if FUNCTION_TRACER select FUNCTION_ALIGNMENT_8B if CC_IS_GCC select FUNCTION_ALIGNMENT_16B if !CC_IS_GCC diff --git a/arch/s390/include/asm/asm-extable.h b/arch/s390/include/asm/as= m-extable.h index 99748c20e767..d23ea0c94e4e 100644 --- a/arch/s390/include/asm/asm-extable.h +++ b/arch/s390/include/asm/asm-extable.h @@ -12,6 +12,7 @@ #define EX_TYPE_UA_FAULT 3 #define EX_TYPE_UA_LOAD_REG 5 #define EX_TYPE_UA_LOAD_REGPAIR 6 +#define EX_TYPE_ZEROPAD 7 #define EX_TYPE_FPC 8 #define EX_TYPE_UA_MVCOS_TO 9 #define EX_TYPE_UA_MVCOS_FROM 10 @@ -79,6 +80,9 @@ #define EX_TABLE_UA_LOAD_REGPAIR(_fault, _target, _regerr, _regzero) \ __EX_TABLE(__ex_table, _fault, _target, EX_TYPE_UA_LOAD_REGPAIR, _regerr,= _regzero, 0) =20 +#define EX_TABLE_ZEROPAD(_fault, _target, _regdata, _regaddr) \ + __EX_TABLE(__ex_table, _fault, _target, EX_TYPE_ZEROPAD, _regdata, _regad= dr, 0) + #define EX_TABLE_FPC(_fault, _target) \ __EX_TABLE(__ex_table, _fault, _target, EX_TYPE_FPC, __stringify(%%r0), _= _stringify(%%r0), 0) =20 diff --git a/arch/s390/include/asm/word-at-a-time.h b/arch/s390/include/asm= /word-at-a-time.h index e9287036392d..eaa19dee7699 100644 --- a/arch/s390/include/asm/word-at-a-time.h +++ b/arch/s390/include/asm/word-at-a-time.h @@ -4,6 +4,7 @@ =20 #include #include +#include #include =20 struct word_at_a_time { @@ -40,4 +41,25 @@ static inline unsigned long zero_bytemask(unsigned long = data) return ~1UL << data; } =20 +/* + * Load an unaligned word from kernel space. + * + * In the (very unlikely) case of the word being a page-crosser + * and the next page not being mapped, take the exception and + * return zeroes in the non-existing part. + */ +static inline unsigned long load_unaligned_zeropad(const void *addr) +{ + unsigned long data; + + asm_inline volatile( + "0: lg %[data],0(%[addr])\n" + "1: nopr %%r7\n" + EX_TABLE_ZEROPAD(0b, 1b, %[data], %[addr]) + EX_TABLE_ZEROPAD(1b, 1b, %[data], %[addr]) + : [data] "=3Dd" (data) + : [addr] "a" (addr), "m" (*(unsigned long *)addr)); + return data; +} + #endif /* _ASM_WORD_AT_A_TIME_H */ diff --git a/arch/s390/mm/extable.c b/arch/s390/mm/extable.c index 063b4346742d..7498e858c401 100644 --- a/arch/s390/mm/extable.c +++ b/arch/s390/mm/extable.c @@ -50,6 +50,22 @@ static bool ex_handler_ua_load_reg(const struct exceptio= n_table_entry *ex, return true; } =20 +static bool ex_handler_zeropad(const struct exception_table_entry *ex, str= uct pt_regs *regs) +{ + unsigned int reg_addr =3D FIELD_GET(EX_DATA_REG_ADDR, ex->data); + unsigned int reg_data =3D FIELD_GET(EX_DATA_REG_ERR, ex->data); + unsigned long data, addr, offset; + + addr =3D regs->gprs[reg_addr]; + offset =3D addr & (sizeof(unsigned long) - 1); + addr &=3D ~(sizeof(unsigned long) - 1); + data =3D *(unsigned long *)addr; + data <<=3D BITS_PER_BYTE * offset; + regs->gprs[reg_data] =3D data; + regs->psw.addr =3D extable_fixup(ex); + return true; +} + static bool ex_handler_fpc(const struct exception_table_entry *ex, struct = pt_regs *regs) { fpu_sfpc(0); @@ -118,6 +134,8 @@ bool fixup_exception(struct pt_regs *regs) return ex_handler_ua_load_reg(ex, false, regs); case EX_TYPE_UA_LOAD_REGPAIR: return ex_handler_ua_load_reg(ex, true, regs); + case EX_TYPE_ZEROPAD: + return ex_handler_zeropad(ex, regs); case EX_TYPE_FPC: return ex_handler_fpc(ex, regs); case EX_TYPE_UA_MVCOS_TO: --=20 2.53.0