]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
coresight: catu: Fix number of pages while using 64k pages
authorIlkka Koskinen <ilkka@os.amperecomputing.com>
Thu, 9 Jan 2025 21:53:48 +0000 (21:53 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:30:58 +0000 (14:30 +0200)
[ Upstream commit 0e14e062f5ff98aa15264dfa87c5f5e924028561 ]

Trying to record a trace on kernel with 64k pages resulted in -ENOMEM.
This happens due to a bug in calculating the number of table pages, which
returns zero. Fix the issue by rounding up.

$ perf record --kcore -e cs_etm/@tmc_etr55,cycacc,branch_broadcast/k --per-thread taskset --cpu-list 1 dd if=/dev/zero of=/dev/null
failed to mmap with 12 (Cannot allocate memory)

Fixes: 8ed536b1e283 ("coresight: catu: Add support for scatter gather tables")
Signed-off-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20250109215348.5483-1-ilkka@os.amperecomputing.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hwtracing/coresight/coresight-catu.c

index 8e19e8cdcce5e735f946bf510a5dab2b45ed3e6d..3357e55fc559038c175171eb384ba6c040fd493b 100644 (file)
@@ -267,7 +267,7 @@ catu_init_sg_table(struct device *catu_dev, int node,
         * Each table can address upto 1MB and we can have
         * CATU_PAGES_PER_SYSPAGE tables in a system page.
         */
-       nr_tpages = DIV_ROUND_UP(size, SZ_1M) / CATU_PAGES_PER_SYSPAGE;
+       nr_tpages = DIV_ROUND_UP(size, CATU_PAGES_PER_SYSPAGE * SZ_1M);
        catu_table = tmc_alloc_sg_table(catu_dev, node, nr_tpages,
                                        size >> PAGE_SHIFT, pages);
        if (IS_ERR(catu_table))