Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp918833pxt; Fri, 6 Aug 2021 18:01:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwUzcqTso1MWrEUAxrsn8sLOtrO7BBh2J9fCdeQdWAabILbkTRnp1Sh1g7LSjU7cmroyqS X-Received: by 2002:a05:6e02:ec1:: with SMTP id i1mr305308ilk.261.1628298077348; Fri, 06 Aug 2021 18:01:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628298077; cv=none; d=google.com; s=arc-20160816; b=xqF0WVESO45mM2FmBoIP3M0gIQZlNMCf4NbqE5nXfXw3+/IlPh7JJy2pReGO+9idzQ Z1WA0az2Hrw6SKLJ58RzduVcCN2h12uViBmHQxirGfKjRvtYvQGwKajZgREtSecMMrQ5 WdEJF85ypO9CHZo7L5HgM3fl5SlAucLKwkwXwYSg1PDTE8CNERUuYONPmOq9DUu8Kpuw zIZUTQsldVuCqibWrqxK4kUtKXVzH8IcV2yqbYHGY/JKJKFZ6KFDs6P5NHPOq0CCP/vv YNC3HWEiXYmYx4xpYwWOM9M8t8pxsGJw52lf0AAAN10DaNFVPIJOGN0sk2bkXy8vf0IT CKYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=GoljLkOxoiLSBsuanRQmDJ1J3afMQ/CNlGmfDTwwr6I=; b=htE43Um26McjsPzOr4Gba8N+L0gNUR1waz+sYz0rjgQs4mhTIleT+LsAc8HQ/Ax0GZ pPcKGG31ZpFheobVYBdbHmoIV2nRPOXlWL6/+ZFWXkkucOGw88IsSgpxqe25rkDqiDKO +Z4RGiyrSIl+UmNaO5et0irZWkFqbz1fV2H4Sb6BKEYTE7BF5Ez9P2eriFfwk+5LVrUV ifufCwld5ch+4HzH0rM2z4Hjm6opi0fhqX3FKAzeC3+0wvAHj+A+tH0haCFTe6I0eWu6 8CfHSyYFYTeoWrhrKWyPT9gEEeOZLM2MGwn5jKyGRSGmyptyCzCq6z/YA8uSOAxqORYc 20SQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a6si14884034ilv.81.2021.08.06.18.01.06; Fri, 06 Aug 2021 18:01:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229963AbhHGA67 (ORCPT + 99 others); Fri, 6 Aug 2021 20:58:59 -0400 Received: from foss.arm.com ([217.140.110.172]:42830 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229758AbhHGA67 (ORCPT ); Fri, 6 Aug 2021 20:58:59 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3CCE013D5; Fri, 6 Aug 2021 17:58:42 -0700 (PDT) Received: from e113632-lin.cambridge.arm.com (e113632-lin.cambridge.arm.com [10.1.194.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5FF8D3F66F; Fri, 6 Aug 2021 17:58:39 -0700 (PDT) From: Valentin Schneider To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rcu@vger.kernel.org, linux-rt-users@vger.kernel.org Cc: Catalin Marinas , Will Deacon , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Steven Rostedt , Daniel Bristot de Oliveira , Sebastian Andrzej Siewior , "Paul E. McKenney" , Frederic Weisbecker , Josh Triplett , Mathieu Desnoyers , Davidlohr Bueso , Lai Jiangshan , Joel Fernandes , Anshuman Khandual , Vincenzo Frascino , Steven Price , Ard Biesheuvel Subject: [PATCH v2 4/4] arm64: mm: Make arch_faults_on_old_pte() check for migratability Date: Sat, 7 Aug 2021 01:58:07 +0100 Message-Id: <20210807005807.1083943-5-valentin.schneider@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210807005807.1083943-1-valentin.schneider@arm.com> References: <20210807005807.1083943-1-valentin.schneider@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Running v5.13-rt1 on my arm64 Juno board triggers: [ 30.430643] WARNING: CPU: 4 PID: 1 at arch/arm64/include/asm/pgtable.h:985 do_set_pte (./arch/arm64/include/asm/pgtable.h:985 ./arch/arm64/include/asm/pgtable.h:997 mm/memory.c:3830) [ 30.430669] Modules linked in: [ 30.430679] CPU: 4 PID: 1 Comm: init Tainted: G W 5.13.0-rt1-00002-gcb994ad7c570 #35 [ 30.430690] Hardware name: ARM Juno development board (r0) (DT) [ 30.430695] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO BTYPE=--) [ 30.430874] Call trace: [ 30.430878] do_set_pte (./arch/arm64/include/asm/pgtable.h:985 ./arch/arm64/include/asm/pgtable.h:997 mm/memory.c:3830) [ 30.430886] filemap_map_pages (mm/filemap.c:3222) [ 30.430895] __handle_mm_fault (mm/memory.c:4006 mm/memory.c:4020 mm/memory.c:4153 mm/memory.c:4412 mm/memory.c:4547) [ 30.430904] handle_mm_fault (mm/memory.c:4645) [ 30.430912] do_page_fault (arch/arm64/mm/fault.c:507 arch/arm64/mm/fault.c:607) [ 30.430925] do_translation_fault (arch/arm64/mm/fault.c:692) [ 30.430936] do_mem_abort (arch/arm64/mm/fault.c:821) [ 30.430946] el0_ia (arch/arm64/kernel/entry-common.c:324) [ 30.430959] el0_sync_handler (arch/arm64/kernel/entry-common.c:431) [ 30.430967] el0_sync (arch/arm64/kernel/entry.S:744) [ 30.430977] irq event stamp: 1228384 [ 30.430981] hardirqs last enabled at (1228383): lock_page_memcg (mm/memcontrol.c:2005 (discriminator 1)) [ 30.430993] hardirqs last disabled at (1228384): el1_dbg (arch/arm64/kernel/entry-common.c:144 arch/arm64/kernel/entry-common.c:234) [ 30.431007] softirqs last enabled at (1228260): __local_bh_enable_ip (./arch/arm64/include/asm/irqflags.h:85 kernel/softirq.c:262) [ 30.431022] softirqs last disabled at (1228232): fpsimd_restore_current_state (./include/linux/bottom_half.h:19 arch/arm64/kernel/fpsimd.c:183 arch/arm64/kernel/fpsimd.c:1182) CONFIG_PREEMPT_RT turns the PTE lock into a sleepable spinlock. Since acquiring such a lock also disables migration, any per-CPU access done under the lock remains safe even if preemptible. This affects: filemap_map_pages() `\ do_set_pte() `\ arch_wants_old_prefaulted_pte() which checks preemptible() to figure out if the output of cpu_has_hw_af() (IOW the underlying CPU) will remain stable for the subsequent operations. Make it use is_pcpu_safe() instead. Signed-off-by: Valentin Schneider --- arch/arm64/include/asm/pgtable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index f09bf5c02891..767a064bedde 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -995,7 +995,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma, */ static inline bool arch_faults_on_old_pte(void) { - WARN_ON(preemptible()); + WARN_ON(!is_pcpu_safe()); return !cpu_has_hw_af(); } -- 2.25.1