summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandy Dunlap <randy.dunlap@verizon.net>2003-04-29 21:58:30 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2003-04-29 21:58:30 -0700
commit3a38ea66010499bc7284747c34c6775fe3837c9a (patch)
tree5ab92f016b43f205f0322b0219af74825f229bbb
parent58800fb0ece258aa0475210ccd09766c7beb581d (diff)
[PATCH] sidewinder: reduce stack usage
reduce stack usage in sw_connect() from 0x490 to 0x98 on P4 SMP (gcc 3.2);
-rw-r--r--drivers/input/joystick/sidewinder.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c
index e24db2de61f1..23bc5f96a908 100644
--- a/drivers/input/joystick/sidewinder.c
+++ b/drivers/input/joystick/sidewinder.c
@@ -573,8 +573,8 @@ static void sw_connect(struct gameport *gameport, struct gameport_dev *dev)
{
struct sw *sw;
int i, j, k, l;
- unsigned char buf[SW_LENGTH];
- unsigned char idbuf[SW_LENGTH];
+ unsigned char *buf = NULL; /* [SW_LENGTH] */
+ unsigned char *idbuf = NULL; /* [SW_LENGTH] */
unsigned char m = 1;
char comment[40];
@@ -583,6 +583,11 @@ static void sw_connect(struct gameport *gameport, struct gameport_dev *dev)
if (!(sw = kmalloc(sizeof(struct sw), GFP_KERNEL))) return;
memset(sw, 0, sizeof(struct sw));
+ buf = kmalloc(SW_LENGTH, GFP_KERNEL);
+ idbuf = kmalloc(SW_LENGTH, GFP_KERNEL);
+ if (!buf || !idbuf)
+ goto fail1;
+
gameport->private = sw;
sw->gameport = gameport;
@@ -739,6 +744,8 @@ static void sw_connect(struct gameport *gameport, struct gameport_dev *dev)
return;
fail2: gameport_close(gameport);
fail1: kfree(sw);
+ kfree(buf);
+ kfree(idbuf);
}
static void sw_disconnect(struct gameport *gameport)