Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1480379pxu; Thu, 17 Dec 2020 10:56:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJzzigNdZdE42Q8ZbtKJHakcKleCG10oIOfFEg+o6M4jgKNglEZxLgtAGANmb/rWyKYiV6PL X-Received: by 2002:a17:906:7e0b:: with SMTP id e11mr353767ejr.533.1608231374324; Thu, 17 Dec 2020 10:56:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608231374; cv=none; d=google.com; s=arc-20160816; b=cg0JFtz9MLeXnlp7wZAVsle/3GD+oIFTXhY9ukoYhxW7nefZZMboIznnkWWYr1C87/ bzRIlj7BXq6jw9MkO9kW/mORccfMFBHP9gecQ3DHGbMRsk74RyAjvVKwRZtUQylXfSs+ dyF+adas7k09Fx7cLE5xTWF0H0bddnTvLVdCVCxIYezzWUHRC46hcbpnI7J/GYjdMBpw C9iMEnMVguTQ3glRvx2C3nlenWDeq96KqWtqfiekG8baljpFEHd4jzcpleK9hFL8CTZj EdXDVFyqvP+OKvsRlPfIN54kuK6ueMhi5n/Ur1PyFrseK0BVFheSDFNds00Zhqj2FiRu mmVA== 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:to:from :dkim-signature; bh=3vDHKEzj0vF17lzh9SYpP31/FhI4ogCEdqejDZ0noAU=; b=WgK5Hnd18LzH0VZxjgv6BcoSafUroo9tPtG8BYxfwctnJ/vxBjCts0P1GYobi6YKIv gvbJYhh1CFr2mSB34jWN/LdVsvo5oePt2Bv7AgKvExaDs20fpzBxI+JijT41e/kwFQ8Y Va7p+0WO9jYDuRq95Cgx9v86SSMlxD+iiaUTKFcvAQ6iGBwlVYHjt5ILO6AU1cw2NoxV NGWvjBCCylILnMUb8J9WH+gvVvbjd5gAOei3PY1SX84Sy3NrJyw8zcemqFb2MgWRun/Z MrjCfBbckz4kOZGRwDaA/d3qa6j8q4TCr3zyV8PYY7EHsktmykzOSzpICoQyCX39FuNc qrXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@soleen.com header.s=google header.b=EdFqn1Vh; 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 u30si4959117edb.89.2020.12.17.10.55.51; Thu, 17 Dec 2020 10:56:14 -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=@soleen.com header.s=google header.b=EdFqn1Vh; 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 S1730256AbgLQSyK (ORCPT + 99 others); Thu, 17 Dec 2020 13:54:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729996AbgLQSyJ (ORCPT ); Thu, 17 Dec 2020 13:54:09 -0500 Received: from mail-qk1-x72b.google.com (mail-qk1-x72b.google.com [IPv6:2607:f8b0:4864:20::72b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C99B2C0611C5 for ; Thu, 17 Dec 2020 10:52:50 -0800 (PST) Received: by mail-qk1-x72b.google.com with SMTP id d14so26713794qkc.13 for ; Thu, 17 Dec 2020 10:52:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=3vDHKEzj0vF17lzh9SYpP31/FhI4ogCEdqejDZ0noAU=; b=EdFqn1VhcOpZMa3J3DFosAQqJr0UlLj2Q1rIqQzWkpAG9UR36YgESwGeCDL61GQsby 4a764EIeuSe/P0aNnH/Dxs8iJo1WUn1lcnOItCvqtGHqbyY9vLhDvhmFdF8vuur9zjjX xsS2eEr09qduALSup64cnWmdEplzUwQijRRV6F+PgHjf21hlrxI95Duk4dkSrH+7/Ozb QFbUMDNgAO5dnh4pOjC1y1EwhWY1yahxoORTL6KUO89qyCkmZ1c+tGOe/NTVvnsU5yqS KKpUaH8Q+u3CChrO/OASeiKpJwbfxJUEh+eu787k5qeewCn2F+ll2wWUMZ9SU8mcYAf1 AYKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3vDHKEzj0vF17lzh9SYpP31/FhI4ogCEdqejDZ0noAU=; b=cNcRAPw1I/SCIU6mcnfQysCy6FV/bXqim8piqY9OpzAwGcKZ3n2VqZb8l0RVM1DDUN YlAswJdnVm4m2e9/b+NON1KFIVkOgvhP3uB6tQaxiNKNVpeBZVlvMw6IE4SiotiIif7R Lmt0WYSDzFhIFiUXa+OhOhjgPd9UASTh996VLPc/l0cTuVefrG7d6W6DYWqcHkuhyrJJ 5x80+a9pOjBCtF7huaTFLaHN0vdQi1jl59WIP3v0oKgIsbzHOQpiDCKd7b/qWubGXgBO js0iNHU5qPzW0f+AZDkX2O4BbfiTcFgbKBMkXhF0c5F0LXpUHLhh3sjfZcB2Ol2KIwoz F8Lg== X-Gm-Message-State: AOAM530Tu6KbrQAnT6i923eS64HZMwRRYZmp0sNCPzHLNBHgmIEwRuXg T5RQsD4zxUN0Ll0D00Aedu9zQw== X-Received: by 2002:a37:a241:: with SMTP id l62mr690495qke.482.1608231170066; Thu, 17 Dec 2020 10:52:50 -0800 (PST) Received: from localhost.localdomain (c-73-69-118-222.hsd1.nh.comcast.net. [73.69.118.222]) by smtp.gmail.com with ESMTPSA id m8sm4127434qkn.41.2020.12.17.10.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Dec 2020 10:52:49 -0800 (PST) From: Pavel Tatashin To: pasha.tatashin@soleen.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, vbabka@suse.cz, mhocko@suse.com, david@redhat.com, osalvador@suse.de, dan.j.williams@intel.com, sashal@kernel.org, tyhicks@linux.microsoft.com, iamjoonsoo.kim@lge.com, mike.kravetz@oracle.com, rostedt@goodmis.org, mingo@redhat.com, jgg@ziepe.ca, peterz@infradead.org, mgorman@suse.de, willy@infradead.org, rientjes@google.com, jhubbard@nvidia.com, linux-doc@vger.kernel.org, ira.weiny@intel.com, linux-kselftest@vger.kernel.org Subject: [PATCH v4 02/10] mm cma: rename PF_MEMALLOC_NOCMA to PF_MEMALLOC_PIN Date: Thu, 17 Dec 2020 13:52:35 -0500 Message-Id: <20201217185243.3288048-3-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201217185243.3288048-1-pasha.tatashin@soleen.com> References: <20201217185243.3288048-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PF_MEMALLOC_NOCMA is used ot guarantee that the allocator will not return pages that might belong to CMA region. This is currently used for long term gup to make sure that such pins are not going to be done on any CMA pages. When PF_MEMALLOC_NOCMA has been introduced we haven't realized that it is focusing on CMA pages too much and that there is larger class of pages that need the same treatment. MOVABLE zone cannot contain any long term pins as well so it makes sense to reuse and redefine this flag for that usecase as well. Rename the flag to PF_MEMALLOC_PIN which defines an allocation context which can only get pages suitable for long-term pins. Also re-name: memalloc_nocma_save()/memalloc_nocma_restore to memalloc_pin_save()/memalloc_pin_restore() and make the new functions common. Signed-off-by: Pavel Tatashin Reviewed-by: John Hubbard Acked-by: Michal Hocko --- include/linux/sched.h | 2 +- include/linux/sched/mm.h | 21 +++++---------------- mm/gup.c | 4 ++-- mm/hugetlb.c | 4 ++-- mm/page_alloc.c | 4 ++-- 5 files changed, 12 insertions(+), 23 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index e5ad6d354b7b..e30d5511ccc0 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1576,7 +1576,7 @@ extern struct pid *cad_pid; #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */ #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ -#define PF_MEMALLOC_NOCMA 0x10000000 /* All allocation request will have _GFP_MOVABLE cleared */ +#define PF_MEMALLOC_PIN 0x10000000 /* Allocation context constrained to zones which allow long term pinning. */ #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ #define PF_SUSPEND_TASK 0x80000000 /* This thread called freeze_processes() and should not be frozen */ diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index 1ae08b8462a4..5f4dd3274734 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -270,29 +270,18 @@ static inline void memalloc_noreclaim_restore(unsigned int flags) current->flags = (current->flags & ~PF_MEMALLOC) | flags; } -#ifdef CONFIG_CMA -static inline unsigned int memalloc_nocma_save(void) +static inline unsigned int memalloc_pin_save(void) { - unsigned int flags = current->flags & PF_MEMALLOC_NOCMA; + unsigned int flags = current->flags & PF_MEMALLOC_PIN; - current->flags |= PF_MEMALLOC_NOCMA; + current->flags |= PF_MEMALLOC_PIN; return flags; } -static inline void memalloc_nocma_restore(unsigned int flags) +static inline void memalloc_pin_restore(unsigned int flags) { - current->flags = (current->flags & ~PF_MEMALLOC_NOCMA) | flags; + current->flags = (current->flags & ~PF_MEMALLOC_PIN) | flags; } -#else -static inline unsigned int memalloc_nocma_save(void) -{ - return 0; -} - -static inline void memalloc_nocma_restore(unsigned int flags) -{ -} -#endif #ifdef CONFIG_MEMCG DECLARE_PER_CPU(struct mem_cgroup *, int_active_memcg); diff --git a/mm/gup.c b/mm/gup.c index f2e50cdd7d67..04602e94856b 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1671,7 +1671,7 @@ static long __gup_longterm_locked(struct mm_struct *mm, long rc; if (gup_flags & FOLL_LONGTERM) - flags = memalloc_nocma_save(); + flags = memalloc_pin_save(); rc = __get_user_pages_locked(mm, start, nr_pages, pages, vmas, NULL, gup_flags); @@ -1680,7 +1680,7 @@ static long __gup_longterm_locked(struct mm_struct *mm, if (rc > 0) rc = check_and_migrate_cma_pages(mm, start, rc, pages, vmas, gup_flags); - memalloc_nocma_restore(flags); + memalloc_pin_restore(flags); } return rc; } diff --git a/mm/hugetlb.c b/mm/hugetlb.c index cbf32d2824fd..3f5ddac5de8a 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1033,10 +1033,10 @@ static void enqueue_huge_page(struct hstate *h, struct page *page) static struct page *dequeue_huge_page_node_exact(struct hstate *h, int nid) { struct page *page; - bool nocma = !!(current->flags & PF_MEMALLOC_NOCMA); + bool pin = !!(current->flags & PF_MEMALLOC_PIN); list_for_each_entry(page, &h->hugepage_freelists[nid], lru) { - if (nocma && is_migrate_cma_page(page)) + if (pin && is_migrate_cma_page(page)) continue; if (PageHWPoison(page)) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 774542e1483e..ec05396a597b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3808,8 +3808,8 @@ static inline unsigned int current_alloc_flags(gfp_t gfp_mask, #ifdef CONFIG_CMA unsigned int pflags = current->flags; - if (!(pflags & PF_MEMALLOC_NOCMA) && - gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE) + if (!(pflags & PF_MEMALLOC_PIN) && + gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE) alloc_flags |= ALLOC_CMA; #endif -- 2.25.1