From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53BEF372698 for ; Fri, 15 May 2026 09:07:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778836062; cv=none; b=lYyv+JsnNpjfmFZoxbKetSrWSetIvtI8y6hCftGfmWPze/TTEYM8cxGqb+C7yc510KYnwhO2DuAfxQrwkRBquYw4T9EN5wh3WvLlTMFVqVRY53A4gBCuQV7eIl9ZngXYjAF++6Og6LQszYTj4bnjD63Ru2fncrhJj9OSpdUtxTo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778836062; c=relaxed/simple; bh=Io/s5fsSyh4eiXVNDqjHTlGG9g4s5WRSoMklbzbJaJw=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=ikmq2RA0NnNO8WLOq9aWV40Tqp4Zzw4Z4b/aueC/QBinB2peYdJcSr45hYo5LOhQ6BxUc8NCrAwYB1Xwa3ELMRIGFxkyXjm9KnWD7hWX7tU1HC9NrbUwt4VfbqeW48Cz9LKDwN6nzqBtRKmCQTHuh5eSO6gmLp651OuEJetEXac= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qbn/qGNP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Qbn/qGNP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F3117C2BCB8; Fri, 15 May 2026 09:07:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778836062; bh=Io/s5fsSyh4eiXVNDqjHTlGG9g4s5WRSoMklbzbJaJw=; h=From:To:Cc:Subject:Date:From; b=Qbn/qGNP9N9gEaUArks56OfOROnPzD/SA331BPP9lwqFPzELb6OzvN4SkMsx1wBZ8 X86YeI2itvBjyL7zBRKmU8tonLkhPJluLN7dpKitY0AqGkxl1JCe2zt+eMp2ecpyTs 2GHZzMQQxyBtxU9qaWN2CIdj7PpwsoU/pZC8a9gJA96y+283f13Rd0HD9zvgVX8FNN ZGBiAnu3q2mlI1zuJodccL3cj9/i7l0jd/VcjzXuyvB6uNN5M/WbVcnLsl5zMN/jif 9Tf1WoSE0Lf/1QsjZpPyfFk28yxEK8wQm3z4mBklFWdqq8i5nDszZwM7utJOGbZU1+ cFnFg4ij30LpQ== From: Arnd Bergmann To: Thomas Gleixner , Ryan Chen Cc: Arnd Bergmann , linux-kernel@vger.kernel.org Subject: [PATCH] irqchip/ast2700-intc: reduce stack usage in kunit tests Date: Fri, 15 May 2026 11:07:06 +0200 Message-Id: <20260515090730.403171-1-arnd@kernel.org> X-Mailer: git-send-email 2.39.5 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Arnd Bergmann Build testing this driver can show excessive stack usage, because of the construction of various large structures on the stack: drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i1o1mc0i1o1_bad_range_upstream': drivers/irqchip/irq-ast2700-intc0-test.c:451:1: error: the frame size of 1616 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 451 | } | ^ drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i1o2mc0i1o1_invalid': drivers/irqchip/irq-ast2700-intc0-test.c:403:1: error: the frame size of 1632 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 403 | } | ^ drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i2o2mc0i1o1': drivers/irqchip/irq-ast2700-intc0-test.c:292:1: error: the frame size of 1632 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 292 | } | ^ drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i1o1mc0i1o1': drivers/irqchip/irq-ast2700-intc0-test.c:233:1: error: the frame size of 1632 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 233 | } | ^ drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i1o1c0i1o1_disconnected': drivers/irqchip/irq-ast2700-intc0-test.c:183:1: error: the frame size of 1616 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 183 | } | ^ drivers/irqchip/irq-ast2700-intc0-test.c: In function 'aspeed_intc0_resolve_route_c1i1o1c0i1o1_connected': drivers/irqchip/irq-ast2700-intc0-test.c:135:1: error: the frame size of 1632 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] 135 | } | ^ The largest structure in each case is the irq_domain. Since at most two of its members are actually assigned here, change this part to be dynamically allocated and initialized in a common helper. The other structures here are still fairly large, so it would be possible to take this further by making additional structures allocated either statically or through kzalloc(), but the simpler fix is sufficient to stay below the warning limit. Fixes: 46e39ee92d14 ("irqchip/ast2700-intc: Add KUnit tests for route resolution") Signed-off-by: Arnd Bergmann --- drivers/irqchip/irq-ast2700-intc0-test.c | 109 +++++++++++------------ 1 file changed, 53 insertions(+), 56 deletions(-) diff --git a/drivers/irqchip/irq-ast2700-intc0-test.c b/drivers/irqchip/irq-ast2700-intc0-test.c index d49784509ac7..5ca668812347 100644 --- a/drivers/irqchip/irq-ast2700-intc0-test.c +++ b/drivers/irqchip/irq-ast2700-intc0-test.c @@ -6,23 +6,41 @@ #include "irq-ast2700.h" +static int aspeed_intc0_resolve_route_test(struct fwnode_handle *fwnode, + void *host_data, + size_t nc1outs, + const u32 *c1outs, + size_t nc1ranges, + const struct aspeed_intc_interrupt_range *c1ranges, + struct aspeed_intc_interrupt_range *resolved) +{ + struct irq_domain *c0domain __free(kfree) = kzalloc_obj(*c0domain); + + if (!c0domain) + return -ENOMEM; + + c0domain->host_data = host_data; + c0domain->fwnode = fwnode; + return aspeed_intc0_resolve_route(c0domain, nc1outs, c1outs, + nc1ranges, c1ranges, resolved); +} + static void aspeed_intc0_resolve_route_bad_args(struct kunit *test) { static const struct aspeed_intc_interrupt_range c1ranges[] = { 0 }; static const u32 c1outs[] = { 0 }; struct aspeed_intc_interrupt_range resolved; - const struct irq_domain c0domain = { 0 }; int rc; rc = aspeed_intc0_resolve_route(NULL, 0, c1outs, 0, c1ranges, NULL); KUNIT_EXPECT_EQ(test, rc, -EINVAL); - rc = aspeed_intc0_resolve_route(&c0domain, 0, c1outs, + rc = aspeed_intc0_resolve_route_test(NULL, NULL, 0, c1outs, ARRAY_SIZE(c1ranges), c1ranges, &resolved); KUNIT_EXPECT_EQ(test, rc, -ENOENT); - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, + rc = aspeed_intc0_resolve_route_test(NULL, NULL, ARRAY_SIZE(c1outs), c1outs, 0, c1ranges, &resolved); KUNIT_EXPECT_EQ(test, rc, -ENOENT); } @@ -52,15 +70,15 @@ static void aspeed_intc_resolve_route_invalid_c0domain(struct kunit *test) struct device_node intc0_node = { .fwnode = { .ops = &arm_gicv3_fwnode_ops }, }; - const struct irq_domain c0domain = { .fwnode = &intc0_node.fwnode }; static const struct aspeed_intc_interrupt_range c1ranges[] = { 0 }; static const u32 c1outs[] = { 0 }; struct aspeed_intc_interrupt_range resolved; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, NULL, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_NE(test, rc, 0); } @@ -119,15 +137,12 @@ aspeed_intc0_resolve_route_c1i1o1c0i1o1_connected(struct kunit *test) struct aspeed_intc0 intc0 = { .ranges = { .ranges = intc0_ranges, .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_EQ(test, rc, 0); KUNIT_EXPECT_EQ(test, resolved.start, 0); KUNIT_EXPECT_EQ(test, resolved.count, 1); @@ -170,15 +185,12 @@ aspeed_intc0_resolve_route_c1i1o1c0i1o1_disconnected(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_NE(test, rc, 0); } @@ -217,15 +229,12 @@ static void aspeed_intc0_resolve_route_c1i1o1mc0i1o1(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_EQ(test, rc, 0); KUNIT_EXPECT_EQ(test, resolved.start, 0); KUNIT_EXPECT_EQ(test, resolved.count, 1); @@ -276,15 +285,12 @@ static void aspeed_intc0_resolve_route_c1i2o2mc0i1o1(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_EQ(test, rc, 0); KUNIT_EXPECT_EQ(test, resolved.start, 1); KUNIT_EXPECT_EQ(test, resolved.count, 1); @@ -335,15 +341,12 @@ static void aspeed_intc0_resolve_route_c1i1o1mc0i2o1(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_EQ(test, rc, 0); KUNIT_EXPECT_EQ(test, resolved.start, 0); KUNIT_EXPECT_EQ(test, resolved.count, 1); @@ -387,15 +390,12 @@ static void aspeed_intc0_resolve_route_c1i1o2mc0i1o1_invalid(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_EQ(test, rc, 1); KUNIT_EXPECT_EQ(test, resolved.start, 0); KUNIT_EXPECT_EQ(test, resolved.count, 1); @@ -438,15 +438,12 @@ aspeed_intc0_resolve_route_c1i1o1mc0i1o1_bad_range_upstream(struct kunit *test) .nranges = ARRAY_SIZE(intc0_ranges), } }; - const struct irq_domain c0domain = { - .host_data = &intc0, - .fwnode = &intc0_node.fwnode - }; int rc; - rc = aspeed_intc0_resolve_route(&c0domain, ARRAY_SIZE(c1outs), c1outs, - ARRAY_SIZE(c1ranges), c1ranges, - &resolved); + rc = aspeed_intc0_resolve_route_test(&intc0_node.fwnode, &intc0, + ARRAY_SIZE(c1outs), c1outs, + ARRAY_SIZE(c1ranges), c1ranges, + &resolved); KUNIT_EXPECT_NE(test, rc, 0); } -- 2.39.5