Commit 1d212cf0 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

[media] cx18: struct i2c_client is too big for stack

	drivers/media/pci/cx18/cx18-driver.c: In function 'cx18_read_eeprom':
	drivers/media/pci/cx18/cx18-driver.c:357:1: warning: the frame size of 1072 bytes is larger than 1024 bytes [-Wframe-larger-than=]
That happens because the routine allocates 256 bytes for an eeprom buffer, plus
the size of struct i2c_client, with is big.
Change the logic to dynamically allocate/deallocate space for struct i2c_client,
instead of  using the stack.
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
Reviewed-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 51d8e7fb
...@@ -324,23 +324,24 @@ static void cx18_eeprom_dump(struct cx18 *cx, unsigned char *eedata, int len) ...@@ -324,23 +324,24 @@ static void cx18_eeprom_dump(struct cx18 *cx, unsigned char *eedata, int len)
/* Hauppauge card? get values from tveeprom */ /* Hauppauge card? get values from tveeprom */
void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv) void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
{ {
struct i2c_client c; struct i2c_client *c;
u8 eedata[256]; u8 eedata[256];
memset(&c, 0, sizeof(c)); c = kzalloc(sizeof(*c), GFP_KERNEL);
strlcpy(c.name, "cx18 tveeprom tmp", sizeof(c.name));
c.adapter = &cx->i2c_adap[0]; strlcpy(c->name, "cx18 tveeprom tmp", sizeof(c->name));
c.addr = 0xA0 >> 1; c->adapter = &cx->i2c_adap[0];
c->addr = 0xa0 >> 1;
memset(tv, 0, sizeof(*tv)); memset(tv, 0, sizeof(*tv));
if (tveeprom_read(&c, eedata, sizeof(eedata))) if (tveeprom_read(c, eedata, sizeof(eedata)))
return; goto ret;
switch (cx->card->type) { switch (cx->card->type) {
case CX18_CARD_HVR_1600_ESMT: case CX18_CARD_HVR_1600_ESMT:
case CX18_CARD_HVR_1600_SAMSUNG: case CX18_CARD_HVR_1600_SAMSUNG:
case CX18_CARD_HVR_1600_S5H1411: case CX18_CARD_HVR_1600_S5H1411:
tveeprom_hauppauge_analog(&c, tv, eedata); tveeprom_hauppauge_analog(c, tv, eedata);
break; break;
case CX18_CARD_YUAN_MPC718: case CX18_CARD_YUAN_MPC718:
case CX18_CARD_GOTVIEW_PCI_DVD3: case CX18_CARD_GOTVIEW_PCI_DVD3:
...@@ -354,6 +355,9 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv) ...@@ -354,6 +355,9 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
cx18_eeprom_dump(cx, eedata, sizeof(eedata)); cx18_eeprom_dump(cx, eedata, sizeof(eedata));
break; break;
} }
ret:
kfree(c);
} }
static void cx18_process_eeprom(struct cx18 *cx) static void cx18_process_eeprom(struct cx18 *cx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment