Commit 7483e7a9 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Greg Kroah-Hartman
Browse files

vme: bridges: reduce stack usage



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: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20200107200610.3482901-1-arnd@arndb.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e2f9d739
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -414,7 +414,8 @@ static void fake_lm_check(struct fake_driver *bridge, unsigned long long addr,
	}
}

static u8 fake_vmeread8(struct fake_driver *bridge, unsigned long long addr,
static noinline_for_stack u8 fake_vmeread8(struct fake_driver *bridge,
					   unsigned long long addr,
					   u32 aspace, u32 cycle)
{
	u8 retval = 0xff;
@@ -446,7 +447,8 @@ static u8 fake_vmeread8(struct fake_driver *bridge, unsigned long long addr,
	return retval;
}

static u16 fake_vmeread16(struct fake_driver *bridge, unsigned long long addr,
static noinline_for_stack u16 fake_vmeread16(struct fake_driver *bridge,
					     unsigned long long addr,
					     u32 aspace, u32 cycle)
{
	u16 retval = 0xffff;
@@ -478,7 +480,8 @@ static u16 fake_vmeread16(struct fake_driver *bridge, unsigned long long addr,
	return retval;
}

static u32 fake_vmeread32(struct fake_driver *bridge, unsigned long long addr,
static noinline_for_stack u32 fake_vmeread32(struct fake_driver *bridge,
					     unsigned long long addr,
					     u32 aspace, u32 cycle)
{
	u32 retval = 0xffffffff;
@@ -609,8 +612,9 @@ static ssize_t fake_master_read(struct vme_master_resource *image, void *buf,
	return retval;
}

static void fake_vmewrite8(struct fake_driver *bridge, u8 *buf,
			   unsigned long long addr, u32 aspace, u32 cycle)
static noinline_for_stack void fake_vmewrite8(struct fake_driver *bridge,
					      u8 *buf, unsigned long long addr,
					      u32 aspace, u32 cycle)
{
	int i;
	unsigned long long start, end, offset;
@@ -639,8 +643,9 @@ static void fake_vmewrite8(struct fake_driver *bridge, u8 *buf,

}

static void fake_vmewrite16(struct fake_driver *bridge, u16 *buf,
			    unsigned long long addr, u32 aspace, u32 cycle)
static noinline_for_stack void fake_vmewrite16(struct fake_driver *bridge,
					       u16 *buf, unsigned long long addr,
					       u32 aspace, u32 cycle)
{
	int i;
	unsigned long long start, end, offset;
@@ -669,8 +674,9 @@ static void fake_vmewrite16(struct fake_driver *bridge, u16 *buf,

}

static void fake_vmewrite32(struct fake_driver *bridge, u32 *buf,
			    unsigned long long addr, u32 aspace, u32 cycle)
static noinline_for_stack void fake_vmewrite32(struct fake_driver *bridge,
					       u32 *buf, unsigned long long addr,
					       u32 aspace, u32 cycle)
{
	int i;
	unsigned long long start, end, offset;