Skip to content

vpage / vregion: a minimal version with a test#10636

Open
lyakh wants to merge 3 commits intothesofproject:mainfrom
lyakh:vreg
Open

vpage / vregion: a minimal version with a test#10636
lyakh wants to merge 3 commits intothesofproject:mainfrom
lyakh:vreg

Conversation

@lyakh
Copy link
Collaborator

@lyakh lyakh commented Mar 20, 2026

This is a slightly simplified version of #10281 with an added test

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Introduces a minimal “virtual pages” allocator and “virtual regions” (partitioned into interim + lifetime allocators) for SOF on Zephyr/ACE, along with a basic boot test and the required Kconfig/build/board configuration plumbing.

Changes:

  • Add vpage contiguous virtual-page allocator and vregion allocator built on top of it.
  • Wire new sources and configs into Zephyr build + Kconfig (including new virtual region attribute).
  • Add a Ztest-based boot test for vregion, and bump ACE board virtual region count.

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
zephyr/test/vregion.c Adds a basic vregion allocator test under boot tests.
zephyr/test/CMakeLists.txt Builds the new test when CONFIG_SOF_VREGIONS is enabled.
zephyr/lib/vregion.c Implements vregion (interim k_heap + lifetime linear allocator).
zephyr/lib/vpages.c Implements vpage allocator and registers its init via SYS_INIT.
zephyr/lib/alloc.c Adjusts virtual heap bundle sizing/comments to match new region sizing.
zephyr/include/sof/lib/vregion.h Public API for vregion.
zephyr/include/sof/lib/vpages.h Public API for vpage.
zephyr/include/sof/lib/regions_mm.h Adds VIRTUAL_REGION_VPAGES_ATTR.
zephyr/Kconfig Adds SOF_VREGIONS, SOF_VPAGE_MAX_ALLOCS, SOF_ZEPHYR_VIRTUAL_PAGE_REGION_SIZE, and updates heap region sizing defaults/wording.
zephyr/CMakeLists.txt Builds vpages.c/vregion.c when CONFIG_SOF_VREGIONS is enabled.
app/boards/intel_adsp_ace40_nvls.conf Increases virtual region count to 3 for VPAGES region.
app/boards/intel_adsp_ace40_nvl.conf Increases virtual region count to 3 for VPAGES region.
app/boards/intel_adsp_ace30_wcl.conf Increases virtual region count to 3 for VPAGES region.
app/boards/intel_adsp_ace30_ptl.conf Increases virtual region count to 3 for VPAGES region.
app/boards/intel_adsp_ace20_lnl.conf Increases virtual region count to 3 for VPAGES region.
app/boards/intel_adsp_ace15_mtpm.conf Increases virtual region count to 3 for VPAGES region.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +155 to +158
LOG_INF("new at base %p size %#x pages %d struct embedded at %p",
(void *)vr->base, total_size, pages, (void *)vr);
LOG_DBG(" interim size %#x at %p", interim_size, (void *)vr->interim.heap.heap.init_mem);
LOG_DBG(" lifetime size %#x at %p", lifetime_size, (void *)vr->lifetime.base);
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The LOG_INF/LOG_DBG calls here print total_size/interim_size/lifetime_size using %#x, but these are size_t. On 64-bit builds this can truncate and can fail with -Wformat. Prefer %zu or %#zx for sizes.

Copilot uses AI. Check for mistakes.
Comment on lines +174 to +175
LOG_DBG("destroy %p size %#x pages %d", (void *)vr->base, vr->size, vr->pages);
LOG_DBG(" lifetime used %d free count %d", vr->lifetime.used, vr->lifetime.free_count);
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vregion_destroy() logs vr->size and vr->lifetime.used with %#x/%d, but these are size_t. Please update these format strings to the correct size_t specifiers to avoid -Wformat issues.

Copilot uses AI. Check for mistakes.
lrgirdwo and others added 3 commits March 24, 2026 15:43
Add a simple virtual page allocator that uses the Zephyr memory mapping
infrastructure to allocate pages from a virtual region and map them
to physical pages.

Due to simplicity, the number of allocations is limited to
CONFIG_SOF_VPAGE_MAX_ALLOCS

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Add support for per pipeline and per module virtual memory regions.

The intention is to provide a single virtual memory region per pipeline or
per DP module that can simplify module/pipeline memory management.

The region takes advantage of the way pipeline and modules are constructed,
destroyed and used during their lifetimes.

1) memory tracking - 1 pointer/size per pipeline or DP module.
2) memory read/write/execute permissions
3) cache utilization.

Modules and pipelines will allocate from their region only and this
will be abstracted via the allocation APIs.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Add a boot-time test for basic vregion functionality.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Copy link
Collaborator

@kv2019i kv2019i left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One staging related comment inline. Otherwise looks good and addition of a small test case is great.

hex "Size in bytes of virtual memory region for virtual heap shared for all cores"
depends on MM_DRV_INTEL_ADSP_MTL_TLB
default 0x100000
default 0xc0000
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any downsides to this change when done now? I mean this is enable the feature in many builds by default, but the vregions are not actually used yet. I wonder if these Kconfig changes should be done in the PR when vregion is actually used in pipelines?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants