aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2019-03-13 17:10:29 -0400
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-03-29 07:37:10 -0400
commit2980c03e1f09a4ba36cb0d818a6a203213e98868 (patch)
treecc5204c047d605f2be66aac39dfab914a5572eb6 /drivers/staging
parentbcfc16eb1650f14053eb70725574f98648bb7c0a (diff)
media: staging: media: davinci_vpfe: fix large stack usage with clang
clang is unable to optimize the isif_ioctl() in the same way that gcc does, as it fails to prove that the local copy of the 'struct vpfe_isif_raw_config' argument is unnecessary: drivers/staging/media/davinci_vpfe/dm365_isif.c:622:13: error: stack frame size of 1344 bytes in function 'isif_ioctl' [-Werror,-Wframe-larger-than=] Marking it as 'const' while passing the data down clearly shows us that the copy is never modified, and we can skip copying it entirely, which reduces the stack usage to just eight bytes. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/media/davinci_vpfe/dm365_isif.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/staging/media/davinci_vpfe/dm365_isif.c b/drivers/staging/media/davinci_vpfe/dm365_isif.c
index 0a6d038fcec9..46fd8184fc77 100644
--- a/drivers/staging/media/davinci_vpfe/dm365_isif.c
+++ b/drivers/staging/media/davinci_vpfe/dm365_isif.c
@@ -433,9 +433,9 @@ static int isif_get_params(struct v4l2_subdev *sd, void *params)
433 return 0; 433 return 0;
434} 434}
435 435
436static int isif_validate_df_csc_params(struct vpfe_isif_df_csc *df_csc) 436static int isif_validate_df_csc_params(const struct vpfe_isif_df_csc *df_csc)
437{ 437{
438 struct vpfe_isif_color_space_conv *csc; 438 const struct vpfe_isif_color_space_conv *csc;
439 int err = -EINVAL; 439 int err = -EINVAL;
440 int i; 440 int i;
441 441
@@ -481,7 +481,7 @@ static int isif_validate_df_csc_params(struct vpfe_isif_df_csc *df_csc)
481#define DM365_ISIF_MAX_DFCMEM0 0x1fff 481#define DM365_ISIF_MAX_DFCMEM0 0x1fff
482#define DM365_ISIF_MAX_DFCMEM1 0x1fff 482#define DM365_ISIF_MAX_DFCMEM1 0x1fff
483 483
484static int isif_validate_dfc_params(struct vpfe_isif_dfc *dfc) 484static int isif_validate_dfc_params(const struct vpfe_isif_dfc *dfc)
485{ 485{
486 int err = -EINVAL; 486 int err = -EINVAL;
487 int i; 487 int i;
@@ -532,7 +532,7 @@ static int isif_validate_dfc_params(struct vpfe_isif_dfc *dfc)
532#define DM365_ISIF_MAX_CLVSV 0x1fff 532#define DM365_ISIF_MAX_CLVSV 0x1fff
533#define DM365_ISIF_MAX_HEIGHT_BLACK_REGION 0x1fff 533#define DM365_ISIF_MAX_HEIGHT_BLACK_REGION 0x1fff
534 534
535static int isif_validate_bclamp_params(struct vpfe_isif_black_clamp *bclamp) 535static int isif_validate_bclamp_params(const struct vpfe_isif_black_clamp *bclamp)
536{ 536{
537 int err = -EINVAL; 537 int err = -EINVAL;
538 538
@@ -580,7 +580,7 @@ static int isif_validate_bclamp_params(struct vpfe_isif_black_clamp *bclamp)
580} 580}
581 581
582static int 582static int
583isif_validate_raw_params(struct vpfe_isif_raw_config *params) 583isif_validate_raw_params(const struct vpfe_isif_raw_config *params)
584{ 584{
585 int ret; 585 int ret;
586 586
@@ -593,20 +593,18 @@ isif_validate_raw_params(struct vpfe_isif_raw_config *params)
593 return isif_validate_bclamp_params(&params->bclamp); 593 return isif_validate_bclamp_params(&params->bclamp);
594} 594}
595 595
596static int isif_set_params(struct v4l2_subdev *sd, void *params) 596static int isif_set_params(struct v4l2_subdev *sd, const struct vpfe_isif_raw_config *params)
597{ 597{
598 struct vpfe_isif_device *isif = v4l2_get_subdevdata(sd); 598 struct vpfe_isif_device *isif = v4l2_get_subdevdata(sd);
599 struct vpfe_isif_raw_config isif_raw_params;
600 int ret = -EINVAL; 599 int ret = -EINVAL;
601 600
602 /* only raw module parameters can be set through the IOCTL */ 601 /* only raw module parameters can be set through the IOCTL */
603 if (isif->formats[ISIF_PAD_SINK].code != MEDIA_BUS_FMT_SGRBG12_1X12) 602 if (isif->formats[ISIF_PAD_SINK].code != MEDIA_BUS_FMT_SGRBG12_1X12)
604 return ret; 603 return ret;
605 604
606 memcpy(&isif_raw_params, params, sizeof(isif_raw_params)); 605 if (!isif_validate_raw_params(params)) {
607 if (!isif_validate_raw_params(&isif_raw_params)) { 606 memcpy(&isif->isif_cfg.bayer.config_params, params,
608 memcpy(&isif->isif_cfg.bayer.config_params, &isif_raw_params, 607 sizeof(*params));
609 sizeof(isif_raw_params));
610 ret = 0; 608 ret = 0;
611 } 609 }
612 return ret; 610 return ret;