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 A1101C25B08 for ; Sat, 20 Aug 2022 08:42:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2EE7A8D0002; Sat, 20 Aug 2022 04:42:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 29E518D0001; Sat, 20 Aug 2022 04:42:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1667B8D0002; Sat, 20 Aug 2022 04:42:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 060048D0001 for ; Sat, 20 Aug 2022 04:42:42 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id CAD1A1202A2 for ; Sat, 20 Aug 2022 08:42:41 +0000 (UTC) X-FDA: 79819330122.29.13561DF Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) by imf01.hostedemail.com (Postfix) with ESMTP id 818DE4001C for ; Sat, 20 Aug 2022 08:42:41 +0000 (UTC) Received: by mail-qk1-f194.google.com with SMTP id m5so4791902qkk.1 for ; Sat, 20 Aug 2022 01:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc; bh=R+0WNPBIl0HuqlojWfX7vpKljMWq3/iAmKYaFMjduJA=; b=VgitokBh0UfodBVDwP5QzUgmzCc1285YPeTX48nhtaSQwXcQAElSCKFgAvO71CMP5k NKKFWRsm/EoeuP3fMv/hD+wvaPLKq6Jdr3fhUdtx8tIfqk/n81mymcC4xhWVVououEJt +9YC6Nvj1i5nmU0NmnXycBeh1Apz6pDorh8cCYMwRj8xq2l5CZp68X/yxTFKAAJhrlC4 Y6cEaGRBmRcdD5udJmvDJK0Vkoh4AHmxwK4OVzL4rbBgDLkNomppT5+bbxgIClatql3s qYEP+dsxIwLty2/vjylzy1Ay8wQqEQL+l7BsSvYl5Ms70ep57z3cuGhFjeO0A+lCNHLI kz+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc; bh=R+0WNPBIl0HuqlojWfX7vpKljMWq3/iAmKYaFMjduJA=; b=xCjd0Bi/a3wV/MYzpMXnQHRDYFGzb5ixHLXv9yHq5yk1cNynXZsyOxX8rl3gmBpKAy XCrERhkVxPr3qMkE+NS3aH3AJKIOSCiRDeOML6fi7nf+tnHjtvSvpoRrK4rDA5uZwn69 5QK87dEoRAEyUAA055AacJDxVnzlWvDk3Q/Pn9eZoj54T1Avdhtx/abpFCGg1EwZFlBg PM3nY5KeVA2Iebon7YAwLR49zyGdRA+b0Oijt7nvS3Bg/x6x6hZv2gKQzy/l8PHls8+P YmMKtM43ZHUAYjTWBAkYZslFJmkb+gYfQFCpAgfhH6DnwybPy5266x1LDB9n/RuPMOGe rzLg== X-Gm-Message-State: ACgBeo1kfIBu+0fFZjd/vwS+YTOcCjxvl/5JslSMeMOlDrZAHsaxLaU7 yzdGCYSnfQ4ry76YLQX/9hU= X-Google-Smtp-Source: AA6agR46OmbecUXN3wq6g//sjNTs+4oHgLPlMjuuGjTeJa3MDc62NnU4atwOGOGsciQe9e1MjXhzrA== X-Received: by 2002:a05:620a:134f:b0:6bb:ffc4:d5b3 with SMTP id c15-20020a05620a134f00b006bbffc4d5b3mr66310qkl.327.1660984960728; Sat, 20 Aug 2022 01:42:40 -0700 (PDT) Received: from sophie ([45.134.140.159]) by smtp.gmail.com with ESMTPSA id n1-20020ac86741000000b0031eebfcb369sm4410999qtp.97.2022.08.20.01.42.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Aug 2022 01:42:39 -0700 (PDT) Date: Sat, 20 Aug 2022 01:40:26 -0700 From: Rebecca Mckeever To: "Huang, Shaoqin" Cc: Mike Rapoport , linux-mm@kvack.org, linux-kernel@vger.kernel.org, David Hildenbrand Subject: Re: [PATCH 8/8] memblock tests: add tests for memblock_trim_memory Message-ID: <20220820084026.GA13533@sophie> References: <9f6a0b68-6777-dd88-929c-2d4303b28984@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9f6a0b68-6777-dd88-929c-2d4303b28984@intel.com> ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660984961; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=R+0WNPBIl0HuqlojWfX7vpKljMWq3/iAmKYaFMjduJA=; b=Ref6ymdOY4rEDFW+dElsQxRqbz46lShJBUJ4RUhjuanJC15XQ83++N+7d5x41y7tqYRSLR 1D27l+qsllYFyio0lM0qchS+WjuCPI3qe55wTD7RfV0n/QMArLFBM2yyZEOL7jgoMf6lpJ WaMklrHuCe9k0mkEzCPCYiZ3JktBlSc= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=VgitokBh; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf01.hostedemail.com: domain of remckee0@gmail.com designates 209.85.222.194 as permitted sender) smtp.mailfrom=remckee0@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1660984961; a=rsa-sha256; cv=none; b=a2sBkS4qrXPlkl7uBwMORWDDHDYdpenwZC49D7O5m3FPQn5dGI0eck2DKYUWxARPzMZ8bg 0lzgkAI3V+yARL3a5wePn3lx40XzaIHI1NS2rWoBC7mahN9N4FVtEUKXFKFqfvlBBAm9Ij p08meINZBTbOFRqx9j28Bj8s/oqtERo= Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=VgitokBh; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf01.hostedemail.com: domain of remckee0@gmail.com designates 209.85.222.194 as permitted sender) smtp.mailfrom=remckee0@gmail.com X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 818DE4001C X-Stat-Signature: zqkbzeojj916zspnn9x9xsi8fzzj4h7t X-Rspam-User: X-HE-Tag: 1660984961-886480 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000007, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Aug 16, 2022 at 09:46:11AM +0800, Huang, Shaoqin wrote: > > > On 8/14/2022 1:54 PM, Rebecca Mckeever wrote: > > Add tests for memblock_trim_memory() for the following scenarios: > > - all regions aligned > > - one region unalign that is smaller than the alignment > > - one region unaligned at the base > > - one region unaligned at the end > > > > Signed-off-by: Rebecca Mckeever > > --- > > tools/testing/memblock/tests/basic_api.c | 223 +++++++++++++++++++++++ > > 1 file changed, 223 insertions(+) > > > > diff --git a/tools/testing/memblock/tests/basic_api.c b/tools/testing/memblock/tests/basic_api.c > > index d7f008e7a12a..c8bb44f20846 100644 > > --- a/tools/testing/memblock/tests/basic_api.c > > +++ b/tools/testing/memblock/tests/basic_api.c > > @@ -8,6 +8,7 @@ > > #define FUNC_RESERVE "memblock_reserve" > > #define FUNC_REMOVE "memblock_remove" > > #define FUNC_FREE "memblock_free" > > +#define FUNC_TRIM "memblock_trim_memory" > > static int memblock_initialization_check(void) > > { > > @@ -1723,6 +1724,227 @@ static int memblock_bottom_up_checks(void) > > return 0; > > } > > +/* > > + * A test that tries to trim memory when both ends of the memory region are > > + * aligned. Expect that the memory will not be trimmed. Expect the counter to > > + * not be updated. > > + */ > > +static int memblock_trim_memory_aligned_check(void) > > +{ > > + struct memblock_region *rgn; > > + phys_addr_t alignment = SMP_CACHE_BYTES; > > + > > + rgn = &memblock.memory.regions[0]; > > + > > + struct region r = { > > + .base = alignment, > > + .size = alignment * 4 > > + }; > > + > > + PREFIX_PUSH(); > > + > > + reset_memblock_regions(); > > + memblock_add(r.base, r.size); > > + memblock_trim_memory(alignment); > > + > > + ASSERT_EQ(rgn->base, r.base); > > + ASSERT_EQ(rgn->size, r.size); > > + > > + ASSERT_EQ(memblock.memory.cnt, 1); > > + > > + test_pass_pop(); > > + > > + return 0; > > +} > > + > > +/* > > + * A test that tries to trim memory when there are two available regions, r1 and > > + * r2. Region r1 is aligned on both ends and region r2 is unaligned on one end > > + * and smaller than the alignment: > > + * > > + * alignment > > + * |--------| > > + * | +-----------------+ +------+ | > > + * | | r1 | | r2 | | > > + * +--------+-----------------+--------+------+---+ > > + * ^ ^ ^ ^ ^ > > + * |________|________|________| | > > + * | Unaligned address > > + * Aligned addresses > > + * > > + * Expect that r1 will not be trimmed and r2 will be removed. Expect the > > + * counter to be updated. > > + */ > > +static int memblock_trim_memory_too_small_check(void) > > +{ > > + struct memblock_region *rgn; > > + phys_addr_t alignment = SMP_CACHE_BYTES; > > + > > + rgn = &memblock.memory.regions[0]; > > + > > + struct region r1 = { > > + .base = alignment, > > + .size = alignment * 2 > > + }; > > + struct region r2 = { > > + .base = alignment * 4, > > + .size = alignment - SZ_2 > > + }; > > + > > + PREFIX_PUSH(); > > + > > + reset_memblock_regions(); > > + memblock_add(r1.base, r1.size); > > + memblock_add(r2.base, r2.size); > > + memblock_trim_memory(alignment); > > + > > + ASSERT_EQ(rgn->base, r1.base); > > + ASSERT_EQ(rgn->size, r1.size); > > + > > + ASSERT_EQ(memblock.memory.cnt, 1); > > + > > + test_pass_pop(); > > + > > + return 0; > > +} > > + > > +/* > > + * A test that tries to trim memory when there are two available regions, r1 and > > + * r2. Region r1 is aligned on both ends and region r2 is unaligned at the base > > + * and aligned at the end: > > + * > > + * Unaligned address > > + * | > > + * v > > + * | +-----------------+ +---------------+ | > > + * | | r1 | | r2 | | > > + * +--------+-----------------+----------+---------------+---+ > > + * ^ ^ ^ ^ ^ ^ > > + * |________|________|________|________|________| > > + * | > > + * Aligned addresses > > + * > > + * Expect that r1 will not be trimmed and r2 will be trimmed at the base. > > + * Expect the counter to not be updated. > > + */ > > +static int memblock_trim_memory_unaligned_base_check(void) > > +{ > > + struct memblock_region *rgn1, *rgn2; > > + phys_addr_t alignment = SMP_CACHE_BYTES; > > + phys_addr_t offset = SZ_2; > > + phys_addr_t r2_base, r2_size; > > + > > + rgn1 = &memblock.memory.regions[0]; > > + rgn2 = &memblock.memory.regions[1]; > > + > > + struct region r1 = { > > + .base = alignment, > > + .size = alignment * 2 > > + }; > > + struct region r2 = { > > + .base = alignment * 4 + offset, > > + .size = alignment * 2 - offset > > + }; > > + > > + PREFIX_PUSH(); > > + > > + r2_base = r2.base + (alignment - offset); > > + r2_size = r2.size - (alignment - offset); > > Also the variable name. > > > + > > + reset_memblock_regions(); > > + memblock_add(r1.base, r1.size); > > + memblock_add(r2.base, r2.size); > > + memblock_trim_memory(alignment); > > + > > + ASSERT_EQ(rgn1->base, r1.base); > > + ASSERT_EQ(rgn1->size, r1.size); > > + > > + ASSERT_EQ(rgn2->base, r2_base); > > + ASSERT_EQ(rgn2->size, r2_size); > > + > > + ASSERT_EQ(memblock.memory.cnt, 2); > > + > > + test_pass_pop(); > > + > > + return 0; > > +} > > + > > +/* > > + * A test that tries to trim memory when there are two available regions, r1 and > > + * r2. Region r1 is aligned on both ends and region r2 is aligned at the base > > + * and unaligned at the end: > > + * > > + * Unaligned address > > + * | > > + * v > > + * | +-----------------+ +---------------+ | > > + * | | r1 | | r2 | | > > + * +--------+-----------------+--------+---------------+---+ > > + * ^ ^ ^ ^ ^ ^ > > + * |________|________|________|________|________| > > + * | > > + * Aligned addresses > > + * > > + * Expect that r1 will not be trimmed and r2 will be trimmed at the base. > ^ > at the end. I forgot to make this change in v2. I will include it in v3. > > + * Expect the counter to not be updated. > > + */ > > +static int memblock_trim_memory_unaligned_end_check(void) > > +{ > > + struct memblock_region *rgn1, *rgn2; > > + phys_addr_t alignment = SMP_CACHE_BYTES; > > + phys_addr_t offset = SZ_2; > > + phys_addr_t r2_size; > > + > > + rgn1 = &memblock.memory.regions[0]; > > + rgn2 = &memblock.memory.regions[1]; > > + > > + struct region r1 = { > > + .base = alignment, > > + .size = alignment * 2 > > + }; > > + struct region r2 = { > > + .base = alignment * 4, > > + .size = alignment * 2 - offset > > + }; > > + > > + PREFIX_PUSH(); > > + > > + r2_size = r2.size - (alignment - offset); > > + > > + reset_memblock_regions(); > > + memblock_add(r1.base, r1.size); > > + memblock_add(r2.base, r2.size); > > + memblock_trim_memory(alignment); > > + > > + ASSERT_EQ(rgn1->base, r1.base); > > + ASSERT_EQ(rgn1->size, r1.size); > > + > > + ASSERT_EQ(rgn2->base, r2.base); > > + ASSERT_EQ(rgn2->size, r2_size); > > + > > + ASSERT_EQ(memblock.memory.cnt, 2); > > + > > + test_pass_pop(); > > + > > + return 0; > > +} > > + > > +static int memblock_trim_memory_checks(void) > > +{ > > + prefix_reset(); > > + prefix_push(FUNC_TRIM); > > + test_print("Running %s tests...\n", FUNC_TRIM); > > + > > + memblock_trim_memory_aligned_check(); > > + memblock_trim_memory_too_small_check(); > > + memblock_trim_memory_unaligned_base_check(); > > + memblock_trim_memory_unaligned_end_check(); > > + > > + prefix_pop(); > > + > > + return 0; > > +} > > + > > int memblock_basic_checks(void) > > { > > memblock_initialization_check(); > > @@ -1731,6 +1953,7 @@ int memblock_basic_checks(void) > > memblock_remove_checks(); > > memblock_free_checks(); > > memblock_bottom_up_checks(); > > + memblock_trim_memory_checks(); > > return 0; > > } > > Others looks good. Thanks, Rebecca