From patchwork Fri Jan 3 21:16:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Duyck X-Patchwork-Id: 11317407 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 9AFA11395 for ; Fri, 3 Jan 2020 21:16:37 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 5A52C24650 for ; Fri, 3 Jan 2020 21:16:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LFZqotGi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A52C24650 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 8C25E8E0008; Fri, 3 Jan 2020 16:16:36 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 899F68E0003; Fri, 3 Jan 2020 16:16:36 -0500 (EST) 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 7D7F18E0008; Fri, 3 Jan 2020 16:16:36 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0175.hostedemail.com [216.40.44.175]) by kanga.kvack.org (Postfix) with ESMTP id 69C958E0003 for ; Fri, 3 Jan 2020 16:16:36 -0500 (EST) Received: from smtpin03.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with SMTP id 1CAB22C8F for ; Fri, 3 Jan 2020 21:16:36 +0000 (UTC) X-FDA: 76337581992.03.wire73_1c77af4961d54 X-Spam-Summary: 2,0,0,34dc9b6a99f7d125,d41d8cd98f00b204,alexander.duyck@gmail.com,:kvm@vger.kernel.org:mst@redhat.com:linux-kernel@vger.kernel.org:willy@infradead.org:mhocko@kernel.org::akpm@linux-foundation.org:mgorman@techsingularity.net:vbabka@suse.cz:yang.zhang.wz@gmail.com:nitesh@redhat.com:konrad.wilk@oracle.com:david@redhat.com:pagupta@redhat.com:riel@surriel.com:lcapitulino@redhat.com:dave.hansen@intel.com:wei.w.wang@intel.com:aarcange@redhat.com:pbonzini@redhat.com:dan.j.williams@intel.com:alexander.h.duyck@linux.intel.com:osalvador@suse.de,RULES_HIT:41:152:355:379:800:960:966:973:988:989:1260:1277:1311:1313:1314:1345:1359:1431:1437:1515:1516:1518:1535:1543:1593:1594:1711:1730:1747:1777:1792:2196:2198:2199:2200:2393:2559:2562:2693:2731:2895:3138:3139:3140:3141:3142:3353:3865:3866:3867:3868:3870:3871:3872:3874:4117:4250:4321:4385:4605:5007:6261:6653:6742:7576:7875:9010:9413:10004:10400:11026:11658:11914:12043:12048:12114:12297:12438:12517:12519:12555:12679:12760:13149 :13161:1 X-HE-Tag: wire73_1c77af4961d54 X-Filterd-Recvd-Size: 6489 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) by imf31.hostedemail.com (Postfix) with ESMTP for ; Fri, 3 Jan 2020 21:16:35 +0000 (UTC) Received: by mail-pj1-f68.google.com with SMTP id a6so5033140pjh.2 for ; Fri, 03 Jan 2020 13:16:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Q5g0XGFgrpPSKiXo2HRT1FkXuZnAh556vUBRJ0hqLcw=; b=LFZqotGiJfnk82Pn00DUvtwp9P2Cbk3/QLUEi08e3ZK22MyX+P+YE2AwNvEbXqjruJ f4P/JhVz/oDsKOFwLFUfYcmW3EXRjS47yl362VcRa/2H5sHkyc5bNV22F47TKa32cUkF jz6/L3C9pMpv+7z603yYZbgwXd5CewZOMHrDcVj3/5qdmRWxEjojr8M+cD+H4sxz0V00 47Nkt/9Ko+4H8+wwEA58HcUIXGwNiPGwrj/Uo+PToeZjMZDrRfKat/VZg1F69U8IEKJn U7Mni5JwskAafAmGtjkttlTMtMINOfXVl4HHwRvdKZwx4GiEVCDDC18IfxIJJe40nFwT G+Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Q5g0XGFgrpPSKiXo2HRT1FkXuZnAh556vUBRJ0hqLcw=; b=qOX5ItFqRBGQf05CH1UkmAtgMycEacFosEZ/8c97M3+94Z5ZSVzMKQu34CabqNDuDA 857VJt5wyEQcizjjTF3V16dwSAMjvfLodI9b296e//EWlduKO5zcWvnIuPZipYM3CXo9 MEk9SmhzM9cBX8i+wJVWg2p0+Bqca5oeqK0gVK/ox35QHRJdqiw9f7hbZRqzsFUKfbDH nHMJlal3RJXt6J7zZ4q6oe1v4smiaDpq3z8CZLbLjqdwVXC829AWnshmboxF/eo/9ENc fucjOYUYoJRrR2RbedxQXd5mtfHUyX2AQXGydGGmu1gTPZombKYrn/RyCkFEQ1O1mVTa 56ag== X-Gm-Message-State: APjAAAW0LAxXSVU/up39tLogkE5OHTQRb6Ggwa8uKUHiGcD/WqI3Fczu FRDKvu1kJfb/cc8DLVCSjM4= X-Google-Smtp-Source: APXvYqy+sqEgFI9fo0GpNaDboSO7okRsT8jjyucvGx6hJrYGMUqhKYGga78lyrzuh0g9r/DjHNOlBg== X-Received: by 2002:a17:902:a503:: with SMTP id s3mr89388388plq.274.1578086194471; Fri, 03 Jan 2020 13:16:34 -0800 (PST) Received: from localhost.localdomain ([2001:470:b:9c3:9e5c:8eff:fe4f:f2d0]) by smtp.gmail.com with ESMTPSA id r30sm69404162pfl.162.2020.01.03.13.16.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 Jan 2020 13:16:34 -0800 (PST) Subject: [PATCH v16 3/9] mm: Add function __putback_isolated_page From: Alexander Duyck To: kvm@vger.kernel.org, mst@redhat.com, linux-kernel@vger.kernel.org, willy@infradead.org, mhocko@kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, mgorman@techsingularity.net, vbabka@suse.cz Cc: yang.zhang.wz@gmail.com, nitesh@redhat.com, konrad.wilk@oracle.com, david@redhat.com, pagupta@redhat.com, riel@surriel.com, lcapitulino@redhat.com, dave.hansen@intel.com, wei.w.wang@intel.com, aarcange@redhat.com, pbonzini@redhat.com, dan.j.williams@intel.com, alexander.h.duyck@linux.intel.com, osalvador@suse.de Date: Fri, 03 Jan 2020 13:16:33 -0800 Message-ID: <20200103211633.29237.89510.stgit@localhost.localdomain> In-Reply-To: <20200103210509.29237.18426.stgit@localhost.localdomain> References: <20200103210509.29237.18426.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 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: Alexander Duyck There are cases where we would benefit from avoiding having to go through the allocation and free cycle to return an isolated page. Examples for this might include page poisoning in which we isolate a page and then put it back in the free list without ever having actually allocated it. This will enable us to also avoid notifiers for the future free page reporting which will need to avoid retriggering page reporting when returning pages that have been reported on. Acked-by: David Hildenbrand Signed-off-by: Alexander Duyck --- mm/internal.h | 2 ++ mm/page_alloc.c | 19 +++++++++++++++++++ mm/page_isolation.c | 6 ++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 3cf20ab3ca01..7b108222e5f4 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -157,6 +157,8 @@ static inline struct page *pageblock_pfn_to_page(unsigned long start_pfn, } extern int __isolate_free_page(struct page *page, unsigned int order); +extern void __putback_isolated_page(struct page *page, unsigned int order, + int mt); extern void memblock_free_pages(struct page *page, unsigned long pfn, unsigned int order); extern void __free_pages_core(struct page *page, unsigned int order); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 459c6b2109bd..9dce69fce9e0 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3228,6 +3228,25 @@ int __isolate_free_page(struct page *page, unsigned int order) return 1UL << order; } +/** + * __putback_isolated_page - Return a now-isolated page back where we got it + * @page: Page that was isolated + * @order: Order of the isolated page + * + * This function is meant to return a page pulled from the free lists via + * __isolate_free_page back to the free lists they were pulled from. + */ +void __putback_isolated_page(struct page *page, unsigned int order, int mt) +{ + struct zone *zone = page_zone(page); + + /* zone lock should be held when this function is called */ + lockdep_assert_held(&zone->lock); + + /* Return isolated page to tail of freelist. */ + __free_one_page(page, page_to_pfn(page), zone, order, mt); +} + /* * Update NUMA hit/miss statistics * diff --git a/mm/page_isolation.c b/mm/page_isolation.c index 04ee1663cdbe..cb26aea9b9fd 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -134,13 +134,11 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) __mod_zone_freepage_state(zone, nr_pages, migratetype); } set_pageblock_migratetype(page, migratetype); + if (isolated_page) + __putback_isolated_page(page, order, migratetype); zone->nr_isolate_pageblock--; out: spin_unlock_irqrestore(&zone->lock, flags); - if (isolated_page) { - post_alloc_hook(page, order, __GFP_MOVABLE); - __free_pages(page, order); - } } static inline struct page *