From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31719C32771 for ; Sun, 18 Sep 2022 09:49:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 59AE1940008; Sun, 18 Sep 2022 05:49:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 54A77940007; Sun, 18 Sep 2022 05:49:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 38476940008; Sun, 18 Sep 2022 05:49:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 216F3940007 for ; Sun, 18 Sep 2022 05:49:08 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E17711A0B07 for ; Sun, 18 Sep 2022 09:49:07 +0000 (UTC) X-FDA: 79924732734.04.3359023 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by imf02.hostedemail.com (Postfix) with ESMTP id B170680008 for ; Sun, 18 Sep 2022 09:49:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663494546; x=1695030546; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=gf7J2/Z1DE1s5+bhNsbAL/mSxgpuy/eCe/FkI3EI2kI=; b=fj4hmCYMeToZc6TyGtx8GY6703220cDC7D2ZcDzw9hYgnb5wXCy8+41g 7/2pctb9B2hvX8H5VG3yFis725BJwEfkwZKzGtMdEzc1M3DBLyQxeo+11 l93CLYhc2EMtWgUvFeXsctM78GejuZTCjC9nVEpSKMUezwzhR3noduKWc YPsnQK0KtAzdi6x4hKGETc7nJg9+/tISH8csay7ACsHMnvpvkedg2hAdb FUlK9V7Y6sOdb3Fi5X9KkUlUEHXKkDeLNu5O1ALF/Iy93cVAv89XxC6Eh 6qlNIfRKDf3M2eNvdm2nVgJ5gWUl3rmglfhtbb4l9ojd1E++zTWkpBs8t w==; X-IronPort-AV: E=McAfee;i="6500,9779,10473"; a="296810195" X-IronPort-AV: E=Sophos;i="5.93,325,1654585200"; d="scan'208";a="296810195" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2022 02:49:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,325,1654585200"; d="scan'208";a="707249771" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by FMSMGA003.fm.intel.com with ESMTP; 18 Sep 2022 02:49:05 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sun, 18 Sep 2022 02:49:04 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Sun, 18 Sep 2022 02:49:04 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Sun, 18 Sep 2022 02:49:04 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fnpMDKdfTScpzGwSRsTkk1yVQf7wnOO+p5Tc1Yn9S+txxPsNGKd5D74cDTwnIRPx7R6aVEoy2co1gMwLgbVRQpgauzROBTyyu6fa3WOc4aL01iurgi7a5oYbmS5i1/0OC8mdzymKzUEex92ehwNF50dDmtzekWxn+GkWxXYT8nYKBkAjQFTCp+uZdm070rdPNYIaL9sg5wlg0BctpYHMvpwx5ei1jo/oHxn46vz6jJMGTp6Rz92UZKykpFlxpcxqMc3dPEsnFbANKL3gkekhSTNM+B+NmdCokdornHgppyRGIJWf+DC1a0qUJLAd0VAALKWML4jmT3unPT09M+JXBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=4SzIAJZR7eXJ9ZMrnq1ZY4f0IkKp7efLB7NxidGxCsY=; b=ObyxwWi8OZ4Ft+Wqn05w+61DAGfHIGjArw1TktvSt89s4I5OVkBwEZ3b+aZpQcU93ZG19PhOrcEBQ+WnImZi0Wr3iCLXJxxlNZyi0Z6oU12FRX7lSko1VyQvmv2oBw2Sg3MeSpwVxR76V0TkMbQSJSeSlCIoSHQIn8CmWt6AlpfIJWAbsF/qqFvyNe3ZlE62B+nZ0Tb92sDmqCOBPPOqKQLmQdoyJOG3gm4L8VpFod+bUF5SnIEV7rJlJN6qdBIBrVIXqweslvQhCfyejY+LcxCZTtxoT40SpOh8BBWyudLemqqZAxMlwCFb2J22x9BmmqlPBQ/cjCscUZzllf0P2A== 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 MN2PR11MB3870.namprd11.prod.outlook.com (2603:10b6:208:152::11) by DM4PR11MB6067.namprd11.prod.outlook.com (2603:10b6:8:63::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.15; Sun, 18 Sep 2022 09:48:57 +0000 Received: from MN2PR11MB3870.namprd11.prod.outlook.com ([fe80::101b:16b9:9211:831b]) by MN2PR11MB3870.namprd11.prod.outlook.com ([fe80::101b:16b9:9211:831b%4]) with mapi id 15.20.5632.019; Sun, 18 Sep 2022 09:48:57 +0000 Message-ID: <03c9e680-daef-9efb-19b1-0669d79ec557@intel.com> Date: Sun, 18 Sep 2022 17:48:47 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 Thunderbird/91.13.0 Subject: Re: [PATCH v3 1/3] memblock test: Add test to memblock_add() 129th region Content-Language: en-US To: Mike Rapoport CC: Karolina Drobnik , Rebecca Mckeever , David Hildenbrand , , References: <20220913064138.407601-1-shaoqin.huang@intel.com> <20220913064138.407601-2-shaoqin.huang@intel.com> From: "Huang, Shaoqin" In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SG2P153CA0022.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::9) To MN2PR11MB3870.namprd11.prod.outlook.com (2603:10b6:208:152::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR11MB3870:EE_|DM4PR11MB6067:EE_ X-MS-Office365-Filtering-Correlation-Id: 77a0430b-17c3-421f-c543-08da995b014f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CGFQQUjcH+w7rp7SE+RMFjxHq4GEhUg9+9n3opPEV8xrjj42vqWJEld6O5P93k4LrO5+R/MY1LMkCOMLGFMwbFGMbHmWI0cfBjq0CjgAeXv9d/odxPJGfiUbNqpXfPk2xzZ8tnHTObADXhQcytmCHEfiGG/HNkkl5kZG/VUF+jWZxRCT0eObI01ggeDSaW3VBNce/z4n/+VxCcziHfK1E2jol3DffcOscnN6cnDbqOMmT8+pbors0mRUWSPb5zUGJeizDwbX++IAvULnM47yNxQkD0ju+kvohoYlh/gurd255Qrt0ecI+Z/Njzjz9Af3JiV8xGGjeWZvzb37CoFgSjSk3dgWPOp93FoIySZfTNj1THKPicMADzwpzzQP/iH+j3Cj9Z2rb8iUikA2o3lD8OhZCeFCYenA0l+79KwOtDydYq0Ex34PrWuub3B1/a88ruwReonl9o6aTbvR2lRC6ZN+U8IbE7QDc4NQJGR0/dty8n8yongm/OFOf/kOu37xZAKvKcs9j7cZ87mRNVysW2zJ3HF+R1z6DLZHHmYxrI9RNryFLO7CJ3+2NEhzfGSdestGJ/mnXyxZTx3ZVIJOWpQa257J90NlqxJu8ym7zwAjwj12N223jqMjXpgJlfV1pqVQeOFWaOMVBN3w3p1DeNMUBNW6BwjNcY9Xf6ZpMd94L4p8o5tRMvt4NUQYISuiOsi7Gk8S6cT0GgRb5VYBX6H/0WLATKI+N1S0s8NFIZh0IH9uJFV/ZyPjxVx0Zh+TcDA++GiIgHkSWaGSdXE2pDl3H6vLUX1e4KRIsCx7n9U= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB3870.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(346002)(366004)(376002)(396003)(39860400002)(136003)(451199015)(316002)(2906002)(6916009)(31686004)(54906003)(38100700002)(53546011)(8936002)(83380400001)(6506007)(66556008)(41300700001)(26005)(66946007)(66476007)(6512007)(31696002)(8676002)(2616005)(6486002)(186003)(6666004)(5660300002)(82960400001)(478600001)(86362001)(36756003)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Sml0RHlWUnI5cTZwcVRIanl2WUFNQ3pyWk8yc3hBMmZrYzJQYnA0Sm9xWXVT?= =?utf-8?B?MVNGUzZvR1dGYzNMZlBpenRSdWsyakI5UjZBQkpsM3poT0hRamNuNG9VQzh4?= =?utf-8?B?RFdkbmpIa1BPdVJ0cjJqOXIySlFOMTR4Rk5xaFl0bURaa1JVUFNHbXRPSlhC?= =?utf-8?B?TllYUEVxRFVjVlgrTjBWeEpuSWpSTVhxRTBzUEg2eXZlVXo5NnRmdFg2V0w4?= =?utf-8?B?ZzhUcy9HUjBZRStWMHZCMUNCMnhUdkJhUGVhbEhCakhSQkxJbUlXVnBKc0tn?= =?utf-8?B?WlRlcGF1RzNnaHJseThNa1RXZWgvRm0zRW13NFVpaitZU0FiZThyZVU4RWIr?= =?utf-8?B?YlZhUTNaZ3RteUpjRlhrbG9CVjF6am0ydWFpVzZldE9kcHhMZDJoQkoxajlH?= =?utf-8?B?TXpaZkZGV2VvSWd4TDFucjNGc3R0bkNSaDIzdjlmZ0c3ZTdjUnN5QndzRWxD?= =?utf-8?B?czlDUlR0L0w3T0dsdm8vVWEzYnFvVjMrdEJ5MUhYRjRRZWJ6ZlJ1SGt6S0hQ?= =?utf-8?B?Tm5uMTR1ZkI1WlFDUXl6dktkdmY4NEFRU0dRaTQ5ZHhVSW5jY0p6T21ncHU1?= =?utf-8?B?cHZUQ0FhY3dtekZaMm1SNVFGUGp4aEw4YzlLenNOUDhOOFFyUW9GMEVkeUl2?= =?utf-8?B?RkJlYnh2WUQva3RTeFJCUHFka09zV2t1dHdpNGdkcitEWkNKL3ZWT1V2aUlD?= =?utf-8?B?M2RLcjFpRlFWMVFTaDZEc1ExYzRyS0c2T0FML1FCbnhINWJzLytuY0NvYS9k?= =?utf-8?B?QS82QW1hYjBOSDkzMStuSG1JYk1hZlFkbUJsWWZHUHJtbGdZUGg1RHVCK3lq?= =?utf-8?B?YUJNbGQ1bU5DQmcrRnVjZzBwajFNdkhwOVZGMWkxcGp2eTBUb2t3V1ppVTZS?= =?utf-8?B?Y2JoQmpGOUFhMS9Xd3pWaHRidzBQeWxua01JUG5CNnNtVEp5b1podU84YVhv?= =?utf-8?B?dmpWY0xXcDVaSjhqQ0M3Y0svQlpYQ1g4ckVZYVBwaGF1QjAzZlZBZ2QrL0Ix?= =?utf-8?B?Z1lxY1QzUmlwWFp5N0VBTCtGdGJ2bDZWZDhUMVVmMnJJM055Mi93Zi9yN3FI?= =?utf-8?B?OXkzV0Q5SENQTFdqWU9QMVYwcWJIZDBsRE83ZWwzVi9YNmNuWHY1QXNDcHJW?= =?utf-8?B?b1QwdVpkWW9Td3VQK1lMMmxJSnprMTVZZ2FFMCt0SFUrVmhiOWY1SXVXOGJw?= =?utf-8?B?dW9yV3RvQ2hJZk4zU0h4SlRCWFJGZUVhNlVmY1pndHJIeE05VXVOMUluMUVw?= =?utf-8?B?dVlFcDJkRWMzSld5YXFVYXRGWFlUVWkzdXA1L3J1TFdSWC9ScE94d3hpd0c3?= =?utf-8?B?aCthckovdUthNjlvZ2txdzE5aVI4UWZyelhqcVVtNHo0MUd2T1VFK0VXTWpH?= =?utf-8?B?NVh4TXpuTVR0L2Mwa1ROMEovWU5NeUx4bkZYVHpYekV3NmpTQUMyRnJOeFEx?= =?utf-8?B?WGJ0NGh6cTVTanpkeGpoVUhyVk4zS09yQnpGZDlrTmdoZjhtcUN1MlBLU3Q2?= =?utf-8?B?YmozaXBybS9XY0V2MXF5TktFTDROVUlNNW9oSWY4d0VFNEVBbXFVaEhYQnph?= =?utf-8?B?VTZvR3RFNzlKb08yNlNhR04wenJGRUk5eDI1MHBDcWFwZ2JadE1KdUQ5YzZ6?= =?utf-8?B?VXpaWnp5clRENkF6cW5PUkZKNWlGV2UyQmFQbTZodVhUSU95ZDA4azYxQW52?= =?utf-8?B?Q3MxSDFGOEp1Z2VRaTFNUW43Ny8ySy9KZGdkc2RDK1hCZWdwL1oxTEt6Ynh6?= =?utf-8?B?V1VsNVJldURWT2ZQT0pwOFY0eVZkLzEvSjBjVWFEMzJDTHBueGdqOERaOUw1?= =?utf-8?B?T0NEeXJZanFkMkxQenRTQXJiTnVaSHJEYzh0VGFpeFhnUmNyYWN1Y3ZxeGlV?= =?utf-8?B?ZmxTbEFRSlFiM25zVmh0bGl5U0ZkNi8yWGJIT3dka3EwRVJsYXpLTkQ1TFFz?= =?utf-8?B?T1drMkMrd0tta3ZTZkZ1SEhVWHVZeCsyK3p0cFVRZXRRRmhPeVlQVlNtUnpt?= =?utf-8?B?RGxkakw4RWtDV2ZpUXJFT0NzQ2FhTW12R0IyYmhOYTI0SmxJblMzVXZaWjJt?= =?utf-8?B?a1BQRmQ0bGxibUNOQjg4UCtKTmRTSUdwdEwwNHdCb2dmWGpHbFlVYUY3eXlo?= =?utf-8?B?SGowU3dIK2tpemtaaDI2SFBQVURIRWtUZDQ2KzRUNXZ4V05pdHVtN2FiMENP?= =?utf-8?B?S2c9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 77a0430b-17c3-421f-c543-08da995b014f X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB3870.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2022 09:48:57.3018 (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: Wv/PCdKkaZjNl+8SLE9U33ZQf5MWEIVEK4uTLUFtB6R/hiNNt2FbED5i2IuC8Ik9UwruDOqOYeG4IbIJqmH+eA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB6067 X-OriginatorOrg: intel.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1663494547; a=rsa-sha256; cv=fail; b=3QDymsbI3s0EQAUsIlqNhANvrbTWBhX7n60pi99om9JhFUa6L0wPV5f5yhUPc8Vkx3YOV9 k5w056Q2C58GOCD9x875RrLm/rlqLRnLsgVhq0E/rMEfn6UzmnYXbPIWsd/gDzRu+Zj+ho QzN8SHJr1neAprTbgD+aBq+UtRop/2Y= ARC-Authentication-Results: i=2; imf02.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=fj4hmCYM; spf=pass (imf02.hostedemail.com: domain of shaoqin.huang@intel.com designates 192.55.52.93 as permitted sender) smtp.mailfrom=shaoqin.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663494547; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4SzIAJZR7eXJ9ZMrnq1ZY4f0IkKp7efLB7NxidGxCsY=; b=aaii29Alc3sLyNqEac5Q+NrLyKmNj+vZKCgsMuz1y8xa5KOYmCz+OyuE5JAZTvetbXQD3D 84t0A0BUG3o05O/JEEap4uZe3+UMtI2F1zXHrRAqHJEURO6mOF/HHMkDHG28+9Z3Vyr+0f BYR+OhiNgyrS3tYa4jBncFrAGPsNlfU= Authentication-Results: imf02.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=fj4hmCYM; spf=pass (imf02.hostedemail.com: domain of shaoqin.huang@intel.com designates 192.55.52.93 as permitted sender) smtp.mailfrom=shaoqin.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") X-Stat-Signature: i9cuuqz3s9up3oru5p539orbxhodu35i X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: B170680008 X-HE-Tag: 1663494546-292281 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 9/18/2022 5:25 PM, Mike Rapoport wrote: > On Tue, Sep 13, 2022 at 02:41:30PM +0800, shaoqin.huang@intel.com wrote: >> From: Shaoqin Huang >> >> Add 129th region into the memblock, and this will trigger the >> memblock_double_array() function, this needs valid memory regions. So >> using dummy_physical_memory_init() to allocate a large enough memory >> region, and split it into a large enough memory which can be choosed by >> memblock_double_array(), and the left memory will be split into small >> memory region, and add them into the memblock. It make sure the >> memblock_double_array() will always choose the valid memory region that >> is allocated by the dummy_physical_memory_init(). >> So memblock_double_array() must success. >> >> Another thing should be done is to restore the memory.regions after >> memblock_double_array(), due to now the memory.regions is pointing to a >> memory region allocated by dummy_physical_memory_init(). And it will >> affect the subsequent tests if we don't restore the memory region. So >> simply record the origin region, and restore it after the test. >> >> Signed-off-by: Shaoqin Huang >> --- >> tools/testing/memblock/tests/basic_api.c | 96 ++++++++++++++++++++++++ >> tools/testing/memblock/tests/common.c | 7 +- >> tools/testing/memblock/tests/common.h | 3 + >> 3 files changed, 104 insertions(+), 2 deletions(-) >> >> diff --git a/tools/testing/memblock/tests/basic_api.c b/tools/testing/memblock/tests/basic_api.c >> index a13a57ba0815..7120fd8e47b1 100644 >> --- a/tools/testing/memblock/tests/basic_api.c >> +++ b/tools/testing/memblock/tests/basic_api.c >> @@ -423,6 +423,101 @@ static int memblock_add_near_max_check(void) >> return 0; >> } >> >> +/* >> + * A test that trying to add the 129th memory block. >> + * Expect to trigger memblock_double_array() to double the >> + * memblock.memory.max, find a new valid memory as >> + * memory.regions. >> + */ >> +static int memblock_add_many_check(void) >> +{ >> + int i; >> + void *orig_region; >> + struct region r = { >> + .base = SZ_16K, >> + .size = MEM_SIZE, >> + }; >> + phys_addr_t new_memory_regions_size; >> + phys_addr_t base, size, block_size; >> + >> + PREFIX_PUSH(); >> + >> + reset_memblock_regions(); >> + memblock_allow_resize(); >> + >> + dummy_physical_memory_init(); >> + /* >> + * We allocated enough memory by using dummy_physical_memory_init(), and >> + * split it into small block. First we split a large enough memory block >> + * as the memory region which will be choosed by memblock_double_array(). >> + */ >> + base = PAGE_ALIGN(dummy_physical_memory_base()); >> + new_memory_regions_size = PAGE_ALIGN(INIT_MEMBLOCK_REGIONS * 2 * >> + sizeof(struct memblock_region)); >> + memblock_add(base, new_memory_regions_size); > > Why don't you simply increase MEM_SIZE, to say 1M? > This will make all the calculations here way simpler. > Ok. I will increase MEM_SIZE. That can clean the calculation. >> + >> + /* >> + * For the left memory, we split them into small block and add them into >> + * memblock later. >> + */ >> + base += new_memory_regions_size; >> + size = MEM_SIZE - new_memory_regions_size; >> + block_size = size / (INIT_MEMBLOCK_REGIONS * 2); >> + >> + orig_region = memblock.memory.regions; >> + >> + for (i = 0; i < INIT_MEMBLOCK_REGIONS; i++) { >> + /* >> + * Add these small block to fulfill the memblock. We keep an >> + * interval between the nearby memory to avoid being merged. >> + */ >> + memblock_add(base + block_size * (2 * i + 1), block_size); >> + >> + ASSERT_EQ(memblock.memory.cnt, i + 2); >> + ASSERT_EQ(memblock.memory.total_size, new_memory_regions_size + >> + (i + 1) * block_size); >> + } >> + >> + /* >> + * At there, memblock_double_array() has been succeed, check if it >> + * update the memory.max. >> + */ >> + ASSERT_EQ(memblock.memory.max, INIT_MEMBLOCK_REGIONS * 2); >> + >> + /* memblock_double_array() will reserve the memory it used. Check it. */ >> + ASSERT_EQ(memblock.reserved.cnt, 1); >> + ASSERT_EQ(memblock.reserved.total_size, new_memory_regions_size); >> + >> + /* >> + * Now memblock_double_array() works fine. Let's check after the >> + * double_array(), the memblock_add() still works as normal. >> + */ >> + memblock_add(r.base, r.size); >> + ASSERT_EQ(memblock.memory.regions[0].base, r.base); >> + ASSERT_EQ(memblock.memory.regions[0].size, r.size); >> + >> + ASSERT_EQ(memblock.memory.cnt, INIT_MEMBLOCK_REGIONS + 2); >> + ASSERT_EQ(memblock.memory.total_size, INIT_MEMBLOCK_REGIONS * block_size + >> + new_memory_regions_size + >> + MEM_SIZE); >> + ASSERT_EQ(memblock.memory.max, INIT_MEMBLOCK_REGIONS * 2); >> + >> + dummy_physical_memory_cleanup(); >> + >> + /* >> + * The current memory.regions is occupying a range of memory that >> + * allocated from dummy_physical_memory_init(). After free the memory, >> + * we must not use it. So restore the origin memory region to make sure >> + * the tests can run as normal and not affected by the double array. >> + */ >> + memblock.memory.regions = orig_region; >> + memblock.memory.cnt = INIT_MEMBLOCK_REGIONS; >> + >> + test_pass_pop(); >> + >> + return 0; >> +} >> + >> static int memblock_add_checks(void) >> { >> prefix_reset(); >> @@ -438,6 +533,7 @@ static int memblock_add_checks(void) >> memblock_add_twice_check(); >> memblock_add_between_check(); >> memblock_add_near_max_check(); >> + memblock_add_many_check(); >> >> prefix_pop(); >> >> diff --git a/tools/testing/memblock/tests/common.c b/tools/testing/memblock/tests/common.c >> index eec6901081af..2de6a2b6efd2 100644 >> --- a/tools/testing/memblock/tests/common.c >> +++ b/tools/testing/memblock/tests/common.c >> @@ -5,8 +5,6 @@ >> #include >> #include >> >> -#define INIT_MEMBLOCK_REGIONS 128 >> -#define INIT_MEMBLOCK_RESERVED_REGIONS INIT_MEMBLOCK_REGIONS >> #define PREFIXES_MAX 15 >> #define DELIM ": " >> >> @@ -84,6 +82,11 @@ void dummy_physical_memory_cleanup(void) >> free(memory_block.base); >> } >> >> +phys_addr_t dummy_physical_memory_base(void) >> +{ >> + return (phys_addr_t)memory_block.base; >> +} >> + >> static void usage(const char *prog) >> { >> BUILD_BUG_ON(ARRAY_SIZE(help_opts) != ARRAY_SIZE(long_opts) - 1); >> diff --git a/tools/testing/memblock/tests/common.h b/tools/testing/memblock/tests/common.h >> index 78128e109a95..ba14dc989ae9 100644 >> --- a/tools/testing/memblock/tests/common.h >> +++ b/tools/testing/memblock/tests/common.h >> @@ -11,6 +11,8 @@ >> #include <../selftests/kselftest.h> >> >> #define MEM_SIZE SZ_16K >> +#define INIT_MEMBLOCK_REGIONS 128 >> +#define INIT_MEMBLOCK_RESERVED_REGIONS INIT_MEMBLOCK_REGIONS >> >> enum test_flags { >> /* No special request. */ >> @@ -104,6 +106,7 @@ void reset_memblock_attributes(void); >> void setup_memblock(void); >> void dummy_physical_memory_init(void); >> void dummy_physical_memory_cleanup(void); >> +phys_addr_t dummy_physical_memory_base(void); >> void parse_args(int argc, char **argv); >> >> void test_fail(void); >> -- >> 2.34.1 >> >> >