Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 854e981c authored by Paolo 'Blaisorblade' Giarrusso's avatar Paolo 'Blaisorblade' Giarrusso Committed by Linus Torvalds
Browse files

[PATCH] uml: fix hugest stack users



The C99 initialization, with GCC's bad handling, for 6K wide structs (which
_aren't_ on the stack), is causing GCC to use 12K for these silly procs with 3
vars.  Workaround this.

Note that .name = { '\0' } translates to memset(->name, 0, '->name' size) - I verified
this with GCC's docs and a testprogram.

Signed-off-by: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 98105d47
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -88,12 +88,13 @@ struct slip_proto {
	int esc;
};

#define SLIP_PROTO_INIT { \
	.ibuf  	= { '\0' }, \
	.obuf  	= { '\0' }, \
        .more	= 0, \
	.pos	= 0, \
	.esc	= 0 \
static inline void slip_proto_init(struct slip_proto * slip)
{
	memset(slip->ibuf, 0, sizeof(slip->ibuf));
	memset(slip->obuf, 0, sizeof(slip->obuf));
	slip->more = 0;
	slip->pos = 0;
	slip->esc = 0;
}

extern int slip_proto_read(int fd, void *buf, int len,
+8 −7
Original line number Diff line number Diff line
@@ -21,13 +21,14 @@ void slip_init(struct net_device *dev, void *data)

	private = dev->priv;
	spri = (struct slip_data *) private->user;
	*spri = ((struct slip_data)
		{ .name 	= { '\0' },
		  .addr		= NULL,
		  .gate_addr 	= init->gate_addr,
		  .slave  	= -1,
		  .slip		= SLIP_PROTO_INIT,
		  .dev 		= dev });

	memset(spri->name, 0, sizeof(spri->name));
	spri->addr = NULL;
	spri->gate_addr = init->gate_addr;
	spri->slave = -1;
	spri->dev = dev;

	slip_proto_init(&spri->slip);

	dev->init = NULL;
	dev->header_cache_update = NULL;
+7 −6
Original line number Diff line number Diff line
@@ -21,12 +21,13 @@ void slirp_init(struct net_device *dev, void *data)

	private = dev->priv;
	spri = (struct slirp_data *) private->user;
	*spri = ((struct slirp_data)
		{ .argw 	= init->argw,
		  .pid  	= -1,
		  .slave  	= -1,
		  .slip		= SLIP_PROTO_INIT,
		  .dev 		= dev });

	spri->argw = init->argw;
	spri->pid = -1;
	spri->slave = -1;
	spri->dev = dev;

	slip_proto_init(&spri->slip);

	dev->init = NULL;
	dev->hard_header_len = 0;