From patchwork Thu Oct 20 21:53:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6425 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp339435wrr; Thu, 20 Oct 2022 14:56:44 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5oH4XhJ9GLvqMTmS9SeqlXOXU1rm+viDx/bVbVitqSBPj/OhuzuorVZUCu2p3Q255K10wd X-Received: by 2002:a05:6a00:22cf:b0:563:744a:8951 with SMTP id f15-20020a056a0022cf00b00563744a8951mr15950672pfj.3.1666303004058; Thu, 20 Oct 2022 14:56:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303004; cv=none; d=google.com; s=arc-20160816; b=HvcgVczdvhMxEqBi7A1kEfSXHb+J8lxLi1304zqRj6Q1ozDI83BePi4IcUYymmyVQD +F6IfdsRqM5f8YFzO9T2oRa72VOZNznbe5LDiVO0K6BlC4ayz7NNw3+07Y/v8P00I6Qk rDjASyrrJ3uAfIw4DKqzryhNlK+kML51iAYxEhiWGY4K9NmJwAKenJn4CM9uTFpESaWW euCVKXS+8lA00h/gAm0xsWkSt/k1feLrzE0Au/f1Nhr1avddpSRT8UKqNGcQYcQoBxRV F91gF4cQGupr+ZPIVdJI161wt+QjZ2MCsqsW+VLnJi9hAa4juCwY0Lb34D3umqoAeChw BXjA== 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=BwP9OSSuHG+apHyoqkPAJ44LToseDE0HSDpJZDk5eXs=; b=SJNiFaLTiLon0d0nQFOwspHnqgOxG/25X10doEO0p177m51BkWHma3T+rdmsLvN0Cc Hg10Umswlp/fvyK305mKV3+GFcsEb8BpgwS6x19npt/yJEJnUzXurRyqpKTYXjBFVPNj Yka1kX3qI4RoI1ZVXWtpnlTre5Nrxc8tt4wPqa90Ws6Wo+qKqizhUV2MKvIwF/aZmt0h wX503sQ3hw/gcOW4/qrMi4B15Cbxo8RmJV2TZ3huYRXJOeev7wniROz5DDS5jR9C483H wJAQKTPtIbm/B5tXlVT/O+0rKrvSSx8ufoHuvATd639SKCzBBR05g2MbX5iZDW+a6RA2 Y+VA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=jNUUsRnW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e3-20020a63f543000000b00434dd6f6e21si25038441pgk.125.2022.10.20.14.56.31; Thu, 20 Oct 2022 14:56:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=jNUUsRnW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230080AbiJTVyd (ORCPT + 99 others); Thu, 20 Oct 2022 17:54:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229585AbiJTVy2 (ORCPT ); Thu, 20 Oct 2022 17:54:28 -0400 Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 567FD2250C; Thu, 20 Oct 2022 14:54:25 -0700 (PDT) Received: by mail-qk1-x72a.google.com with SMTP id s17so849477qkj.12; Thu, 20 Oct 2022 14:54:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BwP9OSSuHG+apHyoqkPAJ44LToseDE0HSDpJZDk5eXs=; b=jNUUsRnWlXrm8JAnuE1Xqa7UyLQ1Ntt7WFErGDBLV2vutQLJ0PQilqL0HL16ioBgaH tfq5WvKTPdO/dJLDa7W8VLb0/wS9gfOFZuMY8jvjjuPVKNIMwy9MVx/MirO3GfRRjL9n LupI3gDdDDnJkGpBaXNyK+SWatGDer0WWzVHCbIfQnp6CFkOKk6e3uHHKYH1dhv9aKUc UA3llhu3zx7UqBkZYqKQEWHaDgpLD1LksEfySU/2dYYUbXhzmBK7FSG2uF/2KLWhBZ9W k2/WpZe9yLC3nkSo4WQVXGo12b2hpsTKZzBu5axXXMLlcPqhKB9lAMVFlgQgm+2vH3RB pXgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BwP9OSSuHG+apHyoqkPAJ44LToseDE0HSDpJZDk5eXs=; b=H+1roMVjlDs+n+cgAol0jw/LbEczpDWjTc51iPHD31Ir8kWBhjlBDqCjnBu4qPEq3g gaYAY418VZriByUhm3Q1OUv9r2sfZBzmXgz1RCxRa17SSl0s/5AHAv38yZNn0GU9OpoS MLwJEnthgoVE0qnqt/5YbJdHYbqJ5C/+b/BAk9MBZQB2RHD1/trcUdClK+TVuM4kQNiM BLJBR4Je5ABTugNIDmQ24PTnjee+1df29+Yx8yNGzuuxiTEozkrMKxvTQugY+gt9/+zK ZED+QimJFellCFJS67FRBmDfJKVEhydEHdFQxXH50VDA3Z87izJFShGkRnos/xmxG3Bm ByZw== X-Gm-Message-State: ACrzQf12gGtAq7znMlKvRB0Ne+4smtpJqi/+gj6+lRf4D31K7hZz7YQY n1jlehGebQfy3anLZwaZfr4= X-Received: by 2002:a05:620a:150b:b0:6ee:8d04:f70 with SMTP id i11-20020a05620a150b00b006ee8d040f70mr11428999qkk.101.1666302864030; Thu, 20 Oct 2022 14:54:24 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:23 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 1/9] lib/show_mem.c: display MovableOnly Date: Thu, 20 Oct 2022 14:53:10 -0700 Message-Id: <20221020215318.4193269-2-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245338358682823?= X-GMAIL-MSGID: =?utf-8?q?1747245338358682823?= The comment for commit c78e93630d15 ("mm: do not walk all of system memory during show_mem") indicates it "also corrects the reporting of HighMem as HighMem/MovableOnly as ZONE_MOVABLE has similar problems to HighMem with respect to lowmem/highmem exhaustion." Presuming the similar problems are with regard to the general exclusion of kernel allocations from either zone, I believe it makes sense to include all ZONE_MOVABLE memory even on systems without HighMem. To the extent that this was the intent of the original commit I have included a "Fixes" tag, but it seems unnecessary to submit to linux-stable. Fixes: c78e93630d15 ("mm: do not walk all of system memory during show_mem") Signed-off-by: Doug Berger --- lib/show_mem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/show_mem.c b/lib/show_mem.c index 0d7585cde2a6..6a632b0c35c5 100644 --- a/lib/show_mem.c +++ b/lib/show_mem.c @@ -27,7 +27,7 @@ void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx) total += zone->present_pages; reserved += zone->present_pages - zone_managed_pages(zone); - if (is_highmem_idx(zoneid)) + if (zoneid == ZONE_MOVABLE || is_highmem_idx(zoneid)) highmem += zone->present_pages; } } From patchwork Thu Oct 20 21:53:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6427 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp339818wrr; Thu, 20 Oct 2022 14:58:21 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5vVRT8OWW1Rn6pCImVT90SunZM34K8g0CK/WcsAKYckFeahNkmmyZEzlGWIpsZyyGh9J0e X-Received: by 2002:a17:90b:33cf:b0:20d:981a:a5b4 with SMTP id lk15-20020a17090b33cf00b0020d981aa5b4mr51935444pjb.137.1666303100965; Thu, 20 Oct 2022 14:58:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303100; cv=none; d=google.com; s=arc-20160816; b=o5S6yjMw+4DZbI5UArEOiigyJiumWQp72dOrkYz4MeKAJz5hmLZYKed3wvgT0AA+1j 6IvevQvjimppvnPKrUNzAqTeCSTYS8mK6B6OnapZ8GQzqrsy5zD4h8/2mpqYyu7WaKpp myd9sWIbzRNQhjhnEK/VYz0aqKMOGSxDnMprBwh+mXQ6HebyQUFv2kJr/BLm1eebyvTO bYh0D1Dq/EPB+LoJDQfE6vJDcPkBqfrvT9lmOhyj/zLcSkoiql+FK77Uy4AZmisWXG1p Oc6LG7h/teqIHJB3lGNq8rVmTFsduH5GN4PeFhyI6cr+uORDwM8FizF3EVLe9xct+5Hj xdoA== 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=ShOyVALLWkkR4pnZbEXjhmF6LOSGNE0eOMv5EosjK40=; b=VlHE5XSXy/pKhWqlcDU9TQPvK3h9NbJtcdFajXiTkv4fAXimVesXGZyraGL2V3uCuX WeMT+cIId6OUzle5DX2MWi85wC9gGwquyXKIIRCL1g9rj1Uif3uv6r3rli3diD36ZhFY 83BEyb4cVheAY2PpwQkAuRS/+HVfAmzteK28LMBlNb4RUVL/jl0B7QrhAKEkBo/A/sUV f5IG+7eFEf3N//DjjK1B8je/sWMFuf5Lz7ETFZe0DXSIAj14fLubYdBphlXW6jHd1Hmf EiswB1NWyqPZwqjUSWklYY5Qt0HR4SOcFGXeW6OqdL8z7Ei91aFRnAPb9lrQ4PBKeSLF CjQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LmhsWLB5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e27-20020a63501b000000b004610dceee7fsi21530542pgb.165.2022.10.20.14.58.07; Thu, 20 Oct 2022 14:58:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LmhsWLB5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229714AbiJTVyi (ORCPT + 99 others); Thu, 20 Oct 2022 17:54:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229955AbiJTVyc (ORCPT ); Thu, 20 Oct 2022 17:54:32 -0400 Received: from mail-qv1-xf2e.google.com (mail-qv1-xf2e.google.com [IPv6:2607:f8b0:4864:20::f2e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 470133FD55; Thu, 20 Oct 2022 14:54:28 -0700 (PDT) Received: by mail-qv1-xf2e.google.com with SMTP id f14so630316qvo.3; Thu, 20 Oct 2022 14:54:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ShOyVALLWkkR4pnZbEXjhmF6LOSGNE0eOMv5EosjK40=; b=LmhsWLB5/8ER2JWGrAWt10ivNX62HhMvv1xr1WhLa8oIGbqE6gfaxeCqdv3/yMH1rg rupS1AoSzdDIE3sKhGSRgJ5JtZIE2Z00oJDsRRai1sGmU5SFhOf536G/b4t9VgZqOm8F +8bmWW2eKxJu2t/MLePJJ0YkKGitQ6cHO2DxfYvC2u+IkGry12ZDQ/MP4rOrSu4d0NBa MLgsBVxBgLZaAXLnaneL/ROAKOtw8peTXm6aE7CAIo2L/Hroz4ZJeq4htcoLmT07Awdi EIVo+KmLfCM/6yslbPviiQniqDYINEwRj+mLjivLeu4/7v5eVh8YdXUaSnwxQxIi1Kgy VU6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ShOyVALLWkkR4pnZbEXjhmF6LOSGNE0eOMv5EosjK40=; b=cf8mF6/vmPdHFRdKW3sMsOueoyEc75LTS8BejOiA8kFNKHYXtPTUatRfcwbCgHRQW9 QiNDeLYroWRnrZ864iY9qOpVlkwTSMji1/EjSy6RAXX+REYzpDFaytzncIhO4brykbBV iT2iunS4WgonkU3hmL74pshuh8q1bqkPi6D/5Bwv22HJ9Jbwtw3a3Rxf/ZbDjBBkZgPX 8mNm9QymVTC6KwKDfnFKtkJWCsuSTYpSX4LlmH9Q2z3A2VjNjcK4Rg7tI18q62CoUR9M RmKb87gtk0XbNWM2/hrnSoUJvvWdjMyPGO1Z0rJVu9fzAz/F7iHB77ecxhbf+QDBcgVY ++9Q== X-Gm-Message-State: ACrzQf3cjF3TEIqwJ+CIIvidv4BSyiwmjcHMTmJl8qofuVvw+h2330z7 cn0qsg0wY9omwtofmF3sIFY= X-Received: by 2002:a05:6214:20a8:b0:4b3:d99f:2588 with SMTP id 8-20020a05621420a800b004b3d99f2588mr13740927qvd.64.1666302867022; Thu, 20 Oct 2022 14:54:27 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:26 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 2/9] mm/page_alloc: calculate node_spanned_pages from pfns Date: Thu, 20 Oct 2022 14:53:11 -0700 Message-Id: <20221020215318.4193269-3-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245440542245733?= X-GMAIL-MSGID: =?utf-8?q?1747245440542245733?= Since the start and end pfns of the node are passed as arguments to calculate_node_totalpages() they might as well be used to specify the node_spanned_pages value for the node rather than accumulating the spans of member zones. This prevents the need for additional adjustments if zones are allowed to overlap. The realtotalpages name is reverted to just totalpages to reduce the burden of supporting multiple realities. Signed-off-by: Doug Berger --- mm/page_alloc.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e20ade858e71..92908c51f1c3 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -7542,7 +7542,7 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat, unsigned long node_start_pfn, unsigned long node_end_pfn) { - unsigned long realtotalpages = 0, totalpages = 0; + unsigned long totalpages = 0; enum zone_type i; for (i = 0; i < MAX_NR_ZONES; i++) { @@ -7573,13 +7573,12 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat, zone->present_early_pages = real_size; #endif - totalpages += size; - realtotalpages += real_size; + totalpages += real_size; } - pgdat->node_spanned_pages = totalpages; - pgdat->node_present_pages = realtotalpages; - pr_debug("On node %d totalpages: %lu\n", pgdat->node_id, realtotalpages); + pgdat->node_spanned_pages = node_end_pfn - node_start_pfn; + pgdat->node_present_pages = totalpages; + pr_debug("On node %d totalpages: %lu\n", pgdat->node_id, totalpages); } #ifndef CONFIG_SPARSEMEM From patchwork Thu Oct 20 21:53:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6428 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340021wrr; Thu, 20 Oct 2022 14:59:25 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4nY7aS0G3WQrXSjYPaz3G0DMO3TvxCQ3TiaQHg6ltob5bpcSIBl1fByxyzMdWDmcRSzMqR X-Received: by 2002:a62:190e:0:b0:561:a818:41bb with SMTP id 14-20020a62190e000000b00561a81841bbmr16147562pfz.50.1666303165087; Thu, 20 Oct 2022 14:59:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303165; cv=none; d=google.com; s=arc-20160816; b=xlZYSS8XuMULso2PRnt8VsCndVWyJz/MI/YA672joXh3lg2p0MihCtE4Uf2JewnQcA A/203+k0A8XljrUmZKY512agHnkOUHm0IMq1MZlI5tDl/evGDaUBDXj2PtVHcx+4SMMS THrdTS22/t2ZTcJwze2REMCxuBJvhd3chJ9+v/9MDAe2R1lrSlgkStJc7RIkzS4I/EBO K96q8Z1hf9FqXXG8VXKr03GgPu5ppSE358aitMsXuNk2qzfXa3MsKDMcnmLUa1PjrfGA necAVAmixbvlvKdk6dxx/NDL+Y/AL5OmYjJ73LH7Nduo79LLs7ekLrgkkjbAzcSjlgkB 6xdA== 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=tvfEueXv3MPyKUTDqbsvcgdPv0lPq1HvhYO0pg1lxgg=; b=OTb1ziMMv4FEjTjYnSJbrb7imrtv2x9ts+whYyLqkfQmRr4kmh5hqfVoftzLFBumJ7 u8i5JnWCN2ZyFobRBN51xNZUtB9awmsA7UgXb2zVEHnvq6jcR+gdIjLHX1lLWrfcND8P n222BzhrLF10C2+k7goIIBzG8prYQsSiQ8XhpPCpyQCRf/cKAp8b6dHj68rwT8lGFSa3 aHVFYNRbQ6fvaOyU2ueOCCtY593e0A1vhEHBIwFs8HV2PGfnQt1Ez/kjepyf3lCjBkB7 FtewcODAU2sTFfrcd2GYq4Rlb0V0oD/u1onOx4kOr+44FS+OVfPE633x66SHuPucEhQX /5cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ffixkJKd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u5-20020a17090341c500b0017fa38825cdsi29302557ple.540.2022.10.20.14.59.13; Thu, 20 Oct 2022 14:59:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ffixkJKd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230147AbiJTVy6 (ORCPT + 99 others); Thu, 20 Oct 2022 17:54:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230091AbiJTVyi (ORCPT ); Thu, 20 Oct 2022 17:54:38 -0400 Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD8E148C9F; Thu, 20 Oct 2022 14:54:30 -0700 (PDT) Received: by mail-qk1-x72f.google.com with SMTP id o2so859053qkk.10; Thu, 20 Oct 2022 14:54:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tvfEueXv3MPyKUTDqbsvcgdPv0lPq1HvhYO0pg1lxgg=; b=ffixkJKdZbTCBgQd/yyyoLEt9enHtHJdBGSffjbahVDco4N7boG7mqHf4g6HNIWDRV TUF2h3/TlW1N88JPvCgjd5FjVNusNzYKuIyp8TGrBY9OXkwOzi7zUpMXlULvLJUWJ8W9 avv5kHbuJnwKwgHuWuDXHdm9QYpgnsiEKcZEFOneAtsv2+MP3U8dOTOOGDD1USkrXOCt Iqv8+KZIqj6eh2vmChJHacuLhyL1e4qs7ooWBZUnlQp/Eb7vo1cQiMKoyTJrkOBKnZSP ZtvvP6oZGVyoOyC7Bt9iXv+x4vQtDi9ovBXsTNzCOqpI7rcL0jEiTpC70OvnjYfdeMAU hhHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tvfEueXv3MPyKUTDqbsvcgdPv0lPq1HvhYO0pg1lxgg=; b=ECgPztQgBXk3UIt9mXyycXkwVO1hGloxY0Eg50laC/OjziTbyTgGa3/54TfzGvezjs LwO1vRBkC0fkl+gnwao2Mbxew4ZTIE4YmNfvp4MXJplP73AmfEPSY95zgAv7roDmW7RG r9sNhs4pjCleXUdfSyiYRw2+oXhUDwWa+55azPZYfvwOaR81dKkr1J+1c3Asw/mYy9f6 Y7F+EVv/6UPx7yUxNVDawOJo7J2teiXiI9t+u9VKmF92tPStBWjGxQvo4XcST6FiOTjI dVADD8cknqhs6Ofeh9S9tQgPlmt/t5ivjdVbe+Bj4E8a6IUqkPdKXsvstulmI1IMdcC0 otpQ== X-Gm-Message-State: ACrzQf10IoeWJFkzK+lc63BVbFSr5cfh9bhFo5KKibR5RJreu2ZAy6fZ aIqmUzyvVHHExEOOuoVZDXQ= X-Received: by 2002:a05:620a:2b91:b0:6ee:bc07:24c with SMTP id dz17-20020a05620a2b9100b006eebc07024cmr11239651qkb.64.1666302869881; Thu, 20 Oct 2022 14:54:29 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:29 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 3/9] mm/page_alloc: prevent creation of empty zones Date: Thu, 20 Oct 2022 14:53:12 -0700 Message-Id: <20221020215318.4193269-4-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245507926080115?= X-GMAIL-MSGID: =?utf-8?q?1747245507926080115?= If none of the pages a zone spans are present then its start pfn and span should be zeroed to prevent initialization. This prevents the creation of an empty zone if all of its pages are moved to a zone that would overlap it. The real_size name is reverted to just size to reduce the burden of supporting multiple realities. Signed-off-by: Doug Berger --- mm/page_alloc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 92908c51f1c3..2f7b88d78bc2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -7548,8 +7548,7 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat, for (i = 0; i < MAX_NR_ZONES; i++) { struct zone *zone = pgdat->node_zones + i; unsigned long zone_start_pfn, zone_end_pfn; - unsigned long spanned, absent; - unsigned long size, real_size; + unsigned long spanned, absent, size; spanned = zone_spanned_pages_in_node(pgdat->node_id, i, node_start_pfn, @@ -7560,20 +7559,21 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat, node_start_pfn, node_end_pfn); - size = spanned; - real_size = size - absent; + size = spanned - absent; - if (size) + if (size) { zone->zone_start_pfn = zone_start_pfn; - else + } else { + spanned = 0; zone->zone_start_pfn = 0; - zone->spanned_pages = size; - zone->present_pages = real_size; + } + zone->spanned_pages = spanned; + zone->present_pages = size; #if defined(CONFIG_MEMORY_HOTPLUG) - zone->present_early_pages = real_size; + zone->present_early_pages = size; #endif - totalpages += real_size; + totalpages += size; } pgdat->node_spanned_pages = node_end_pfn - node_start_pfn; From patchwork Thu Oct 20 21:53:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6429 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340164wrr; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) X-Google-Smtp-Source: AMsMyM48+342yQC0ZE6KAuVN+HUppyDfb79haF3vbTcCOeh0AKf+7OBr4gcFObMROiXbIOuRF8XD X-Received: by 2002:a63:8043:0:b0:46b:4671:9ab3 with SMTP id j64-20020a638043000000b0046b46719ab3mr13397325pgd.530.1666303199388; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303199; cv=none; d=google.com; s=arc-20160816; b=GHWuhx8exBnHHSCU5SZ0v2dt+dfCSSmxpl7FHOMbf3S3IG5kJ2gJwAEKdG8+0BF+iP QuokBGhSlcJu2EpPStBoyDsOCy6FiXtnPRvHaT2znBD59szhgdQBwJJdYPa8NWrwkDDD UeNukF73Smo7KRZtEzubWLEyhiwreayLfEqcMTZBN1IrJQrTHbj7zm2pwO3y8a7a43Mf 7uAe+Y4XAn8Mv7iccqZnwYr/l0hcx8A/SXUt+sX933BwKui7lOK549lzLIf6DvYHuuWK v/O7/bF20tocbc6JWQG66AhCkQfvGzFZ1fg8KsMoHzP2MFRqfutJ3YdVj5Sk2f8B4qNQ wE6w== 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=3QVy7NAfSopf+Iij2pw0HKI71t//u6xehpjVOpbyUMY=; b=g/zWTyRVLzSHPAo50y3s87xAZslJ0Rfm5aOV1/Ib0/iW76Ihpx2Y+mcvprjG8l/7im VJtSDGNKqXKGuFv62RkW9xWvZZC4n4Z0nyk6ZruWW5MM1wIHsJkQdF8TouWLEW+0sXJM ZflHcX1+vhlDM3E1Q10yK9cxPCZ0wep2NxwsK5yUrN0yWxgTnFVOXD7TF1kZ+eT0WBaQ nCWRIKLOmXORiXQjRPtA6RHjYh3ue0+Nw/sr3zTHx+kKttl6t0UX33/0Wk7eyz15TTJh CqQJlQD8n9llcBNCIRZisCPeOz0057keLbcCiczg4HaTjV8PpMvSbESkxTduas/DVtgM gMcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="J+iDN/3M"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p14-20020a63fe0e000000b0043cd68f1223si24088926pgh.291.2022.10.20.14.59.44; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="J+iDN/3M"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229535AbiJTVzL (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230116AbiJTVyw (ORCPT ); Thu, 20 Oct 2022 17:54:52 -0400 Received: from mail-qv1-xf31.google.com (mail-qv1-xf31.google.com [IPv6:2607:f8b0:4864:20::f31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D30A501A6; Thu, 20 Oct 2022 14:54:33 -0700 (PDT) Received: by mail-qv1-xf31.google.com with SMTP id mx8so611407qvb.8; Thu, 20 Oct 2022 14:54:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3QVy7NAfSopf+Iij2pw0HKI71t//u6xehpjVOpbyUMY=; b=J+iDN/3M1v4SmMv54h7rTzpz0LCv5/XHzg8ewdpWRJK70RuAF16mbixTaMb/vBat51 /mOQLg5Lg+eWwblMvbeXIjCw6c7NGBNFeD/y4PUno/X8AVsvp3cN9kuMppVqjdsN5kl6 orFfq4ybTrc/U75TOFffbD2FHq/yB8TQdUCF4W5zgxsL4RtZssN3wgMFfKwcAq4UKdf8 F8nDYyOYiinRzsKsyxRooF/HEUiIjI0N0PbTdoyDCvkE5xiCtErgJjWuKYBHcuAzQd0V 2rntUIgntvNQWYugXRMQ7XaB2yU5azO8RSIVC6neC4mThi5qsxjgKAfWCPpzvk9W2R02 HrBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3QVy7NAfSopf+Iij2pw0HKI71t//u6xehpjVOpbyUMY=; b=ocMfqTiz6oX3NxL7xt0SKGqssbXi0f1nZlSmdC/NmNavzkIN52JNTz85Uc27gx03AT gvHTxMdVcrdS4myKzlan3dVMc6uuDFW2gO35SXk1q8IpV21QxSL68duwfmZ92WeOHXMo ZvcRQwLvEDd0AVIHJ1bUongy1qV7YH7RplZilLYv6bcOrw+sorNDfIPbaXor0L2fx37Y eKEI8fQTdEdAZU9QMwy9rwODhGlQs8z1h4NH1VS/dazseBuhQV2DfgapSbav3gW6RreW 5c1XzE1L1Id9rC+2p48sZPmUcfRSY1xWHetVJHYl+cNO7GzSMeKyJsF9VJQ4EXeJKDN0 1G4g== X-Gm-Message-State: ACrzQf05uB3vs+8tWhitFQj4qDFgmC0W/+7fbwhUD9t3Phdd2EKQeH1O qkbiD1txxL2Dekof2bdLTok= X-Received: by 2002:ad4:5949:0:b0:4b4:8535:97a4 with SMTP id eo9-20020ad45949000000b004b4853597a4mr13776300qvb.101.1666302872827; Thu, 20 Oct 2022 14:54:32 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:32 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 4/9] mm/page_alloc.c: allow oversized movablecore Date: Thu, 20 Oct 2022 14:53:13 -0700 Message-Id: <20221020215318.4193269-5-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245543585811752?= X-GMAIL-MSGID: =?utf-8?q?1747245543585811752?= Now that the error in computation of corepages has been corrected by commit 9fd745d450e7 ("mm: fix overflow in find_zone_movable_pfns_for_nodes()"), oversized specifications of movablecore will result in a zero value for required_kernelcore if it is not also specified. It is unintuitive for such a request to lead to no ZONE_MOVABLE memory when the kernel parameters are clearly requesting some. The current behavior when requesting an oversized kernelcore is to classify all of the pages in movable_zone as kernelcore. The new behavior when requesting an oversized movablecore (when not also specifying kernelcore) is to similarly classify all of the pages in movable_zone as movablecore. Signed-off-by: Doug Berger --- mm/page_alloc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2f7b88d78bc2..a4c2c157bacf 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -8121,13 +8121,13 @@ static void __init find_zone_movable_pfns_for_nodes(void) corepages = totalpages - required_movablecore; required_kernelcore = max(required_kernelcore, corepages); + } else if (!required_kernelcore) { + /* If kernelcore was not specified, there is no ZONE_MOVABLE */ + goto out; } - /* - * If kernelcore was not specified or kernelcore size is larger - * than totalpages, there is no ZONE_MOVABLE. - */ - if (!required_kernelcore || required_kernelcore >= totalpages) + /* If kernelcore size exceeds totalpages, there is no ZONE_MOVABLE */ + if (required_kernelcore >= totalpages) goto out; /* usable_startpfn is the lowest possible pfn ZONE_MOVABLE can be at */ From patchwork Thu Oct 20 21:53:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6434 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340564wrr; Thu, 20 Oct 2022 15:01:00 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6icdo4owqtUCqLmrwrzC0rkgrAgX1r8eaTsRwWjqiKo8h5MR3qIKiz4Ws95nw+E8Gcpq5b X-Received: by 2002:a17:90b:4a84:b0:20a:f497:6f5d with SMTP id lp4-20020a17090b4a8400b0020af4976f5dmr18048765pjb.213.1666303260121; Thu, 20 Oct 2022 15:01:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303260; cv=none; d=google.com; s=arc-20160816; b=tuCaB3JnynL3MD6IA4rSSfg3tuRxQgv1LPrELCNScN0N0TnJZP3j++NFtFGkLqZ/q5 o7zBVj8/PKUXGNJOHbUIFcHQ6PM2HhomzNAt8PF/Hvdf54sTFuSZ4LpuqKarlhHmhA/A TyvsMqkF6ZDVOCJxXb/kEzSVvzbsWa+PXmsd8N2b33wgGQWR7dt8JQ+BZZWfBAINA5fF rfqt5N9CKqEkcekCpnD1BbDoh3uy4TyiXhQBx58/yIr+7RxkPoqBc54D5gD16oaK+V8k hexzV6zeYaOT0XTnTozE93t9uBoN6jzupw0E/b/0Y3WJcglHDPn7/FKooeLgCikXfB4v mh7w== 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=D/FIsjw19eZ3OnJAIkw3KCiDeRv2n8mXkgoaXFlI9ro=; b=stvF4KdM/Pe/xlpNjREgaB/4mRHztd39z2fBFaNACu7tMirzeB+wLgLekRGR3v0xmf ePWxb2VpuLWXRgTaZjVb6bjtgv2KfJWyAKK8uJp6y9raazaAG3REzIMKYdEem/UDo9cU kG2njg86REuc1vq6HfJka/Siu81r/E5weWSISSTukEjcJ641k0KPwGkrKYJQNSx5knOA zF9B6TjTQrpP/0JpAzDCaJRdbk9WRBeX7DuQGzn/T9cFm/FzN9yLURBsBAjUZw4meLeU Ak32N85VjFF2brKww70MV2l95wPv/dEGSYNihO5K+fIb2vzDJDcnuVDwL7NqCuv38X/8 f7XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Jfxyh2ci; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d8-20020a056a00198800b005627d896458si25900060pfl.142.2022.10.20.15.00.44; Thu, 20 Oct 2022 15:01:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Jfxyh2ci; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230118AbiJTVzH (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230107AbiJTVyw (ORCPT ); Thu, 20 Oct 2022 17:54:52 -0400 Received: from mail-qv1-xf36.google.com (mail-qv1-xf36.google.com [IPv6:2607:f8b0:4864:20::f36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D57116404; Thu, 20 Oct 2022 14:54:37 -0700 (PDT) Received: by mail-qv1-xf36.google.com with SMTP id i12so637632qvs.2; Thu, 20 Oct 2022 14:54:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D/FIsjw19eZ3OnJAIkw3KCiDeRv2n8mXkgoaXFlI9ro=; b=Jfxyh2ci01RrSPT9NlGFNscPY5PnsXAUGYcYoRSlBmjDz2eJE3LFrmNFqOjrNXF+V7 kH7Xlpre2JSJCWaxUVgT2xDPJMzJX5z+2wD5qUCsUREd0mY/eySZwJWln98Pra1/1gbI fdmxz5E2ZJWa8NubMcYhANwAlL2V5iNmTwIDWbIxEfbqDC8yvhsWJAZ+kFU+7giGU7DC wvFTrJT7YJ0e9wl+7meEo6c8q0ukXsJVNF2a7Z6z4aN61MeappkLjeJyJUo2B5Vqouqn cfqt7nA9MgPPPtx5fwH3bgE+niTxHXdMv3M/Tbp64/fEWFwMqF//10fYVb5EeAksvWUg kHgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=D/FIsjw19eZ3OnJAIkw3KCiDeRv2n8mXkgoaXFlI9ro=; b=4jyl2xmEK22RHMZC/e7KW7kKtq62dxpz4LJZnkZfT/Z0JaT3jaWX6OT3JYdYl19R/3 hrmSIcBpQhByJk/silENsIgd18ztqKJu2wA6t/VN9W+9kAwNGgraawJR1y06zwIIQtF6 ioC/YXo0YIYzmIJYpNUKZGfwFncLltqCs9envJZdp+VReeM3Uk4XU9dh3DeT1AB34rUK vmuCfhUQBSRXVpCZqVvgLuJkQd6oIw7w9EUxeDFwBQ3+1Q6t1MsR818MlPaAR/kZtbhP BZdrk2yb6HIJL10FDEIvFkhioJmZGTcSTAJm3ZIXPfr8hbG9Yzqhju7KgzPnET5wM1jn rqxA== X-Gm-Message-State: ACrzQf1pv8aeWfZTzvLwLBuJE+ds45Q7dKTIJyy5lFt2GUKaPG85AJwn 6kgUKdFp7rAwXbzh7gMF1pY= X-Received: by 2002:ad4:5968:0:b0:4b4:7d98:7ede with SMTP id eq8-20020ad45968000000b004b47d987edemr13626883qvb.130.1666302876219; Thu, 20 Oct 2022 14:54:36 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:35 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 5/9] mm/page_alloc: introduce init_reserved_pageblock() Date: Thu, 20 Oct 2022 14:53:14 -0700 Message-Id: <20221020215318.4193269-6-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245607263755817?= X-GMAIL-MSGID: =?utf-8?q?1747245607263755817?= Most of the implementation of init_cma_reserved_pageblock() is common to the initialization of any reserved pageblock for use by the page allocator. This commit breaks that functionality out into the new common function init_reserved_pageblock() for use by code other than CMA. The CMA specific code is relocated from page_alloc to the point where init_cma_reserved_pageblock() was invoked and the new function is used there instead. The error path is also updated to use the function to operate on pageblocks rather than pages. Signed-off-by: Doug Berger --- include/linux/gfp.h | 5 +---- mm/cma.c | 15 +++++++++++---- mm/page_alloc.c | 8 ++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index ef4aea3b356e..6d66193f336d 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -347,9 +347,6 @@ extern struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask, #endif void free_contig_range(unsigned long pfn, unsigned long nr_pages); -#ifdef CONFIG_CMA -/* CMA stuff */ -extern void init_cma_reserved_pageblock(struct page *page); -#endif +extern void init_reserved_pageblock(struct page *page); #endif /* __LINUX_GFP_H */ diff --git a/mm/cma.c b/mm/cma.c index 4a978e09547a..6208a3e1cd9d 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "cma.h" @@ -116,8 +117,13 @@ static void __init cma_activate_area(struct cma *cma) } for (pfn = base_pfn; pfn < base_pfn + cma->count; - pfn += pageblock_nr_pages) - init_cma_reserved_pageblock(pfn_to_page(pfn)); + pfn += pageblock_nr_pages) { + struct page *page = pfn_to_page(pfn); + + set_pageblock_migratetype(page, MIGRATE_CMA); + init_reserved_pageblock(page); + page_zone(page)->cma_pages += pageblock_nr_pages; + } spin_lock_init(&cma->lock); @@ -133,8 +139,9 @@ static void __init cma_activate_area(struct cma *cma) out_error: /* Expose all pages to the buddy, they are useless for CMA. */ if (!cma->reserve_pages_on_error) { - for (pfn = base_pfn; pfn < base_pfn + cma->count; pfn++) - free_reserved_page(pfn_to_page(pfn)); + for (pfn = base_pfn; pfn < base_pfn + cma->count; + pfn += pageblock_nr_pages) + init_reserved_pageblock(pfn_to_page(pfn)); } totalcma_pages -= cma->count; cma->count = 0; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a4c2c157bacf..d7a5a05ead4b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2308,9 +2308,8 @@ void __init page_alloc_init_late(void) set_zone_contiguous(zone); } -#ifdef CONFIG_CMA -/* Free whole pageblock and set its migration type to MIGRATE_CMA. */ -void __init init_cma_reserved_pageblock(struct page *page) +/* Free whole pageblock */ +void __init init_reserved_pageblock(struct page *page) { unsigned i = pageblock_nr_pages; struct page *p = page; @@ -2320,14 +2319,11 @@ void __init init_cma_reserved_pageblock(struct page *page) set_page_count(p, 0); } while (++p, --i); - set_pageblock_migratetype(page, MIGRATE_CMA); set_page_refcounted(page); __free_pages(page, pageblock_order); adjust_managed_page_count(page, pageblock_nr_pages); - page_zone(page)->cma_pages += pageblock_nr_pages; } -#endif /* * The order of subdivision here is critical for the IO subsystem. From patchwork Thu Oct 20 21:53:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6430 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340165wrr; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7ZRqlV92eELs2JdnDCU54GvarRADR4P87jw5VSua9yNKaS/1qr2WkgQaLBZ2h1wA661q6F X-Received: by 2002:a63:5703:0:b0:439:14a8:52b with SMTP id l3-20020a635703000000b0043914a8052bmr12953360pgb.500.1666303199519; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303199; cv=none; d=google.com; s=arc-20160816; b=mM9Y7GqtGipEp3anmyC6U/G6EiO19YqF+sZmlXYZLyA+ReEaMzh3ve2lXPu2lT2ASt R2SXk+V4pHZhWOV2R3tTMct2C1uOElwAXainDCxd7Ro6b5aOJTvLbxud78gmS5lIGc5G KdIrh4488NVpI9fSUirzL55hT+Sb4m4VL+hz6Ek/lQ0dhyAETa3BQk6GpN12BXwFuB1u GmJMqbXQ99ITBkdS/UuWRUHNsJNNp4G/rm/QSw6ZMkwLWEfO75JvPpxDw6e8lXh/Nkhk 0wgBbHWhBY277Kr/VoD7gTsF8sH8VkrLUWEuVIgKMa7mY7c7olKSuAh7D8fUJxUQqM/G nrlQ== 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=k0ZvpnVNYZiRg/rCuSdzxC9eb6lzs9TieDFdQySZsn8=; b=x8/4MB3gw4jK9AWw8SELoZl7fU+kJq+DttgVNKg9n7Pg5CEfZ1TJvF7mh4qY+KnV71 HaS4hv9okZiDtqMEgEFNf8WzPVVRDWlxa2jxPJ89DQcC2BKe2tjMKG3Qlfq5q9EtNL8r VTxk+QOjiX/KeHpknQ4bX8+pNcKRoAUFUyDAZwMy28XpiXVJGW9icP3sjyCBI5oaKb4r cQ2n83/3JTGfco2o7sC0eQGNqcUFng0VgccPQvKneJwgtRLv4IJYr4QTf8pXhnf7Rj79 xQqNdD7Nlh9rCbAVm6Xb4BT9mXeh6EvIBeTKQi6/FYJB//XVsmSM7OpR0ZQwkUcFOqDg gQXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=SZ1PlrYO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z4-20020a6552c4000000b0046439853c62si23163565pgp.127.2022.10.20.14.59.46; Thu, 20 Oct 2022 14:59:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=SZ1PlrYO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229908AbiJTVzS (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230086AbiJTVyx (ORCPT ); Thu, 20 Oct 2022 17:54:53 -0400 Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBBF05FCA; Thu, 20 Oct 2022 14:54:40 -0700 (PDT) Received: by mail-qv1-xf2f.google.com with SMTP id x15so640365qvp.1; Thu, 20 Oct 2022 14:54:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=k0ZvpnVNYZiRg/rCuSdzxC9eb6lzs9TieDFdQySZsn8=; b=SZ1PlrYOPpSqmq/vLnLZafqj76vcgQtuklt87DwVjrckcKo++SoYbWCoXH2RuEmcb6 4y4tJhiFfNsKAYGCDqNldMQv8ggfF9el1/DuGHGyFTTgGJTgBB1ub2t8TJn/8VQ/0njh x9PBzyecXTaH7sPHGenWV53OQv2MF6VIv7XIRqYd6awOmsAXwfizyl7Pvu/dtb12NoEI FmlTxSQ26E38t9VXc438mbDPBM+Nsfx1gqnxiKl0224bwHFJKJ36YENdqiT+aCbkxIGU QeFvaN4zOD3HePcbtw0ZaU1yZSvLexZNzQIPkdE25F5wKPOiXAjcD1OSAUZXG39Xan4S LqVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k0ZvpnVNYZiRg/rCuSdzxC9eb6lzs9TieDFdQySZsn8=; b=S4uFdewn95nKOBfbiI6JPdHxZ6TaB3LIdEoxikXMwVjzoaX9vOdeNeHBKge5q++Bvy RQSMWzqfQSsp52Xx/ztM+JGrKnVBLhQASGHysyOL0A1BoPiOy0yVTZeULNKjbrwGO+Zm 06ibPrp3imh0NVKcANbXyCNkjQvXrLZO8mUlduiAxlgcqIKokZSr5qGrL8Slq4ujobUy Co1xms4BuijitPMxcS1w8TzWZwxj/1W72dU0OicVvnf8iopLZTydy+CT2LR/LUMEmYsK NL7k/4kvLpVExK3R39gxBLr+RDW47A8swhSRpJ08Ux6BjAJVgrTvfE3JNmCzZ0rX2n2f 5eUg== X-Gm-Message-State: ACrzQf1BF3pmwIx8hf7H8MsXWFbMYMHok+xqoG97PAIMj7FzHjdFqFnp tuGWHTzyUVpQAprFHrpCVOQ= X-Received: by 2002:a05:6214:29ef:b0:4b4:5d8c:637c with SMTP id jv15-20020a05621429ef00b004b45d8c637cmr13527095qvb.77.1666302879221; Thu, 20 Oct 2022 14:54:39 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:38 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 6/9] memblock: introduce MEMBLOCK_MOVABLE flag Date: Thu, 20 Oct 2022 14:53:15 -0700 Message-Id: <20221020215318.4193269-7-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245543663963094?= X-GMAIL-MSGID: =?utf-8?q?1747245543663963094?= The MEMBLOCK_MOVABLE flag is introduced to designate a memblock as only supporting movable allocations by the page allocator. Signed-off-by: Doug Berger --- include/linux/memblock.h | 8 ++++++++ mm/memblock.c | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 50ad19662a32..8eb3ca32dfa7 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -47,6 +47,7 @@ enum memblock_flags { MEMBLOCK_MIRROR = 0x2, /* mirrored region */ MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */ MEMBLOCK_DRIVER_MANAGED = 0x8, /* always detected via a driver */ + MEMBLOCK_MOVABLE = 0x10, /* designated movable block */ }; /** @@ -125,6 +126,8 @@ int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); int memblock_clear_nomap(phys_addr_t base, phys_addr_t size); +int memblock_mark_movable(phys_addr_t base, phys_addr_t size); +int memblock_clear_movable(phys_addr_t base, phys_addr_t size); void memblock_free_all(void); void memblock_free(void *ptr, size_t size); @@ -265,6 +268,11 @@ static inline bool memblock_is_driver_managed(struct memblock_region *m) return m->flags & MEMBLOCK_DRIVER_MANAGED; } +static inline bool memblock_is_movable(struct memblock_region *m) +{ + return m->flags & MEMBLOCK_MOVABLE; +} + int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, unsigned long *end_pfn); void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, diff --git a/mm/memblock.c b/mm/memblock.c index 511d4783dcf1..46a4deb07d92 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -979,6 +979,30 @@ int __init_memblock memblock_clear_nomap(phys_addr_t base, phys_addr_t size) return memblock_setclr_flag(base, size, 0, MEMBLOCK_NOMAP); } +/** + * memblock_mark_movable - Mark designated movable block with MEMBLOCK_MOVABLE. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Return: 0 on success, -errno on failure. + */ +int __init_memblock memblock_mark_movable(phys_addr_t base, phys_addr_t size) +{ + return memblock_setclr_flag(base, size, 1, MEMBLOCK_MOVABLE); +} + +/** + * memblock_clear_movable - Clear flag MEMBLOCK_MOVABLE for a specified region. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Return: 0 on success, -errno on failure. + */ +int __init_memblock memblock_clear_movable(phys_addr_t base, phys_addr_t size) +{ + return memblock_setclr_flag(base, size, 0, MEMBLOCK_MOVABLE); +} + static bool should_skip_region(struct memblock_type *type, struct memblock_region *m, int nid, int flags) From patchwork Thu Oct 20 21:53:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6431 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340248wrr; Thu, 20 Oct 2022 15:00:12 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7DSINL44RodWC6i3DFD2GytdemCLJgZyuOgiPtz6bnn8A94fxNaiM4Oh800hYaLiZBcia3 X-Received: by 2002:a63:1d1a:0:b0:433:f6ea:dce6 with SMTP id d26-20020a631d1a000000b00433f6eadce6mr13144008pgd.178.1666303212622; Thu, 20 Oct 2022 15:00:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303212; cv=none; d=google.com; s=arc-20160816; b=Uk17zyxfcP61iMB09DhLhd/KHb8DxdGSxVdokVVJeaPqouvXilIe+ZzEu3lE3k9FbU YkUMEn74FcM/6Y7Hml8lpYef96tFGK04/+UdaBdSNC/tRQ4bGGpUO+DJccVjV83abFCY uRN2EtyvYiHxmUIsrsSeFZzVx5Siq92OoMlTtCIT2LjLJlQhE5cypr1ntc7BDg+3AAno wR9q/qw0HaKUKxHdlAn5OoSG71ENmhKrHYRiN6+Sx9yREFiVEmMP/Ej7jOkax2jF5VQv SMa299q5MZ8WWK0K8Rn25zPlJTAsU5sT9Rvq5bq9N8CxOSk86VIwZlYKPkR3AsNRpNhV NC6g== 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=ON4FfF7RtuDZjsoHxYv/wuBnH0JKvImdT9/cPL7B4E0=; b=PcRqzcsdBQI9oH7x6BeOw2gjpTLvUavTIqpp2I3PHe02w/cJFC8ahH4Uogyn0byQg7 Q96+Hky97sqH/X2MU8YF0F/tvJjMQ5twuqgbWN20M7KaCETxXKaXso+iBqF+abRZQLYf P27yeqIUHgaZjB7ZBQU7KfwDO08ID4BvIF3uWYY+ICz8PPOm3eTKpG+k9iV1E5V/UV0h eghBka+AuO16Pnco328dINXln+EemXu8ClobI54NprHNl5VtdH8Ll4PrZBRjd5/IkcW/ 5BUCAJ8NaKZ3mAI6xUsuDMWmR9V1q65Mo8DDE9jDMuutxmyK4gl18Mc+0SPYiiBdTOdF APoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=XzHIddvg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ja12-20020a170902efcc00b0016ce3d67e7csi4253197plb.387.2022.10.20.14.59.59; Thu, 20 Oct 2022 15:00:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=XzHIddvg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230140AbiJTVzW (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229616AbiJTVyx (ORCPT ); Thu, 20 Oct 2022 17:54:53 -0400 Received: from mail-qt1-x82e.google.com (mail-qt1-x82e.google.com [IPv6:2607:f8b0:4864:20::82e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2D8FE88A39; Thu, 20 Oct 2022 14:54:44 -0700 (PDT) Received: by mail-qt1-x82e.google.com with SMTP id w3so520534qtv.9; Thu, 20 Oct 2022 14:54:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ON4FfF7RtuDZjsoHxYv/wuBnH0JKvImdT9/cPL7B4E0=; b=XzHIddvgjbn/DEGuAOcP7G4+LhPADOsmHOVPx+eK/tArDp0m1ApsQjdzDRhDWjBjze FV7WvmZ3Z1YIylkFLO79TwLXVHmmpJiiMr4LzhKu5IQtBXgM1BWHrk9NnmQRBxx2R9of wXxEz7cErjAV/icB62wzyIHImPD22fCv2VuRDuHHzJ/eLMTeuoQTBvURVuUU8IuP5i77 Wwvv2l7MRAVvir55myuZNw2HjXsQ/g4bjHDnSPw6oJ4iQFcDR+ET2mGaH38XxNKI72wk jfitbMd/w6o0N3l/Q9xIA/puo4psu3OFDqXj5GIeGkX9Szoh/jdbWQUtBPei4RUXXhmg xH0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ON4FfF7RtuDZjsoHxYv/wuBnH0JKvImdT9/cPL7B4E0=; b=stcW/4VLuSCjXZaKN9FggnIeIbGd8A41RaFtd1K3iG/03TUX4sLSYXgaCHavnskogR j/9yOUzt7Vc/DfXM2TkecqD7GNwqgPACy0EufNdvjcSQnuLDSqmUiV49lle2sMlBBq2R khU1+F5fVORb70CQ7QF2dyRw6uwI00LTY0rmGDhRw0xitw/lD6y/6TQn56AGxltmMR6w WYAdFQpMdeKXEtJzVnn/i15psZ+7oX584Qxz2rM5x05JvJ3NjSsS4ZNbb4aITcH9d/nU lnljXOB0fN0y8KFwjxgZQG4CXzU7WDUa5uCSaserL9ZfhOben9J59eNm/lKzgRIuzDiO 8m6g== X-Gm-Message-State: ACrzQf18D/m61/fSHZViAExdN81Gbc5+Om9gfmrcZOBZPbPpGUlbdvHl 3XhP5GKoFLaPpPo9z3K2t6A= X-Received: by 2002:ac8:7f89:0:b0:39c:e339:3076 with SMTP id z9-20020ac87f89000000b0039ce3393076mr13067224qtj.526.1666302882230; Thu, 20 Oct 2022 14:54:42 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:41 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 7/9] mm/dmb: Introduce Designated Movable Blocks Date: Thu, 20 Oct 2022 14:53:16 -0700 Message-Id: <20221020215318.4193269-8-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245557627484321?= X-GMAIL-MSGID: =?utf-8?q?1747245557627484321?= Designated Movable Blocks are blocks of memory that are composed of one or more adjacent memblocks that have the MEMBLOCK_MOVABLE designation. These blocks must be reserved before receiving that designation and will be located in the ZONE_MOVABLE zone rather than any other zone that may span them. Signed-off-by: Doug Berger --- include/linux/dmb.h | 29 ++++++++++++++ mm/Kconfig | 12 ++++++ mm/Makefile | 1 + mm/dmb.c | 91 +++++++++++++++++++++++++++++++++++++++++++ mm/memblock.c | 6 ++- mm/page_alloc.c | 95 ++++++++++++++++++++++++++++++++++++++------- 6 files changed, 220 insertions(+), 14 deletions(-) create mode 100644 include/linux/dmb.h create mode 100644 mm/dmb.c diff --git a/include/linux/dmb.h b/include/linux/dmb.h new file mode 100644 index 000000000000..fa2976c0fa21 --- /dev/null +++ b/include/linux/dmb.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __DMB_H__ +#define __DMB_H__ + +#include + +/* + * the buddy -- especially pageblock merging and alloc_contig_range() + * -- can deal with only some pageblocks of a higher-order page being + * MIGRATE_MOVABLE, we can use pageblock_nr_pages. + */ +#define DMB_MIN_ALIGNMENT_PAGES pageblock_nr_pages +#define DMB_MIN_ALIGNMENT_BYTES (PAGE_SIZE * DMB_MIN_ALIGNMENT_PAGES) + +enum { + DMB_DISJOINT = 0, + DMB_INTERSECTS, + DMB_MIXED, +}; + +struct dmb; + +extern int dmb_intersects(unsigned long spfn, unsigned long epfn); + +extern int dmb_reserve(phys_addr_t base, phys_addr_t size, + struct dmb **res_dmb); +extern void dmb_init_region(struct memblock_region *region); + +#endif diff --git a/mm/Kconfig b/mm/Kconfig index 57e1d8c5b505..3a058b34e77e 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -868,6 +868,18 @@ config CMA_AREAS If unsure, leave the default value "7" in UMA and "19" in NUMA. +config DMB_COUNT + int "Maximum count of Designated Movable Blocks" + default 19 if NUMA + default 7 + help + Designated Movable Blocks are blocks of memory that can be used + by the page allocator exclusively for movable pages. They are + managed in ZONE_MOVABLE but may overlap with other zones. This + parameter sets the maximum number of DMBs in the system. + + If unsure, leave the default value "7" in UMA and "19" in NUMA. + config MEM_SOFT_DIRTY bool "Track memory changes" depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS diff --git a/mm/Makefile b/mm/Makefile index 8e105e5b3e29..824be8fb11cd 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -67,6 +67,7 @@ obj-y += page-alloc.o obj-y += init-mm.o obj-y += memblock.o obj-y += $(memory-hotplug-y) +obj-y += dmb.o ifdef CONFIG_MMU obj-$(CONFIG_ADVISE_SYSCALLS) += madvise.o diff --git a/mm/dmb.c b/mm/dmb.c new file mode 100644 index 000000000000..f6c4e2662e0f --- /dev/null +++ b/mm/dmb.c @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Designated Movable Block + */ + +#define pr_fmt(fmt) "dmb: " fmt + +#include + +struct dmb { + unsigned long start_pfn; + unsigned long end_pfn; +}; + +static struct dmb dmb_areas[CONFIG_DMB_COUNT]; +static unsigned int dmb_area_count; + +int dmb_intersects(unsigned long spfn, unsigned long epfn) +{ + int i; + struct dmb *dmb; + + if (spfn >= epfn) + return DMB_DISJOINT; + + for (i = 0; i < dmb_area_count; i++) { + dmb = &dmb_areas[i]; + if (spfn >= dmb->end_pfn) + continue; + if (epfn <= dmb->start_pfn) + return DMB_DISJOINT; + if (spfn >= dmb->start_pfn && epfn <= dmb->end_pfn) + return DMB_INTERSECTS; + else + return DMB_MIXED; + } + + return DMB_DISJOINT; +} +EXPORT_SYMBOL(dmb_intersects); + +int __init dmb_reserve(phys_addr_t base, phys_addr_t size, + struct dmb **res_dmb) +{ + struct dmb *dmb; + + /* Sanity checks */ + if (!size || !memblock_is_region_reserved(base, size)) + return -EINVAL; + + /* ensure minimal alignment required by mm core */ + if (!IS_ALIGNED(base | size, DMB_MIN_ALIGNMENT_BYTES)) + return -EINVAL; + + if (dmb_area_count == ARRAY_SIZE(dmb_areas)) { + pr_warn("Not enough slots for DMB reserved regions!\n"); + return -ENOSPC; + } + + /* + * Each reserved area must be initialised later, when more kernel + * subsystems (like slab allocator) are available. + */ + dmb = &dmb_areas[dmb_area_count++]; + + dmb->start_pfn = PFN_DOWN(base); + dmb->end_pfn = PFN_DOWN(base + size); + if (res_dmb) + *res_dmb = dmb; + + memblock_mark_movable(base, size); + return 0; +} + +void __init dmb_init_region(struct memblock_region *region) +{ + unsigned long pfn; + int i; + + for (pfn = memblock_region_memory_base_pfn(region); + pfn < memblock_region_memory_end_pfn(region); + pfn += pageblock_nr_pages) { + struct page *page = pfn_to_page(pfn); + + for (i = 0; i < pageblock_nr_pages; i++) + set_page_zone(page + i, ZONE_MOVABLE); + + /* free reserved pageblocks to page allocator */ + init_reserved_pageblock(page); + } +} diff --git a/mm/memblock.c b/mm/memblock.c index 46a4deb07d92..2a957337bd8b 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -2090,13 +2091,16 @@ static void __init memmap_init_reserved_pages(void) for_each_reserved_mem_range(i, &start, &end) reserve_bootmem_region(start, end); - /* and also treat struct pages for the NOMAP regions as PageReserved */ for_each_mem_region(region) { + /* treat struct pages for the NOMAP regions as PageReserved */ if (memblock_is_nomap(region)) { start = region->base; end = start + region->size; reserve_bootmem_region(start, end); } + /* move Designated Movable Block pages to ZONE_MOVABLE */ + if (memblock_is_movable(region)) + dmb_init_region(region); } } diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d7a5a05ead4b..82cad751e0b8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -76,6 +76,7 @@ #include #include #include +#include #include #include #include @@ -434,6 +435,8 @@ static unsigned long required_kernelcore __initdata; static unsigned long required_kernelcore_percent __initdata; static unsigned long required_movablecore __initdata; static unsigned long required_movablecore_percent __initdata; +static unsigned long min_dmb_pfn[MAX_NUMNODES] __initdata; +static unsigned long max_dmb_pfn[MAX_NUMNODES] __initdata; static unsigned long zone_movable_pfn[MAX_NUMNODES] __initdata; bool mirrored_kernelcore __initdata_memblock; @@ -2171,7 +2174,7 @@ static int __init deferred_init_memmap(void *data) } zone_empty: /* Sanity check that the next zone really is unpopulated */ - WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone)); + WARN_ON(++zid < ZONE_MOVABLE && populated_zone(++zone)); pr_info("node %d deferred pages initialised in %ums\n", pgdat->node_id, jiffies_to_msecs(jiffies - start)); @@ -6978,6 +6981,10 @@ static void __init memmap_init_zone_range(struct zone *zone, unsigned long zone_end_pfn = zone_start_pfn + zone->spanned_pages; int nid = zone_to_nid(zone), zone_id = zone_idx(zone); + /* Skip overlap of ZONE_MOVABLE */ + if (zone_id == ZONE_MOVABLE && zone_start_pfn < *hole_pfn) + zone_start_pfn = *hole_pfn; + start_pfn = clamp(start_pfn, zone_start_pfn, zone_end_pfn); end_pfn = clamp(end_pfn, zone_start_pfn, zone_end_pfn); @@ -7438,6 +7445,12 @@ static unsigned long __init zone_spanned_pages_in_node(int nid, node_start_pfn, node_end_pfn, zone_start_pfn, zone_end_pfn); + if (zone_type == ZONE_MOVABLE && max_dmb_pfn[nid]) { + if (*zone_start_pfn == *zone_end_pfn) + *zone_end_pfn = max_dmb_pfn[nid]; + *zone_start_pfn = min(*zone_start_pfn, min_dmb_pfn[nid]); + } + /* Check that this node has pages within the zone's required range */ if (*zone_end_pfn < node_start_pfn || *zone_start_pfn > node_end_pfn) return 0; @@ -7506,12 +7519,21 @@ static unsigned long __init zone_absent_pages_in_node(int nid, &zone_start_pfn, &zone_end_pfn); nr_absent = __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn); + if (zone_type == ZONE_MOVABLE && max_dmb_pfn[nid]) { + if (zone_start_pfn == zone_end_pfn) + zone_end_pfn = max_dmb_pfn[nid]; + else + zone_end_pfn = zone_movable_pfn[nid]; + zone_start_pfn = min(zone_start_pfn, min_dmb_pfn[nid]); + nr_absent += zone_end_pfn - zone_start_pfn; + } + /* * ZONE_MOVABLE handling. - * Treat pages to be ZONE_MOVABLE in ZONE_NORMAL as absent pages + * Treat pages to be ZONE_MOVABLE in other zones as absent pages * and vice versa. */ - if (mirrored_kernelcore && zone_movable_pfn[nid]) { + if (zone_movable_pfn[nid]) { unsigned long start_pfn, end_pfn; struct memblock_region *r; @@ -7521,6 +7543,19 @@ static unsigned long __init zone_absent_pages_in_node(int nid, end_pfn = clamp(memblock_region_memory_end_pfn(r), zone_start_pfn, zone_end_pfn); + if (memblock_is_movable(r)) { + if (zone_type != ZONE_MOVABLE) { + nr_absent += end_pfn - start_pfn; + continue; + } + + nr_absent -= end_pfn - start_pfn; + continue; + } + + if (!mirrored_kernelcore) + continue; + if (zone_type == ZONE_MOVABLE && memblock_is_mirror(r)) nr_absent += end_pfn - start_pfn; @@ -7540,18 +7575,27 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat, { unsigned long totalpages = 0; enum zone_type i; + int nid = pgdat->node_id; + + /* + * If Designated Movable Blocks are defined on this node, ensure that + * zone_movable_pfn is also defined for this node. + */ + if (max_dmb_pfn[nid] && !zone_movable_pfn[nid]) + zone_movable_pfn[nid] = min(node_end_pfn, + arch_zone_highest_possible_pfn[movable_zone]); for (i = 0; i < MAX_NR_ZONES; i++) { struct zone *zone = pgdat->node_zones + i; unsigned long zone_start_pfn, zone_end_pfn; unsigned long spanned, absent, size; - spanned = zone_spanned_pages_in_node(pgdat->node_id, i, + spanned = zone_spanned_pages_in_node(nid, i, node_start_pfn, node_end_pfn, &zone_start_pfn, &zone_end_pfn); - absent = zone_absent_pages_in_node(pgdat->node_id, i, + absent = zone_absent_pages_in_node(nid, i, node_start_pfn, node_end_pfn); @@ -8002,15 +8046,27 @@ unsigned long __init node_map_pfn_alignment(void) static unsigned long __init early_calculate_totalpages(void) { unsigned long totalpages = 0; - unsigned long start_pfn, end_pfn; - int i, nid; + struct memblock_region *r; - for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) { - unsigned long pages = end_pfn - start_pfn; + for_each_mem_region(r) { + unsigned long start_pfn, end_pfn, pages; + int nid; + + nid = memblock_get_region_node(r); + start_pfn = memblock_region_memory_base_pfn(r); + end_pfn = memblock_region_memory_end_pfn(r); - totalpages += pages; - if (pages) + pages = end_pfn - start_pfn; + if (pages) { + totalpages += pages; node_set_state(nid, N_MEMORY); + if (memblock_is_movable(r)) { + if (start_pfn < min_dmb_pfn[nid]) + min_dmb_pfn[nid] = start_pfn; + if (end_pfn > max_dmb_pfn[nid]) + max_dmb_pfn[nid] = end_pfn; + } + } } return totalpages; } @@ -8023,7 +8079,7 @@ static unsigned long __init early_calculate_totalpages(void) */ static void __init find_zone_movable_pfns_for_nodes(void) { - int i, nid; + int nid; unsigned long usable_startpfn; unsigned long kernelcore_node, kernelcore_remaining; /* save the state before borrow the nodemask */ @@ -8151,13 +8207,24 @@ static void __init find_zone_movable_pfns_for_nodes(void) kernelcore_remaining = kernelcore_node; /* Go through each range of PFNs within this node */ - for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) { + for_each_mem_region(r) { unsigned long size_pages; + if (memblock_get_region_node(r) != nid) + continue; + + start_pfn = memblock_region_memory_base_pfn(r); + end_pfn = memblock_region_memory_end_pfn(r); start_pfn = max(start_pfn, zone_movable_pfn[nid]); if (start_pfn >= end_pfn) continue; + /* Skip over Designated Movable Blocks */ + if (memblock_is_movable(r)) { + zone_movable_pfn[nid] = end_pfn; + continue; + } + /* Account for what is only usable for kernelcore */ if (start_pfn < usable_startpfn) { unsigned long kernel_pages; @@ -8306,6 +8373,8 @@ void __init free_area_init(unsigned long *max_zone_pfn) } /* Find the PFNs that ZONE_MOVABLE begins at in each node */ + memset(min_dmb_pfn, 0xff, sizeof(min_dmb_pfn)); + memset(max_dmb_pfn, 0, sizeof(max_dmb_pfn)); memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn)); find_zone_movable_pfns_for_nodes(); From patchwork Thu Oct 20 21:53:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6432 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340265wrr; Thu, 20 Oct 2022 15:00:16 -0700 (PDT) X-Google-Smtp-Source: AMsMyM60PdFm5qXA95LAe0GpLELB5qAOQvh06LTvo182uTB9aL37PmqECtuL+TiRjbN2p2oqgtTT X-Received: by 2002:a63:4e18:0:b0:43c:2fc7:2eea with SMTP id c24-20020a634e18000000b0043c2fc72eeamr13854598pgb.119.1666303215610; Thu, 20 Oct 2022 15:00:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303215; cv=none; d=google.com; s=arc-20160816; b=s7wiOxE8U/MV2cBIkEzCXFTZsWyWqjoeZ5ICDaJLxo6tDhkpAypZNCjEs3CNJFLstL E9kBH+jgYo+GwTeXJYWLOddQdjeeZhjyVIP7m/lZZaK664yahUjz/QCm23g+mCi4Es29 89QtIoH9VSuwfG3yMsCJU112yiwIn+Z1KyKfJMK6edRMl6GDmWTL7Eb5y81hHR+uJJX1 2/vcK9h/IDL7KWgR3KTCva8zA4QAdbAIVlBeVx8Dke6Nb6bbs9RDHUDs63L9LYOdpLy1 IlpzfA7CPtpZgPL8gL4fTl3HwN/+ff945o3AJRsqnMC5fXlC6qtoJBcau21/HvB9iyjZ BnyQ== 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=cizdPvmJ1B17OrSNKxRqtl13qIriognWBTeBRaDyut8=; b=yZZ2FuVyRsefj/WYpUTy5lOe/yuwqhbB9CiZsoZqo4vucbzYYSfX6A04ZpKPbb0yXk d4I+C/+PsKo1JKOE+UKo+d9efzHeRs63Cn5YAfXYNzUw1FEUWCiZRM49pNx7fxt96Hdu Vrro8O1x0ptgX6Y4iTBukfseBAikX1XlDs16I3OGbH6C33DtVMvutwXgTtT9WpUJSc7u IJ5Mx2mtxtPVqgIK7D63/z3l6lSLrFA8NxUhfyFyVyWbnIVEPrP+I+uQkMzrmhJ742pq nR/J7G6tFlaJX7vlOMmvjKFdQt3Gn40yL9QbkA00ZhjGfn6Am2YarHmw/QFfhvluogq/ NC8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KB+L2mJL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d2-20020a63f242000000b004639c772888si23335518pgk.225.2022.10.20.15.00.02; Thu, 20 Oct 2022 15:00:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KB+L2mJL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229910AbiJTVzh (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230151AbiJTVy6 (ORCPT ); Thu, 20 Oct 2022 17:54:58 -0400 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 E066FA0264; Thu, 20 Oct 2022 14:54:46 -0700 (PDT) Received: by mail-qk1-x72b.google.com with SMTP id d13so881985qko.5; Thu, 20 Oct 2022 14:54:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cizdPvmJ1B17OrSNKxRqtl13qIriognWBTeBRaDyut8=; b=KB+L2mJLWgHCBesUojexARn3KfzhK2H8uBHU+VHa8RVf7cVaGNVrwuXj5H0u/3lYNt wcRhSDne7ByyOYLA9cvoYeZ3VkJnXDvSNYrN7WLs2Y8egIdBuC1tsxWHa8GuimGAILbi HpD84Z7bldzP6/kQGQaZBJtwCmr8b/q3S10e3mNdrpXjva2ZtAfgkTBffc6/iyI1nZh8 Dkvb6WhFlo7oG5GjOPlOEGO7jqBEgByfJJkRI0qvYtt0VrUgU2wXlz0p4gbq6SsQ+iYg B0OQZMc70gmWoyH7TxZ9cLUl4CmQ26VS1NmykgFEz179lNiZQ6BbQaEEdltfzN3ILZRT GG9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cizdPvmJ1B17OrSNKxRqtl13qIriognWBTeBRaDyut8=; b=SazMMU6G9v97uMklqMjniuu2dpi1W2mJzFrxG0Lryzp+262U/mKkWxoifAd34mxm2y a1yysLrDw+rvm852T2QrPqjpr/ExDc1Gr+oNHNUGmCy1qtvLiSepmZX9yTrdGg653BD6 DjMeYfF3nzkvfG79IIbwEOdy7HAxXtN76kp/TURgg6eJjlukYNjXleIg4L0dAaEK1Qsa 7MU//ROOEuCVk/ZIDBY6U3bLzCydFJjAaWOzqq6uAmeoIPzvOsRmqoX9V7GQyGZX/ZDE hAyXhdNQfgJ4aJ8xnLFQEkeCqXkaC8WTT+UPvkK3Zs10CDOOkEhPb+rG9wXwMsiYInQj jTMA== X-Gm-Message-State: ACrzQf3kj1LQT5Jve5G/OBcMswhfZnHGeK+x1b+B3QcnAGxPoISEy5xI S7dQwRyavhedectI82lEGbk= X-Received: by 2002:a05:620a:4510:b0:6ee:e598:a185 with SMTP id t16-20020a05620a451000b006eee598a185mr10499940qkp.765.1666302885214; Thu, 20 Oct 2022 14:54:45 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:44 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 8/9] mm/page_alloc: make alloc_contig_pages DMB aware Date: Thu, 20 Oct 2022 14:53:17 -0700 Message-Id: <20221020215318.4193269-9-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245560234394401?= X-GMAIL-MSGID: =?utf-8?q?1747245560234394401?= Designated Movable Blocks are skipped when attempting to allocate contiguous pages. Doing per page validation across all spanned pages within a zone can be extra inefficient when Designated Movable Blocks create large overlaps between zones. Use dmb_intersects() within pfn_range_valid_contig as an early check to signal the range is not valid. The zone_movable_pfn array which represents the start of non- overlapped ZONE_MOVABLE on the node is now preserved to be used at runtime to skip over any DMB-only portion of the zone. Signed-off-by: Doug Berger --- mm/page_alloc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 82cad751e0b8..a39eca3bc01b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -437,7 +437,7 @@ static unsigned long required_movablecore __initdata; static unsigned long required_movablecore_percent __initdata; static unsigned long min_dmb_pfn[MAX_NUMNODES] __initdata; static unsigned long max_dmb_pfn[MAX_NUMNODES] __initdata; -static unsigned long zone_movable_pfn[MAX_NUMNODES] __initdata; +static unsigned long zone_movable_pfn[MAX_NUMNODES]; bool mirrored_kernelcore __initdata_memblock; /* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */ @@ -9460,6 +9460,9 @@ static bool pfn_range_valid_contig(struct zone *z, unsigned long start_pfn, unsigned long i, end_pfn = start_pfn + nr_pages; struct page *page; + if (dmb_intersects(start_pfn, end_pfn)) + return false; + for (i = start_pfn; i < end_pfn; i++) { page = pfn_to_online_page(i); if (!page) @@ -9516,7 +9519,10 @@ struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask, gfp_zone(gfp_mask), nodemask) { spin_lock_irqsave(&zone->lock, flags); - pfn = ALIGN(zone->zone_start_pfn, nr_pages); + if (zone_idx(zone) == ZONE_MOVABLE && zone_movable_pfn[nid]) + pfn = ALIGN(zone_movable_pfn[nid], nr_pages); + else + pfn = ALIGN(zone->zone_start_pfn, nr_pages); while (zone_spans_last_pfn(zone, pfn, nr_pages)) { if (pfn_range_valid_contig(zone, pfn, nr_pages)) { /* From patchwork Thu Oct 20 21:53:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 6433 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4242:0:0:0:0:0 with SMTP id s2csp340404wrr; Thu, 20 Oct 2022 15:00:36 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4lVC7C5owzuWt17USCslg15DFh7qNYPXMKiFrqm+eIuK2lDSjNgloH9LDbHWsCHUeVg6ZC X-Received: by 2002:a17:90b:14e:b0:20b:6a12:cdb1 with SMTP id em14-20020a17090b014e00b0020b6a12cdb1mr54758543pjb.53.1666303236558; Thu, 20 Oct 2022 15:00:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666303236; cv=none; d=google.com; s=arc-20160816; b=upsNUNTskzL3Kr4PvysRaCL4QbH1VdwsmNVW4u+DBbZYcQ9OpsKdTYPXPThM111JX6 oolcNkWvZR5k3fxAAW2IYv9O1WI235/GkGtCn+4sBR9h1RJSlILpcUGDImcdYUk9kjlz Jk1V74dgxMq7uDtQJawhi720eOsJE+wvrGtH+5AwiJ+YWCJXCBGKDXpTS3GDQCd55gvE RXlxxgf55OuGLdUF8hCeqdX2ZrpfF9UKZS1XJGuUcTVbtvSDGMH3ClR4gibrfWz0RV9E eFrKidOdkjN71JMvtCEJv8eeYRYwuVM7pHhEg9LHJr1wWcX93+1ariRN28/4rZkO4dAH djBw== 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=Ea/3nCCOnpBrAub9VWj+VXkTFR+eMwl9pcvHopG8Sl4=; b=pY50OzY/DmZZT8e/Fww/piZPcFZVecH0n6TFjOyLQeGPt4shHleAf8QCaBKlaGe7cd pf8lC6V9GtlXjruwn6bwzj1+KThq7r08LCDian0lLfRD0QS3rFxNx20oYbAcBAga++mP 7SaBS9vFJEt2eOdjO/6/9Zd1WOu7aMxDpT0ax1THSYgXJxu73muTsxG6u75rCbX0XnuU CTFvnnta8A4zBwkcOR8bxA19hxA+h89RICmPUKIdBMzPsKqS7YODVLSkz+mysygIm6qt rXpKqZn4934T6aReqwj53OQ37oEWS/vZ30sJ4L44Lm49dPLKOX+XwuI23GI6ihu8b7Dj tRwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=jHO9VXRM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e12-20020a170902ef4c00b001712e1efa9asi3736114plx.542.2022.10.20.15.00.22; Thu, 20 Oct 2022 15:00:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=jHO9VXRM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230086AbiJTVz4 (ORCPT + 99 others); Thu, 20 Oct 2022 17:55:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230172AbiJTVzU (ORCPT ); Thu, 20 Oct 2022 17:55:20 -0400 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18522AF180; Thu, 20 Oct 2022 14:54:49 -0700 (PDT) Received: by mail-qk1-x736.google.com with SMTP id j21so866144qkk.9; Thu, 20 Oct 2022 14:54:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ea/3nCCOnpBrAub9VWj+VXkTFR+eMwl9pcvHopG8Sl4=; b=jHO9VXRMOgdapG/UgLZpqe+Gt5pAn7UO5fZglesQLnrsJyUhoJnB3qHY4gaLpiyFOy bUH75Aj62S7L5f3ngX4qS9txpVrLZd93mjdMBZQ0U7flk0sQPbYTCS7mQ7RIXxkvnq+x jZEhV0P3om90L4r12ay7KkkDquUuCss1I8xiwWwxRyQvMekR87gzk1POzYfJyWllelOY t3uQ+y3KkAhEZ1RY6johTUnoMIIbx77+Xuo9N2Y/I+jQ6VcUfI2jAsKkEsTB9FyFs08b ORM6yLBHqPM6zcCt7XPaHUmhLZp0rubUzkkslI1uggLXAFRo3Mk+qOGm9V0JvNMvR1uL F9Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ea/3nCCOnpBrAub9VWj+VXkTFR+eMwl9pcvHopG8Sl4=; b=lXKdRarQ0RF70oHNuKjanvtRUgerT5b3h6DAejk2oh/5jNbu1kCiVvu3DMFhIqShb/ OgS1PxqTuxc5exHrRpxNXJAQSMEgPwESBLn9Rz+VhZKVte3uOYuv6EiinnnYNbapbVby YVdrtt+VDG9ewwqCBRz0vVTk3Jxlq3DTiuJfXe2x3mE/Vyzp1CE2+t2e0JGqDsclSUsj 46QJP74af1/DMDiCIvw/cC2/eKMxQWxbWz4jN6RVqj+BDjdyl9ygsa2+VET5C6AZBSu2 c0VzpTv4zo8pDdwIbXri2BzUwUl4WRAEJ39piGIkW5Tzb/HOSF8uHEUVVUiIBdzAz9X0 Xupw== X-Gm-Message-State: ACrzQf26CfXnuQtsYSLY2NY2pyYC8DuK4NnEGJYIC3c+4voxLBfvifOg 03y+dXrEhw6+WVoVMxPidFk= X-Received: by 2002:a05:620a:4250:b0:6cf:a822:7c7e with SMTP id w16-20020a05620a425000b006cfa8227c7emr11637421qko.503.1666302888216; Thu, 20 Oct 2022 14:54:48 -0700 (PDT) Received: from stbirv-lnx-3.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id bj41-20020a05620a192900b006bb29d932e1sm8121067qkb.105.2022.10.20.14.54.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Oct 2022 14:54:47 -0700 (PDT) From: Doug Berger To: Andrew Morton Cc: Jonathan Corbet , Mike Rapoport , Borislav Petkov , "Paul E. McKenney" , Neeraj Upadhyay , Randy Dunlap , Damien Le Moal , Muchun Song , Vlastimil Babka , Johannes Weiner , Michal Hocko , KOSAKI Motohiro , Mel Gorman , Mike Kravetz , Florian Fainelli , David Hildenbrand , Oscar Salvador , Joonsoo Kim , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Doug Berger Subject: [PATCH v3 9/9] mm/page_alloc: allow base for movablecore Date: Thu, 20 Oct 2022 14:53:18 -0700 Message-Id: <20221020215318.4193269-10-opendmb@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221020215318.4193269-1-opendmb@gmail.com> References: <20221020215318.4193269-1-opendmb@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747245582189072247?= X-GMAIL-MSGID: =?utf-8?q?1747245582189072247?= A Designated Movable Block can be created by including the base address of the block when specifying a movablecore range on the kernel command line. Signed-off-by: Doug Berger --- .../admin-guide/kernel-parameters.txt | 14 ++++++- mm/page_alloc.c | 38 ++++++++++++++++--- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index a465d5242774..f4f783cd683e 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -3325,7 +3325,7 @@ reporting absolute coordinates, such as tablets movablecore= [KNL,X86,IA-64,PPC] - Format: nn[KMGTPE] | nn% + Format: nn[KMGTPE] | nn[KMGTPE]@ss[KMGTPE] | nn% This parameter is the complement to kernelcore=, it specifies the amount of memory used for migratable allocations. If both kernelcore and movablecore is @@ -3335,6 +3335,18 @@ that the amount of memory usable for all allocations is not too small. + If @ss[KMGTPE] is included, memory within the region + from ss to ss+nn will be designated as a movable block + and included in ZONE_MOVABLE. Designated Movable Blocks + must be aligned to pageblock_order. Designated Movable + Blocks take priority over values of kernelcore= and are + considered part of any memory specified by more general + movablecore= values. + Multiple Designated Movable Blocks may be specified, + comma delimited. + Example: + movablecore=100M@2G,100M@3G,1G@1024G + movable_node [KNL] Boot-time switch to make hotplugable memory NUMA nodes to be movable. This means that the memory of such nodes will be usable only for movable diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a39eca3bc01b..385fc9082945 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -8461,9 +8461,9 @@ void __init free_area_init(unsigned long *max_zone_pfn) } static int __init cmdline_parse_core(char *p, unsigned long *core, - unsigned long *percent) + unsigned long *percent, bool movable) { - unsigned long long coremem; + unsigned long long coremem, address; char *endptr; if (!p) @@ -8478,6 +8478,17 @@ static int __init cmdline_parse_core(char *p, unsigned long *core, *percent = coremem; } else { coremem = memparse(p, &p); + if (movable && *p == '@') { + address = memparse(++p, &p); + if (*p != '\0' || + !memblock_is_region_memory(address, coremem) || + memblock_is_region_reserved(address, coremem)) + return -EINVAL; + memblock_reserve(address, coremem); + return dmb_reserve(address, coremem, NULL); + } else if (*p != '\0') { + return -EINVAL; + } /* Paranoid check that UL is enough for the coremem value */ WARN_ON((coremem >> PAGE_SHIFT) > ULONG_MAX); @@ -8500,17 +8511,32 @@ static int __init cmdline_parse_kernelcore(char *p) } return cmdline_parse_core(p, &required_kernelcore, - &required_kernelcore_percent); + &required_kernelcore_percent, false); } /* * movablecore=size sets the amount of memory for use for allocations that - * can be reclaimed or migrated. + * can be reclaimed or migrated. movablecore=size@base defines a Designated + * Movable Block. */ static int __init cmdline_parse_movablecore(char *p) { - return cmdline_parse_core(p, &required_movablecore, - &required_movablecore_percent); + int ret = -EINVAL; + + while (p) { + char *k = strchr(p, ','); + + if (k) + *k++ = 0; + + ret = cmdline_parse_core(p, &required_movablecore, + &required_movablecore_percent, true); + if (ret) + break; + p = k; + } + + return ret; } early_param("kernelcore", cmdline_parse_kernelcore);