From nobody Sun Feb 8 22:30:42 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 55215195B37 for ; Sun, 12 Jan 2025 09:55:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675739; cv=none; b=NDSiGunu5ybmt/YmwNOd+5wrmfrFttIkedAVuMd6aX7GFF9GKlzgeN7+33FEZ903It8WiP5628QlE5mYm3YlgS/Tspx9BOsWzedmbRJE5rCl4q2OvjWCgUrq4TCCzUBI21dfSerqC3A5p/uY+KsMlwCLK7lfAKuA3bo5vLE2fSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675739; c=relaxed/simple; bh=zXt8gel/yANsANDIs5B5Mdvh1QFGb9YfZgkI8pbrooQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N2XPGjF7mFZtlkit/6zOnzd5CKPvUmKidDKpHa8EpRqkeBgrLM80OYQOZYl9pZWZOXN3gyaGikWWZ8v2Wmgxg+ErWwNepwt/T0Pl8FjrHKHcufiAD7GohHJO5GP4jp/Lc4tIJG9VqZRgpMz91X1rjaGSlNFw7RlX0R3FD5KDuks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=RSmymUF6; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="RSmymUF6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736675737; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=q2g0sdh+W5glSkagx457PsA9cI+PMduPyER5qBCP9uo=; b=RSmymUF6Fcz/oWfvtl9yjTwXbKWIXTW3f7wtojem9ilXsmnSmdLlGXjKji/w0Tn0GwaSXA g93f1gjpKdzj96Tcxt+gQrgqwYW2ordQVhQqlZqFV9em7Io5uwOgyi277fn9U4CNTe1Kch q5fWDKeAPfcVXbVIwGHFM8AS9/U+IQU= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-336-wWzVC07oN3aN_LvY5dfTnQ-1; Sun, 12 Jan 2025 04:55:36 -0500 X-MC-Unique: wWzVC07oN3aN_LvY5dfTnQ-1 X-Mimecast-MFC-AGG-ID: wWzVC07oN3aN_LvY5dfTnQ Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-aa66f6ce6bfso268438966b.2 for ; Sun, 12 Jan 2025 01:55:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736675733; x=1737280533; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q2g0sdh+W5glSkagx457PsA9cI+PMduPyER5qBCP9uo=; b=J4NeEO+uYTIloqK/le7muTSurUe2bsMVs7rXUX8hzyrgORB0wypuvxPJxOqAzjQbqd Ek/z+0wsoeqldX1fp4WFNEql4vefdk8uVpaHBCg0qFd/SUVhk6Hq3uflPCui8k9dQqxx YMnGBYCMzsVLJFHC4oXbvTRBhmehTW1gu51uF9GkrI3+z5yLsHEdvIw5NufBtvV+g4+V icggnw7n3DMeyhqXZOzivq61DSin9QlVCZfH0+yMB+LYVJP8NOAMfGbEXUvh5kR5pUNO z5IKWOTxdDlgWc8sTY7itmR9uv+jJrz0q/dahZpifZqk+/sKWkLoHpsN/U/snVPwxCau 8CfQ== X-Gm-Message-State: AOJu0YxSIzgyVBGDnz2j6XdzdUu+LWbu7p+DfG5xe0HxHgDijWigFuU4 pqWeTSpgy6g4zLSy5mg1llrUGZYhct8gfi3FDR9S5rZ+zOr2xgKmDYAiXeV2nBSW8CtJ+bKdfHN LscWjR/n7K/ocz7aVOFbH+sp9MpKuHVVBcOdjH2CJirgKKqzfM3ygrCtl//daiWVbODs+KeEwu2 /TJ0GRpurzd5ic2/l89JaeJNMSEvafNsReuQbxrLSzj+rbrDFA X-Gm-Gg: ASbGncuzczDKQNYItxRcnqa6JfZbanRSuhQq9zrVTjbmJo5Bi51FcT67h7bu4KK7zdB GoUlKZqZOyx+1u8q9wKfylfbnBPsFuRuyduVc/IZlRcfSlFJrVP5cxzKVQhfRBZwyW1HkLd2eEi Xht9iRvuiWNuVwQ/ZQ+xaMAKLUcHKHFYHUi/ArQ/1T6YacoBA49+XN16m+YPmJ2DB+gVOPtkUjg uuIv+LBl1TaEmUOcSHPnxnUVhHbI2NPQZ7iq+IacP59KJnU/TcdchuxyJo= X-Received: by 2002:a17:907:d1b:b0:aac:23f4:f971 with SMTP id a640c23a62f3a-ab2ab70a173mr1753855366b.33.1736675733607; Sun, 12 Jan 2025 01:55:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IFxwq3cSzmX3Sr/t/JxywDCCAqRMgXJsypEs7qUCiLJx2f+d/bQof+BQSWZDWOMCFQMp6aY9A== X-Received: by 2002:a17:907:d1b:b0:aac:23f4:f971 with SMTP id a640c23a62f3a-ab2ab70a173mr1753853166b.33.1736675733170; Sun, 12 Jan 2025 01:55:33 -0800 (PST) Received: from [192.168.10.3] ([151.62.105.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2c95647absm352956366b.118.2025.01.12.01.55.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jan 2025 01:55:31 -0800 (PST) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, linuxppc-dev@lists.ozlabs.org, regressions@lists.linux.dev, Christian Zigotzky , stable@vger.kernel.org Subject: [PATCH 1/5] KVM: e500: always restore irqs Date: Sun, 12 Jan 2025 10:55:23 +0100 Message-ID: <20250112095527.434998-2-pbonzini@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250112095527.434998-1-pbonzini@redhat.com> References: <20250112095527.434998-1-pbonzini@redhat.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 Content-Type: text/plain; charset="utf-8" If find_linux_pte fails, IRQs will not be restored. This is unlikely to happen in practice since it would have been reported as hanging hosts, but it should of course be fixed anyway. Cc: stable@vger.kernel.org Reported-by: Sean Christopherson Signed-off-by: Paolo Bonzini Reviewed-by: Nicholas Piggin --- arch/powerpc/kvm/e500_mmu_host.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_h= ost.c index e5a145b578a4..6824e8139801 100644 --- a/arch/powerpc/kvm/e500_mmu_host.c +++ b/arch/powerpc/kvm/e500_mmu_host.c @@ -479,7 +479,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, if (pte_present(pte)) { wimg =3D (pte_val(pte) >> PTE_WIMGE_SHIFT) & MAS2_WIMGE_MASK; - local_irq_restore(flags); } else { local_irq_restore(flags); pr_err_ratelimited("%s: pte not present: gfn %lx,pfn %lx\n", @@ -488,8 +487,9 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, goto out; } } + local_irq_restore(flags); + writable =3D kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg); - kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe); =20 --=20 2.47.1 From nobody Sun Feb 8 22:30:42 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 86CBF1AA791 for ; Sun, 12 Jan 2025 09:55:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675743; cv=none; b=UHW5fpG/zL9iD0EEuRq2l0B4fyxKZc5yoOD7eYbi/acOWDqDikPmJAqaZ/yhrsnKG+JiyscU4FS4H/85OuE6fbNUfvxUq0vuPLqA7qaeCOcdQIRsLQvhi57MxSB3Jz2LXnIFeIjf1ob9iUffMySnEdjaUQnjJqyKODj3RfbX6Go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675743; c=relaxed/simple; bh=RUtYNoQ9BCw8rR1uJmMHYjgVRzEI8pcTkgifDneD3LU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sCuUt33pqgPhFIaOY/Zudet2H4xioWA2BD1OvnnQiJsZMqYmI8iAN5Cjk1A4jVjnUZemQLDqa5r78lyQ8lg4mY2nFMhAutYtWUbyqWKc9hYPwzsEbRW1maN6Zg8ceockenrTm0SxcXCsdvTNyBLU6ZQY/fA61vDGMJBEu4zwYZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=M0E9jxzt; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="M0E9jxzt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736675740; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ia6sv5K1rPK0oxjj8pHkn374uhH5Bs7h1d/ShzUvYRM=; b=M0E9jxztDdJkw2bbe0rYrqZDvrH1u2ZM7c1R4oURENTFJoeS48DBDLt5cOMWuqf6zwC82o KcPoEcGRNb0YuUZSA5ny+WjB1ZgIhb7HQwK8k1VtZfXw0tvHYXXLZaEZfPfyRH7tswFRPw VCoMq/C3RyC6Kv+YdZ/BRqWLLGlBWVk= Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-116-MSiWOux3MBuBZxTJ1vXCSw-1; Sun, 12 Jan 2025 04:55:39 -0500 X-MC-Unique: MSiWOux3MBuBZxTJ1vXCSw-1 X-Mimecast-MFC-AGG-ID: MSiWOux3MBuBZxTJ1vXCSw Received: by mail-ej1-f71.google.com with SMTP id a640c23a62f3a-aa6732a1af5so359839666b.3 for ; Sun, 12 Jan 2025 01:55:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736675737; x=1737280537; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ia6sv5K1rPK0oxjj8pHkn374uhH5Bs7h1d/ShzUvYRM=; b=xTs/beEt2z5u1qWbzg1efKqFEMK7uyvN0+ZELGnm2MlC+eWZUsFN2ngdCVDXX0C+5d voVCEo6eVKHUeLoZCTDuoYTacF3jD0XQFpvBPmRBRI8IUoM75txEcp39vSNpuawFPVxb 206S5e8SfrE0Ojz9JdRWw3kuK3oL2x1xvKc5BSP74UfoWi1/ptNUChEh+f3aRo5kBcM5 p+52v3eKIF0UPHo0fNsJG1bjKChtOfhUBKIPbbBzWPh8rQanYxZYwSg32dK63mM90FdC KSBBGV7fp9g16KWUIUSy7BiMR+m76aUXDqhFiMEBJAXXbrkgOjVBPpw1g7o2p55eh+9A m7Rw== X-Gm-Message-State: AOJu0Yw5HIAijaAVoOw7x8eMK5K8QNS8dQGX9y4KcDSPmKOD3Y8lnGvH s/nVFYgF1zFGcLujeGpCLt++0QGIy1a0enA5AnGVY1BwTRTbRxS5jYfWBBS7pJa5cj08Q8HJ09o G9WlGBwRm2/pyv93SZF76s3h8tIv1vUEjDv/Fp8OUJJxOirVGQ1Ou9dgCQe5sl4WqNpEfGUE8Nm B5XcLsIZsp9HoOTAN/u0vZ5FunliA7cQN7FFHXBY2skkeaLu77 X-Gm-Gg: ASbGnctF12idqfkD6V961w3FrfRi6/Ah9pGQ5KgM7iizb/oFFnaVxzcYh7kGKPjYH1r aXFsCYpsCGX5BPeYu5ZkITHbQVu9fMU+LVPAYK1mvLSthJfaqkNgRYvOAedSEMvgxITIp59djJA h2aw/VIHauaMoF619E1196Psno0+9Hoj4rhHYtGVR3VorNp+uAgWCBCg/zZprJUz4CO5nkMHD5s ZBdHsFq+eV8P4v50DelPfPo++gV9dK4Nd/3akeUQYdMR//bebFgMtu0Kpg= X-Received: by 2002:a17:906:478f:b0:aab:dc3e:1c84 with SMTP id a640c23a62f3a-ab2ab703f93mr1611128966b.17.1736675736696; Sun, 12 Jan 2025 01:55:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IE57lWwmpDxmyLrpFomxsQp5nUpO/tCN5jrf13BA6wccxa5tYF5ClNyyJ2YVR15koS+dU7MVg== X-Received: by 2002:a17:906:478f:b0:aab:dc3e:1c84 with SMTP id a640c23a62f3a-ab2ab703f93mr1611127466b.17.1736675736279; Sun, 12 Jan 2025 01:55:36 -0800 (PST) Received: from [192.168.10.3] ([151.62.105.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2c905e283sm356143866b.31.2025.01.12.01.55.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jan 2025 01:55:34 -0800 (PST) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, linuxppc-dev@lists.ozlabs.org, regressions@lists.linux.dev, Christian Zigotzky Subject: [PATCH 2/5] KVM: e500: use shadow TLB entry as witness for writability Date: Sun, 12 Jan 2025 10:55:24 +0100 Message-ID: <20250112095527.434998-3-pbonzini@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250112095527.434998-1-pbonzini@redhat.com> References: <20250112095527.434998-1-pbonzini@redhat.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 Content-Type: text/plain; charset="utf-8" kvmppc_e500_ref_setup is returning whether the guest TLB entry is writable, which is than passed to kvm_release_faultin_page. This makes little sense for two reasons: first, because the function sets up the private data for the page and the return value feels like it has been bolted on the side; second, because what really matters is whether the _shadow_ TLB entry is writable. If it is not writable, the page can be released as non-dirty. Shift from using tlbe_is_writable(gtlbe) to doing the same check on the shadow TLB entry. Signed-off-by: Paolo Bonzini --- arch/powerpc/kvm/e500_mmu_host.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_h= ost.c index 6824e8139801..c266c02f120f 100644 --- a/arch/powerpc/kvm/e500_mmu_host.c +++ b/arch/powerpc/kvm/e500_mmu_host.c @@ -242,7 +242,7 @@ static inline int tlbe_is_writable(struct kvm_book3e_20= 6_tlb_entry *tlbe) return tlbe->mas7_3 & (MAS3_SW|MAS3_UW); } =20 -static inline bool kvmppc_e500_ref_setup(struct tlbe_ref *ref, +static inline void kvmppc_e500_ref_setup(struct tlbe_ref *ref, struct kvm_book3e_206_tlb_entry *gtlbe, kvm_pfn_t pfn, unsigned int wimg) { @@ -251,8 +251,6 @@ static inline bool kvmppc_e500_ref_setup(struct tlbe_re= f *ref, =20 /* Use guest supplied MAS2_G and MAS2_E */ ref->flags |=3D (gtlbe->mas2 & MAS2_ATTRIB_MASK) | wimg; - - return tlbe_is_writable(gtlbe); } =20 static inline void kvmppc_e500_ref_release(struct tlbe_ref *ref) @@ -489,9 +487,10 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc= _vcpu_e500 *vcpu_e500, } local_irq_restore(flags); =20 - writable =3D kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg); + kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg); kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe); + writable =3D tlbe_is_writable(stlbe); =20 /* Clear i-cache for new pages */ kvmppc_mmu_flush_icache(pfn); --=20 2.47.1 From nobody Sun Feb 8 22:30:42 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 049741AF0CA for ; Sun, 12 Jan 2025 09:55:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675746; cv=none; b=SD1smz86/z2XhEJ3aI9sDZlxm6j7Swus7zLoLGl3pkHokASquWO8W1IyL+n3sA0IQIzmwu3GdMy07bHD2RBCQaGchoyxfVGt7+XQ63Gmf4tbzk6A+m7eSYXrI0Now3dXL7jTcPCKJdcT3wIkYn+WqyMHt4tPDfYXE5pstxm2lQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675746; c=relaxed/simple; bh=PYlVa2Y/YXHDakzTrdegPPAivF2UKPgqtms42a4RRMM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2qskWzaJgdbOld0xrsTCLc3YDiPzvxo4wfsjQEdGBbrLKh8nodXCNjwUUFRFFCWNGLReFU+2Qk20eqZ5j2qy+9DlsCKJ5OADtRpEF/jLmct1Eqy6ctAVe2VuqwKeBCRHKEl9+bgV7koc4wne96maoHNWlnh53SEoguhLuIR8Gg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=LoYm9RtV; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="LoYm9RtV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736675744; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TZOi2vhUk9IqOWLL4VjvE3yvErD9voRzbqxDd4bb0e4=; b=LoYm9RtV4RrN6cw32qPGbNKo2ZZzdt6rvZFUEeHp1la1kcD3ObWCN9SeFNXNIVqNHNqXWb aR6F+IbY15OKEMFsNmcu+8AAWBHNTLtIvtec0d/G7YdyrC3z1f9BlkVu8apstA8pYGGJAH GErHwimyuVIt6eEvGcDKLeB/HXpG+uw= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-61-DWYmZ12KNuaF0N4dOQDrxg-1; Sun, 12 Jan 2025 04:55:42 -0500 X-MC-Unique: DWYmZ12KNuaF0N4dOQDrxg-1 X-Mimecast-MFC-AGG-ID: DWYmZ12KNuaF0N4dOQDrxg Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-aaf8f016bb1so318041766b.2 for ; Sun, 12 Jan 2025 01:55:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736675740; x=1737280540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TZOi2vhUk9IqOWLL4VjvE3yvErD9voRzbqxDd4bb0e4=; b=wbR2QknGVDrjy/3UCq7fN+lLzRKe4Eq5utEVnifyrhQGrGL6ZljhLDlaqgfki4vwZy yUbZYh0OJ9kWbDsu0HJ6Nh7xE2rD9jYNFmupdPIjz7Rd8ft8Z8LnMdgRAVh28kQFEGGz w9CEFSaP4xYss+/fV7qV3gGPRWxjaGv9Sj1CHCwXuxmyyxcMfJwzJDZRSL+1hAfi6AlW njMm9g0PH+/a4CphgY8PGl9WQNDXVjYxOyyAx9xdkIbB/WOdpLDengT5K61HAWnnaQbV 9+IncBVwFF4jeGWcMSzGHJB7qwaS1ZXc+cLFYoApX+jVj97hEmK2cntUXJy+q+LayPKT /Orw== X-Gm-Message-State: AOJu0YwEcDzH7NwBPD4Myo1Eu2HvIiqMIBXYUyUCDwCcA7NDOpLpdp88 vhktWXUF/SYqITdqrGmi5NwCzEeQ1a2dpZ8Eu7c2paIIX68WKG18JiywAoDt5AHEDdJwwYfFJqg 4nGamsLETuy2/Y1uq1og1ij6MPcM16np4yLKzeqxk6oIe4iCETemDyuqzj561MBrNg1aZL9n84x MR+aI8DNNRQAngAdBdxyNAj9XIWiqEDTyCIfPRXbcg2l0snEyG X-Gm-Gg: ASbGncvqLO1/MZe/bG05tRWq7R0XW+boo78QifV0XCCivM+Ynj3dfNsOLmcj38r+d92 Cu+/1mYvPEQts81XKMY4qtQreC0B289XN7g48FZPzPaaflDMvJwdIUnMp8JwTk7XCyhopcnN0Lg +ycSgnnjS2dk8cez0iZ+6ctJVnCx/wDKDQHgeeAKmghn9dC16NlSuYESzA9JRzm982cpVTMfq4O n93N+fu5C9tFQrJxvU5zGMpuiZv8LSSbHDFgSw5Z/suKxzGxPTU7QTqpZg= X-Received: by 2002:a17:906:f58d:b0:aab:f014:fc9a with SMTP id a640c23a62f3a-ab2ab703f01mr1331418766b.22.1736675739837; Sun, 12 Jan 2025 01:55:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IGYiuGhI+4msFAOUKvZ179BJ3utaua0uWFviKs7CY/tGCvPWvPtqZvorhRWNQWYuMTsu6u8Aw== X-Received: by 2002:a17:906:f58d:b0:aab:f014:fc9a with SMTP id a640c23a62f3a-ab2ab703f01mr1331416766b.22.1736675739453; Sun, 12 Jan 2025 01:55:39 -0800 (PST) Received: from [192.168.10.3] ([151.62.105.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2e8c753fdsm226853266b.184.2025.01.12.01.55.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jan 2025 01:55:37 -0800 (PST) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, linuxppc-dev@lists.ozlabs.org, regressions@lists.linux.dev, Christian Zigotzky Subject: [PATCH 3/5] KVM: e500: track host-writability of pages Date: Sun, 12 Jan 2025 10:55:25 +0100 Message-ID: <20250112095527.434998-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250112095527.434998-1-pbonzini@redhat.com> References: <20250112095527.434998-1-pbonzini@redhat.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 Content-Type: text/plain; charset="utf-8" Add the possibility of marking a page so that the UW and SW bits are force-cleared. This is stored in the private info so that it persists across multiple calls to kvmppc_e500_setup_stlbe. Signed-off-by: Paolo Bonzini --- arch/powerpc/kvm/e500.h | 2 ++ arch/powerpc/kvm/e500_mmu_host.c | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/kvm/e500.h b/arch/powerpc/kvm/e500.h index 6d0d329cbb35..f9acf866c709 100644 --- a/arch/powerpc/kvm/e500.h +++ b/arch/powerpc/kvm/e500.h @@ -34,6 +34,8 @@ enum vcpu_ftr { #define E500_TLB_BITMAP (1 << 30) /* TLB1 entry is mapped by host TLB0 */ #define E500_TLB_TLB0 (1 << 29) +/* entry is writable on the host */ +#define E500_TLB_WRITABLE (1 << 28) /* bits [6-5] MAS2_X1 and MAS2_X0 and [4-0] bits for WIMGE */ #define E500_TLB_MAS2_ATTR (0x7f) =20 diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_h= ost.c index c266c02f120f..b1be39639d4a 100644 --- a/arch/powerpc/kvm/e500_mmu_host.c +++ b/arch/powerpc/kvm/e500_mmu_host.c @@ -45,11 +45,14 @@ static inline unsigned int tlb1_max_shadow_size(void) return host_tlb_params[1].entries - tlbcam_index - 1; } =20 -static inline u32 e500_shadow_mas3_attrib(u32 mas3, int usermode) +static inline u32 e500_shadow_mas3_attrib(u32 mas3, bool writable, int use= rmode) { /* Mask off reserved bits. */ mas3 &=3D MAS3_ATTRIB_MASK; =20 + if (!writable) + mas3 &=3D ~(MAS3_UW|MAS3_SW); + #ifndef CONFIG_KVM_BOOKE_HV if (!usermode) { /* Guest is in supervisor mode, @@ -244,10 +247,13 @@ static inline int tlbe_is_writable(struct kvm_book3e_= 206_tlb_entry *tlbe) =20 static inline void kvmppc_e500_ref_setup(struct tlbe_ref *ref, struct kvm_book3e_206_tlb_entry *gtlbe, - kvm_pfn_t pfn, unsigned int wimg) + kvm_pfn_t pfn, unsigned int wimg, + bool writable) { ref->pfn =3D pfn; ref->flags =3D E500_TLB_VALID; + if (writable) + ref->flags |=3D E500_TLB_WRITABLE; =20 /* Use guest supplied MAS2_G and MAS2_E */ ref->flags |=3D (gtlbe->mas2 & MAS2_ATTRIB_MASK) | wimg; @@ -303,6 +309,7 @@ static void kvmppc_e500_setup_stlbe( { kvm_pfn_t pfn =3D ref->pfn; u32 pr =3D vcpu->arch.shared->msr & MSR_PR; + bool writable =3D !!(ref->flags & E500_TLB_WRITABLE); =20 BUG_ON(!(ref->flags & E500_TLB_VALID)); =20 @@ -310,7 +317,7 @@ static void kvmppc_e500_setup_stlbe( stlbe->mas1 =3D MAS1_TSIZE(tsize) | get_tlb_sts(gtlbe) | MAS1_VALID; stlbe->mas2 =3D (gvaddr & MAS2_EPN) | (ref->flags & E500_TLB_MAS2_ATTR); stlbe->mas7_3 =3D ((u64)pfn << PAGE_SHIFT) | - e500_shadow_mas3_attrib(gtlbe->mas7_3, pr); + e500_shadow_mas3_attrib(gtlbe->mas7_3, writable, pr); } =20 static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e50= 0, @@ -487,7 +494,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, } local_irq_restore(flags); =20 - kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg); + kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg, true); kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe); writable =3D tlbe_is_writable(stlbe); --=20 2.47.1 From nobody Sun Feb 8 22:30:42 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 41F801B0F04 for ; Sun, 12 Jan 2025 09:55:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675748; cv=none; b=V9W7hAzW+MJUtEamJZSA2ZuD1z0XytrQjtMYkXaap/nwpaeVqpcLFHExKANIBhSOaOgX2Hbpqrk1xUjtVDcuXDVx7lPqiQIiTkfKL5tSIeDQ6+r0OtFjp5c72HIoZVtL2xkbHdr8OEXyk1+elD7IHpIOmbRNN3PUJ3PYkEkBZuE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675748; c=relaxed/simple; bh=2SDn49FT0scN9brUsaT1uzAqhvETvcU7A9zYxcIRZEU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lvfOJF86ZTh7GWE7JxXlYmyFJon7KBs+FcEj6b45v/2x3E1vbKRZ+Da9gT+1HujlugwOwaYpalE+tlhCyq5OHiDHw3z+1alxq3BtDD+ejx2kEfDdXp1uyvs9lIUYLWY20pkEressK5nMbzWdA45xnmh2kB6ZpbqpEYmUc6OYA2k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=OBoMJWZk; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OBoMJWZk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736675746; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=53tOW+li8LibaZME0FEdug9t3b3VYRiHfAOklFpMuVY=; b=OBoMJWZkdwyDhNJsV0PZYmWQsASDwhRFLPZSSePk2zxoXwJYjyCyhcB7gq7HIuDqgSNiC5 yC0KxiiwRatQkFDxcAIHoUu3yiXveetcDiUBz3a4aRu0IAnLLa3ZaSs/7DIFTzl0+DKPgi fDjF4tO0Y/hjZo/Sk0EUbK9gSPa2bhs= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-528-3t3gc32eO7Oe7ng13PhumA-1; Sun, 12 Jan 2025 04:55:44 -0500 X-MC-Unique: 3t3gc32eO7Oe7ng13PhumA-1 X-Mimecast-MFC-AGG-ID: 3t3gc32eO7Oe7ng13PhumA Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-aa68203d288so355138066b.1 for ; Sun, 12 Jan 2025 01:55:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736675743; x=1737280543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=53tOW+li8LibaZME0FEdug9t3b3VYRiHfAOklFpMuVY=; b=uR7VCvyzVSL/23IFQzxE0+Azoc220bpvA2Oj2Ay5x14lH3v+6hbo4YQrSZ8dRp1cqQ BUqlMRoV8p+KArz8l+9VgSJP28vKSC1fCtYdvpHT32lM/vLE5vVeXgsxq9q87jJLlXQB XhqezUea5bCYFHdIVUKYr5+1nviFTbXhMsNOq5p4wfpVOsUhi5d0jF7nQzWPKA5SObzU Wx5W02YvZEE4Hpu8QzIdt4IYVGAyHc8zl2EX4//mrWuoKxUTYFctXP/RoPESzkygxDFD h85sz3RhlhXqlGSSswusEO8ev4DRt+63SfT6oqf8wMC2kcVTcVFGx7cyKAyVwg6Q75yz qFiw== X-Gm-Message-State: AOJu0Yz0L549Q6IFs1c+PSnWHv+b2Oaki+T4ZfiRP6Izln/r2KCvQGRf UK+IUIocVJvF0nG4ta7SQpuZx0O890tRjMDnXMbS3Wcl+sWHViR8iSN5D+ANfPUu18/3FaHTP7Q 0NSjougd2sO/MBhqPYism8KuiHF0aOfS/5M2vkDdtwLQXrz1J10SJRegp9LtjP9J+Fnk7mL1uh5 Z8jmN8tZJivvP7rReNpmbmyyT/IN9dnLldVjcsAMtZV2ySsNmH X-Gm-Gg: ASbGncvQ8jmx3NvLlxXTL5oIjN0bBbxINsCWyS4EA4xjnF3mODai6Mr07aOMdolNsMt hkFFIaFiRS3RIUwP+H2tAmYu39PKeTYjuk+Cxz/aaZbCBJ+p6eG9VmXzDzqc93tTS++Q1mM6vGQ b5cXmL1mYU2dMCu3iF1DTSz2glLlWUNTu680My+0XKlSlSv5Mc9w0yC5RKkpQLOngU3Iew6N0YZ bq9jBkGB5eGnsLkHZx7+ZzpDT3BOuirf+5qeT+cSoe6IkzCUkMNuW6vess= X-Received: by 2002:a17:907:7f1e:b0:aab:c78c:a7ed with SMTP id a640c23a62f3a-ab2abde30a8mr1561037866b.49.1736675742937; Sun, 12 Jan 2025 01:55:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IFGJlu2i7msf3zvSzymzm23VI3HB+hujDx3jJa79Xm9BhmbLM60jNLT6BqjxStf0JBpA+edAQ== X-Received: by 2002:a17:907:7f1e:b0:aab:c78c:a7ed with SMTP id a640c23a62f3a-ab2abde30a8mr1561036366b.49.1736675742572; Sun, 12 Jan 2025 01:55:42 -0800 (PST) Received: from [192.168.10.3] ([151.62.105.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2c905e2ebsm363088866b.10.2025.01.12.01.55.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jan 2025 01:55:40 -0800 (PST) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, linuxppc-dev@lists.ozlabs.org, regressions@lists.linux.dev, Christian Zigotzky Subject: [PATCH 4/5] KVM: e500: map readonly host pages for read Date: Sun, 12 Jan 2025 10:55:26 +0100 Message-ID: <20250112095527.434998-5-pbonzini@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250112095527.434998-1-pbonzini@redhat.com> References: <20250112095527.434998-1-pbonzini@redhat.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 Content-Type: text/plain; charset="utf-8" The new __kvm_faultin_pfn() function is upset by the fact that e500 KVM ignores host page permissions - __kvm_faultin requires a "writable" outgoing argument, but e500 KVM is nonchalantly passing NULL. If the host page permissions do not include writability, the shadow TLB entry is forcibly mapped read-only. Signed-off-by: Paolo Bonzini --- arch/powerpc/kvm/e500_mmu_host.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_h= ost.c index b1be39639d4a..b38679e5821b 100644 --- a/arch/powerpc/kvm/e500_mmu_host.c +++ b/arch/powerpc/kvm/e500_mmu_host.c @@ -374,6 +374,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, unsigned long slot_start, slot_end; =20 pfnmap =3D 1; + writable =3D vma->vm_flags & VM_WRITE; =20 start =3D vma->vm_pgoff; end =3D start + @@ -449,7 +450,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, =20 if (likely(!pfnmap)) { tsize_pages =3D 1UL << (tsize + 10 - PAGE_SHIFT); - pfn =3D __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, NULL, &page); + pfn =3D __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, &writable, &page); if (is_error_noslot_pfn(pfn)) { if (printk_ratelimit()) pr_err("%s: real page not found for gfn %lx\n", @@ -494,7 +495,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, } local_irq_restore(flags); =20 - kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg, true); + kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg, writable); kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe); writable =3D tlbe_is_writable(stlbe); --=20 2.47.1 From nobody Sun Feb 8 22:30:42 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 135E219F13F for ; Sun, 12 Jan 2025 09:55:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675752; cv=none; b=Nfk4pxVy2p4Cd2ATqSNKXDBJboRbdjI7fiJZxsImoKJdtCKDPYQqlOTGCiMj74oXYAdSgA1VP1T+9EGhBMjm4japKP1GreetEbHeExpOQgs5HKL0grrlebr1BTeonHyhNoXDPjH+DEnjN4c+YmD5Fx4DNPEl5pEl3iavVO7rEZo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736675752; c=relaxed/simple; bh=hLGdHo4tiVX9rnua7cU6TNNXH51b2lPfYTsAAypovsw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Go9bz/vxW+JQkka3girdDhScPcVxMc3bwqUD8QQSmg1Ikv3JpeNz999PffqOfgH7f+8ipe6OCMD9pjbFt4mfBmgD5aIUXhayd5ebNJoYTIDUUNn+tGIBL0pCv+/Fov02QimznsrlTr+aYoyBu591P/P0NhU9O4JPL7kirm/uHf4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=iKhiMsHo; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="iKhiMsHo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736675750; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Oz+x9gnVbLji0IqeGhkpb/XHZ9boA09CCOsisxRXiHY=; b=iKhiMsHoKU/s2Oiy0L/suSrrnUtvLQMqnpGeqYVXdRSSZtcDX0LM7QkZ7nlJB+GK3x+eX8 UrUvS5ncd5dr0T2tpHUvAnd8lIAt9Z9waekgknqVnbSw5A5q2IDdsSXJG1QBxvHh18PzVk v4sl2KJSI/bQoOYNFr14qKl17CyMq2w= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-458-Ht7RED5xN9WziREiraUyxA-1; Sun, 12 Jan 2025 04:55:48 -0500 X-MC-Unique: Ht7RED5xN9WziREiraUyxA-1 X-Mimecast-MFC-AGG-ID: Ht7RED5xN9WziREiraUyxA Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-5d3ff30b566so3230315a12.1 for ; Sun, 12 Jan 2025 01:55:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736675746; x=1737280546; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Oz+x9gnVbLji0IqeGhkpb/XHZ9boA09CCOsisxRXiHY=; b=BM2k648KrsGOrXMNFAD70xe5UuNCYxFmXLta2QeWkj/rOsoO5gQNhPK/vdqCtCgXvt ndH6JaOG3SDpxA/ez+e9p2ynZiyfZqaTJA2fybI/9/VxTNk0skc2cx5EL+pd4OV8zaNj LErvw3ZDZlMOU50q3xsDcUwmt3qB/L78f0vmUl74ZjDpppxiProqsR3iH/IgC528OZx8 0dwoyvd6O3E4G2KWJVmITYtxfG9hFbKbIbHozVCbS/9fbzvqHYWLs6pqrX2I4QiYy5BK Eo3kOrWc6u0IC1IF3CZANCQUKM2cvRmWRzCPuaigLJd5cEL5QkEEfjrzkXDixuqHKl8X 4ALg== X-Gm-Message-State: AOJu0YyBxZh54ZGpK9MR+SK6B+7aBrUaEBmicXtbpVXithW6XV5Syns1 /SlhB6+znA1xqoWvelV0PyI0r8cwSDz5Ik12Mv/P5MMLnLSChzP7ZA/QdrxtM8ojQRZ77KzQqXX PyTm0idIGmENLOcWt+9Ta6eSiDpDXnwhctb48d7C+Q3oo3yhFFWAPqJslyLSGRHzq26/lj4twDb Bc8k987hHFsj4bEbWkatohOmFBMZvNLnKXzzMcKuk1n3HJ+wXJ X-Gm-Gg: ASbGncuYWtxc+8F3hUQ7S1sN5/FSp2ksLdrRJhrb54W3b7S+z27Vp/P1voh/M2Mhi4o aumsu9nG/TcgwLIxaF20NeapOzjCO+P9CL6u349ONxJlQHpt33O3TBMsrDNHM1oc9iGAVdbSGoY qNrUbUAgEvPAQVHOWmjJag3p9BbIDUA6F8KWtvE/fRcSo2xIq5cotC0Fm1BAnh2oXt9W8y798gd yeyCZPgJfik5+fb302k06I5slrdOC3L0M0WgIb64ErPAkzhhoDt0PLxhZI= X-Received: by 2002:a05:6402:51d0:b0:5d2:7346:3ecb with SMTP id 4fb4d7f45d1cf-5d972e08366mr15294473a12.12.1736675745818; Sun, 12 Jan 2025 01:55:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IHwE26l9isFf3nQZmRGpyTPcP8J8/ysUQYlXL5+4ti/a8bZoN63209mlmD5afvsephqydEaqg== X-Received: by 2002:a05:6402:51d0:b0:5d2:7346:3ecb with SMTP id 4fb4d7f45d1cf-5d972e08366mr15294450a12.12.1736675745359; Sun, 12 Jan 2025 01:55:45 -0800 (PST) Received: from [192.168.10.3] ([151.62.105.73]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5d9900c3fccsm3491359a12.21.2025.01.12.01.55.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jan 2025 01:55:43 -0800 (PST) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, linuxppc-dev@lists.ozlabs.org, regressions@lists.linux.dev, Christian Zigotzky Subject: [PATCH 5/5] KVM: e500: perform hugepage check after looking up the PFN Date: Sun, 12 Jan 2025 10:55:27 +0100 Message-ID: <20250112095527.434998-6-pbonzini@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250112095527.434998-1-pbonzini@redhat.com> References: <20250112095527.434998-1-pbonzini@redhat.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 Content-Type: text/plain; charset="utf-8" e500 KVM tries to bypass __kvm_faultin_pfn() in order to map VM_PFNMAP VMAs as huge pages. This is a Bad Idea because VM_PFNMAP VMAs could become noncontiguous as a result of callsto remap_pfn_range(). Instead, use the already existing host PTE lookup to retrieve a valid host-side mapping level after __kvm_faultin_pfn() has returned. Then find the largest size that will satisfy the guest's request while staying within a single host PTE. Signed-off-by: Paolo Bonzini --- arch/powerpc/kvm/e500_mmu_host.c | 178 ++++++++++++------------------- 1 file changed, 69 insertions(+), 109 deletions(-) diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_h= ost.c index b38679e5821b..06caf8bbbe2b 100644 --- a/arch/powerpc/kvm/e500_mmu_host.c +++ b/arch/powerpc/kvm/e500_mmu_host.c @@ -326,15 +326,14 @@ static inline int kvmppc_e500_shadow_map(struct kvmpp= c_vcpu_e500 *vcpu_e500, struct tlbe_ref *ref) { struct kvm_memory_slot *slot; - unsigned long pfn =3D 0; /* silence GCC warning */ + unsigned int psize; + unsigned long pfn; struct page *page =3D NULL; unsigned long hva; - int pfnmap =3D 0; int tsize =3D BOOK3E_PAGESZ_4K; int ret =3D 0; unsigned long mmu_seq; struct kvm *kvm =3D vcpu_e500->vcpu.kvm; - unsigned long tsize_pages =3D 0; pte_t *ptep; unsigned int wimg =3D 0; pgd_t *pgdir; @@ -356,111 +355,12 @@ static inline int kvmppc_e500_shadow_map(struct kvmp= pc_vcpu_e500 *vcpu_e500, slot =3D gfn_to_memslot(vcpu_e500->vcpu.kvm, gfn); hva =3D gfn_to_hva_memslot(slot, gfn); =20 - if (tlbsel =3D=3D 1) { - struct vm_area_struct *vma; - mmap_read_lock(kvm->mm); - - vma =3D find_vma(kvm->mm, hva); - if (vma && hva >=3D vma->vm_start && - (vma->vm_flags & VM_PFNMAP)) { - /* - * This VMA is a physically contiguous region (e.g. - * /dev/mem) that bypasses normal Linux page - * management. Find the overlap between the - * vma and the memslot. - */ - - unsigned long start, end; - unsigned long slot_start, slot_end; - - pfnmap =3D 1; - writable =3D vma->vm_flags & VM_WRITE; - - start =3D vma->vm_pgoff; - end =3D start + - vma_pages(vma); - - pfn =3D start + ((hva - vma->vm_start) >> PAGE_SHIFT); - - slot_start =3D pfn - (gfn - slot->base_gfn); - slot_end =3D slot_start + slot->npages; - - if (start < slot_start) - start =3D slot_start; - if (end > slot_end) - end =3D slot_end; - - tsize =3D (gtlbe->mas1 & MAS1_TSIZE_MASK) >> - MAS1_TSIZE_SHIFT; - - /* - * e500 doesn't implement the lowest tsize bit, - * or 1K pages. - */ - tsize =3D max(BOOK3E_PAGESZ_4K, tsize & ~1); - - /* - * Now find the largest tsize (up to what the guest - * requested) that will cover gfn, stay within the - * range, and for which gfn and pfn are mutually - * aligned. - */ - - for (; tsize > BOOK3E_PAGESZ_4K; tsize -=3D 2) { - unsigned long gfn_start, gfn_end; - tsize_pages =3D 1UL << (tsize - 2); - - gfn_start =3D gfn & ~(tsize_pages - 1); - gfn_end =3D gfn_start + tsize_pages; - - if (gfn_start + pfn - gfn < start) - continue; - if (gfn_end + pfn - gfn > end) - continue; - if ((gfn & (tsize_pages - 1)) !=3D - (pfn & (tsize_pages - 1))) - continue; - - gvaddr &=3D ~((tsize_pages << PAGE_SHIFT) - 1); - pfn &=3D ~(tsize_pages - 1); - break; - } - } else if (vma && hva >=3D vma->vm_start && - is_vm_hugetlb_page(vma)) { - unsigned long psize =3D vma_kernel_pagesize(vma); - - tsize =3D (gtlbe->mas1 & MAS1_TSIZE_MASK) >> - MAS1_TSIZE_SHIFT; - - /* - * Take the largest page size that satisfies both host - * and guest mapping - */ - tsize =3D min(__ilog2(psize) - 10, tsize); - - /* - * e500 doesn't implement the lowest tsize bit, - * or 1K pages. - */ - tsize =3D max(BOOK3E_PAGESZ_4K, tsize & ~1); - } - - mmap_read_unlock(kvm->mm); - } - - if (likely(!pfnmap)) { - tsize_pages =3D 1UL << (tsize + 10 - PAGE_SHIFT); - pfn =3D __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, &writable, &page); - if (is_error_noslot_pfn(pfn)) { - if (printk_ratelimit()) - pr_err("%s: real page not found for gfn %lx\n", - __func__, (long)gfn); - return -EINVAL; - } - - /* Align guest and physical address to page map boundaries */ - pfn &=3D ~(tsize_pages - 1); - gvaddr &=3D ~((tsize_pages << PAGE_SHIFT) - 1); + pfn =3D __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, &writable, &page); + if (is_error_noslot_pfn(pfn)) { + if (printk_ratelimit()) + pr_err("%s: real page not found for gfn %lx\n", + __func__, (long)gfn); + return -EINVAL; } =20 spin_lock(&kvm->mmu_lock); @@ -478,7 +378,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_= vcpu_e500 *vcpu_e500, * can't run hence pfn won't change. */ local_irq_save(flags); - ptep =3D find_linux_pte(pgdir, hva, NULL, NULL); + ptep =3D find_linux_pte(pgdir, hva, NULL, &psize); if (ptep) { pte_t pte =3D READ_ONCE(*ptep); =20 @@ -495,6 +395,66 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc= _vcpu_e500 *vcpu_e500, } local_irq_restore(flags); =20 + if (psize && tlbsel =3D=3D 1) { + unsigned long psize_pages, tsize_pages; + unsigned long start, end; + unsigned long slot_start, slot_end; + + psize_pages =3D 1UL << (psize - PAGE_SHIFT); + start =3D pfn & ~(psize_pages - 1); + end =3D start + psize_pages; + + slot_start =3D pfn - (gfn - slot->base_gfn); + slot_end =3D slot_start + slot->npages; + + if (start < slot_start) + start =3D slot_start; + if (end > slot_end) + end =3D slot_end; + + tsize =3D (gtlbe->mas1 & MAS1_TSIZE_MASK) >> + MAS1_TSIZE_SHIFT; + + /* + * Any page size that doesn't satisfy the host mapping + * will fail the start and end tests. + */ + tsize =3D min(psize - PAGE_SHIFT + BOOK3E_PAGESZ_4K, tsize); + + /* + * e500 doesn't implement the lowest tsize bit, + * or 1K pages. + */ + tsize =3D max(BOOK3E_PAGESZ_4K, tsize & ~1); + + /* + * Now find the largest tsize (up to what the guest + * requested) that will cover gfn, stay within the + * range, and for which gfn and pfn are mutually + * aligned. + */ + + for (; tsize > BOOK3E_PAGESZ_4K; tsize -=3D 2) { + unsigned long gfn_start, gfn_end; + tsize_pages =3D 1UL << (tsize - 2); + + gfn_start =3D gfn & ~(tsize_pages - 1); + gfn_end =3D gfn_start + tsize_pages; + + if (gfn_start + pfn - gfn < start) + continue; + if (gfn_end + pfn - gfn > end) + continue; + if ((gfn & (tsize_pages - 1)) !=3D + (pfn & (tsize_pages - 1))) + continue; + + gvaddr &=3D ~((tsize_pages << PAGE_SHIFT) - 1); + pfn &=3D ~(tsize_pages - 1); + break; + } + } + kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg, writable); kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe); --=20 2.47.1