From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC43BC83F1A for ; Mon, 21 Jul 2025 11:01:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5FF156B0093; Mon, 21 Jul 2025 07:01:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D6DC6B0095; Mon, 21 Jul 2025 07:01:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 514386B0096; Mon, 21 Jul 2025 07:01:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 3E7B46B0093 for ; Mon, 21 Jul 2025 07:01:15 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E60421DA739 for ; Mon, 21 Jul 2025 11:01:14 +0000 (UTC) X-FDA: 83687980068.10.7BAE70C Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf02.hostedemail.com (Postfix) with ESMTP id B7E0880017 for ; Mon, 21 Jul 2025 11:01:11 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; spf=pass (imf02.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1753095673; a=rsa-sha256; cv=none; b=s46Y7i9K/rkogXir/HMrSzc6WgfpmqeJ3MgCRPAdM+IK/QPN6avY59NjbsWa25rPVk3c1N OanTtUDiTLHZPMuWr8ujkypEhntOutuDUHcVZF0GnmG3vcZWX/j7IL1CWpo+genCt168T5 8nJE3JCLOBMy9fAGMuA4dlrBTtNbvOc= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; spf=pass (imf02.hostedemail.com: domain of tujinjiang@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=tujinjiang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1753095673; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hv3ogQ25MQ/E7v0uU+r2dojek9OveKvoAWYG/AXM4dw=; b=E12gwX9l5ZXorWImbVfpEqCRS7BsTplfNuamTLIEr7GppJqcUntkKbaw9MfAsNydRYhcPr wl7dDZ/oXg4HvTeGZCdVH3N7qdwPkeGaU0d52Oqudu1WhL7ixGXfjbgxZHKLdz9hP2xRri VIp2wjbTkGr9XUrzo5hQANrYPyMmT3k= Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4bly6r75Vlz13Mrs; Mon, 21 Jul 2025 18:58:12 +0800 (CST) Received: from kwepemo200002.china.huawei.com (unknown [7.202.195.209]) by mail.maildlp.com (Postfix) with ESMTPS id 6E57518047C; Mon, 21 Jul 2025 19:01:07 +0800 (CST) Received: from [10.174.178.49] (10.174.178.49) by kwepemo200002.china.huawei.com (7.202.195.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 21 Jul 2025 19:01:06 +0800 Message-ID: Date: Mon, 21 Jul 2025 19:00:59 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] smaps: fix BUG_ON in smaps_hugetlb_range To: David Hildenbrand , , , , , , , , , , , , , , , CC: , References: <20250721081444.277183-1-tujinjiang@huawei.com> <46a22e7c-51f0-4fd0-8583-447c5e366029@redhat.com> From: Jinjiang Tu In-Reply-To: <46a22e7c-51f0-4fd0-8583-447c5e366029@redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.178.49] X-ClientProxiedBy: kwepems500002.china.huawei.com (7.221.188.17) To kwepemo200002.china.huawei.com (7.202.195.209) X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: B7E0880017 X-Stat-Signature: 643ph87jqq9i6wyfed59snkpd8wry1n1 X-HE-Tag: 1753095671-44822 X-HE-Meta: U2FsdGVkX19E3xqewL9hHlAF/qQ12WdvWjsyN+N8WS+Q/Ln9dTKws1U9dJeMB+52Jcw3wKmgbhl2pH3cYM419aaZW8R4brTkTdPwvaGHP+2eYQBjxfv9vCRPmE5uY8trDaf67rYZV7KITAM+u/2Dia9PlQmYwrUtQn/+7Y3x7hvPlXoGoOnKkqy4KBpTp8pZbGjp1gD/gtG4PvlMAvnXUGq3vGULEij+tc0RJkbY97MeKdkW7G1++v9DCvVLAbS1FzU1Xpbhh9su7erurx4WTCQdoB8iOAtyDsACYb4+27Mx3r1lkm/Dur4+j28eD9Zpi4aJBhMpE28nqN9q7NDnOMdEoww1j9XNNev5U/CwuMR/zpz7RIa1ibRbfarBeilUTXIoWqN4jJMb8qsE2SHcxovnbr68s7BGbiOqFoio02IcKljojGEHJz7YTUwOrFnA8zBaXqdw45iFKPIRLbSKBkVARkdFi5Ir2w5fJ3vrONNDVRHA6bZzZB+VJfQKsRnHFnSoiZV/254BENZVvPQdTTGoZvoo5MvKdsb/zaSvmPFasqsfwK/6+Iooickf223r0uHc1Y4l7qvoRFjbwRa/Xlh8LDTVISsHCf3lcmKnLmCuIyV/JkXcxmjPnZmTkXa2B5NQWcfT5EdBRx9GoVtFuPvR2D9zKZQe5k3CoO2ylzyRRa5KwCrSwXk7yFeaj7c55tIDYtcagliKPwOA/v45KZBamzgELbC67vnfPXfUxO47ZXWMkpbZTwllrAIrGOEIAnX8We/p/NIg0ZU1bG7VIv0G2xBrVLi+rPpxbSJO5bo6Yt6CWW/ya2A182fiMOUBIpzLu1r5o/Hd0rhixPB3hGyOiNT5khkQfoYxvwYTDX6ZOrTp1cwqXxW4HowVTepwzzxrFSLO87U7juPztq4mUzjRy1+i28/RPReFB6LYab4W7cI4i/Uywn5IItsVsBhzqfUUNaFREM37+mOhxBr b+YX00Py TvR51NKl7OyrVyDWHUzMScLoeQNN4KoUnFI8MsgJujB+aXiOsP94rS1mpVrUpDqKolvEgNIjLIaFnBtE6kAOQqeXdp3VbbebT01h0hVkDDUxA/bn1z6Fg0TKaXiV4/yjQ4HnJBQRH3hje2aGSsKe7XQiw19iJyDglZ49RpOPY4qg3WLrLMsBtWCyDaxrkA65+qAQK+x/7AYikz0Di9akTgEwnEadoa/LYCbOLfeSRtQkbZkeD6xbLfQYBTEwEK0ad4mh/0MnkNWC040SD8Gs+1zhQSpV4NR0N5bFZo2ipPQQ4Qn0JD2HRg+IuM4pMEmAD6kyORs1EH6/O5el+QA0PvyYtB7uqkRRwofmnQmzINavkMzWNslWBMzkeTup5V2qPrcup X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 在 2025/7/21 17:29, David Hildenbrand 写道: > On 21.07.25 10:14, Jinjiang Tu wrote: >> smaps_hugetlb_range() handles the pte without holdling ptl, and may be >> concurrenct with migration, leaing to BUG_ON in >> pfn_swap_entry_to_page(). >> The race is as follows. >> >> smaps_hugetlb_range              migrate_pages >>    huge_ptep_get >>                                     remove_migration_ptes >>                    folio_unlock >>    pfn_swap_entry_folio >>      BUG_ON >> >> To fix it, hold ptl lock in smaps_hugetlb_range(). >> >> Fixes: 25ee01a2fca0 ("mm: hugetlb: proc: add hugetlb-related fields >> to /proc/PID/smaps") >> Signed-off-by: Jinjiang Tu >> --- >>   fs/proc/task_mmu.c | 6 +++++- >>   1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c >> index 751479eb128f..0102ab3aaec1 100644 >> --- a/fs/proc/task_mmu.c >> +++ b/fs/proc/task_mmu.c >> @@ -1020,10 +1020,13 @@ static int smaps_hugetlb_range(pte_t *pte, >> unsigned long hmask, >>   { >>       struct mem_size_stats *mss = walk->private; >>       struct vm_area_struct *vma = walk->vma; >> -    pte_t ptent = huge_ptep_get(walk->mm, addr, pte); >>       struct folio *folio = NULL; >>       bool present = false; >> +    spinlock_t *ptl; >> +    pte_t ptent; >>   +    ptl = huge_pte_lock(hstate_vma(vma), walk->mm, pte); >> +    ptent = huge_ptep_get(walk->mm, addr, pte); >>       if (pte_present(ptent)) { >>           folio = page_folio(pte_page(ptent)); >>           present = true; >> @@ -1042,6 +1045,7 @@ static int smaps_hugetlb_range(pte_t *pte, >> unsigned long hmask, >>           els >>               mss->private_hugetlb += huge_page_size(hstate_vma(vma)); >>       } >> +    spin_unlock(ptl); >>       return 0; >>   } >>   #else > > > Heh, I stumbled over that code many times and wondered "why don't we > need the PTL here -- I'm  sure it's fine because otherwise we would be > getting reports.". > > In pagewalk code we only hold the vma lock -- see walk_hugetlb_range(). > > So I think we should just grab the PTL in all these walkers. > > What about pagemap_hugetlb_range, pagemap_scan_hugetlb_entry, > gather_hugetlb_stats? > I think we should not make exceptions here and just handle it like we > would have handled ordinary PTEs/PMDs. > Glanced at all .hugetlb_entry callbacks, most of them operates the folio whose pfn stored in the pte, holding ptl is safe. Especially, prot_none_hugetlb_entry() updates the pmd without holding ptl, it relies on mmap write lock to avoid concurrenct update. But it looks difficult to understand.