From patchwork Wed Sep 30 01:31:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joonsoo Kim X-Patchwork-Id: 11807523 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9A98F112E for ; Wed, 30 Sep 2020 01:31:31 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 26F1020C09 for ; Wed, 30 Sep 2020 01:31:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pX1GRBAX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 26F1020C09 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 088866B005C; Tue, 29 Sep 2020 21:31:30 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0380D6B005D; Tue, 29 Sep 2020 21:31:29 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E69B46B0068; Tue, 29 Sep 2020 21:31:29 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0098.hostedemail.com [216.40.44.98]) by kanga.kvack.org (Postfix) with ESMTP id CC1446B005C for ; Tue, 29 Sep 2020 21:31:29 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 8E0B08249980 for ; Wed, 30 Sep 2020 01:31:29 +0000 (UTC) X-FDA: 77318000298.26.deer13_59047032718e Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin26.hostedemail.com (Postfix) with ESMTP id 78E911804A301 for ; Wed, 30 Sep 2020 01:31:29 +0000 (UTC) X-Spam-Summary: 1,0,0,bd7a6cdd0cd2293b,d41d8cd98f00b204,js1304@gmail.com,,RULES_HIT:41:355:379:541:800:960:973:981:988:989:1260:1345:1437:1535:1542:1711:1730:1747:1777:1792:2198:2199:2393:2559:2562:2731:2899:3138:3139:3140:3141:3142:3354:3865:3867:3868:3870:3871:3872:4250:4321:5007:6261:6653:7576:7903:9413:10004:11026:11658:11914:12043:12114:12296:12297:12438:12517:12519:12555:12679:12895:13153:13161:13228:13229:13255:14096:14130:14181:14394:14721:21080:21433:21444:21451:21627:21666:21740:30054:30069,0,RBL:209.85.210.196:@gmail.com:.lbl8.mailshell.net-62.50.0.100 66.100.201.100;04yfd6ycmfedmbpms7u6jcq13mogrycksft5c4tebf9f6toaqrqzitajk8nckde.94y1etokizkiqty3cwdkbtbnowiocibxi9go3wds6yh3zj66p5ecamtqyqjio8b.w-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:25,LUA_SUMMARY:none X-HE-Tag: deer13_59047032718e X-Filterd-Recvd-Size: 5429 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by imf10.hostedemail.com (Postfix) with ESMTP for ; Wed, 30 Sep 2020 01:31:28 +0000 (UTC) Received: by mail-pf1-f196.google.com with SMTP id o20so4970pfp.11 for ; Tue, 29 Sep 2020 18:31:28 -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=DyzvGQRgkqDsF+X+CX3vPxTw0WIAL5D2XuRcOuAc4xo=; b=pX1GRBAXoHZ294HJxVuOebU71Irl2z/i6EhF+JFIKQXcDHkUlOHRFoz9mXbmBZkHGW Bknh8LXvVhGpWzzshCbMGRFvVBfIgdalUIxxkpw/Gy0BesclDgpAs0WAOYr4U/E2lC/o gt0Dmo0l3ye4fx+Wqsj8lpKsK8yG1BAAs/yYTWznE/NRDD6u0IDlWfS7bgo146DR6q8F 3zunEJE1RkXB8/G5rr7FVzKwmcd1ZuXBhpNhsv85kbU6UGjb91m0ykUnXg/fTeYNqzd2 Wccn04GpYvrhh4DRAfnOTOdZYCBS1Nr0/bwPuZamvHo+vVtBW1brS+N8i0pn6EHvuD0V J/EQ== 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=DyzvGQRgkqDsF+X+CX3vPxTw0WIAL5D2XuRcOuAc4xo=; b=iSCvVxKqzjVLN3Mo/0XDE5udffrY7RonaYyt59qxhzrSRbR5awPdLGpHVXAYbQbSi2 Q1g9+NF1XMQswWBs+YNDSWTicCzUwPYjoYB8imIzsjq+VEX6ZTVA6qdz2sx+6hXd/vd0 rIRgsqhrndGiGiF9OL0kWPFEx4YJdCvmClrvmpxbgUVjadp4rwKk4kppzrGvbR3tBm8p evH2DzLjyV8X7+xRKTOuPh3c8NFzBx5gj7fV7brDXx4B4hGwNbq2ASr4TueJaLNQkoDJ NHsyrW8F/F7KnXRhBvJ0SmBL8bSYJ2vL9QoiJEENl8gHIeMV3xJn/4x1cTVvi6D0YG2+ jrAQ== X-Gm-Message-State: AOAM532rrE/6ph3len1//fAS0A3dsL9VJiF9NoH+U4svvXC7zBYa4QOl JZDHD4qiddfBnBJUUG+BC+w= X-Google-Smtp-Source: ABdhPJx8gbnV2CM4viPMAxO6Lwqn0e/60csThe60GabGRgEqHTXnKmWE4QRrExgGDLf/Eer3UPuzRg== X-Received: by 2002:a63:5f89:: with SMTP id t131mr279237pgb.436.1601429487994; Tue, 29 Sep 2020 18:31:27 -0700 (PDT) Received: from localhost.localdomain ([114.206.198.176]) by smtp.gmail.com with ESMTPSA id q4sm6929491pfs.193.2020.09.29.18.31.25 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Sep 2020 18:31:27 -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" , Mel Gorman , kernel-team@lge.com, Joonsoo Kim Subject: [PATCH v3 for v5.9] mm/page_alloc: handle a missing case for memalloc_nocma_{save/restore} APIs Date: Wed, 30 Sep 2020 10:31:12 +0900 Message-Id: <1601429472-12599-1-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 2.7.4 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. For now, these APIs are used to prevent long-term pinning on the CMA page. When the long-term pinning is requested on the CMA page, it is migrated to the non-CMA page before pinning. This non-CMA page is allocated by using memalloc_nocma_{save/restore} APIs. If APIs doesn't work as intended, the CMA page is allocated and it is pinned for a long time. This long-term pin for the CMA page causes cma_alloc() failure and it could result in wrong behaviour on the device driver who uses the cma_alloc(). 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. Fixes: 8510e69c8efe (mm/page_alloc: fix memalloc_nocma_{save/restore} APIs) Acked-by: Vlastimil Babka Acked-by: Michal Hocko Signed-off-by: Joonsoo Kim --- mm/page_alloc.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index fab5e97..b5a3f18 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3367,9 +3367,16 @@ struct page *rmqueue(struct zone *preferred_zone, struct page *page; if (likely(order == 0)) { - page = rmqueue_pcplist(preferred_zone, zone, gfp_flags, + /* + * MIGRATE_MOVABLE pcplist could have the pages on CMA area and + * we need to skip it when CMA area isn't allowed. + */ + if (!IS_ENABLED(CONFIG_CMA) || alloc_flags & ALLOC_CMA || + migratetype != MIGRATE_MOVABLE) { + page = rmqueue_pcplist(preferred_zone, zone, gfp_flags, migratetype, alloc_flags); - goto out; + goto out; + } } /* @@ -3381,7 +3388,13 @@ struct page *rmqueue(struct zone *preferred_zone, do { page = NULL; - if (alloc_flags & ALLOC_HARDER) { + /* + * order-0 request can reach here when the pcplist is skipped + * due to non-CMA allocation context. HIGHATOMIC area is + * reserved for high-order atomic allocation, so order-0 + * request should skip it. + */ + if (order > 0 && alloc_flags & ALLOC_HARDER) { page = __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC); if (page) trace_mm_page_alloc_zone_locked(page, order, migratetype);