From nobody Fri Mar 14 05:43:41 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1738631860; cv=none; d=zohomail.com; s=zohoarc; b=gt+mL3FDqQTln+ALkDuMxNPusGESP/rYRqaxv1keP2oDXiMQIqNLDiZawU4EMDh2ZbP40QVZ8fkDidtglT+Qutm+EeETZXOSFIldSlbI+5WS5khhzAJ2x4IJ9f2W9EtK1Ov8jfK0ovdqIVk/qU3rCaZGjlm5EOvv+ODzVmW8E80= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738631860; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FCDDFaggl29gcMMLPXQk00MYXzS2bZ4FGM1m7K/XD0g=; b=Bbs6Jia7GSI1NABON1eLw050uXloKLKWPmz5Ki77gaZSn3CLBEpZyYqTHRNJmdV+kIcIOCB4tx1sVn2LpE3yflVZHOExjazP8HhJ/HN278JQJ2t4ZnlIzmDArK00XJMKiErjfnjPjlao7CrnFQrXQ0Rbkc7KWYfACibbpfUHBfE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 173863186041277.13888266943366; Mon, 3 Feb 2025 17:17:40 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.881054.1291186 (Exim 4.92) (envelope-from ) id 1tf7ZC-0008Cl-QQ; Tue, 04 Feb 2025 01:17:30 +0000 Received: by outflank-mailman (output) from mailman id 881054.1291186; Tue, 04 Feb 2025 01:17:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tf7ZC-0008Cb-NP; Tue, 04 Feb 2025 01:17:30 +0000 Received: by outflank-mailman (input) for mailman id 881054; Tue, 04 Feb 2025 01:17:29 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tf7ZB-0006iz-8h for xen-devel@lists.xenproject.org; Tue, 04 Feb 2025 01:17:29 +0000 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id ca7e3029-e295-11ef-99a4-01e77a169b0f; Tue, 04 Feb 2025 02:17:25 +0100 (CET) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 7B0505C572E; Tue, 4 Feb 2025 01:16:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3231C4CEE0; Tue, 4 Feb 2025 01:17:22 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: ca7e3029-e295-11ef-99a4-01e77a169b0f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738631844; bh=WfV0I2XcMcWq6iqVHClcxb6CZ1GUpZumWWMRKQxTWPo=; h=From:To:Cc:Subject:Date:From; b=tv4iU+zbrSlv8yVrjuDbIHRlttiA0Bct6P/BoPU4CUH5gb3FsEL5SPb0OJLaS7YB9 ESTyYmoUI2z+iBJpm//6e+QW8JeoXr3arXWnuihjQ0hh9KUzIp9oAFvuVQjYP0PYAA gZBAumzd5BWhPcstg8YQyEtSLUdsvWOQ+eXxzkh5qNM4p3m0tF6PbyV5Xyta9LifiA 4a1nGef+fPAUu4m7IRNP7h62oeoJkvK2lX6otR5NP/W0jfZaYA5HtcErV8Wbq7Z205 fwu6fWW3oEaDnlKvR14N7Ea4dZY24Tl3qX7RKBvZ+o5cfJS2t4RKVeSxSuagsZKhHm UVOE/cBDHI6rQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Maksym Planeta , Juergen Gross , Sasha Levin , tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, xen-devel@lists.xenproject.org Subject: [PATCH AUTOSEL 5.10] Grab mm lock before grabbing pt lock Date: Mon, 3 Feb 2025 20:17:18 -0500 Message-Id: <20250204011718.2206631-1-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 5.10.234 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1738631862593019100 Content-Type: text/plain; charset="utf-8" From: Maksym Planeta [ Upstream commit 6d002348789bc16e9203e9818b7a3688787e3b29 ] Function xen_pin_page calls xen_pte_lock, which in turn grab page table lock (ptlock). When locking, xen_pte_lock expect mm->page_table_lock to be held before grabbing ptlock, but this does not happen when pinning is caused by xen_mm_pin_all. This commit addresses lockdep warning below, which shows up when suspending a Xen VM. [ 3680.658422] Freezing user space processes [ 3680.660156] Freezing user space processes completed (elapsed 0.001 secon= ds) [ 3680.660182] OOM killer disabled. [ 3680.660192] Freezing remaining freezable tasks [ 3680.661485] Freezing remaining freezable tasks completed (elapsed 0.001 = seconds) [ 3680.685254] [ 3680.685265] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D [ 3680.685269] WARNING: Nested lock was not taken [ 3680.685274] 6.12.0+ #16 Tainted: G W [ 3680.685279] ---------------------------------- [ 3680.685283] migration/0/19 is trying to lock: [ 3680.685288] ffff88800bac33c0 (ptlock_ptr(ptdesc)#2){+.+.}-{3:3}, at: xen= _pin_page+0x175/0x1d0 [ 3680.685303] [ 3680.685303] but this task is not holding: [ 3680.685308] init_mm.page_table_lock [ 3680.685311] [ 3680.685311] stack backtrace: [ 3680.685316] CPU: 0 UID: 0 PID: 19 Comm: migration/0 Tainted: G W = 6.12.0+ #16 [ 3680.685324] Tainted: [W]=3DWARN [ 3680.685328] Stopper: multi_cpu_stop+0x0/0x120 <- __stop_cpus.constprop.0= +0x8c/0xd0 [ 3680.685339] Call Trace: [ 3680.685344] [ 3680.685347] dump_stack_lvl+0x77/0xb0 [ 3680.685356] __lock_acquire+0x917/0x2310 [ 3680.685364] lock_acquire+0xce/0x2c0 [ 3680.685369] ? xen_pin_page+0x175/0x1d0 [ 3680.685373] _raw_spin_lock_nest_lock+0x2f/0x70 [ 3680.685381] ? xen_pin_page+0x175/0x1d0 [ 3680.685386] xen_pin_page+0x175/0x1d0 [ 3680.685390] ? __pfx_xen_pin_page+0x10/0x10 [ 3680.685394] __xen_pgd_walk+0x233/0x2c0 [ 3680.685401] ? stop_one_cpu+0x91/0x100 [ 3680.685405] __xen_pgd_pin+0x5d/0x250 [ 3680.685410] xen_mm_pin_all+0x70/0xa0 [ 3680.685415] xen_pv_pre_suspend+0xf/0x280 [ 3680.685420] xen_suspend+0x57/0x1a0 [ 3680.685428] multi_cpu_stop+0x6b/0x120 [ 3680.685432] ? update_cpumasks_hier+0x7c/0xa60 [ 3680.685439] ? __pfx_multi_cpu_stop+0x10/0x10 [ 3680.685443] cpu_stopper_thread+0x8c/0x140 [ 3680.685448] ? smpboot_thread_fn+0x20/0x1f0 [ 3680.685454] ? __pfx_smpboot_thread_fn+0x10/0x10 [ 3680.685458] smpboot_thread_fn+0xed/0x1f0 [ 3680.685462] kthread+0xde/0x110 [ 3680.685467] ? __pfx_kthread+0x10/0x10 [ 3680.685471] ret_from_fork+0x2f/0x50 [ 3680.685478] ? __pfx_kthread+0x10/0x10 [ 3680.685482] ret_from_fork_asm+0x1a/0x30 [ 3680.685489] [ 3680.685491] [ 3680.685491] other info that might help us debug this: [ 3680.685497] 1 lock held by migration/0/19: [ 3680.685500] #0: ffffffff8284df38 (pgd_lock){+.+.}-{3:3}, at: xen_mm_pin= _all+0x14/0xa0 [ 3680.685512] [ 3680.685512] stack backtrace: [ 3680.685518] CPU: 0 UID: 0 PID: 19 Comm: migration/0 Tainted: G W = 6.12.0+ #16 [ 3680.685528] Tainted: [W]=3DWARN [ 3680.685531] Stopper: multi_cpu_stop+0x0/0x120 <- __stop_cpus.constprop.0= +0x8c/0xd0 [ 3680.685538] Call Trace: [ 3680.685541] [ 3680.685544] dump_stack_lvl+0x77/0xb0 [ 3680.685549] __lock_acquire+0x93c/0x2310 [ 3680.685554] lock_acquire+0xce/0x2c0 [ 3680.685558] ? xen_pin_page+0x175/0x1d0 [ 3680.685562] _raw_spin_lock_nest_lock+0x2f/0x70 [ 3680.685568] ? xen_pin_page+0x175/0x1d0 [ 3680.685572] xen_pin_page+0x175/0x1d0 [ 3680.685578] ? __pfx_xen_pin_page+0x10/0x10 [ 3680.685582] __xen_pgd_walk+0x233/0x2c0 [ 3680.685588] ? stop_one_cpu+0x91/0x100 [ 3680.685592] __xen_pgd_pin+0x5d/0x250 [ 3680.685596] xen_mm_pin_all+0x70/0xa0 [ 3680.685600] xen_pv_pre_suspend+0xf/0x280 [ 3680.685607] xen_suspend+0x57/0x1a0 [ 3680.685611] multi_cpu_stop+0x6b/0x120 [ 3680.685615] ? update_cpumasks_hier+0x7c/0xa60 [ 3680.685620] ? __pfx_multi_cpu_stop+0x10/0x10 [ 3680.685625] cpu_stopper_thread+0x8c/0x140 [ 3680.685629] ? smpboot_thread_fn+0x20/0x1f0 [ 3680.685634] ? __pfx_smpboot_thread_fn+0x10/0x10 [ 3680.685638] smpboot_thread_fn+0xed/0x1f0 [ 3680.685642] kthread+0xde/0x110 [ 3680.685645] ? __pfx_kthread+0x10/0x10 [ 3680.685649] ret_from_fork+0x2f/0x50 [ 3680.685654] ? __pfx_kthread+0x10/0x10 [ 3680.685657] ret_from_fork_asm+0x1a/0x30 [ 3680.685662] [ 3680.685267] xen:grant_table: Grant tables using version 1 layout [ 3680.685921] OOM killer enabled. [ 3680.685934] Restarting tasks ... done. Signed-off-by: Maksym Planeta Reviewed-by: Juergen Gross Message-ID: <20241204103516.3309112-1-maksym@exostellar.io> Signed-off-by: Juergen Gross Signed-off-by: Sasha Levin --- arch/x86/xen/mmu_pv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index cf2ade864c302..2fef8ad3f1df9 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -762,6 +762,7 @@ void xen_mm_pin_all(void) { struct page *page; =20 + spin_lock(&init_mm.page_table_lock); spin_lock(&pgd_lock); =20 list_for_each_entry(page, &pgd_list, lru) { @@ -772,6 +773,7 @@ void xen_mm_pin_all(void) } =20 spin_unlock(&pgd_lock); + spin_unlock(&init_mm.page_table_lock); } =20 static void __init xen_mark_pinned(struct mm_struct *mm, struct page *page, @@ -866,6 +868,7 @@ void xen_mm_unpin_all(void) { struct page *page; =20 + spin_lock(&init_mm.page_table_lock); spin_lock(&pgd_lock); =20 list_for_each_entry(page, &pgd_list, lru) { @@ -877,6 +880,7 @@ void xen_mm_unpin_all(void) } =20 spin_unlock(&pgd_lock); + spin_unlock(&init_mm.page_table_lock); } =20 static void xen_activate_mm(struct mm_struct *prev, struct mm_struct *next) --=20 2.39.5