summaryrefslogtreecommitdiff
path: root/lib/alloc_tag.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2025-05-01 08:43:44 +0300
committerMark Brown <broonie@kernel.org>2025-05-01 08:43:44 +0300
commit844af9911a5d1dc41f3478dc312a404b38cbc83b (patch)
treed6aef04723f2265235c3d7fb846e522269bacbab /lib/alloc_tag.c
parent7f91f012c1df07af6b915d1f8cece202774bb50e (diff)
parentcce34d113e2a592806abcdc02c7f8513775d8b20 (diff)
downloadlinux-844af9911a5d1dc41f3478dc312a404b38cbc83b.tar.xz
ASoC: stm32: sai: fix kernel rate configuration
Merge series from Olivier Moysan <olivier.moysan@foss.st.com>: This patchset adds some checks on kernel minimum rate requirements. This avoids potential clock rate misconfiguration, when setting the kernel frequency on STM32MP2 SoCs.
Diffstat (limited to 'lib/alloc_tag.c')
-rw-r--r--lib/alloc_tag.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index 1d893e313614..25ecc1334b67 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -422,11 +422,20 @@ static int vm_module_tags_populate(void)
unsigned long old_shadow_end = ALIGN(phys_end, MODULE_ALIGN);
unsigned long new_shadow_end = ALIGN(new_end, MODULE_ALIGN);
unsigned long more_pages;
- unsigned long nr;
+ unsigned long nr = 0;
more_pages = ALIGN(new_end - phys_end, PAGE_SIZE) >> PAGE_SHIFT;
- nr = alloc_pages_bulk_node(GFP_KERNEL | __GFP_NOWARN,
- NUMA_NO_NODE, more_pages, next_page);
+ while (nr < more_pages) {
+ unsigned long allocated;
+
+ allocated = alloc_pages_bulk_node(GFP_KERNEL | __GFP_NOWARN,
+ NUMA_NO_NODE, more_pages - nr, next_page + nr);
+
+ if (!allocated)
+ break;
+ nr += allocated;
+ }
+
if (nr < more_pages ||
vmap_pages_range(phys_end, phys_end + (nr << PAGE_SHIFT), PAGE_KERNEL,
next_page, PAGE_SHIFT) < 0) {