From nobody Wed Dec 17 06:14:33 2025 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B39692BE639 for ; Fri, 5 Dec 2025 23:17:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764976673; cv=none; b=TqSGIH/HWELtLOTnmI/Fy8JdXB1lenH8Gl//P4OBFjkH9LFgA//yUyg+hF9BHeWscEFMd9zieirgAJorQXSOKaPTzrMPDY5puOpdqcroZUCKQUWGMPNxAAEh/RhRoiPuW6SBuiWSf2RUZc1Bd3c1y8gGztr1jeHwMDhbpguKG60= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764976673; c=relaxed/simple; bh=INIwFHcOedJyjJPsYEI9J6IcJSRAJY2JmETRAFKFTz8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Cf8GSzhm0oGDucrJ8muQKwwjm+qbpIl3V3+9TeqY4Eqic9L1NRNg8XSOkdNZbL39lAw1W/gHGFUSU0UE+3pOrWDBwfah0YdVnJ64ILgOpZ+lnTlg3dRxzoBqVdr44T8wKG9cxD9gveqfVaj+Yf9Ijzhc/2AKxsU6Hx+7rtfX1vI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=Mct+QkEM; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="Mct+QkEM" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=goR+WqcbB55j9ZAy/tMbooRHEqLXnxJL/84hfNlIvBI=; b=Mct+QkEMlaca0HtaZSx95oFN1Z yvNsIXWNEtGq0Ov1m72JaqurgvEV9AqdX54sLUzE1SbV/uK8d8wLOJ/oEpgDsm4XkPJ5BzKbog56W d5/ufYWCE6PfDfJMo6lIXK0UkrU3tk03rZlWpbcdu0VvL+JKDCYM7Ee8tnPIQ462P8q/eidpKhEQ7 GzNkfpVz0X6RsU/4FiIzaQNOy67RGrY2/9LsKHwmr1ps/klgNB8tQWC6uQxulMGstuVJIZxGsgQXh 7lsgB8ESnjNldrE1WXLEVQRFyEoAcK4TikSvZTDo4SpyS6nDf4wSPtqC0cwUn/8ICWKIF4ROIwYcV GpTH2new==; Received: from 186-249-144-101.shared.desktop.com.br ([186.249.144.101] helo=t470) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1vRf3X-009H1j-6m; Sat, 06 Dec 2025 00:17:43 +0100 From: Mauricio Faria de Oliveira To: Andrew Morton , David Hildenbrand Cc: Lorenzo Stoakes , Michal Hocko , Vlastimil Babka , Oscar Salvador , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com Subject: [PATCH RFC 4/9] mm/page_owner: add 'xarray swap_page_owners' and helpers Date: Fri, 5 Dec 2025 20:17:16 -0300 Message-ID: <20251205231721.104505-5-mfo@igalia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251205231721.104505-1-mfo@igalia.com> References: <20251205231721.104505-1-mfo@igalia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add 'xarray swap_page_owners' to index 'struct swap_page_owner' objects by key 'swp_entry_t', and helpers to store, load, and erase. This is used to track the allocation stack trace of pages in swap space. Signed-off-by: Mauricio Faria de Oliveira --- mm/page_owner.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/mm/page_owner.c b/mm/page_owner.c index 19ccbda1c2a4..5cd7de1f8023 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -68,6 +68,7 @@ struct swap_page_owner { pid_t pid; pid_t tgid; }; +static DEFINE_XARRAY(swap_page_owners); #endif =20 static depot_stack_handle_t dummy_handle; @@ -461,6 +462,50 @@ static void free_swap_page_owner(void *spo) kfree(spo); } =20 +static int store_swap_page_owner(struct swap_page_owner *spo, swp_entry_t = entry) +{ + /* lookup the swap entry.val from the page */ + void *ret =3D xa_store(&swap_page_owners, entry.val, spo, GFP_KERNEL); + + if (WARN(xa_is_err(ret), + "page_owner: swap: swp_entry not stored (%lu)\n", entry.val)) { + free_swap_page_owner(spo); + return xa_err(ret); + } else if (ret) { + /* Entry is being replaced, free the old entry */ + free_swap_page_owner(ret); + } + + return 0; +} + +static void *load_swap_page_owner(swp_entry_t entry) +{ + void *spo =3D xa_load(&swap_page_owners, entry.val); + + if (WARN(!spo, + "page_owner: swap: swp_entry not loaded (%lu)\n", entry.val)) + return NULL; + + return spo; +} + +static void erase_swap_page_owner(swp_entry_t entry, bool lock) +{ + void *spo; + + if (lock) + spo =3D xa_erase(&swap_page_owners, entry.val); + else + spo =3D __xa_erase(&swap_page_owners, entry.val); + + if (WARN(!spo, + "page_owner: swap: swp_entry not erased (%lu)\n", entry.val)) + return; + + free_swap_page_owner(spo); +} + static void copy_to_swap_page_owner(struct swap_page_owner *spo, struct page_owner *page_owner) { --=20 2.51.0