From nobody Fri Dec 19 19:03:17 2025 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 8407E354AD4; Thu, 6 Nov 2025 16:11:36 +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=1762445498; cv=none; b=VFn95cHOyJjnChZbqIrafRt5yWeciYlgVLDGxH3C9U+ifBwbqMWmrsCKYrKzAYS4ClMk/nGVMxUSnRTqZXK/PZ1I7Jgdw04JdK/Z7z427+L72vbdB8sN/f+EmYJZsBniOjn7zEIbvnwgMW28M3PHaTV0DgkiHY4OclP9wM0n6Ls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762445498; c=relaxed/simple; bh=kStAb1QNzWdsmYptfCqMzj1sAAr+tmaRcil+YXbjy4w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r2yexiXdodF/6wTBZd6XF8H0jcmVknPykLXSDtsxcZ3FBSCsOpQq8qGSLuK1uDlPDY8dLJkVA3H8QHtU/gwH/RxP40WahenPjunM9xBZ2Y+zSj1E5Q9B6pn6KD8u8oZnse14my0uS9Fe4Q9C2HGyCObegkXlyRJGSvCpr6UnLOA= 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=eocPO2ha; 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="eocPO2ha" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A67mv59008410; Thu, 6 Nov 2025 16:11:33 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=yb68bkEeMtv5TWcWB YMziuL36P1rfRWw+CX0Pdevtoo=; b=eocPO2haL5F+vJrCIM2YgBzeSbM2ITl/g Bt5DrRma3LOXCr1WvmKbXka76kS5jDsx0WN9gP/PqkBtgj72LtqiFfv4YKB6uo9Y /Pui9m4OSNuIMXp5BjCJy88K6zw8dMOT82x52SEoMQSVMaEXVWjYiVb/EvE50yip HiKIS2QwTMFsbC1kXRpiLxmIRrj3o32yQEmNm29GSfO0aHg89dCmeGtOeIo/EOID dkas9Yvee5vB+/dV7g7zNEBSe1GY2ph+kOt5LrYL+TCuHykvvHka6UbsvrQqZLjH GMBqeRhrGgBSgdWbWiPCU2oxJEHHNzMhQqpSNBW0PRS/sWuc43xCQ== 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 4a58mm79m5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Nov 2025 16:11:33 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5A6FIhcf009822; Thu, 6 Nov 2025 16:11:32 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4a5x1kp941-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Nov 2025 16:11:32 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5A6GBS0t49152380 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 6 Nov 2025 16:11:28 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 620D020043; Thu, 6 Nov 2025 16:11:28 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F174F2004B; Thu, 6 Nov 2025 16:11:27 +0000 (GMT) Received: from p-imbrenda.boeblingen.de.ibm.com (unknown [9.155.209.42]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 6 Nov 2025 16:11:27 +0000 (GMT) From: Claudio Imbrenda To: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, borntraeger@de.ibm.com, frankja@linux.ibm.com, nsg@linux.ibm.com, nrb@linux.ibm.com, seiden@linux.ibm.com, schlameuss@linux.ibm.com, hca@linux.ibm.com, svens@linux.ibm.com, agordeev@linux.ibm.com, gor@linux.ibm.com, david@redhat.com, gerald.schaefer@linux.ibm.com Subject: [PATCH v3 21/23] KVM: s390: Enable 1M pages for gmap Date: Thu, 6 Nov 2025 17:11:15 +0100 Message-ID: <20251106161117.350395-22-imbrenda@linux.ibm.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251106161117.350395-1-imbrenda@linux.ibm.com> References: <20251106161117.350395-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: XE0Z5RlL8tkuD-P2cPE94FLw4be6iTZW X-Proofpoint-GUID: XE0Z5RlL8tkuD-P2cPE94FLw4be6iTZW X-Authority-Analysis: v=2.4 cv=SqidKfO0 c=1 sm=1 tr=0 ts=690cc8b5 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=2DwSK8QdlStOok5YbGYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTAxMDAwOSBTYWx0ZWRfXxcyODAfusRF2 JVK13DBBHplQGC4rkeYx5Buds0i2OBOoLtl/iQ1JEr3OGEDlTktFOH+TlUcpWtUhUdcu7+5ff/x QtihfObmSz7mFfcEtPwGOl/2HVz+r4aoKdHXicAv5CEVYKlMcTpw8KxFxoTH9uvUsL1DUCaTlht nLmKvvMdpGW4MqLU4D/j6DCUdy8T0XOSk6hRPJD8LJ6YqjVHjaxA0S1/k8Bx8Bz/p27HJg7/0wS BWCmaGp+T6PAoaLJ2JE/OhQXEIKfnpIa5iphGtkl0ueVN1YL1RN58m6n66RjO/M3m2TgYCa1Jy+ 1cuAr5XB8CrSiHpBrp9foH0Qj+CbSi+fFB1NmXCiZW1SgPT/ZTqj/u1VX/kNjfWNiVFfK46TaXS kwVGM2tjtcU5tRtS08+7D6odh3VFmA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_03,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 impostorscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 priorityscore=1501 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2511010009 Content-Type: text/plain; charset="utf-8" While userspace is allowed to have pages of any size, the new gmap would always use 4k pages to back the guest. Enable 1M pages for gmap. This allows 1M pages to be used to back a guest when userspace is using 1M pages for the corresponding addresses (e.g. THP or hugetlbfs). Remove the limitation that disallowed having nested guests and hugepages at the same time. Signed-off-by: Claudio Imbrenda --- arch/s390/kvm/gmap.c | 2 +- arch/s390/kvm/kvm-s390.c | 6 +----- arch/s390/kvm/pv.c | 3 +++ 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/arch/s390/kvm/gmap.c b/arch/s390/kvm/gmap.c index 067683da6cae..c4e759bc82b3 100644 --- a/arch/s390/kvm/gmap.c +++ b/arch/s390/kvm/gmap.c @@ -591,7 +591,7 @@ static inline bool gmap_2g_allowed(struct gmap *gmap, g= fn_t gfn) =20 static inline bool gmap_1m_allowed(struct gmap *gmap, gfn_t gfn) { - return false; + return gmap->allow_hpage_1m; } =20 int gmap_link(struct kvm_s390_mmu_cache *mc, struct gmap *gmap, struct gue= st_fault *f) diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index fb92e9ba45bb..391644a88b4e 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -849,6 +849,7 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm= _enable_cap *cap) r =3D -EINVAL; else { r =3D 0; + WRITE_ONCE(kvm->arch.gmap->allow_hpage_1m, 1); /* * We might have to create fake 4k page * tables. To avoid that the hardware works on @@ -5875,11 +5876,6 @@ static int __init kvm_s390_init(void) return -ENODEV; } =20 - if (nested && hpage) { - pr_info("A KVM host that supports nesting cannot back its KVM guests wit= h huge pages\n"); - return -EINVAL; - } - for (i =3D 0; i < 16; i++) kvm_s390_fac_base[i] |=3D stfle_fac_list[i] & nonhyp_mask(i); diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c index d8a5c7b91148..8ea5f8d7e714 100644 --- a/arch/s390/kvm/pv.c +++ b/arch/s390/kvm/pv.c @@ -621,6 +621,9 @@ int kvm_s390_pv_init_vm(struct kvm *kvm, u16 *rc, u16 *= rrc) uvcb.flags.ap_allow_instr =3D kvm->arch.model.uv_feat_guest.ap; uvcb.flags.ap_instr_intr =3D kvm->arch.model.uv_feat_guest.ap_intr; =20 + WRITE_ONCE(kvm->arch.gmap->allow_hpage_1m, 0); + gmap_split_huge_pages(kvm->arch.gmap); + cc =3D uv_call_sched(0, (u64)&uvcb); *rc =3D uvcb.header.rc; *rrc =3D uvcb.header.rrc; --=20 2.51.1