[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250423164826.2931382-1-arnd@kernel.org>
Date: Wed, 23 Apr 2025 18:48:16 +0200
From: Arnd Bergmann <arnd@...nel.org>
To: Will Deacon <will@...nel.org>,
Joerg Roedel <joro@...tes.org>,
Robin Murphy <robin.murphy@....com>
Cc: Arnd Bergmann <arnd@...db.de>,
Mostafa Saleh <smostafa@...gle.com>,
Jason Gunthorpe <jgg@...pe.ca>,
Lu Baolu <baolu.lu@...ux.intel.com>,
Rob Clark <robdclark@...omium.org>,
Kunkun Jiang <jiangkunkun@...wei.com>,
Ashish Mhetre <amhetre@...dia.com>,
Shameer Kolothum <shameerali.kolothum.thodi@...wei.com>,
linux-arm-kernel@...ts.infradead.org,
iommu@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: [PATCH] [v2] iommu/io-pgtable-arm: dynamically allocate selftest device struct
From: Arnd Bergmann <arnd@...db.de>
In general a 'struct device' is way too large to be put on the kernel
stack. Apparently something just caused it to grow a slightly larger,
which pushed the arm_lpae_do_selftests() function over the warning
limit in some configurations:
drivers/iommu/io-pgtable-arm.c:1423:19: error: stack frame size (1032) exceeds limit (1024) in 'arm_lpae_do_selftests' [-Werror,-Wframe-larger-than]
1423 | static int __init arm_lpae_do_selftests(void)
| ^
Change the function to use a dynamically allocated faux_device
instead of the on-stack device structure.
Fixes: ca25ec247aad ("iommu/io-pgtable-arm: Remove iommu_dev==NULL special case")
Link: https://lore.kernel.org/all/ab75a444-22a1-47f5-b3c0-253660395b5a@arm.com/
Signed-off-by: Arnd Bergmann <arnd@...db.de>
---
v2: use faux device instead of platform_device, as Robin suggested.
The faux device is more appropriate here since the is no actual physical
device, though on the other hand the v1 patch had the advantage of not
actually needing to register the device.
---
drivers/iommu/io-pgtable-arm.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 545229cf62d2..bbd42323c029 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -13,6 +13,7 @@
#include <linux/bitops.h>
#include <linux/io-pgtable.h>
#include <linux/kernel.h>
+#include <linux/device/faux.h>
#include <linux/sizes.h>
#include <linux/slab.h>
#include <linux/types.h>
@@ -1437,15 +1438,17 @@ static int __init arm_lpae_do_selftests(void)
};
int i, j, k, pass = 0, fail = 0;
- struct device dev;
+ struct faux_device *dev;
struct io_pgtable_cfg cfg = {
.tlb = &dummy_tlb_ops,
.coherent_walk = true,
- .iommu_dev = &dev,
};
- /* __arm_lpae_alloc_pages() merely needs dev_to_node() to work */
- set_dev_node(&dev, NUMA_NO_NODE);
+ dev = faux_device_create("io-pgtable-test", NULL, 0);
+ if (!dev)
+ return -ENOMEM;
+
+ cfg.iommu_dev = &dev->dev;
for (i = 0; i < ARRAY_SIZE(pgsize); ++i) {
for (j = 0; j < ARRAY_SIZE(address_size); ++j) {
@@ -1465,6 +1468,8 @@ static int __init arm_lpae_do_selftests(void)
}
pr_info("selftest: completed with %d PASS %d FAIL\n", pass, fail);
+ faux_device_destroy(dev);
+
return fail ? -EFAULT : 0;
}
subsys_initcall(arm_lpae_do_selftests);
--
2.39.5
Powered by blists - more mailing lists