From nobody Wed Apr 15 20:16:14 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 77E1EC433FE for ; Mon, 21 Nov 2022 06:51:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229610AbiKUGvQ (ORCPT ); Mon, 21 Nov 2022 01:51:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229446AbiKUGvM (ORCPT ); Mon, 21 Nov 2022 01:51:12 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38644186D0 for ; Sun, 20 Nov 2022 22:51:11 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D119560ED2 for ; Mon, 21 Nov 2022 06:51:10 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2AC29C433D6; Mon, 21 Nov 2022 06:51:07 +0000 (UTC) From: Huacai Chen To: Huacai Chen Cc: loongarch@lists.linux.dev, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , linux-kernel@vger.kernel.org, Huacai Chen Subject: [PATCH] LoongArch: Set _PAGE_DIRTY only if _PAGE_MODIFIED is set in {pmd,pte}_mkwrite() Date: Mon, 21 Nov 2022 14:48:26 +0800 Message-Id: <20221121064826.2115193-1-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Set _PAGE_DIRTY only if _PAGE_MODIFIED is set in {pmd,pte}_mkwrite(). Otherwise, _PAGE_DIRTY silences the TLB modify exception and make us have no chance to mark a pmd/pte dirty (_PAGE_MODIFIED) for software. Signed-off-by: Huacai Chen Reviewed-by: Guo Ren --- arch/loongarch/include/asm/pgtable.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/= asm/pgtable.h index debbe116f105..aa0e0e0d4ee5 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -357,7 +357,9 @@ static inline pte_t pte_mkdirty(pte_t pte) =20 static inline pte_t pte_mkwrite(pte_t pte) { - pte_val(pte) |=3D (_PAGE_WRITE | _PAGE_DIRTY); + pte_val(pte) |=3D _PAGE_WRITE; + if (pte_val(pte) & _PAGE_MODIFIED) + pte_val(pte) |=3D _PAGE_DIRTY; return pte; } =20 @@ -457,7 +459,9 @@ static inline int pmd_write(pmd_t pmd) =20 static inline pmd_t pmd_mkwrite(pmd_t pmd) { - pmd_val(pmd) |=3D (_PAGE_WRITE | _PAGE_DIRTY); + pmd_val(pmd) |=3D _PAGE_WRITE; + if (pmd_val(pmd) & _PAGE_MODIFIED) + pmd_val(pmd) |=3D _PAGE_DIRTY; return pmd; } =20 --=20 2.31.1