[pso] [tema 2 ] linux - deadlock ciudat

Octavian Voicu octavian.voicu at gmail.com
Thu Apr 22 06:08:58 EEST 2010


2010/4/21 octavian ganea <oooctavian at gmail.com>:
> Am declarat variabila volatile si face la fel. Iar codul :
>     x= data->size_read;
>     printk(LOG_LEVEL "5 :am intrat in READ; size_read=%d\n",
> data->size_read );
>
>     spin_lock_irqsave(&data->lock_read, flags);
>     data->size_read = x;
>     printk(LOG_LEVEL "6 !!!!!!!!!com %d :am intrat in READ; size =%d; unde
> offset=%d, size_read=%d; x=%d\n", com, size, *offset, data->size_read, x );
>
> se comporta si mai ciudat : in msjul 6 - x are valoarea ok de la inceput,
> dar data->size_read este tot 0 desi tocmai ce ii facusem atribuirea . Any
> ideas?

Iti da warning-uri la compilare? Problema e ca offset, care banuiesc
ca este acel loff_t* din functia read, este pe 64 biti deci afisarea
corecta se face cu "offset=%lld". Pentru ca ai pus "offset=%d", va
afisa doar primii 32 biti iar urmatorii 32 biti (cei mai semnificativi
32 biti, intel e little-endian, care probabil sunt 0) vor trece la
"size_read=%d".

Problema ta reala este probabil in alta parte. Totusi, mai mult ca
sigur primesti un warning la printk care iti spune ca formatul este
incompatibil si nu ar trebui sa ignori aceste warning-uri.

Octavian


More information about the pso mailing list