From patchwork Thu Jan 27 13:21:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karolina Drobnik X-Patchwork-Id: 12726790 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 EAA8BC433EF for ; Thu, 27 Jan 2022 13:22:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D4EE6B0071; Thu, 27 Jan 2022 08:22:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5853B6B0072; Thu, 27 Jan 2022 08:22:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 44C326B0073; Thu, 27 Jan 2022 08:22:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0107.hostedemail.com [216.40.44.107]) by kanga.kvack.org (Postfix) with ESMTP id 319246B0071 for ; Thu, 27 Jan 2022 08:22:31 -0500 (EST) Received: from smtpin11.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id D566C181CBC11 for ; Thu, 27 Jan 2022 13:22:30 +0000 (UTC) X-FDA: 79076131260.11.40A63DB Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by imf26.hostedemail.com (Postfix) with ESMTP id 5BE82140043 for ; Thu, 27 Jan 2022 13:22:30 +0000 (UTC) Received: by mail-lj1-f181.google.com with SMTP id t9so4242412lji.12 for ; Thu, 27 Jan 2022 05:22:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=GReMFVgnTx8iRjrV9/gGBo2zT4o+kzJuy3aFtGpxQMQ=; b=ffu75mKPz+95TY3Nl2QFAc+F9g0eXOdgXaeluj2eQm8/ESpFrAw5FIajNuZb0Embz6 DwrDVBZBdokEPL2hUWA0QGpAnX3pyTf9VUOePadXJzSGBfIBb2dgnCszEaHhyg9mhyrq YvdKdq6XQzX/2KYa79V6yw6bx6Ta5dFBJNwcOJS20QE60m07R5cFED/rEuxrNJgbYWDV yUTXztRtAUiVbN9M8lOZaKKp+we3Jy9ahN4Rkg+xxQBCeNERiWA2y8YVDM8wrCByZttY kTyh30Cf4/F8fG1g1LuGnlc4A2IP05Eu804qFTvMzCDYvgn8/mGDkpaO+vhlI/PkrsBR OBcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=GReMFVgnTx8iRjrV9/gGBo2zT4o+kzJuy3aFtGpxQMQ=; b=6IvA7QhDd4s+Eai3p9MuMTjayagk1xjxDCzuHqTu/cebnWBbyOe3n7Ba/SyUAQPEGj /tu46LDPBLsooybtjCUv/Fe4bY47sGFAzIieW5DXRsyIeYl2sTFZC7WITkyWXgrNwroQ K8YuOgiQsERtOtD7PNPKA3dvKwkLWFwV9FlqJYYv55FpQAck5XrmwVaiCJ3GP5EHrcHN LBQMLT4QagsFercHe91n43frUyYSe/C5hsg8lvwuXRX7tUfbmZcEsQacJETF4IVk3jyN ngbYv7zdXTDXtRnZMGA8LdOF0hIyMj92T7oHLeqE6+0PKZqiiE//wEJ8Bk85fyA0wD+A +o9Q== X-Gm-Message-State: AOAM532m7S45LmIQn+aHozcVsUhNIh4hMZyiQaA+wZBhiLipcXU10Z8w GF623q6ntfe5OG7J+wYo3UIjodjNDvY= X-Google-Smtp-Source: ABdhPJzspRNR1KLdZj5++iGJjDhM1p6wvzO4xt1NTGf0mEupXOpouqf7ZDfLCTtNecK/52XxpiCMlg== X-Received: by 2002:a2e:9c8d:: with SMTP id x13mr2802767lji.282.1643289748504; Thu, 27 Jan 2022 05:22:28 -0800 (PST) Received: from elysium.toya.net.pl (staticline-31-183-166-172.toya.net.pl. [31.183.166.172]) by smtp.gmail.com with ESMTPSA id s16sm1306918lfp.197.2022.01.27.05.22.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Jan 2022 05:22:27 -0800 (PST) From: Karolina Drobnik To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, mike.rapoport@gmail.com, linux-kernel@vger.kernel.org, Karolina Drobnik Subject: [PATCH 00/16] Introduce memblock simulator Date: Thu, 27 Jan 2022 14:21:18 +0100 Message-Id: X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 5BE82140043 X-Stat-Signature: t7q7tnubod4rbbr1u9xmphypjaqede4i Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=ffu75mKP; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of karolinadrobnik@gmail.com designates 209.85.208.181 as permitted sender) smtp.mailfrom=karolinadrobnik@gmail.com X-Rspam-User: nil X-HE-Tag: 1643289750-37397 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: Memblock is a boot time memory allocator, which allows managing memory regions before the actual memory management is initialized. Because it is used so early during the booting process, testing and debugging it is difficult. As memblock has few kernel dependencies, it is possible to simulate its runtime behaviour in userspace after stubbing a couple of structs and functions. This series of patches adds an initial version of a test suite for memblock, which is a part of tools/testing infrastructure. Checks included here test the basic functionality of memblock, which is memory regions management - adding/removing available regions, marking them as reserved or freeing them. To run the tests, build the main target and run it: $ make; ./main A successful run produces no output. Also, It is possible to override different configuration parameters. For example, to simulate enabled NUMA, use: $ make NUMA=1 For the full list of options, see `make help`. The future work will include tests for memory allocation done via memblock_alloc_* and memblock_phys_alloc_* family of functions. It will also focus on improving the test suite by adding dedicated test targets for each group of API functions and verbose output. For a refresher on memblock, see Boot time memory management documentation page[1] and "Getting to know memblock"[2] blog post. Patchset structure: * Patch 1 extracts stub definitions of kmalloc/kfree from the radix-tree testing suite, so they can be used in other tests, including memblock simulator * Patches 2-4 update tools headers to include missing definitions needed by memblock (e.g. phys_addr_t typedef) * Patches 5-9 add new files to tools/include, some with dummy/downsized definitions * Patch 10 adds the basic project with local stubs that are closely connected to memblock * Patch 11 adds a reset function, which is used as a part of the test setup. This functionality is needed, as memblock is reused in each check * Patches 12-16 add basic test cases for the core memblock functionalities [1] - https://www.kernel.org/doc/html/latest/core-api/boot-time-mm.html [2] - https://insecuremode.com/post/2021/12/14/getting-to-know-memblock.html Karolina Drobnik (16): tools: Move gfp.h and slab.h from radix-tree to lib tools/include: Add phys_addr_t to types.h tools/include: Add _RET_IP_ and math definitions to kernel.h tools/include: Update atomic.h header tools/include: Add mm.h file tools/include: Add cache.h stub tools/include: Add io.h stub tools/include: Add pfn.h stub tools/include: Add debugfs.h stub memblock tests: Add skeleton of the memblock simulator memblock tests: Add memblock reset function memblock tests: Add memblock_add tests memblock tests: Add memblock_reserve tests memblock tests: Add memblock_remove tests memblock tests: Add memblock_add_node test memblock tests: Add memblock_free tests MAINTAINERS | 1 + tools/include/linux/atomic.h | 4 + tools/include/linux/cache.h | 10 + tools/include/linux/debugfs.h | 5 + tools/include/linux/gfp.h | 28 + tools/include/linux/io.h | 5 + tools/include/linux/kernel.h | 6 + tools/include/linux/mm.h | 42 + tools/include/linux/pfn.h | 10 + .../radix-tree => include}/linux/slab.h | 25 +- tools/include/linux/types.h | 6 + tools/lib/slab.c | 38 + tools/testing/memblock/.gitignore | 6 + tools/testing/memblock/Makefile | 53 ++ tools/testing/memblock/asm/dma.h | 5 + tools/testing/memblock/internal.h | 12 + tools/testing/memblock/lib/slab.c | 9 + tools/testing/memblock/linux/init.h | 34 + tools/testing/memblock/linux/kernel.h | 12 + tools/testing/memblock/linux/kmemleak.h | 18 + tools/testing/memblock/linux/memory_hotplug.h | 19 + tools/testing/memblock/linux/mmzone.h | 35 + tools/testing/memblock/linux/printk.h | 25 + tools/testing/memblock/main.c | 8 + tools/testing/memblock/mmzone.c | 20 + .../testing/memblock/scripts/Makefile.include | 17 + tools/testing/memblock/tests/basic_api.c | 896 ++++++++++++++++++ tools/testing/memblock/tests/basic_api.h | 10 + tools/testing/memblock/tests/common.c | 27 + tools/testing/memblock/tests/common.h | 15 + tools/testing/radix-tree/Makefile | 3 +- tools/testing/radix-tree/linux.c | 27 - tools/testing/radix-tree/linux/gfp.h | 33 - 33 files changed, 1396 insertions(+), 68 deletions(-) create mode 100644 tools/include/linux/cache.h create mode 100644 tools/include/linux/debugfs.h create mode 100644 tools/include/linux/io.h create mode 100644 tools/include/linux/mm.h create mode 100644 tools/include/linux/pfn.h rename tools/{testing/radix-tree => include}/linux/slab.h (61%) create mode 100644 tools/lib/slab.c create mode 100644 tools/testing/memblock/.gitignore create mode 100644 tools/testing/memblock/Makefile create mode 100644 tools/testing/memblock/asm/dma.h create mode 100644 tools/testing/memblock/internal.h create mode 100644 tools/testing/memblock/lib/slab.c create mode 100644 tools/testing/memblock/linux/init.h create mode 100644 tools/testing/memblock/linux/kernel.h create mode 100644 tools/testing/memblock/linux/kmemleak.h create mode 100644 tools/testing/memblock/linux/memory_hotplug.h create mode 100644 tools/testing/memblock/linux/mmzone.h create mode 100644 tools/testing/memblock/linux/printk.h create mode 100644 tools/testing/memblock/main.c create mode 100644 tools/testing/memblock/mmzone.c create mode 100644 tools/testing/memblock/scripts/Makefile.include create mode 100644 tools/testing/memblock/tests/basic_api.c create mode 100644 tools/testing/memblock/tests/basic_api.h create mode 100644 tools/testing/memblock/tests/common.c create mode 100644 tools/testing/memblock/tests/common.h delete mode 100644 tools/testing/radix-tree/linux/gfp.h --- 2.30.2