From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B0871C433DF for ; Tue, 25 Aug 2020 05:00:01 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 461A32072D for ; Tue, 25 Aug 2020 05:00:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HvFKC9NS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 461A32072D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 994606B000A; Tue, 25 Aug 2020 01:00:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 945BE6B000C; Tue, 25 Aug 2020 01:00:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85C3A8E000D; Tue, 25 Aug 2020 01:00:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0125.hostedemail.com [216.40.44.125]) by kanga.kvack.org (Postfix) with ESMTP id 707456B000A for ; Tue, 25 Aug 2020 01:00:00 -0400 (EDT) Received: from smtpin19.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 2E6988248047 for ; Tue, 25 Aug 2020 05:00:00 +0000 (UTC) X-FDA: 77187888960.19.rain73_2a0635127059 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin19.hostedemail.com (Postfix) with ESMTP id F1FE71AD1B4 for ; Tue, 25 Aug 2020 04:59:59 +0000 (UTC) X-HE-Tag: rain73_2a0635127059 X-Filterd-Recvd-Size: 4952 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by imf14.hostedemail.com (Postfix) with ESMTP for ; Tue, 25 Aug 2020 04:59:59 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id m34so5965563pgl.11 for ; Mon, 24 Aug 2020 21:59:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=CujjVNlCBITdfLG2aFM5tMhbSU/fDXpGUzs/pQuuzRE=; b=HvFKC9NSuGtmoN2nkRQRB89nb5D1b6pNSLZztimut3+DtGH/VMtl+ADpUf4POGIjqd 9Fs03QTaNVRlClXTS6x0Dxbgxgzp74huKGew2Tpzmx7z50nO+u5qO4WxIL+You+Ei5ia FVQPf0BJdVUA6FYYmoSKfCWIMMK73tgMTP8m6bILGiKSyEMU2lEM78oeubAi75/Yc1zD h2bcXT78SbQZ1nbEaOexZiRKgYz4FEcv1PwJa1LkM7792lFQLbjHSY2acjJ2OO9JYcPo MIYj6zsKEWDyq5I8Y7fy0jsdRHfnZCWMk7yLHfozu0V3GJ69NEjGTU8rBl5Xj2rHNDSM RDuA== 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; bh=CujjVNlCBITdfLG2aFM5tMhbSU/fDXpGUzs/pQuuzRE=; b=XT3vY0xR3cPuIMJx3em9G0ffUSDPLbFFbxhVx78QWnAfdNJKXu7m6gbPSvGZQnfyyf RUpDAbxvgUDaBxbTJ7Mkz3dRguX/VgNEJjYL61/6kgurSG9staRl5FzhJ8xkF34+nZLP pjdRRVgDQwFXhC4YGEc+vte3mWwkm5n3i11LRyXq8x8FCoTHo+4nHaek57qODFRsoeja W0O7uy8fO9GU2j85+WChi2zrp6+EuwIZbhT9MdllvgYm9hkRRn2nUvvEzIPMwTqq/Xsb Bo9vbpig7JripFWchEGJGZQpKbzpQj1PEg8EadmyhHGQlQM9DqarA86iUP5Q7B6FZvGd 6YlQ== X-Gm-Message-State: AOAM533QT2Ek0gLzjXaBIDi8ZAWzNK49JOoZN33KtSUkuGSRcUMORIDo flb2uro7KwQejZrZu0Cp4oo= X-Google-Smtp-Source: ABdhPJwYQngyhKIADWe0XS9wdCX6FqarosKpZUi4yFyZfbyt9FnMKzSNHXm0u+GoATqXUHmBWN4ATg== X-Received: by 2002:a62:5214:: with SMTP id g20mr6763671pfb.168.1598331598622; Mon, 24 Aug 2020 21:59:58 -0700 (PDT) Received: from localhost.localdomain ([114.206.198.176]) by smtp.gmail.com with ESMTPSA id b78sm13754694pfb.144.2020.08.24.21.59.55 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 24 Aug 2020 21:59:58 -0700 (PDT) From: js1304@gmail.com X-Google-Original-From: iamjoonsoo.kim@lge.com To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko , Vlastimil Babka , "Aneesh Kumar K . V" , kernel-team@lge.com, Joonsoo Kim Subject: [PATCH for v5.9] mm/page_alloc: handle a missing case for memalloc_nocma_{save/restore} APIs Date: Tue, 25 Aug 2020 13:59:42 +0900 Message-Id: <1598331582-19923-1-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 2.7.4 X-Rspamd-Queue-Id: F1FE71AD1B4 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam05 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: From: Joonsoo Kim memalloc_nocma_{save/restore} APIs can be used to skip page allocation on CMA area, but, there is a missing case and the page on CMA area could be allocated even if APIs are used. This patch handles this case to fix the potential issue. Missing case is an allocation from the pcplist. MIGRATE_MOVABLE pcplist could have the pages on CMA area so we need to skip it if ALLOC_CMA isn't specified. This patch implements this behaviour by checking allocated page from the pcplist rather than skipping an allocation from the pcplist entirely. Skipping the pcplist entirely would result in a mismatch between watermark check and actual page allocation. And, it requires to break current code layering that order-0 page is always handled by the pcplist. I'd prefer to avoid it so this patch uses different way to skip CMA page allocation from the pcplist. Fixes: 8510e69c8efe (mm/page_alloc: fix memalloc_nocma_{save/restore} APIs) Signed-off-by: Joonsoo Kim --- mm/page_alloc.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 0e2bab4..c4abf58 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3341,6 +3341,22 @@ static struct page *rmqueue_pcplist(struct zone *preferred_zone, pcp = &this_cpu_ptr(zone->pageset)->pcp; list = &pcp->lists[migratetype]; page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list); +#ifdef CONFIG_CMA + if (page) { + int mt = get_pcppage_migratetype(page); + + /* + * pcp could have the pages on CMA area and we need to skip it + * when !ALLOC_CMA. Free all pcplist and retry allocation. + */ + if (is_migrate_cma(mt) && !(alloc_flags & ALLOC_CMA)) { + list_add(&page->lru, &pcp->lists[migratetype]); + pcp->count++; + free_pcppages_bulk(zone, pcp->count, pcp); + page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list); + } + } +#endif if (page) { __count_zid_vm_events(PGALLOC, page_zonenum(page), 1); zone_statistics(preferred_zone, zone); -- 2.7.4