diff options
author | Arnd Bergmann <arnd@arndb.de> | 2018-01-16 19:34:00 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-19 22:02:12 +0300 |
commit | ce6289661b14a8b391d90db918c91b6d6da6540a (patch) | |
tree | 73dc6d7aad08f3f6cd0328641e870ff9e71e7025 /include/net/caif/cfpkt.h | |
parent | aa73dc95b2de107b88df5871c7f483446507330f (diff) | |
download | linux-ce6289661b14a8b391d90db918c91b6d6da6540a.tar.xz |
caif: reduce stack size with KASAN
When CONFIG_KASAN is set, we can use relatively large amounts of kernel
stack space:
net/caif/cfctrl.c:555:1: warning: the frame size of 1600 bytes is larger than 1280 bytes [-Wframe-larger-than=]
This adds convenience wrappers around cfpkt_extr_head(), which is responsible
for most of the stack growth. With those wrapper functions, gcc apparently
starts reusing the stack slots for each instance, thus avoiding the
problem.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/caif/cfpkt.h')
-rw-r--r-- | include/net/caif/cfpkt.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/include/net/caif/cfpkt.h b/include/net/caif/cfpkt.h index fe328c52c46b..801489bb14c3 100644 --- a/include/net/caif/cfpkt.h +++ b/include/net/caif/cfpkt.h @@ -32,6 +32,33 @@ void cfpkt_destroy(struct cfpkt *pkt); */ int cfpkt_extr_head(struct cfpkt *pkt, void *data, u16 len); +static inline u8 cfpkt_extr_head_u8(struct cfpkt *pkt) +{ + u8 tmp; + + cfpkt_extr_head(pkt, &tmp, 1); + + return tmp; +} + +static inline u16 cfpkt_extr_head_u16(struct cfpkt *pkt) +{ + __le16 tmp; + + cfpkt_extr_head(pkt, &tmp, 2); + + return le16_to_cpu(tmp); +} + +static inline u32 cfpkt_extr_head_u32(struct cfpkt *pkt) +{ + __le32 tmp; + + cfpkt_extr_head(pkt, &tmp, 4); + + return le32_to_cpu(tmp); +} + /* * Peek header from packet. * Reads data from packet without changing packet. |