From patchwork Wed Apr 9 10:41:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= X-Patchwork-Id: 14044451 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 9FD3EC369A2 for ; Wed, 9 Apr 2025 10:41:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CA70A28006C; Wed, 9 Apr 2025 06:41:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C600228006D; Wed, 9 Apr 2025 06:41:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ACD5C28006C; Wed, 9 Apr 2025 06:41:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 8954A280068 for ; Wed, 9 Apr 2025 06:41:46 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 81796B9463 for ; Wed, 9 Apr 2025 10:41:48 +0000 (UTC) X-FDA: 83314164696.11.5BA3122 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf22.hostedemail.com (Postfix) with ESMTP id 375C8C0003 for ; Wed, 9 Apr 2025 10:41:46 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=XiPik78V; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf22.hostedemail.com: domain of toke@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=toke@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744195306; a=rsa-sha256; cv=none; b=qW8QlggP2+q0C6KUsg3MGJUfDPpAw0r0UcRy64n3mPQGgG2kpUn4Ap+TOkpPMplxHnYWuN g0SI4AwcYKO1B+X8fUe9fsnBHArEJfCRPoAai2sOoiFJZOkk9a9l+sQ5FnrNKDPPF22hyJ CAv+LABVmh4ufkggTTV7xMvJc9CZFF8= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=XiPik78V; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf22.hostedemail.com: domain of toke@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=toke@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744195306; 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: references:dkim-signature; bh=LpuNjoUA7ewskiik1/U0SdrDhmNSPkv3veZPCKfxTj8=; b=H8PeQyF6IKeGNhjgFO7MT5y8BJzql6WjDsXStAjq+QwzNKfa42QXmi5hDQzwGmo9CWFXx2 uzkES3a+wJYjke2JN0mlq+STDT7DO3QPDEVmmzNwpo052habLTwPMwvdhSZzAPa31jaNEe 2aMVwQZjXIvLhKwwxcl/u9GSQ40t1ts= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744195305; h=from:from: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; bh=LpuNjoUA7ewskiik1/U0SdrDhmNSPkv3veZPCKfxTj8=; b=XiPik78VfvdZyBlG9L+1MExqtPqJKjYcSPqdQDou6lXhVcRJw5irO3QELHvNBmliXhPZp3 PYYPOCZdxmpeEI9QjKDnCFUgev2lSFyJHShwPJtmWBK3/RnilClmDIZZYMB6dyo+GzoZs7 6HWmWWMRklhwUFv7rfRCGI6blryKFhc= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-282-wiDmGynVOBmj82Drn23m8Q-1; Wed, 09 Apr 2025 06:41:44 -0400 X-MC-Unique: wiDmGynVOBmj82Drn23m8Q-1 X-Mimecast-MFC-AGG-ID: wiDmGynVOBmj82Drn23m8Q_1744195303 Received: by mail-ed1-f69.google.com with SMTP id 4fb4d7f45d1cf-5e6136633b1so5977326a12.0 for ; Wed, 09 Apr 2025 03:41:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744195303; x=1744800103; h=cc:to:content-transfer-encoding:mime-version:message-id:date :subject:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LpuNjoUA7ewskiik1/U0SdrDhmNSPkv3veZPCKfxTj8=; b=MZkmLH8gHrI5GTeZRbZkKYBon3Kde3eMN3UONK4t6ZSCMXWvuJ2zWHXkvrCkQinGi2 RDwgZnDqlObdjXRj3WcCyxD/pNuGbhW3T0FkC8SC4cX677q7FtDk0Y9VJsA3gBXplLVQ Ej4B4hLem11eZwNUCeTEZKfUbLU4CvyCcMPNh/XjfXt+kBy3lTTFY758oFjL/gDxv5Gq EAjnuZT5/UX/BFkXiodnBr5//YqpQqsKT1BYHTqW8hVPT4JEgfqomB3Dd26+zWph0OQ4 tkEyN+06Xt/56oaEUpxbwURVld4PcsinNxvUytANA8Y/FBGXd2aE3xijwbkwlaRLjMwm Zv5A== X-Forwarded-Encrypted: i=1; AJvYcCXr9FtMqYVYUizTpmzIH3/b/LMYu/QflIRBjMQX7XXyhVavIInFeHAc6xg01+rsAbcBlpjWSTqBKw==@kvack.org X-Gm-Message-State: AOJu0Yy+XRFjmUmuTm/5InOn6+MtBJRJxeJB/hcIxlasMN3XdMm814+K o0vwcoTVYE4aiGtnq2nJos72LS5KfBjANq3Xdgr8Epb7zDGoR7gZWSvEGnmgTouuD1I+EJI8bI6 SBdFTi6P9dioLG/Uq+FdqAwgHJU7cUtQot4APUEM7oProd+Nz X-Gm-Gg: ASbGncs4b9gbO8ThNTkphWgspofhS3PwF2L3Z4F+rFpGFJUTEifm/P9R8CUQdAYlr2q zn4X58ZzPZdYvXPSBSfm2B0UgxUROcbpPTnD4jIJjcNZO8p5a317He1J1kkhW5rd+Yrae7bgcuX uQGac/sjCleAKJGE0hGG8TcwIrOIfWLNBcIz5WRdbjAOMn/o57KcUhoAPzRyQZKdxltrfY1Yzyq K6BIL6LXYpcqVVtAaCUvU9pbk8G2kJycxm/+maYBjrXOkMHOXlBY4kKG1enpEvLk/CKgC5d3tqE YI5EBDBH X-Received: by 2002:a05:6402:90e:b0:5f0:d895:9c16 with SMTP id 4fb4d7f45d1cf-5f2f77444d9mr1595785a12.21.1744195303130; Wed, 09 Apr 2025 03:41:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGK3hVFyQkZt6pmA7KrzZ08m5M0tMwNnqzTUTsrF571Pe0wCk5dz+6BE6jOFe9oes5irlIvjg== X-Received: by 2002:a05:6402:90e:b0:5f0:d895:9c16 with SMTP id 4fb4d7f45d1cf-5f2f77444d9mr1595757a12.21.1744195302653; Wed, 09 Apr 2025 03:41:42 -0700 (PDT) Received: from alrua-x1.borgediget.toke.dk ([2a0c:4d80:42:443::2]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5f2fbbac634sm587689a12.12.2025.04.09.03.41.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 03:41:41 -0700 (PDT) Received: by alrua-x1.borgediget.toke.dk (Postfix, from userid 1000) id 9AFAF19920AF; Wed, 09 Apr 2025 12:41:40 +0200 (CEST) From: =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= Subject: [PATCH net-next v9 0/2] Fix late DMA unmap crash for page pool Date: Wed, 09 Apr 2025 12:41:35 +0200 Message-Id: <20250409-page-pool-track-dma-v9-0-6a9ef2e0cba8@redhat.com> MIME-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAN9O9mcC/3XRzWrDMAwA4FcpPs9DtuWf9LT3GDsotrKGrUlJQ ugoffdpYbCMpEdZ6NOPb2rkoeVRHQ83NfDcjm3fSVA9HVQ+UffOui0SKwvWgzOgLyRvl77/1NN A+UOXM2lwzjp0hAFYSeVl4Ka9Luqr6njSHV8n9SaZUztO/fC1tJvNkv+VcVeejQadrbHsI0XM9 mXgcqLpOffnBZztCrF+H7GCGOO4zqbC0LgN4tZI2EecIIkxIJjAQHmD4BqJ+wgKUrsEJYcIocA G8Wsk7SNeEO8BLDUhOSobJPwhMu0+En7WqZPDiClCwQ0S18iD34mCUHHYQKjkuGmDpDXy4CZJk EKVLFSwJmv+Iff7/RvIR7LDpAIAAA== X-Change-ID: 20250310-page-pool-track-dma-0332343a460e To: "David S. Miller" , Jakub Kicinski , Jesper Dangaard Brouer , Saeed Mahameed , Leon Romanovsky , Tariq Toukan , Andrew Lunn , Eric Dumazet , Paolo Abeni , Ilias Apalodimas , Simon Horman , Andrew Morton , Mina Almasry , Yonglong Liu , Yunsheng Lin , Pavel Begunkov , Matthew Wilcox Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, linux-rdma@vger.kernel.org, linux-mm@kvack.org, =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= , Qiuling Ren , Yuying Ma X-Mailer: b4 0.14.2 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: W0CWr90R-p2M3s2VipXSf-GZ7rUyc_UrcTz7uIY4Lyg_1744195303 X-Mimecast-Originator: redhat.com X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 375C8C0003 X-Stat-Signature: u7o93z47cq89ymgfxy177g3j7fgqs1a9 X-HE-Tag: 1744195306-702470 X-HE-Meta: U2FsdGVkX1/iG2/wJvn5fcAEQ+V9jcWFXJ+0gGJGCXBn96q4pNBlHDsa5LKVrNRr+C1VxYxHz6hr9Ncd9BAKNy4fZK+fd3gVH8H9LrlK2NE+TrRnh2GERouBQzpz7ofyWDs1IjkHSPg8u4U4RBVpjI3dxvnebrQaLpuhtA8TzGWfSQtJ1+2/mucd3fSpGQJ1mIr2AYgMwM71MVr/Xx3X32+BIaQz49Ay+1Fk1fw1gphjtHeQdWZaGWfzKqCyG9wWsLXQ9CMNFdA8RQkvja7eIyypCSOup4sGbTPw6u0DoLH7rB8DgDygL86glWglExvr1x/HNeMChFH+uPKpfvmyPkRvKRWV8FTMaWVensJ6kdIj7Qgf8eb0Pn6MTO8k42ZgEIQbafx9dF96Zx4sBcaw/ZGVR1mNflwS4TfAXXxxTxJtNMtM/RwgL6TMky69nwz+c4+PCk/EINrxLxz5aJKzIHX5Ti+JxmytQxyXdomdh2hmSxTprCrgXwdRABu7sMBvK58jatNRmKLuNtwwKZMVnF5QGAcu/LSO7cbjmGEXRA7ezAieqfZ32GUftz+YZDQTXT7fsR15OiB3dLF8/0cwoAytRdMlfFSmVV8lsYYLLTlbYhk/NDtJC154RPJ5FsgdlbewYb8tRuBf5zkRwSCsgPAGieyvvZ5Sxz2fn53C3l7rl0mBhtlAmIky7getGQJ2N8r/p4WBp4RyLlgxrNbUtsL2mYgXF99avO2A4mdpyeLikd5vSvi1RK15Jy8IYvNGITV5VfIxWEkq1vRJtYOzZz8lg0BnTebpNPLVfwMxP1hbTY6T7C71LOIwLVZV09SPhYnqc0NwgjyYvFfm+FfjOujUgNvsiPTtW52yYqBSt7je/HBZ3o6iFLCAllTmnE8cNcakFfs8plQb4JJXFo4yIu47/eB8Ei7QZwWe6Jea89JIOwj5GaRVIf6cH/NlRU5/dL5+vAAkhpNgn02Uboj T2Nsi1ZL dq/RBgx55GpERiKoXGoiMLqczE3dXCBmlxyaNFP+0AHC68a9TaP96HZPJjL3X5C+MNmVdRajCejwyBgo3eR+O2BxTC4ynRgj0bZmOy2DvKRUyFZqDhb65kTO70gPS4G+NbIYy5XApTqQBitpnxyaUOXsVIRuCja2oFtFvCF1+vG6WzNvtx8JyNW9YTHhcq0LPWzJx4Fo5qSZTLotDndWJQpdOrRGDGOwwNzZacfGBHxe2vA9w+gzCeI7Rt1LgozfMCEVf5yFPcd0v14qrY0PnLvxOC8kIHZJQMGMS/Gk0LFdo+PIRkvw/Z86a+9HvxvHqe8fWITYnYWoQoGmSTkFCoaglwNW1PL3FoorGeQ17oPw2WQNDXq4FgSY2lh/p0J3yWIUdP4kHR3h8Z0PySEShIxRp9fGn+VHylY3jwTJ5MW13+sQFTJ2qkDgSWkFCskYsTnktxI+i15Lg4fnVBfpz9bJPsuJ/zBQecUnm4Yyp5MNlWJJxWlriOEB0xixHJgFZHwFqkVfUA1+MnjKf16VejNSxW7eeYE6QjOneduFeIF2hufdAvMVkNbj6tWvUQ6FugCqfagN1U6fwEqlKeQnFtfd6fa5O+QXQtEBd 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: This series fixes the late dma_unmap crash for page pool first reported by Yonglong Liu in [0]. It is an alternative approach to the one submitted by Yunsheng Lin, most recently in [1]. The first commit just wraps some tests in a helper function, in preparation of the main change in patch 2. See the commit message of patch 2 for the details. -Toke [0] https://lore.kernel.org/lkml/8067f204-1380-4d37-8ffd-007fc6f26738@kernel.org/T/ [1] https://lore.kernel.org/r/20250307092356.638242-1-linyunsheng@huawei.com Signed-off-by: Toke Høiland-Jørgensen --- Changes in v9: - Remove empty lines left over in patch 1 - Link to v8: https://lore.kernel.org/r/20250407-page-pool-track-dma-v8-0-da9500d4ba21@redhat.com Changes in v8: - Move defines to mm.h - Keep pp->dma_sync as 1-bit wide - Unset pp->dma_addr on id alloc failure - Rebase on -rc1 - Link to v7: https://lore.kernel.org/r/20250404-page-pool-track-dma-v7-0-ad34f069bc18@redhat.com Changes in v7: - Change WARN_ON logic if xarray alloc fails - Don't leak xarray ID if page_pool_set_dma_addr_netmem() fails - Unconditionally init xarray in page_pool_init() - Rebase on current net-next - Link to v6: https://lore.kernel.org/r/20250401-page-pool-track-dma-v6-0-8b83474870d4@redhat.com Changes in v6: - Add READ_ONCE() around both reads of pp->dma_sync - Link to v5: https://lore.kernel.org/r/20250328-page-pool-track-dma-v5-0-55002af683ad@redhat.com Changes in v5: - Dereferencing pp->p.dev if pp->pma_sync is unset could lead to a crash, so make sure we don't do that. - With the change above, patch 2 was just changing a single field, so squash it into patch 3 - Link to v4: https://lore.kernel.org/r/20250327-page-pool-track-dma-v4-0-b380dc6706d0@redhat.com Changes in v4: - Rebase on net-next - Collect tags - Link to v3: https://lore.kernel.org/r/20250326-page-pool-track-dma-v3-0-8e464016e0ac@redhat.com Changes in v3: - Use a full-width bool for pp->dma_sync instead of a full unsigned long (in patch 2), and leave pp->dma_sync_cpu alone. - Link to v2: https://lore.kernel.org/r/20250325-page-pool-track-dma-v2-0-113ebc1946f3@redhat.com Changes in v2: - Always leave two bits at the top of pp_magic as zero, instead of one - Add an rcu_read_lock() around __page_pool_dma_sync_for_device() - Add a comment in poison.h with a reference to the bitmask definition - Add a longer description of the logic of the bitmask definitions to the comment in types.h, and a summary of the security implications of using the pp_magic field to the commit message of patch 3 - Collect Mina's Reviewed-by and Yonglong's Tested-by tags - Link to v1: https://lore.kernel.org/r/20250314-page-pool-track-dma-v1-0-c212e57a74c2@redhat.com --- Toke Høiland-Jørgensen (2): page_pool: Move pp_magic check into helper functions page_pool: Track DMA-mapped pages and unmap them when destroying the pool drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 4 +- include/linux/mm.h | 58 +++++++++++++++++ include/linux/poison.h | 4 ++ include/net/page_pool/types.h | 6 ++ mm/page_alloc.c | 8 +-- net/core/netmem_priv.h | 33 +++++++++- net/core/page_pool.c | 81 ++++++++++++++++++++---- net/core/skbuff.c | 16 +---- net/core/xdp.c | 4 +- 9 files changed, 176 insertions(+), 38 deletions(-) --- base-commit: 420aabef3ab5fa743afb4d3d391f03ef0e777ca8 change-id: 20250310-page-pool-track-dma-0332343a460e