cat /proc/dev/i2c-0 gives cat: read: Invalid argument

Mark D. Studebaker mds at paradyne.com
Sat Aug 3 23:27:07 CEST 2002


Thank you very much for the patch.
Applied in CVS.
mds

Thomas Viehweger wrote:
> 
> Hi,
> 
> I patched the kernel (linux-2.4.4-2002-03-21) from denx.de with the actual
> i2c-2.6.3 sources.
> 
> When executing
> 
> cat /proc/bus/i2c-0
> 
> On my ppc8xx board I got the error "cat: read: Invalid argument".
> 
> In i2c-core.c the function i2cproc_bus_read() will be called with a count
> of 8192.
> After modifying "if (count > 4096)" to "if (count > 8192)" the cat
> succeeds.
> Here is a more general patch:
> 
> Regards,
> Thomas Viehweger
> 
> --- drivers/i2c/i2c-core.c    9 Jul 2002 13:26:33 -0000      1.3
> +++ drivers/i2c/i2c-core.c    11 Jul 2002 14:48:39 -0000
> @@ -655,18 +655,19 @@ ssize_t i2cproc_bus_read(struct file * f
>      struct i2c_client *client;
>      int i,j,k,order_nr,len=0,len_total;
>      int order[I2C_CLIENT_MAX];
> +#define OUTPUT_LENGTH_PER_LINE 70
> 
> -    if (count > 4096)
> -         return -EINVAL;
>      len_total = file->f_pos + count;
> -    /* Too bad if this gets longer (unlikely) */
> -    if (len_total > 4096)
> -         len_total = 4096;
> +    if (len_total > (I2C_CLIENT_MAX * OUTPUT_LENGTH_PER_LINE) )
> +         /* adjust to maximum file size */
> +         len_total = (I2C_CLIENT_MAX * OUTPUT_LENGTH_PER_LINE);
>      for (i = 0; i < I2C_ADAP_MAX; i++)
>           if (adapters[i]->inode == inode->i_ino) {
>           /* We need a bit of slack in the kernel buffer; this makes the
>              sprintf safe. */
> -              if (! (kbuf = kmalloc(count + 80,GFP_KERNEL)))
> +              if (! (kbuf = kmalloc(len_total + OUTPUT_LENGTH_PER_LINE,
> +                                    GFP_KERNEL)))
>                     return -ENOMEM;
>                /* Order will hold the indexes of the clients
>                   sorted by address */



More information about the lm-sensors mailing list