mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
media: st-delta: avoid excessive stack usage
[ Upstream commit 5954ad7d1af92cb6244c5f31216e43af55febbb7 ]
Building with a reduced stack warning limit shows that delta_mjpeg_decode()
copies a giant structure to the stack each time but only uses three of
its members:
drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c: In function 'delta_mjpeg_decode':
drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c:427:1: error: the frame size of 1296 bytes is larger than 1280 bytes [-Werror=frame-larger-than=]
Open-code the passing of the structure members that are actually used here.
Fixes: 433ff5b4a2
("[media] st-delta: add mjpeg support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a0c5aa7b48
commit
c7fec6c87a
|
@ -239,7 +239,7 @@ static int delta_mjpeg_ipc_open(struct delta_ctx *pctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, struct delta_au *au)
|
||||
static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, dma_addr_t pstart, dma_addr_t pend)
|
||||
{
|
||||
struct delta_dev *delta = pctx->dev;
|
||||
struct delta_mjpeg_ctx *ctx = to_ctx(pctx);
|
||||
|
@ -256,8 +256,8 @@ static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, struct delta_au *au)
|
|||
|
||||
memset(params, 0, sizeof(*params));
|
||||
|
||||
params->picture_start_addr_p = (u32)(au->paddr);
|
||||
params->picture_end_addr_p = (u32)(au->paddr + au->size - 1);
|
||||
params->picture_start_addr_p = pstart;
|
||||
params->picture_end_addr_p = pend;
|
||||
|
||||
/*
|
||||
* !WARNING!
|
||||
|
@ -374,12 +374,14 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau)
|
|||
struct delta_dev *delta = pctx->dev;
|
||||
struct delta_mjpeg_ctx *ctx = to_ctx(pctx);
|
||||
int ret;
|
||||
struct delta_au au = *pau;
|
||||
void *au_vaddr = pau->vaddr;
|
||||
dma_addr_t au_dma = pau->paddr;
|
||||
size_t au_size = pau->size;
|
||||
unsigned int data_offset = 0;
|
||||
struct mjpeg_header *header = &ctx->header_struct;
|
||||
|
||||
if (!ctx->header) {
|
||||
ret = delta_mjpeg_read_header(pctx, au.vaddr, au.size,
|
||||
ret = delta_mjpeg_read_header(pctx, au_vaddr, au_size,
|
||||
header, &data_offset);
|
||||
if (ret) {
|
||||
pctx->stream_errors++;
|
||||
|
@ -405,17 +407,17 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau)
|
|||
goto err;
|
||||
}
|
||||
|
||||
ret = delta_mjpeg_read_header(pctx, au.vaddr, au.size,
|
||||
ret = delta_mjpeg_read_header(pctx, au_vaddr, au_size,
|
||||
ctx->header, &data_offset);
|
||||
if (ret) {
|
||||
pctx->stream_errors++;
|
||||
goto err;
|
||||
}
|
||||
|
||||
au.paddr += data_offset;
|
||||
au.vaddr += data_offset;
|
||||
au_dma += data_offset;
|
||||
au_vaddr += data_offset;
|
||||
|
||||
ret = delta_mjpeg_ipc_decode(pctx, &au);
|
||||
ret = delta_mjpeg_ipc_decode(pctx, au_dma, au_dma + au_size - 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user