Skip to content

Commit f426db8

Browse files
arndbgregkh
authored andcommitted
vme: bridges: reduce stack usage
[ Upstream commit 7483e7a ] With CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, the stack usage in vme_fake grows above the warning limit: drivers/vme/bridges/vme_fake.c: In function 'fake_master_read': drivers/vme/bridges/vme_fake.c:610:1: error: the frame size of 1160 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] drivers/vme/bridges/vme_fake.c: In function 'fake_master_write': drivers/vme/bridges/vme_fake.c:797:1: error: the frame size of 1160 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] The problem is that in some configurations, each call to fake_vmereadX() puts another variable on the stack. Reduce the amount of inlining to get back to the previous state, with no function using more than 200 bytes each. Signed-off-by: Arnd Bergmann <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 37552f9 commit f426db8

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

drivers/vme/bridges/vme_fake.c

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -418,8 +418,9 @@ static void fake_lm_check(struct fake_driver *bridge, unsigned long long addr,
418418
}
419419
}
420420

421-
static u8 fake_vmeread8(struct fake_driver *bridge, unsigned long long addr,
422-
u32 aspace, u32 cycle)
421+
static noinline_for_stack u8 fake_vmeread8(struct fake_driver *bridge,
422+
unsigned long long addr,
423+
u32 aspace, u32 cycle)
423424
{
424425
u8 retval = 0xff;
425426
int i;
@@ -450,8 +451,9 @@ static u8 fake_vmeread8(struct fake_driver *bridge, unsigned long long addr,
450451
return retval;
451452
}
452453

453-
static u16 fake_vmeread16(struct fake_driver *bridge, unsigned long long addr,
454-
u32 aspace, u32 cycle)
454+
static noinline_for_stack u16 fake_vmeread16(struct fake_driver *bridge,
455+
unsigned long long addr,
456+
u32 aspace, u32 cycle)
455457
{
456458
u16 retval = 0xffff;
457459
int i;
@@ -482,8 +484,9 @@ static u16 fake_vmeread16(struct fake_driver *bridge, unsigned long long addr,
482484
return retval;
483485
}
484486

485-
static u32 fake_vmeread32(struct fake_driver *bridge, unsigned long long addr,
486-
u32 aspace, u32 cycle)
487+
static noinline_for_stack u32 fake_vmeread32(struct fake_driver *bridge,
488+
unsigned long long addr,
489+
u32 aspace, u32 cycle)
487490
{
488491
u32 retval = 0xffffffff;
489492
int i;
@@ -613,8 +616,9 @@ static ssize_t fake_master_read(struct vme_master_resource *image, void *buf,
613616
return retval;
614617
}
615618

616-
static void fake_vmewrite8(struct fake_driver *bridge, u8 *buf,
617-
unsigned long long addr, u32 aspace, u32 cycle)
619+
static noinline_for_stack void fake_vmewrite8(struct fake_driver *bridge,
620+
u8 *buf, unsigned long long addr,
621+
u32 aspace, u32 cycle)
618622
{
619623
int i;
620624
unsigned long long start, end, offset;
@@ -643,8 +647,9 @@ static void fake_vmewrite8(struct fake_driver *bridge, u8 *buf,
643647

644648
}
645649

646-
static void fake_vmewrite16(struct fake_driver *bridge, u16 *buf,
647-
unsigned long long addr, u32 aspace, u32 cycle)
650+
static noinline_for_stack void fake_vmewrite16(struct fake_driver *bridge,
651+
u16 *buf, unsigned long long addr,
652+
u32 aspace, u32 cycle)
648653
{
649654
int i;
650655
unsigned long long start, end, offset;
@@ -673,8 +678,9 @@ static void fake_vmewrite16(struct fake_driver *bridge, u16 *buf,
673678

674679
}
675680

676-
static void fake_vmewrite32(struct fake_driver *bridge, u32 *buf,
677-
unsigned long long addr, u32 aspace, u32 cycle)
681+
static noinline_for_stack void fake_vmewrite32(struct fake_driver *bridge,
682+
u32 *buf, unsigned long long addr,
683+
u32 aspace, u32 cycle)
678684
{
679685
int i;
680686
unsigned long long start, end, offset;

0 commit comments

Comments
 (0)