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 D996DC04FF6 for ; Sun, 14 Apr 2024 00:46:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C7FB16B0082; Sat, 13 Apr 2024 20:46:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BB9456B0083; Sat, 13 Apr 2024 20:46:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 998AD6B0085; Sat, 13 Apr 2024 20:46:04 -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 7BF8E6B0082 for ; Sat, 13 Apr 2024 20:46:04 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 401DF1C146F for ; Sun, 14 Apr 2024 00:46:04 +0000 (UTC) X-FDA: 82006295448.04.B28B5DF Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by imf27.hostedemail.com (Postfix) with ESMTP id 867F740005 for ; Sun, 14 Apr 2024 00:46:02 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YvqREDLo; spf=pass (imf27.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.47 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713055562; a=rsa-sha256; cv=none; b=e+9kHIHPY/mVtmzk0hZZV5Dm/GZuqkbvKmECb5mBi21eRZsq6ZqjtiBkNvzohDJFVOdsCb NvJbQQSroCgtn5hip/pJVWW+p/RcxFcSsbMcSXjlwQEdfyd4APfYx7255r9tLSouZ/VbiT 9naMu/Igp6vmMTF0mSPtl28XhGF3tNU= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YvqREDLo; spf=pass (imf27.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.47 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713055562; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:in-reply-to: references:references:dkim-signature; bh=qbLK5tRBmVc7HZgLA7VYsCQJdYnn3sm/iYsb9sV1GKc=; b=0Nhj4prYf+n35X4w7d6Xe1wRXjARH9wOdPXaNtlOtHruq+IaV5Ro9/9UxmA75GKnPOD5Mf s+sX00a+ei5Ln4/ozLfyJX4q40LhNTjz/MU4nhIbmMtY7FrCehbXzeHc/ibwQVgaXJ0+0v 9jGIMtzmuSsBJX9gc2UdbfiuMJLKQ/M= Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-56bdf81706aso2427402a12.2 for ; Sat, 13 Apr 2024 17:46:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713055561; x=1713660361; darn=kvack.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=qbLK5tRBmVc7HZgLA7VYsCQJdYnn3sm/iYsb9sV1GKc=; b=YvqREDLo7MgMeuQM+/k+0X6PhrJSv6X/npkWQ9bDfMZjEfPf1WTAY79hegu3o0Hynx ACPume9aTDbxjZHwu6NmupIZCeLi0fQbCh08G3UkMQDjM4Om1ZSkSyDimsxiHDadUfUQ 0yaJ+tAvypbqQtrrOpCnJlxHWjQTyQDDYwAUQlU2cJiQyEn/K6Ru7Hl7udKUBseYMGME OErEN3WEj2+gwvyktNG6kLbVS3FyQWPQHYCgV2e43D+JXc7ACfqmwWFSYcnqAHKkvtYr sCn/0iin3MGgqdnSPQxNdIiqc8bz3Lsa2RfHy5iLH/FoclFWdecWSLpzwRhgFPkLx7hh RCDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713055561; x=1713660361; h=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=qbLK5tRBmVc7HZgLA7VYsCQJdYnn3sm/iYsb9sV1GKc=; b=YOpMn8zrYz3bVUo4Suz5bF8JyULahjeJ6VyrMuqoUOpTiSohuH1NXsQGsKX7qCGJhE dDIBuUuiMiyQqb74Fu08e4RJVh++iL3DxC0947gDd4BYOKqSHuyCVHdghLALLvvm6FCg qcOqe5am5QL+pAZn0Ls6S6IQvYzPQuT1GE609T8u0o3IRoITshjYFYlUIMirkCVl2j0O ljmDUOYwu1MvFvhRZQwWlgVvYvGOJ3kmTamw0hODoLG9rPJI/kNs3lxANN4kramAWIWy 7m4K5pkH1UZQVIiDSkAXDWYVmKxq652d8CjxihSb//cSnnwgIabeWCP8JiBeplMzdNVI rT3A== X-Gm-Message-State: AOJu0YzOxoz+OU1qGInl6hi0qmd34dw1Has4J1nKfzf1q/RFy3Lp9bTW 56FFNjB9fEX7R5NmTZieWAwkIhMaqYIMMN9Ah4SxAaYzMDKaNjKt X-Google-Smtp-Source: AGHT+IEM85jnH1CrTVcYg68pELXlwPMcLdXbTXTVCpBEjjKv+5piCl0LGL4xz9kyg67sUscnmkvWxg== X-Received: by 2002:a50:d604:0:b0:56e:2cfc:1d3d with SMTP id x4-20020a50d604000000b0056e2cfc1d3dmr3759817edi.16.1713055560718; Sat, 13 Apr 2024 17:46:00 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id h6-20020a0564020e0600b0056fed5286b5sm2761067edh.55.2024.04.13.17.45.59 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 13 Apr 2024 17:45:59 -0700 (PDT) From: Wei Yang To: rppt@kernel.org, akpm@linux-foundation.org Cc: linux-mm@kvack.org, Wei Yang Subject: [PATCH 2/6] memblock tests: add the 129th memory block at all possible position Date: Sun, 14 Apr 2024 00:45:27 +0000 Message-Id: <20240414004531.6601-2-richard.weiyang@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20240414004531.6601-1-richard.weiyang@gmail.com> References: <20240414004531.6601-1-richard.weiyang@gmail.com> X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 867F740005 X-Stat-Signature: r8ua7uifgdjusu4wge1gxijy4jtuzjz1 X-Rspam-User: X-HE-Tag: 1713055562-371134 X-HE-Meta: U2FsdGVkX1/BTkMps/Dsit5NyZK9AlX56zToxpnOpXX2EjRF8OhEQDeLY2Wpva9vO6KvjkmwIhU+WRlm1jPPMPnyYmdoWglPk6WchcNEH4oJidK80u8n+hWhbgG1jp3LvROvKLi1NQmkSzEwU7VpiymRWDRV2Yt4AlpY7qliTitVrWlt9NxDpAfJYKXWxniM3BD7P2JM+BD1yAQ7uYG9H0k6rlO6S5iSRhHQcon7qISyJZ039U9nt9iDL+WVK51gVT1DeJdZqyKimKrw4qOB+IGbIj7Q/Wz9/i8Tq/WZfcQ6XxEUFXMOckfXY9KxTfeP225fa4Hxf/cgCi5N1+jApUwLBZz5CtACJ5pHUZVypgpbz8VCTb7WBA8SnX9aG4ZHKs45EWBH3ruVQ6T9f+WpDa4ynxrs90NNI5cH4gkV/w26JJeHGFFf9qgQOHyAxv1piRqTG3Cdp0U2SM75zcnEXpUvawpnW/KanX4fGbTxjcVWEFTGhAE6dDqDthzugbbF9Hm1hIzCiP1cWVBNNOJEqWCX5JdAuESGajtNQZ+28A53kNsqyGmynr+Yh8+wvb2CylfPPm5uHiRUT3PXY97Vo/IsQJLScYtYXntCeW/aCaBmEPD3sT0hIlOcJZiB+UbPxkOgLGd02Kd6vqNtCLnjrUvRm0aEiSc1mlmVAEz3gg9y63FbFLPn6SBenkezE1bOpC0hUtnJs/cirI6bYFPKvaV1zFHweRVdX/4OHbajna3GdR/I622eEZXTVUzyFyL9sKe5eKnnJOt498hEuj5zEF8yhoPZlOY5Ijh06ApsudyFIrzpG9AdP/TnPHzv6Oc3FYUnaiY36xGe4lyHvZJYyhWmRKN92UuWjev/IngnyI2Kfsdmgc2JHowKlGSPzBYWutBOZ0zq7dBHsYtgFPlp8onns2HfrqVXT3MT7bAYm7xQMf5JdBiRmJpZ8HlWZJDooe41+ocNKINVIAe58aC 55HrG9Wl eYjqThWCSoC+d6co3i4UEG7O2BnDXcrGY1k/OdJB3njuxZ4HzDcDiTL4K+xz/6of3BuaC6jEA5GNf3tWr1qZXvKLCsBe1/exmvU5hbNVBOfITNFOTL4/p10dTTlGbDD2RyQ++sgjzUqjv/K3N5lBJXsBojohaxQiz3UdWJygcvyEdHapPQKM9uW74RN7hdkWTNH75jW8VtHlgELl51NSKVCVGPRI5TjqKHyG9gEci65IRopUx2+8VkNw3uBgDnmgIxpq8ibZ0cXHk6IMmVjIcglXZ1XIisseCGG+i0puRq4jgf89SjXA8pguza/CdRKnY3iqAfdrhUgEejHoKguYZTg9L6ftgPqUuJMB7oJRi5M2dUj/vC4+WGN2Uz5Xnz78OOCx96LYq9iK9T5qwMBaxn9J0HG7mQzt08zWq+shuuxHRQlVnwyc4182G5yvRwKRpkbfqCn2Qj2i+sfpWk7iazuz8Y2gIEHPjgqN/8k7RU/vbpU5zOpIVdaJkNdYf0REy1idh X-Bogosity: Ham, tests=bogofilter, spamicity=0.000047, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: After previous change, we may double the array based on the position of the new range. Let's make sure the 129th memory block would double the size correctly at all possible position. Signed-off-by: Wei Yang --- tools/testing/memblock/tests/basic_api.c | 132 +++++++++++++---------- 1 file changed, 73 insertions(+), 59 deletions(-) diff --git a/tools/testing/memblock/tests/basic_api.c b/tools/testing/memblock/tests/basic_api.c index f317fe691fc4..f1569ebb9872 100644 --- a/tools/testing/memblock/tests/basic_api.c +++ b/tools/testing/memblock/tests/basic_api.c @@ -431,84 +431,98 @@ static int memblock_add_near_max_check(void) */ static int memblock_add_many_check(void) { - int i; + int i, skip; void *orig_region; struct region r = { .base = SZ_16K, .size = SZ_16K, }; phys_addr_t new_memory_regions_size; - phys_addr_t base, size = SZ_64; + phys_addr_t base, base_start, size = SZ_64; phys_addr_t gap_size = SZ_64; 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); - - /* This is the base of small memory block. */ - base += new_memory_regions_size + gap_size; - - orig_region = memblock.memory.regions; + /* Add the 129th memory block for all possible positions*/ + for (skip = 0; skip < INIT_MEMBLOCK_REGIONS; skip++) { + reset_memblock_regions(); + memblock_allow_resize(); - for (i = 0; i < INIT_MEMBLOCK_REGIONS; i++) { + dummy_physical_memory_init(); /* - * Add these small block to fulfill the memblock. We keep a - * gap between the nearby memory to avoid being merged. + * 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(). */ - memblock_add(base, size); - base += size + gap_size; - - ASSERT_EQ(memblock.memory.cnt, i + 2); + 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); + + /* This is the base of small memory block. */ + base_start = base += new_memory_regions_size + gap_size; + orig_region = memblock.memory.regions; + + for (i = 0; i < INIT_MEMBLOCK_REGIONS; i++, base += size + gap_size) { + if (i == skip) + continue; + /* + * Add these small block to fulfill the memblock. We keep a + * gap between the nearby memory to avoid being merged. + */ + memblock_add(base, size); + + if (i < skip) { + ASSERT_EQ(memblock.memory.cnt, i + 2); + ASSERT_EQ(memblock.memory.total_size, + new_memory_regions_size + (i + 1) * size); + } else { + ASSERT_EQ(memblock.memory.cnt, i + 1); + ASSERT_EQ(memblock.memory.total_size, + new_memory_regions_size + i * size); + } + } + + /* Add the skipped one to trigger memblock_double_array() */ + memblock_add(base_start + skip * (size + gap_size), size); + ASSERT_EQ(memblock.memory.cnt, i + 1); ASSERT_EQ(memblock.memory.total_size, new_memory_regions_size + - (i + 1) * size); - } + i * 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); - /* - * 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); - /* 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); + /* + * 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 * size + - new_memory_regions_size + - r.size); - ASSERT_EQ(memblock.memory.max, INIT_MEMBLOCK_REGIONS * 2); + ASSERT_EQ(memblock.memory.cnt, INIT_MEMBLOCK_REGIONS + 2); + ASSERT_EQ(memblock.memory.total_size, INIT_MEMBLOCK_REGIONS * size + + new_memory_regions_size + + r.size); + ASSERT_EQ(memblock.memory.max, INIT_MEMBLOCK_REGIONS * 2); - dummy_physical_memory_cleanup(); + 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; + /* + * 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(); -- 2.34.1