From patchwork Tue Apr 30 05:28:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Chinner X-Patchwork-Id: 13648274 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 5CE40C4345F for ; Tue, 30 Apr 2024 05:46:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BCB526B0089; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B78CC6B008C; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A1B446B0095; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 682C96B0089 for ; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 16AED160569 for ; Tue, 30 Apr 2024 05:46:19 +0000 (UTC) X-FDA: 82065112878.08.B5C4498 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf29.hostedemail.com (Postfix) with ESMTP id 441B212000F for ; Tue, 30 Apr 2024 05:46:17 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=WMJyQO+8; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf29.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714455977; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=afP6uLcLEQVtnVJJKaVxA8xiCeVS0XyPUQmW3bND5yY=; b=cjzZ//ycwq5I7Qlcgwit6Ky5I0Zjb9xNmA8lWiHWiVxMWnZvwnLghE0vhaDoZef7yygSB9 0O+pBwbbGHthyZkgajBnB8NYnlP8pQOkzCewb+p8EF6ETV0ZFJSvtiO+nGHRyidcS2Zl0h /Z1Bi4tHMwxDRMcdgVog1sqbztRe4EM= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=WMJyQO+8; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf29.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714455977; a=rsa-sha256; cv=none; b=xAX33pfez6uOMpweQ4S7BkqbWv/TKvm8hUaUM5QRoISEry7DoW4YBr21njv5YetI1KeYVj tQrutlc2DlxMmVJwlxTL1GbzUDEE0U5kCKj8HxXN1uGtdtN67KM2T8tVu3JphzF1ltHmfL B7d/wBFxYyqI2I+j25FmcmLm+P/Thrw= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1e86d56b3bcso48251165ad.1 for ; Mon, 29 Apr 2024 22:46:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fromorbit-com.20230601.gappssmtp.com; s=20230601; t=1714455976; x=1715060776; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=afP6uLcLEQVtnVJJKaVxA8xiCeVS0XyPUQmW3bND5yY=; b=WMJyQO+89cjGRl2axXqXQ1/VAhY7FACYA22P+QKSryo6DlumJbWLfcjMqrW5qheFJZ oBSpcGYjpCIFKzUJU9K0fgLmHSkjiQmAaOcRRudkkFIzX95M2GOgYoqGtmpXcjOmavur lHIb0gXV56CkGKZanhHwktAPaiznoMulNmDUQ+dj0MXUe/T8bmc9QEJlJmkoQYo8NUcX UPv/6Nrsfa/LhWW3+ujXWRwT/0K09SrfJpsgLegQTdG2onKyYgrqWDgzJYrreDtbszNV DStudYb6QiFb5kcVlA+tCmjlG4zuPmGvI4FAAv0ieaYSweIcdK/aNBfRa0SfBQlKC8M1 X6mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714455976; x=1715060776; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=afP6uLcLEQVtnVJJKaVxA8xiCeVS0XyPUQmW3bND5yY=; b=gVcbeNqSZRTjPD9oWBvzJI0fSCtHxWvQQhkYa/dllx9/6wvCei+jO1N29SI68HeCaE 2j8gIs+pxPlPYCELFsUz3H7kjD8EAML4VXOYoKZJDlClTvJJm/l+pYb+gDY2YSmwwCbC cLnoAPvlNxPZyNnRHxzwrHVX8wHjy90os0p2iBSo+La6nPevDw6AwgKZBVOkrzbB+M42 07EN790ViXjK1FvZMdmVsEHBQlrXGSpYLNFciPRA/zbjOPl8lMoyKKcOn/PZPrVj03Dt Ejq8cThYEB6+aCmDrKoLI3zqQSmg9EpDz/cNVOrhnMZVOfcz9UtsqnrmYzlQqju3u6Gu selg== X-Gm-Message-State: AOJu0Ywud4zXAHE2DW3Xr2Kx210NKND+/xvYu7oLwkSfSsMweTEg55fh ZWbbqTrjxhAUv8oa8TTgscyEcZ9eO+ktxu9uDIeH7fh0cyK7Y9ovQs3UDAlN7ULpv8DOD65qn0F F X-Google-Smtp-Source: AGHT+IHfRat6F8yIN7+2x4pzgcpjky23ySzyPfrQ6r5F2OTC8Is4yOECP718T/VXfznbNFuUF0NMLw== X-Received: by 2002:a17:902:f60f:b0:1eb:1af8:309f with SMTP id n15-20020a170902f60f00b001eb1af8309fmr2194540plg.4.1714455976018; Mon, 29 Apr 2024 22:46:16 -0700 (PDT) Received: from dread.disaster.area (pa49-179-32-121.pa.nsw.optusnet.com.au. [49.179.32.121]) by smtp.gmail.com with ESMTPSA id c13-20020a170902b68d00b001e8a7ec6aabsm20267530pls.49.2024.04.29.22.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 22:46:14 -0700 (PDT) Received: from [192.168.253.23] (helo=devoid.disaster.area) by dread.disaster.area with esmtp (Exim 4.96) (envelope-from ) id 1s1gJg-00FsCE-20; Tue, 30 Apr 2024 15:46:12 +1000 Received: from dave by devoid.disaster.area with local (Exim 4.97) (envelope-from ) id 1s1gJg-0000000HUwp-0TU0; Tue, 30 Apr 2024 15:46:12 +1000 From: Dave Chinner To: linux-mm@kvack.org, linux-xfs@vger.kernel.org Cc: akpm@linux-foundation.org, hch@lst.de, osalvador@suse.de, elver@google.com, vbabka@suse.cz, andreyknvl@gmail.com Subject: [PATCH 1/3] mm: lift gfp_kmemleak_mask() to gfp.h Date: Tue, 30 Apr 2024 15:28:23 +1000 Message-ID: <20240430054604.4169568-2-david@fromorbit.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240430054604.4169568-1-david@fromorbit.com> References: <20240430054604.4169568-1-david@fromorbit.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 441B212000F X-Stat-Signature: aqhjwdr1ybz5117hsr46prt8ianwibio X-HE-Tag: 1714455977-596437 X-HE-Meta: U2FsdGVkX19aHcVzqidMiB2LOsAfS+COgX9xnMd/t59V3fRPR05H9HoJTz2/x+TrrOFsx8++2bdGt2HcjcuMDzTlL7NzRyA3iHH1QnRuMaHiT8SxbsiYid5IBBjLXZTvJui+dcIQY5ndUZCmtW/mRzWZVWrpxGRdOLz7/Qj/gnvC0536OIalerOKszBKImZZC3KLd4RZmYOF3hko5Sq58LbS05TlR4RTS9IH+P5spbn+UwASlujwZxQJGaH7caUUNUhiEx0RpPrhaMWpjtSiLhD6AKTjRXa2Y/vUH+dYBi+SLFjYfUETyeMeg2eIO7qByo7ECcH9O1PIRbDY/GcBsug6Qqgc2PaDddmOPjAGWtLt3jz+X7FsOIJepCRoNgHQLBqYHueeSsQ3wghBemsGAceSFrNnWb7xbuKMW8xhYOMmaPkP13i9xKbf70QX6hFgBUOiu7R8IJ4RraOV9/yqOydaCqWMnSnHxNPjptwhCDaSEi1bRKPYf6nUR/DoJL6q9NOmGDj7lDf7Tr8EYsxlHgt+Mm4Z+O1wIxr+hmxbGow9yDMiOwh+g1pD6aDunUaO6clLX+gg3VGondsddPEsQXmsbaI9zRlxMljg9fubEhlqm6wN0ySQEHrfv/ubJByuE2BLy2pzEWYrxChF138K1huTfDCFOc3RUZQGAMLRZZpzwVrGF7boh/Zih6ZTUW/2LxXIYLqLbfQgGcpzaI8RP4U9kHfZdgbbFPyCE75/RPH0Rq3OJKuaJqQM2rylM6OR4aEPzHsibckprZxNsvgD77o8I8orMesYzoIThToAH9ManuRwCJnUNE4nMdr9133GwmBeCBlMFR97QGj9P0LurE9hKXkuz64cYzFCVh4CRzaOVvLjNVieFLu7RKb/L6Vka+GSUOyuFWhhM/iIC2bZ0ix8d/HKMTmq8BodTY2713RD+1MIsHIGWTUdnA47jUaWtvy4krVwQ8fnHZz4lJb fOqUX6Of cLr4TkqbVIuOxT7Zd3YC5RFxvCD8cUXJK9fMI5E1PMiOArcak4+oa5IHEKLeyGldJfs1stF6GWxecqGR/FaAqDGVC/PGybQIpeIn6nLUgYdzR0z3tpgO4rKF8YQcz8MyHplTaGGrXTb9xGwFUa32m6DeyMmRr+SvPOK11iWR5RjYNGEj2jcyFpdS/qcSKt8ipCYZo/YFmDmhX7C747PW1BbV6jhJ4BIoZVYD8uqhnwshKLP9ruUT941BFx5mT7iFmL1DRMqj4YAnOdyuN9Cwl12AkHMSB77pPf88r/+wJpmEyZDHJjruJK1znES8akGO7VM1FC2NPY1f5ravTNYii7J2xBUN81yPiyKCwrACWQL+zTe8dzrWoIdV3cEziR6PvGwAPH+sgWs0NvgqIvbzMxvDjp7HqikAm8i7yCPXMlDFZNZcUqVnc5LibP87iznyKeJ39wWs72vBSXF0b6nCSZZYPTAbK2A21eEnjf20X8hYJ9co= 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: From: Dave Chinner Any "internal" nested allocation done from within an allocation context needs to obey the high level allocation gfp_mask constraints. This is necessary for debug code like KASAN, kmemleak, lockdep, etc that allocate memory for saving stack traces and other information during memory allocation. If they don't obey things like __GFP_NOLOCKDEP or __GFP_NOWARN, they produce false positive failure detections. kmemleak gets this right by using gfp_kmemleak_mask() to pass through the relevant context flags to the nested allocation to ensure that the allocation follows the constraints of the caller context. KASAN recently was foudn to be missing __GFP_NOLOCKDEP due to stack depot allocations, and even more recently the page owner tracking code was also found to be missing __GFP_NOLOCKDEP support. We also don't wan't want KASAN or lockdep to drive the system into OOM kill territory by exhausting emergency reserves. This is something that kmemleak also gets right by adding (__GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN) to the allocation mask. Hence it is clear that we need to define a common nested allocation filter mask for these sorts of third party nested allocations used in debug code. So to start this process, lift gfp_kmemleak_mask() to gfp.h and rename it to gfp_nested_mask(), and convert the kmemleak callers to use it. Signed-off-by: Dave Chinner Reviewed-by: Marco Elver --- include/linux/gfp.h | 25 +++++++++++++++++++++++++ mm/kmemleak.c | 10 ++-------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index c775ea3c6015..a4ca004f3b8e 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -154,6 +154,31 @@ static inline int gfp_zonelist(gfp_t flags) return ZONELIST_FALLBACK; } +/* + * gfp flag masking for nested internal allocations. + * + * For code that needs to do allocations inside the public allocation API (e.g. + * memory allocation tracking code) the allocations need to obey the caller + * allocation context constrains to prevent allocation context mismatches (e.g. + * GFP_KERNEL allocations in GFP_NOFS contexts) from potential deadlock + * situations. + * + * It is also assumed that these nested allocations are for internal kernel + * object storage purposes only and are not going to be used for DMA, etc. Hence + * we strip out all the zone information and leave just the context information + * intact. + * + * Further, internal allocations must fail before the higher level allocation + * can fail, so we must make them fail faster and fail silently. We also don't + * want them to deplete emergency reserves. Hence nested allocations must be + * prepared for these allocations to fail. + */ +static inline gfp_t gfp_nested_mask(gfp_t flags) +{ + return ((flags & (GFP_KERNEL | GFP_ATOMIC | __GFP_NOLOCKDEP)) | + (__GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN)); +} + /* * We get the zone list from the current node and the gfp_mask. * This zone list contains a maximum of MAX_NUMNODES*MAX_NR_ZONES zones. diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 6a540c2b27c5..b723f937e513 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -114,12 +114,6 @@ #define BYTES_PER_POINTER sizeof(void *) -/* GFP bitmask for kmemleak internal allocations */ -#define gfp_kmemleak_mask(gfp) (((gfp) & (GFP_KERNEL | GFP_ATOMIC | \ - __GFP_NOLOCKDEP)) | \ - __GFP_NORETRY | __GFP_NOMEMALLOC | \ - __GFP_NOWARN) - /* scanning area inside a memory block */ struct kmemleak_scan_area { struct hlist_node node; @@ -463,7 +457,7 @@ static struct kmemleak_object *mem_pool_alloc(gfp_t gfp) /* try the slab allocator first */ if (object_cache) { - object = kmem_cache_alloc(object_cache, gfp_kmemleak_mask(gfp)); + object = kmem_cache_alloc(object_cache, gfp_nested_mask(gfp)); if (object) return object; } @@ -947,7 +941,7 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp) untagged_objp = (unsigned long)kasan_reset_tag((void *)object->pointer); if (scan_area_cache) - area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp)); + area = kmem_cache_alloc(scan_area_cache, gfp_nested_mask(gfp)); raw_spin_lock_irqsave(&object->lock, flags); if (!area) { From patchwork Tue Apr 30 05:28:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Chinner X-Patchwork-Id: 13648273 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 B630AC4345F for ; Tue, 30 Apr 2024 05:46:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 896596B008A; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 845ED6B008C; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5FAD06B0093; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 3344B6B0089 for ; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E699FA0414 for ; Tue, 30 Apr 2024 05:46:18 +0000 (UTC) X-FDA: 82065112836.24.64EA007 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by imf28.hostedemail.com (Postfix) with ESMTP id 08DB5C0013 for ; Tue, 30 Apr 2024 05:46:16 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=u9DsXSKM; spf=pass (imf28.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=david@fromorbit.com; dmarc=pass (policy=quarantine) header.from=fromorbit.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714455977; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=YhVbG6l51s2wWUsaX4UmS6UBTYaIND28KaQonxVRDmk=; b=4FbnezpL8rFxnwFgGjpGTzmNr7G1bla9K2NmkDw/1BzquHQNHSDpWlKZrD3TsvGhp/YayT OpBtSq262SGYKLr0necctMOKDt0hmySAXEpwpGVYipIhq5zYZXIID7rfAzXJAldvgRAqku 7qHmZJfojH88BKIU6V0b5eg52Vtdr/s= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=u9DsXSKM; spf=pass (imf28.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.176 as permitted sender) smtp.mailfrom=david@fromorbit.com; dmarc=pass (policy=quarantine) header.from=fromorbit.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714455977; a=rsa-sha256; cv=none; b=id/LDOOcVS9leTTpdkhtJWRi4wKlJIIPxGqujE0JPSEo6nVOFS1iPSslFrS9/RiNn3CCUo plXqvF8P5BIUHtoLBshs8Tqa2khD3cgr7Wl9E2zg7ZrzWHHnBJ11MD2ljVz0p9awk7MCHz 6KFAkKBDcpIVcuihBmp/kcu/uuyErbc= Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1e4c4fb6af3so36026325ad.0 for ; Mon, 29 Apr 2024 22:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fromorbit-com.20230601.gappssmtp.com; s=20230601; t=1714455976; x=1715060776; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YhVbG6l51s2wWUsaX4UmS6UBTYaIND28KaQonxVRDmk=; b=u9DsXSKMQaNpYSj2XIDdX4BPM+Zq3x/58/cJ6iDlkSrLBf2ywjCPxEU9YqGxMxglVi e80rWEQ1IyDtlfkejZa4DcEAciX7ydnhw4IAATeJNqNVlYSNCbuyrbLPNdMd1ub91jzt yhjzCa4DHYsT3mPOuLTACTPqk6MTuAZlxEukrilVh8iO/Es4vdLoL1jqCHSyq80yE2l9 ZyhlfOBQEB4aRuqtzC27BwxaMmPmEPqT+hXwg/5FpDeq5x/8f2WrwHbbbh7EuyywYE6R Qgl+s/VNFdgjEviJhse74DtSSv+c0lsYs6P+UZPlXi5q2nw2B3zb7YFjcjxVb5L5z/jf bsVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714455976; x=1715060776; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YhVbG6l51s2wWUsaX4UmS6UBTYaIND28KaQonxVRDmk=; b=V5TMExN4KFiEaddOs6C8VNLUCjXo6mt/McGiC4wKrquXd0SXin8NHDd2VYx5aQ5wOG VkWhAXuGjXq7uEasJ0t8tbyF0pycOpfwmAWRQU7zcc/9raGAiG+H2cuWSKV7nSYibTtV a5tku15Hnxu/K88+drdW+I07GIXSCDPQRENEeGqd2F5yPDx5TPZ3IW/sU/QailxN67Qp 26l8nG7EQ7RS4Nhj6rMYwaToKtgDMcVDO/zIrBMIEvJatqFF6LeW7u67qkT3AIOSaNXo RRxUbX4JTV+/8TUrXnjd6C9EXM59iGpFRw5117zOH4mX2P+tO7tQcAXZdJsmYRAqpXZE ywTg== X-Gm-Message-State: AOJu0YzRyUVUYQDmoQK/g75W3yrzJinWQl2gbudezuxPR6Ww2IC1aG3K cC2bzlXwnxpjqX/0+UpZJjebzUQm8hgiEG+S2dZFuxgHGnDFs5HG2XKEU9a780wEj6yMPxrLq2v P X-Google-Smtp-Source: AGHT+IGmMVzjdjiJtHH11D0+CMXFMdRq/n5W1OeXzYwklrE0Jb2BQaYNgr6A90Q1Xy+u7Oi5ZpFZFQ== X-Received: by 2002:a17:903:11cf:b0:1e5:e5e8:73f5 with SMTP id q15-20020a17090311cf00b001e5e5e873f5mr2610844plh.2.1714455975707; Mon, 29 Apr 2024 22:46:15 -0700 (PDT) Received: from dread.disaster.area (pa49-179-32-121.pa.nsw.optusnet.com.au. [49.179.32.121]) by smtp.gmail.com with ESMTPSA id w3-20020a170902a70300b001e83a718d87sm21480895plq.19.2024.04.29.22.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 22:46:14 -0700 (PDT) Received: from [192.168.253.23] (helo=devoid.disaster.area) by dread.disaster.area with esmtp (Exim 4.96) (envelope-from ) id 1s1gJg-00FsCH-2H; Tue, 30 Apr 2024 15:46:12 +1000 Received: from dave by devoid.disaster.area with local (Exim 4.97) (envelope-from ) id 1s1gJg-0000000HUwu-0eif; Tue, 30 Apr 2024 15:46:12 +1000 From: Dave Chinner To: linux-mm@kvack.org, linux-xfs@vger.kernel.org Cc: akpm@linux-foundation.org, hch@lst.de, osalvador@suse.de, elver@google.com, vbabka@suse.cz, andreyknvl@gmail.com Subject: [PATCH 2/3] stackdepot: use gfp_nested_mask() instead of open coded masking Date: Tue, 30 Apr 2024 15:28:24 +1000 Message-ID: <20240430054604.4169568-3-david@fromorbit.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240430054604.4169568-1-david@fromorbit.com> References: <20240430054604.4169568-1-david@fromorbit.com> MIME-Version: 1.0 X-Stat-Signature: dzy15dxjzpih36m7seoo9c8apnhqyjjn X-Rspam-User: X-Rspamd-Queue-Id: 08DB5C0013 X-Rspamd-Server: rspam05 X-HE-Tag: 1714455976-149747 X-HE-Meta: U2FsdGVkX1+b/HnLxElOAFA7h54PV48+dd9ND4j5Z5aspdPNlqnlMPhZsSFqREzFeg2LkKKTyVh3Hb6AZWBUBcg2vrj4zsY85z8/eUEfx2OzLkmHnqUfkTznJZ/VN0ZarMqDKveiDc2EmyxVxD1G93Su9mywSEGx6O0sDQG4EEBwQp8tBCbqOKWV46P4755i+8uSZkUaFtsd1r8N7FwovW7hR939yLB7aR5yo3TeyWr7mFAI515hoeUPl46dy3w+whothsb+FxMUuELiEoMcf/LvMN/pIUz2BKCYlsV5VcAMxhyPCRCt9SCued7gYoJisaYsuG9j3srhm1s5taJAXdjHF/sVZ2BeeXAUZEAdUPwn01IvYSC33aLuUZPrlcqsDjs/4rFhCDx0mrNvg6FPHyTGWneggEGFd0HFKFz5mW1ixrkq/rRhnS9E6GSsBk+L2XkGobYaeB6DAT5R0F5t3HW+hVA+0NvQWP0YXs34+w/+rpYb3azcd/T4gt3OscJmHaizrqYKDWH+JPnX5FuoYPUSWNI6ILJr837DdTsNxOjUkMAjZtewpV8X3GM98aFAGizrAIxqT99+68ZcSdYNdUpekjztf+o55qVbw/KPJhZb+fvTh5RPZgQfTBMc0FDPbiGwuuidbbGNTLB3SDd7zS10BowTqfrO9iGMf7L7UFW5GKOwClgTmMZ9HHCFYFdwWt9OxzI5OtMxrem5FB8mSma9+rDmSVheAWic40tnQXo225stkjuCeQHk5IcrRH73qA7ISAEzbSnDv69V/A/XWS4Jcolu7sio6QB1oIEeWbFULmVrlKOGqMIWK1NPe62T4G6XFp4qFh4UkzY4/nY+H/3ErpXqQp8Hw6VpswYmWXYH9ORu0ik36ksRb9txG5v+j4OGaX2J+FFf+uY6Q4/y/mD++vzgE54K4Jb0AcWPcacUCjRqiQuqRVN9N5zRoODbTlgOcl8/H0ULKC5w/Gv hR5UFPr9 hUABskfJxdhFmiyXume53SwQthWH7QP7tu1tYuZLv56WQjq/J4w2VXMArs1pIWgUAFexX5W2X+pNCRYwgVG+BE7saFD9Qw1u+9CacKWFTcLQmd0BcrXYuiNo3y4YMTeXIQosAJpOH0Uj2Faspp43SCJiMdH7IaPPasbpadFR8qL7DAuEvdtDFnDLJa/FP1y3xX6plDqx928CQ5xG3r/EKke91OmY1npAYhbPlkuLTzCVCSy3bzJrQuqkaGVMczFpkyS5yUQkrbc+2US97+e/IM02uECnHlTTqEpk4/oie1IgjiqHJbXAOeUZA03okerF93jBhbLRWdzSBADstVCCAP4Dw2ixPikp9i7eqfcV2SsMCsGX4gl8zExiP4f7TDUSwCsbWP0c2zgEu2GcdWl5zICztgIRcU/F53Hzh3+IXXDfgwZa5cHRJKyWFau3vuxCU74j4PDBdtHyZhp4BD9qMV/REBsiIUGiPWftoJWc85KQtU/k= 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: From: Dave Chinner The stackdepot code is used by KASAN and lockdep for recoding stack traces. Both of these track allocation context information, and so their internal allocations must obey the caller allocation contexts to avoid generating their own false positive warnings that have nothing to do with the code they are instrumenting/tracking. We also don't want recording stack traces to deplete emergency memory reserves - debug code is useless if it creates new issues that can't be replicated when the debug code is disabled. Switch the stackdepot allocation masking to use gfp_nested_mask() to address these issues. gfp_nested_mask() also strips GFP_ZONEMASK naturally, so that greatly simplifies this code. Signed-off-by: Dave Chinner Reviewed-by: Marco Elver --- lib/stackdepot.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 68c97387aa54..0bbae49e6177 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c @@ -624,15 +624,8 @@ depot_stack_handle_t stack_depot_save_flags(unsigned long *entries, * we won't be able to do that under the lock. */ if (unlikely(can_alloc && !READ_ONCE(new_pool))) { - /* - * Zero out zone modifiers, as we don't have specific zone - * requirements. Keep the flags related to allocation in atomic - * contexts and I/O. - */ - alloc_flags &= ~GFP_ZONEMASK; - alloc_flags &= (GFP_ATOMIC | GFP_KERNEL); - alloc_flags |= __GFP_NOWARN; - page = alloc_pages(alloc_flags, DEPOT_POOL_ORDER); + page = alloc_pages(gfp_nested_mask(alloc_flags), + DEPOT_POOL_ORDER); if (page) prealloc = page_address(page); } From patchwork Tue Apr 30 05:28:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Chinner X-Patchwork-Id: 13648271 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 9DA00C4345F for ; Tue, 30 Apr 2024 05:46:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D01A6B0092; Tue, 30 Apr 2024 01:46:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 057916B008A; Tue, 30 Apr 2024 01:46:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E6B616B008C; Tue, 30 Apr 2024 01:46:18 -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 C3A986B0088 for ; Tue, 30 Apr 2024 01:46:18 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 796641C08C5 for ; Tue, 30 Apr 2024 05:46:18 +0000 (UTC) X-FDA: 82065112836.18.3C5AD1F Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) by imf10.hostedemail.com (Postfix) with ESMTP id A959AC000A for ; Tue, 30 Apr 2024 05:46:16 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=FrGf3saE; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf10.hostedemail.com: domain of david@fromorbit.com designates 209.85.210.53 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714455976; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=NV4GJbGFzoY56PgdrQSIf6/6C14cbaCO2NcKy+lGqTw=; b=0sFmhf4DlzEjh+NLkG+bQW1qhT8v4cMiZtvKQPXrWOF5Cd6/v0vTBFf+CQTrSIZnf0OMMz OMxRqU6BzzKtTltozOC+2vVTNQpcJNTAxfVPSfn/NKmrbg/+giLciStnejtnELZoe+gOea GG1fMI+piBL+g8pJQdWN/WnuSCIkzxc= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=FrGf3saE; dmarc=pass (policy=quarantine) header.from=fromorbit.com; spf=pass (imf10.hostedemail.com: domain of david@fromorbit.com designates 209.85.210.53 as permitted sender) smtp.mailfrom=david@fromorbit.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714455976; a=rsa-sha256; cv=none; b=kZ1v2BTXbggmqwroq2xmo5uC3GUFBxPMAvufxy15rS2ddRelfqUFrcwAswwQuIsdMn/0Q4 lBBRB8N9mi+QFsS2+A6xJ0SLI2HNXje0ZQ6v2kVt2SDEEoNp1/5e8mWVW9gE5+Q+MXuMC5 UKHUWlDfxGtAiJLYkGgCEAr9AxP9U3E= Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-6ee1b203f30so1413138a34.0 for ; Mon, 29 Apr 2024 22:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fromorbit-com.20230601.gappssmtp.com; s=20230601; t=1714455975; x=1715060775; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NV4GJbGFzoY56PgdrQSIf6/6C14cbaCO2NcKy+lGqTw=; b=FrGf3saEKNIIupUiMli3xWnPQ839CrKgnL8EIx9mGaCfN2t+3v8cSURUKQPseNdCWV /msSHMnUHn5bYE42IM2i8cSbwFgkaPsVBOCBs3fzyulH/0gLbnh7m8Ed+Pumxx38dAch Go6PulHAEKctJ+ovItO2di/wXokM8VAalnPyfjwlMpAj0uahTBu4aL6UdU2Gt13f32gc 1xbTBxL8HC9J1uedqomGy/5MFhm5GqAXkHKzvFR4Pcv8ctNP0gHcFFNP2oE3q81xqW0y 25Z5aU3fFjWhCy4T6jNID23MIKCcuXfC5NbXBKYJ7ZsNwvo0chAltvQvz9+4BkUv8f0c nXOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714455975; x=1715060775; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NV4GJbGFzoY56PgdrQSIf6/6C14cbaCO2NcKy+lGqTw=; b=JjlgQrWahyEGrRxXiXq0iUBYZ5Heg0JLEdZ+NcDd48t4l3M845vHRBCi3pd4/e1DtP J3MHA4AaV6brW7Eh1qGxMyTt8DbpAYm+Xg65vvnuJY2HurCzmvZdvRm0kE+aEIJlsCfq llwYmI+vK3VZHDXGSE3qfp4FRdZc/V4BB+OT2sL4kZ0Vjj9sQpS8xYEgNTvLH3fVcIPs ooF/KPWPzXwGiZqW1nPCYQOHgBknPuH4kHZNS65U5VALOgWUOaG2/1RTb3d2EFBuKzss 2ID/NKNiJ2LLOsWZ60jkzES/xK3uI5tqzQ8g2g0CGS6SHRM9O1hpSiiGW8R9BR7gNcz/ gcrg== X-Gm-Message-State: AOJu0Yx1p4NEiCBFMKztbuluEa4q1tqQ+VN8QnyWwilZZqH7GFrqvqkb XOhiU2yXX1iJ4tC5GFRrV/B3Wz23+z3B3rd+9Wa8+LAlYrw/YB786moC9I/N/p/sWpqkJWL+peF H X-Google-Smtp-Source: AGHT+IHSe22zH9AEzfdykd197j0sgft4/vE2xJ+69aNwgLdPObVthGLdo/lyUt2tlIufut/wICnAyg== X-Received: by 2002:a05:6871:3308:b0:22e:fec:707a with SMTP id nf8-20020a056871330800b0022e0fec707amr11386433oac.19.1714455975418; Mon, 29 Apr 2024 22:46:15 -0700 (PDT) Received: from dread.disaster.area (pa49-179-32-121.pa.nsw.optusnet.com.au. [49.179.32.121]) by smtp.gmail.com with ESMTPSA id gs9-20020a056a004d8900b006e694719fa0sm20968511pfb.147.2024.04.29.22.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 22:46:14 -0700 (PDT) Received: from [192.168.253.23] (helo=devoid.disaster.area) by dread.disaster.area with esmtp (Exim 4.96) (envelope-from ) id 1s1gJg-00FsCN-2N; Tue, 30 Apr 2024 15:46:12 +1000 Received: from dave by devoid.disaster.area with local (Exim 4.97) (envelope-from ) id 1s1gJg-0000000HUwz-0uIM; Tue, 30 Apr 2024 15:46:12 +1000 From: Dave Chinner To: linux-mm@kvack.org, linux-xfs@vger.kernel.org Cc: akpm@linux-foundation.org, hch@lst.de, osalvador@suse.de, elver@google.com, vbabka@suse.cz, andreyknvl@gmail.com Subject: [PATCH 3/3] mm/page-owner: use gfp_nested_mask() instead of open coded masking Date: Tue, 30 Apr 2024 15:28:25 +1000 Message-ID: <20240430054604.4169568-4-david@fromorbit.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240430054604.4169568-1-david@fromorbit.com> References: <20240430054604.4169568-1-david@fromorbit.com> MIME-Version: 1.0 X-Rspamd-Server: rspam01 X-Stat-Signature: h1wxgruwosgdpupneyfg37ijw4zb1u7e X-Rspam-User: X-Rspamd-Queue-Id: A959AC000A X-HE-Tag: 1714455976-142929 X-HE-Meta: U2FsdGVkX1/nUesX/WkaHup5AEgOH8fwMuAI2+N8XlxnBZKeoVDpUtjoUsik1EIx6mqLLF19AWEdAMRSA1wQGoPky2Odg26ys3hsqTdTY6bxg7mbWaWWvAeMkS5DDFPtj6daxwYND1UEkcNP/coPEGnSFtBBUx7bU42EP16KYx6uX3t79I60SZHS7bgAozPUCLxAudyUbCB0D5Gcau0yqvgaI0IFTL77LPu7EjJg/CAPFjLauRihZHQ3jKN19Rfmli3dqzYGfVhcKNUpzOQdEPJWzvvs9O/7sNBe4uqoIEdKMuiKnBKQcBBF6ObWFuKDaSG/cdgy5O9ZZTrTSdBUitEdyiPhZaR2PKtfcfQRjwA4uNMsEOi8MEKuFijW2nF0iv7uf7+rPu+lrRokeWVCpNLfgLgjLAo7rYbSERzmoXY3Z2u9lXF0t83fwRZZZdtB0CNwLOiDogRM9+0s8mP87dUIfrNUPky9RdzoiR6a6nqbC+LaFkc6+REd3i34sylt8O52I2wJG9hhGXV/KZBNPMx2PFKVG07BXIRMFLxl7uP4i3KfULDc6vpSFp1TIpR9J1te/KCUqFJQYLGUsV7dw8AKolJW++XD6P119omXxZtzgAnJZrvqbpf7JMad3ZGSzPKncje6RvyD2Ri66xgTIAUhFYHBmwTrk3X5/u8QRGQpLD2JOqDw8U1uKx1E8zYiQABYi28NftIBHG6MfMPLM9BrDZ9Xi+scXQhltnBxdUJD/BlAewFZ6MHkbk9Y6Lm1E/AMqRz7SjovK9eDcdIrlhzw9d9q8rCghnn/98sWwqq6IdS1TAIFPYJLVCYtn7FwoDp43YUStKY/ZUx9dZbPuvVmhzEr/0yvWztuKR1o6TrfKYztCIWcnDNKoo4k9OCh50xbXDXochTBC0LLRwuCEQG2UITrMp0A5WiiFh6liWcJn7iYLZ+pBhzsdV6qVH2LFCp9M8ulH1NwVQwWPPL VqyXNGcc cBi8xcM2azX4rcZesV2wjjsk6/ocFn8+GzILoRr3M/d55yVXXGfq5FFGy7gy0ADKSvIZfdmvEpCc8x+W8g+K0oyMw3NLu5IsdSeYdR4UP5z/Ru7foVC7NMQWWTNVTi/vqrTXVGeaii6bTdpm5JbnwzmU5x6hW1ni4AiqmPNHmud7a+yMSu5xeMsXMON7eQ8+qtNl2Kp+5mMczLO2f/QVv1I0W7mFVAOgz1EksaKAFHqub5hysaczOuud1QiBZjz+iDePOvus4gfs+TtMV+Y28r8pe/zp6+Mtq9YHrlejDCtRQQKV7mfJrDOzYqCDx7PsqmMeoSvivZnyrfqPRq3e6WAM5IsojgmSsfwQJe18dpUcWQuWmf0kE8xcHOQDFxoidfAmOWdQaDOOtdXLA64dbpl44nM9qCU/yKF3sFS6c6whGNxh5tfH0ITTHlKAjd5tg5nNYMu6I+Ls24zkS8K04fms17jcHmpyKKT6OzkUn2+k9du8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.001410, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The page-owner tracking code records stack traces during page allocation. To do this, it must do a memory allocation for the stack information from inside an existing memory allocation context. This internal allocation must obey the high level caller allocation constraints to avoid generating false positive warnings that have nothing to do with the code they are instrumenting/tracking (e.g. through lockdep reclaim state tracking) We also don't want recording stack traces to deplete emergency memory reserves - debug code is useless if it creates new issues that can't be replicated when the debug code is disabled. Switch the stack tracking allocation masking to use gfp_nested_mask() to address these issues. gfp_nested_mask() naturally strips GFP_ZONEMASK, too, which greatly simplifies this code. Signed-off-by: Dave Chinner --- mm/page_owner.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mm/page_owner.c b/mm/page_owner.c index 742f432e5bf0..55e89c34f0cd 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -168,13 +168,8 @@ static void add_stack_record_to_list(struct stack_record *stack_record, unsigned long flags; struct stack *stack; - /* Filter gfp_mask the same way stackdepot does, for consistency */ - gfp_mask &= ~GFP_ZONEMASK; - gfp_mask &= (GFP_ATOMIC | GFP_KERNEL); - gfp_mask |= __GFP_NOWARN; - set_current_in_page_owner(); - stack = kmalloc(sizeof(*stack), gfp_mask); + stack = kmalloc(sizeof(*stack), gfp_nested_mask(gfp_mask)); if (!stack) { unset_current_in_page_owner(); return;