Skip to content

Commit c03b7de

Browse files
arndbmchehab
authored andcommitted
media: rkvdec: reduce stack usage in rkvdec_init_v4l2_vp9_count_tbl()
The deeply nested loop in rkvdec_init_v4l2_vp9_count_tbl() needs a lot of registers, so when the clang register allocator runs out, it ends up spilling countless temporaries to the stack: drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c:966:12: error: stack frame size (1472) exceeds limit (1280) in 'rkvdec_vp9_start' [-Werror,-Wframe-larger-than] Marking this function as noinline_for_stack keeps it out of rkvdec_vp9_start(), giving the compiler more room for optimization. The resulting code is good enough that both the total stack usage and the loop get enough better to stay under the warning limit, though it's still slow, and would need a larger rework if this function ends up being called in a fast path. Signed-off-by: Arnd Bergmann <[email protected]> Reviewed-by: Nicolas Dufresne <[email protected]> Signed-off-by: Nicolas Dufresne <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent 446c6a2 commit c03b7de

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,8 @@ static void rkvdec_vp9_done(struct rkvdec_ctx *ctx,
893893
update_ctx_last_info(vp9_ctx);
894894
}
895895

896-
static void rkvdec_init_v4l2_vp9_count_tbl(struct rkvdec_ctx *ctx)
896+
static noinline_for_stack void
897+
rkvdec_init_v4l2_vp9_count_tbl(struct rkvdec_ctx *ctx)
897898
{
898899
struct rkvdec_vp9_ctx *vp9_ctx = ctx->priv;
899900
struct rkvdec_vp9_intra_frame_symbol_counts *intra_cnts = vp9_ctx->count_tbl.cpu;

0 commit comments

Comments
 (0)