From nobody Wed Jun 17 05:17:06 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D0A0222590 for ; Tue, 28 Apr 2026 00:37:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777336682; cv=fail; b=jzAvOOP9pt0kR7A4Ao1eIHqbXCA9VPE4lkZuMcBLhADi43krlz4vL3pwtyWw7qpyfYOOAjh/PqFwW+wSXnZRAfYR2Fh3ktz81PQSX9sDb/NU+bT+xkp4a/uanuTpJrw51zgFPmpoc4n1/z4Q3qgPeHd8aeWW6rGlbwoLBSsoJIo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777336682; c=relaxed/simple; bh=m/4eRiOQ5v3hiUyGQKmaQ0Xo5VrD/L4HK+yrrNz60IM=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=etcClv0q51Vck5c1453zJ9eJZomUXngwIQPGmh8IBF1odQ+Xhc9QLVh8tVWPthN2Qzru3T+ZHdK1JQ9dFRd7GGzG5tKqae9GpFP9vm20C5DH8JqDoEFKv3KT01UiYibHcnlNjy3wz4+lAibmKTmsGF/T0zfq102bRNDrYMrRC3A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=J4shumjH; arc=fail smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="J4shumjH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1777336680; x=1808872680; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=m/4eRiOQ5v3hiUyGQKmaQ0Xo5VrD/L4HK+yrrNz60IM=; b=J4shumjH8wFXsETdbqYFUmMjz4p2yJKQgcFAhWZz4Xmyf7rNfhbFj3p/ JPpuCiYHxQ0qarYD9cjTSCAULOAQg89m3nYmvbHLwgXOHc1Z6ad0C3gaf mk3d5qDSMWp+XI+XT1lxrP7ocLbkmcedabimd5nj+/fObhtdqsh81gMJs 5eZBL5PsOscehLWFHWkqYcBqSV16w1Q432ObNjT15gmnAEOqRnpn/6m0/ KnMfWr9wbJLK+NMH1TtSrOzQdDPRQnKhEK9mFElnMhp01dgn/rDrxl7Yd wpH+ntWOwKoCuqVjwkOsPQvr+2YstkpmCzALRoJc9JQbc34Gl+tKTT25/ w==; X-CSE-ConnectionGUID: GjqnkTkeTbeFR5+r/czrjw== X-CSE-MsgGUID: GPhrlcBwS8qYjILM3vwkKQ== X-IronPort-AV: E=McAfee;i="6800,10657,11769"; a="88933898" X-IronPort-AV: E=Sophos;i="6.23,203,1770624000"; d="scan'208";a="88933898" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2026 17:38:00 -0700 X-CSE-ConnectionGUID: N8HJEtbBT1Grc+1zr9gPtQ== X-CSE-MsgGUID: s524yuM+TliNPtlx9yKksQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,203,1770624000"; d="scan'208";a="232785485" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa006.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2026 17:37:59 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 27 Apr 2026 17:37:58 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Mon, 27 Apr 2026 17:37:58 -0700 Received: from PH0PR06CU001.outbound.protection.outlook.com (40.107.208.25) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 27 Apr 2026 17:37:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lXwQbZVqVaf5T7h8z6Vlpt1SipbX3SgUec12nJ2gm0XxRzyytbjAEmcC/Wq+xGE0PVUEi2ZVchyQdrNRoG/UK1PWED/AkG5BuAh76WDDVlsit+8RdmArrxZBa6VUjC2NW+CR6qs+k22ZVlqvJQxC8xuNrFG0tI57ifwt1BWVGRVTEvD5h9E1ATNMOGQzTrB2yTCXG6lprTCLlHp3QpVtg1jHqd6rudjncvLkgWB9mAQDfUtfiVys7UxWJJx5SX3JJq+CGTSkOVOJJmvjmE3hpvZ47+qwsrhVuYJmL8p4ZQi3l2wODX7xHeuGDfsbwCYHY8v/5/9KBX29NoC1Dd5u8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=m/4eRiOQ5v3hiUyGQKmaQ0Xo5VrD/L4HK+yrrNz60IM=; b=PoUZtiCik+MxGX1qtgkjvpFkhxQGusoTO2IQbA0BbFz2Ko1KsOk1qzqqs2UH6a2uRcPhPxDtEyB5rGH5/HxLeOFXpQX8kI7b8vAbpRsOKrrUVdpfOjoE3+Yv+ZXy6if4u5RmQvEzbUmDOutTzra87UXk84c05qu0dZI/r5OpT6Ctn5iU+9B6tMdC6g2VPGepLqE8v4mrYpCIGv8ft5mQ2oAEJx3WfHeL+7zxKVfJ2VeEnra6OqYTvLHhMjHGxehtzVSZHfz/ABaiSA/Z4hAWh7uFUMaKyC9H5n/HPSlIFRFPJeF22u1PafVlbsPHJX625BUWh9ynjswFXxlzqwEwYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB6936.namprd11.prod.outlook.com (2603:10b6:303:226::16) by CH3PR11MB8750.namprd11.prod.outlook.com (2603:10b6:610:1c7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.17; Tue, 28 Apr 2026 00:37:47 +0000 Received: from MW4PR11MB6936.namprd11.prod.outlook.com ([fe80::96dc:12ef:f56f:dd04]) by MW4PR11MB6936.namprd11.prod.outlook.com ([fe80::96dc:12ef:f56f:dd04%6]) with mapi id 15.20.9870.013; Tue, 28 Apr 2026 00:37:47 +0000 From: "Liu, Yuan1" To: "David Hildenbrand (Arm)" , Mike Rapoport CC: Oscar Salvador , Wei Yang , "linux-mm@kvack.org" , "Hu, Yong" , "Zou, Nanhai" , Tim Chen , "Zhuo, Qiuxu" , "Chen, Yu C" , "Deng, Pan" , "Li, Tianyou" , "Chen Zhang" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v3] mm/memory hotplug/unplug: Optimize zone contiguous check when changing pfn range Thread-Topic: [PATCH v3] mm/memory hotplug/unplug: Optimize zone contiguous check when changing pfn range Thread-Index: AQHcxwYPPar5wabLkEWQfiO/Xde9s7XUxrUAgAIIwYCAAAfiAIAHUdTQgBWS2/A= Date: Tue, 28 Apr 2026 00:37:46 +0000 Message-ID: References: <20260408031615.1831922-1-yuan1.liu@intel.com> <17b821b6-0176-43d5-92f7-fe2a0c4f70cf@kernel.org> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB6936:EE_|CH3PR11MB8750:EE_ x-ms-office365-filtering-correlation-id: 679d8522-15c0-4693-f81f-08dea4be5e8a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|56012099003|22082099003|18002099003|38070700021; x-microsoft-antispam-message-info: Hdh3BlfRQnsDjYXCAdUOQwm2B8ApmVTiLqkikc6mzqlby4n0GnLoo11bPCj66rVb5cv0a+2ceP7eA2J/E+DNaUCQ49pDUis2YMEcXu05Ng7hAbTFw70KINPRL9CJMS65xoWKLJN4lJuluv595ZH40Bf9NS8+XpizeYLR4l071YaPO1tGLpSAGeen7HLpFpITiyIRf7gO4qUpKRsLm0BNq5dzOgccDgqPkUY2K/h7rsjO/KSvtqumsIb+Ufq6WP1BwHPAPqmFtTHaQWPYQ88vt1aHfXIR/KOzup5kBm3hz2viY9Ax+GmdobMLm57gmdvusGDZQpTTJd3/mkbKqVGL5puK3nEwqp6G8uKKgmVBdFgFfNztcZTxsRB9gRcjnlKP8hQP68Gas2C7kNsabeSjq9EAR7XU1gu8MuocMUKWTf7UlaStnrYhCz4MPIqk0lUjgjZkf8MZfyTyr0rFd9+DLpTE5Q+sbgp7Cm9a/wJRT1k47t1TP5wQnaiE/hdLAwHAfBMpa2y+wZ3qzZhCPmLhCD0KQ3kOrx4t5cdhmNcK0EP/+o110PunY1JLeoCrhG8uZP+1J8BW4kyWu0GTM4aCRYDAusLjzdyIdsiTjnTRnVv/Y493kzV8mbMCPZIpE3UBWmaXAiCEEXCtQtemABUCRjMw9XUekryy4BhStWvBOCBuPGrunENx1JE0Eb0MgV9Is+oTzuANk8mgZ3t23uHg1tXe7XqqKRlp7tiCL7j8kYjbFHfINCUGITNIgz7zDUyNobTmnQyi8FcEQSyLU82Am2b/Su8MPjB7nydACEmJskk= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB6936.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WXhxcStma2o5bmlWU1RhalArczAzekxLQWR2UHpENHVwOVlWMnJJeXB1VjhZ?= =?utf-8?B?MnZ2VUcvT1ZNQUYxc0F1dDEzSWtiQWNyRm9qaUY2bXFmekxLSGxOVGdvejVs?= =?utf-8?B?QTVPUGZiblIyRUN3RTlMQ21tVUpkR0FtSERDSEJ3TzVwd0lNL2h2djVYenBi?= =?utf-8?B?R0l1ZGFhUFdZTmFyTGhWTDE4Y2JOMzJDZXBVMlVjbDM4V1JxdHpGeng4bEtJ?= =?utf-8?B?QURscUQ1MEZuUHN6VDZSVkR6QzZxcHl4Sk43OHhiOTNpTUl3QVJla3hlUk84?= =?utf-8?B?aDVTNk5kMEVGS1gySTVsVmRKbkt5eERCVzRkeThzdkNtYzdPRkt1MEErbGsy?= =?utf-8?B?R21LTzJ1cDFhVW5jZUlMb1JUZVdZSmRORkhkMmdwTkFhTE5XVVAzR1hHbUhH?= =?utf-8?B?MllBNDVJMHprUzdoempudzZRbFRDbVFqeDhmOWVnbDdDZm5ZYi9hczJabzhT?= =?utf-8?B?dUVTWjdRanN3ZklSMzFFWXhkV0o0aU1oYTBQOUdndVZ1RHNkSlAvWnlEZXdx?= =?utf-8?B?cVdOdXF2Qit6RlRjemdJZDFXLzhEZ3FTbHlKVThIa2RzK2VhaUJSSkI5MGN6?= =?utf-8?B?UTZybmtNblhXeVNyYnNSMlRtc2NrS1FEdCtoM0kveUFsaXhIc09WZFMwTjNR?= =?utf-8?B?MlIxeVZILzlwcllpeWxOTU10MEZuYVBSdWptK21VWUhRUG4zaEM0NkZUdndJ?= =?utf-8?B?bW16NUFkemNMT1lDakRrQjkzS1MwbEJ3N094Q05jQkM4Ryt1am16cmxGL3BK?= =?utf-8?B?cURlV3VoZFFNNGJsZEdCQlQ0N2piT3Q0TS9GK0hGNXoyOVRIeFppYytNTW52?= =?utf-8?B?K3hWRU9XNGQxV2VlcGNYTzVGajllYk12VU01VlptMUFEN29yd20yODB4NmpY?= =?utf-8?B?ZnlnbjhmSTFrUGkrNzZWV0xMdmhqV0Z2TXlJTnIzTFArQjFJT1Qyb1Y0RWVF?= =?utf-8?B?emF4ZGFJcysycGhFNFd5Yk9ZNUJIUGVKU3E2M0dNSjQ2RkJTL0lDbFlyZ21D?= =?utf-8?B?Yk0yTWxibFhyZGhrOUUrQkFRQWlqbjBuN1FUcmttNmZhVDAxZTF0QXZlY2lN?= =?utf-8?B?TjhLdmFmbGI3bDU5NEFydzA5T0N0Q0ZQQm1Eb1N0cXFqYW1pa01CRnpkRXAy?= =?utf-8?B?Y0RMS1ptMEp5c2hzTmRaOXJlT1NLaTBGWTFCTHJGRFNnQkI2QXVrSUtENmYy?= =?utf-8?B?dGFPeWVLNzYzSldERHJSclQwRDlIcXZSaGZUKzdkN04zc1JQL2YyakxDeE91?= =?utf-8?B?Zk9VNVRpRUxBZzRyU3NrYVVTUkxTWmhjeFhPWVNETFlveU1uV1p5bVNHQkhW?= =?utf-8?B?Zk9qWURCS1MxUmd5bUxxaVd6YktweTIzSjErbWhOOHNYVXhJUytzeTU4UlBm?= =?utf-8?B?RG1RWGo1NGxlcXFIVWQvSVBKcW13MGVhaGlxTXA4WE00R1E5bDR0WnVtQk1J?= =?utf-8?B?SUdxdFVHZE1ma0ErcFpmNlJ2T2E3elhlRVVLU2d3dEk2QXl4aU9LTm5Cd1R0?= =?utf-8?B?bjZ1ZWFuQXRzVGFVbjNSRG9XZWxRRXFWbzJ2a1ZnaEd6dGdrckJ5QW41V2ZO?= =?utf-8?B?WkZCZzgwVjNnWUNDdDV5Zi9zY0oxTnFCTkhyNzdqa3FrWm1JZ2lkZkJwRVV6?= =?utf-8?B?YUFGbHVWM0R6QXc1bjNONXowSm9KMjlQVTFycDAzTEFtcngyM1hIK2Q1cHh6?= =?utf-8?B?Ky9FaGtRckVLdDhhV2ppendxeUZNaWRpcjZYcS9udkxsNDRzZ29UQmZtR21l?= =?utf-8?B?UFhjNEdDQURseVJhZnNMY3RpbjVoMnhXYk5tNTRKMjVqeVlkellDdFNaZC81?= =?utf-8?B?NDZZUXA5VTdlclVzY24wbDU4L29IajdwaDJ4WEN4aExRV0FSdUIxUWF0b2NU?= =?utf-8?B?ZHJCK3dQV2Q5TitObEVNb0J0RXdCSUpBWUVuYVRtSHFpckNRcGlWTVVXbUVI?= =?utf-8?B?Y3dZaENwRkJycGd0NUFjTTRrM3lsaXJpdmlwUkVpR0FqOXpkSnoyOUVYS1Zz?= =?utf-8?B?N1JFbWpPRFRsZVBwczVGV3N5cVpqbTJSczhTQnFuT1Q5UmhaUE1IUGt2a1pS?= =?utf-8?B?UjNqVm5uWEI3ZGwvZDkyMEhWb2x2SmZQQTFVNkpmUEd2SWxiNStzaDlxMEND?= =?utf-8?B?Z01hN0RFOUpuODdxOXBjSm9LdWhuWEZzZW5kV0JBdmNWc0JHVzYxQ28rU0Yw?= =?utf-8?B?UUlWcUxBUXIxajZ3TmtndlVrN3RMVWVXODdraHRLa1dtUnJFeWNkR1NIMTNL?= =?utf-8?B?U1A4ZTVMc3lQekdlWVFlVEh1WTJEZVJLVEpKRURGVmtMazJkM3U0SzdWRW1G?= =?utf-8?B?QUJOR1prMmVrTG1CZ2xPbm9xd1JnQmJDS2kwVkRwZUJQTEpxS2x2UT09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: FqJPsQjS79HYaqAFgqoTYqANUxvUQaVa7PWYOt0haVCVuO686Ue6h6w6q7UXnL6Iikit7L32AqEET13D9/Yi9cyj4QToBeptWAKTTTUXH50jqXL+R7tfrHY4JHYNsy7g+FskAtbBy1Ekp1lCdPtmWmZeGSueSqugSGmQnW+wxttXEs15zYBMQHNE4b2s7UcX619/IbMYwxWsQfS2UEkw4MZtx1szKdjgrgjriQMXr9fF6Bw2dijfSbABI7MP0wFnLLgD+xc+5AJfNMJEth7lr78PbF/HlaSuK8ZvL3w/fWQxsG/OUnUcG1FpjrVvEj+BfusBxgznmRo4N1LhYPmEUQ== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB6936.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 679d8522-15c0-4693-f81f-08dea4be5e8a X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Apr 2026 00:37:46.9956 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wYYjD/S69I2QZ6oDN97/ul9EhZZW8Z3JFKTwdqGu+KodwEvaMOPNnzceD8967V6k4ZAfnIO0emcahvLKLEJ8hA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB8750 X-OriginatorOrg: intel.com [...] > > The set_zone_contiguous/clear_zone_contiguous can be ignored I think. > > > > The comment about shrink_zone_span() is likely not realistic. > > shrink_zone_span() would not shrink over boot holes. > > > > Well, unless we have an odd case where the hole+memory starts in the > > middle of a "PAGES_PER_SUBSECTION". That would already be problematic if > > memory starts/ends in the middle of a PAGES_PER_SUBSECTION chunk. I > > don't such a case exists. > > > > We could improve shrink_zone_span() to let > > find_smallest_section_pfn/find_biggest_section_pfn test the pfn_to_nid() > > and page_zone() not on;y on the smallest/highest pfn, but also on the > > highest/smallest PFN in a PAGES_PER_SUBSECTION chunk. > > > > No need to test pfn_to_online_page() twice, as that is the same result > > for all pages in a PAGES_PER_SUBSECTION chunk. Hi David Sorry, I still have one question. As I understand it, when a hole and memory fall within the same subsection, we check the nid and zone on both sides of the subsection to avoid incorrec= t shrink. In this case, it seems the hole would always share the same zone = and nid as the memory within that subsection. I may be missing something, but I=E2=80=99m not entirely clear on the use c= ase for this optimization. Could you help clarify? Below is my proposed change. Please let me know if I=E2=80=99ve understood = this correctly. --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -435,14 +435,20 @@ static unsigned long find_smallest_section_pfn(int ni= d, struct zone *zone, unsigned long start_pfn, unsigned long end_pfn) { - for (; start_pfn < end_pfn; start_pfn +=3D PAGES_PER_SUBSECTION) { + unsigned long next_pfn; + + for (; start_pfn < end_pfn; start_pfn =3D next_pfn) { + next_pfn =3D start_pfn + PAGES_PER_SUBSECTION; + if (unlikely(!pfn_to_online_page(start_pfn))) continue; - if (unlikely(pfn_to_nid(start_pfn) !=3D nid)) + if (unlikely(pfn_to_nid(start_pfn) !=3D nid && + pfn_to_nid(next_pfn - 1) !=3D nid)) continue; - if (zone !=3D page_zone(pfn_to_page(start_pfn))) + if (zone !=3D page_zone(pfn_to_page(start_pfn)) && + zone !=3D page_zone(pfn_to_page(next_pfn - 1))) continue; return start_pfn; @@ -457,17 +463,22 @@ static unsigned long find_biggest_section_pfn(int nid= , struct zone *zone, unsigned long end_pfn) { unsigned long pfn; + unsigned long next_pfn; /* pfn is the end pfn of a memory section. */ pfn =3D end_pfn - 1; - for (; pfn >=3D start_pfn; pfn -=3D PAGES_PER_SUBSECTION) { + for (; pfn >=3D start_pfn; pfn =3D next_pfn) { + next_pfn =3D pfn - PAGES_PER_SUBSECTION; + if (unlikely(!pfn_to_online_page(pfn))) continue; - if (unlikely(pfn_to_nid(pfn) !=3D nid)) + if (unlikely(pfn_to_nid(pfn) !=3D nid && + pfn_to_nid(next_pfn + 1) !=3D nid)) continue; - if (zone !=3D page_zone(pfn_to_page(pfn))) + if (zone !=3D page_zone(pfn_to_page(pfn)) && + zone !=3D page_zone(pfn_to_page(next_pfn + 1))) continue; return pfn; >=20 > > -- > > Cheers, > > > > David