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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to