Re: amd64 2.6.11 oops on modprobe

From: Randy.Dunlap
Date: Mon Mar 07 2005 - 17:48:06 EST


Andrei Mikhailovsky wrote:
Hi Randy,

Done the kstack=32, here is the output:

cat /proc/cmdline root=/dev/hda2 ro kstack=32 console=tty0

P.S. Yeah, this oops is repeatable; hapens everytime

Hi Andrei,

I've been working on this with Daniel Staaf and Jean Delvare.
Jean enabled some more/different I2C bit banging code in
2.6.11, and that causes callers to use it differently.

Specifically, in saa7110_write_block() now does this first
"if" block instead of the "else" block:

if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
struct saa7110 *decoder = i2c_get_clientdata(client);
struct i2c_msg msg;
u8 block_data[54];

msg.len = 0;
msg.buf = (char *) block_data;
msg.addr = client->addr;
msg.flags = client->flags;
*** while (len >= 1) {
msg.len = 0;
block_data[msg.len++] = reg;
while (len-- >= 1 && msg.len < 54)
block_data[msg.len++] =
decoder->reg[reg++] = *data++;
ret = i2c_transfer(client->adapter, &msg, 1);
}
} else {
while (len-- >= 1) {
if ((ret = saa7110_write(client, reg++,
*data++)) < 0)
break;
}
}

The *** marked loop never terminates and keep incrementing <data>
until the oops occurs. Making a copy of <len> as signed instead of
unsigned is a temporary fix for this. Jean will be proposing a
real patch for that obfuscated loop.

--
~Randy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/