Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1136863pxb; Fri, 20 Nov 2020 01:59:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJxb+BhBsxNL+wkLRFKQlDPD2lQoN0YY0wPPkTQIdv9Woj3xu2rFLOfew0wfShHWaVkCd0rb X-Received: by 2002:a17:906:888b:: with SMTP id ak11mr31311743ejc.278.1605866387956; Fri, 20 Nov 2020 01:59:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605866387; cv=none; d=google.com; s=arc-20160816; b=tfv7zM18TTUNgbAOMUlbK9FC2a2ccBcPn32Q/Nb8HHJ63hojIWZWs5vvcmVkFU2Zpq o5ykgOqLcyzivarY7fpYkoX5sCXzVxH5mBaxL35+GvHJhmJ+YEcEaqTKtH4wqzUGRfXR yaZ9Td4gNFK7BHALVWQTWbFu30a1w88BQCEYFvMDy4M1kt15Q2Cv5crqhhgyk17zVshM n6PgBaRJNCKZBmiM4BFczXE4/TuQZus20Zqn5nZ3ur/XMTrGQIc2/6fI4LHsSgVaNF96 3JbqipG6QCOXnB6rPKSJDGQdD6J2gVvNgyFuTwOfNpAsR5Qd6D34tDyD7BjiNmpFbprg aJGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7+q8vKHO3EFjaJ879GkRcmDKHJR9JgE21VUyxKW3mY0=; b=kGRIQX29lu/omoedlSahUWjJKmFKPYBpXslXhwWD6Z2yIflYLHpXYFacVMsOVNkM1l S09qq3fwN4qq600bq/nG8xNaZO92JQQU3LjIOINw4a+RNJ8jWpbyWIeuMSJmfh11pU4l HoG99dOe6eDGmpzdqwZwpW/69LNRjJxTO0baIug3hHRgvCltFTe/saPRYBYKdOvaLN+H ESKJPnsRLFJbpKvoPnEruJ/R7JOXHbpf/c9JEL1m6e1UGRkZxq/lfjgGjjb1K/rdd+rs J73XZthBxwacJGveBiQ1PxHDcW6VHR9+dFqipCEC3YtL2iZ9JgtnCixeWrtOtudVI9iM YgwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=NHf9AOhA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bm4si1391287ejb.283.2020.11.20.01.59.24; Fri, 20 Nov 2020 01:59:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=NHf9AOhA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727614AbgKTJ4R (ORCPT + 99 others); Fri, 20 Nov 2020 04:56:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727527AbgKTJ4P (ORCPT ); Fri, 20 Nov 2020 04:56:15 -0500 Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46175C0613CF for ; Fri, 20 Nov 2020 01:56:14 -0800 (PST) Received: by mail-wr1-x444.google.com with SMTP id d12so9315044wrr.13 for ; Fri, 20 Nov 2020 01:56:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7+q8vKHO3EFjaJ879GkRcmDKHJR9JgE21VUyxKW3mY0=; b=NHf9AOhApOcnNW/Sr7K7lwSXd9Ck9Z5/C9QZ4NYblHO1KiG0SUmf/3/kmWsXvPhkQT 4FJM/oryQSQIsGzo7RJ1DYRxlHGoSPqMsoUII89W+KZZMQA32qYyL67Mj55nLL5PhTVd UhLCk32vlvzz7bBzhH/KI4Qlskc0xIQ5mkZWA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7+q8vKHO3EFjaJ879GkRcmDKHJR9JgE21VUyxKW3mY0=; b=cFsbeQ1W/jXsvNE4luH+285RQj072S2qiXF1NtBdBTgPn8wPCIhgKBgUlt4jsx+afr am1/eUOrE4qCFYBkl+pOXfXeE0z90RdjmXiZ1hVKhEwQlqm2sC6ER3by71msS7P5k6L5 NqCol9mkcuP0p6uVvVOa/rUYM2eBoDfeSVOnGPnPvMhrZBxXnxlpsa8HQvPAOAv3krnO GEoKtnFdOpqhM+rqLx5pE7/tyEPQDSwyhpnekgx4f8+CXpYClQ72UNlZ9Yb2WcLKI52A rnK+/OrzzC57vm/vf2KYAX3WuB3Wte5WOc4JqJ77JVxGnA3iX4CSWS2FQYF1ffiOQ6Wr QjlA== X-Gm-Message-State: AOAM5317kyO1Z+hCrzVdzNzJRtuwSSygfiigZOHEOCySTmKldwSjpdRF jlurKJiZX2sMT3VTotap5uuKeg== X-Received: by 2002:a5d:654b:: with SMTP id z11mr14013175wrv.291.1605866173041; Fri, 20 Nov 2020 01:56:13 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id t9sm4500208wrr.49.2020.11.20.01.56.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Nov 2020 01:56:12 -0800 (PST) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , linux-mm@kvack.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, LKML , Daniel Vetter , Vlastimil Babka , "Paul E . McKenney" , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Peter Zijlstra , Ingo Molnar , Mathieu Desnoyers , Sebastian Andrzej Siewior , Michel Lespinasse , Waiman Long , Thomas Gleixner , Randy Dunlap , Dave Chinner , Qian Cai , "Matthew Wilcox (Oracle)" , Daniel Vetter Subject: [PATCH 2/3] mm: Extract might_alloc() debug check Date: Fri, 20 Nov 2020 10:54:43 +0100 Message-Id: <20201120095445.1195585-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201120095445.1195585-1-daniel.vetter@ffwll.ch> References: <20201120095445.1195585-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Extracted from slab.h, which seems to have the most complete version including the correct might_sleep() check. Roll it out to slob.c. Motivated by a discussion with Paul about possibly changing call_rcu behaviour to allocate memory, but only roughly every 500th call. There are a lot fewer places in the kernel that care about whether allocating memory is allowed or not (due to deadlocks with reclaim code) than places that care whether sleeping is allowed. But debugging these also tends to be a lot harder, so nice descriptive checks could come in handy. I might have some use eventually for annotations in drivers/gpu. Note that unlike fs_reclaim_acquire/release gfpflags_allow_blocking does not consult the PF_MEMALLOC flags. But there is no flag equivalent for GFP_NOWAIT, hence this check can't go wrong due to memalloc_no*_save/restore contexts. Willy is working on a patch series which might change this: https://lore.kernel.org/linux-mm/20200625113122.7540-7-willy@infradead.org/ I think best would be if that updates gfpflags_allow_blocking(), since there's a ton of callers all over the place for that already. Acked-by: Vlastimil Babka Acked-by: Paul E. McKenney Cc: Paul E. McKenney Cc: Christoph Lameter Cc: Pekka Enberg Cc: David Rientjes Cc: Joonsoo Kim Cc: Andrew Morton Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Vlastimil Babka Cc: Mathieu Desnoyers Cc: Sebastian Andrzej Siewior Cc: Michel Lespinasse Cc: Daniel Vetter Cc: Waiman Long Cc: Thomas Gleixner Cc: Randy Dunlap Cc: linux-mm@kvack.org Cc: linux-fsdevel@vger.kernel.org Cc: Dave Chinner Cc: Qian Cai Cc: linux-xfs@vger.kernel.org Cc: "Matthew Wilcox (Oracle)" Signed-off-by: Daniel Vetter --- include/linux/sched/mm.h | 16 ++++++++++++++++ mm/slab.h | 5 +---- mm/slob.c | 6 ++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index d5ece7a9a403..f94405d43fd1 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -180,6 +180,22 @@ static inline void fs_reclaim_acquire(gfp_t gfp_mask) { } static inline void fs_reclaim_release(gfp_t gfp_mask) { } #endif +/** + * might_alloc - Marks possible allocation sites + * @gfp_mask: gfp_t flags that would be use to allocate + * + * Similar to might_sleep() and other annotations this can be used in functions + * that might allocate, but often dont. Compiles to nothing without + * CONFIG_LOCKDEP. Includes a conditional might_sleep() if @gfp allows blocking. + */ +static inline void might_alloc(gfp_t gfp_mask) +{ + fs_reclaim_acquire(gfp_mask); + fs_reclaim_release(gfp_mask); + + might_sleep_if(gfpflags_allow_blocking(gfp_mask)); +} + /** * memalloc_noio_save - Marks implicit GFP_NOIO allocation scope. * diff --git a/mm/slab.h b/mm/slab.h index 6d7c6a5056ba..37b981247e5d 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -500,10 +500,7 @@ static inline struct kmem_cache *slab_pre_alloc_hook(struct kmem_cache *s, { flags &= gfp_allowed_mask; - fs_reclaim_acquire(flags); - fs_reclaim_release(flags); - - might_sleep_if(gfpflags_allow_blocking(flags)); + might_alloc(flags); if (should_failslab(s, flags)) return NULL; diff --git a/mm/slob.c b/mm/slob.c index 7cc9805c8091..8d4bfa46247f 100644 --- a/mm/slob.c +++ b/mm/slob.c @@ -474,8 +474,7 @@ __do_kmalloc_node(size_t size, gfp_t gfp, int node, unsigned long caller) gfp &= gfp_allowed_mask; - fs_reclaim_acquire(gfp); - fs_reclaim_release(gfp); + might_alloc(gfp); if (size < PAGE_SIZE - minalign) { int align = minalign; @@ -597,8 +596,7 @@ static void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node) flags &= gfp_allowed_mask; - fs_reclaim_acquire(flags); - fs_reclaim_release(flags); + might_alloc(flags); if (c->size < PAGE_SIZE) { b = slob_alloc(c->size, flags, c->align, node, 0); -- 2.29.2