Newsgroup: it.comp.os.linux.development
Titolo: insmod e librerie dinamiche


Ciao e Grazie
Erich

 sin_module.o: unresolved symbol sin
Qualunque cosa che abbia un float dentro e giri in kernel mode e` un
BUG. Non puoi usare float _mai_ nel kernel. Solo aritmetica intera.
        Romano 
 
PS: esatto esatto non e`. Puoi usare float ma devi salvare a mano lo
stato della FPU in tutti gli entry point, restaurarlo all'uscita, e
fare lo stesso in tutti i punti in cui puoi dormire... ti conviene
fare una bella tabella (generata in user space) e buonanotte. 
 
-- 
Romano Giannetti --- Linux dai tempi di 0.99pl8 --- e ora...
Linux 
pern.dea.icai.upco.es
 2.2.15pre15
Change - with . and delete .no.spam from my email address!


questa non la sapevo, immagino che i problami siano durante il context
switch, mi dai qualche spiegazione ulteriore?
ciao.

 switch, mi dai qualche spiegazione ulteriore?
Non so molto di piu`: varie volte e` stato commentato nella ml del
kernel che il problema e` che Linux non salva lo stato della FPU in un
context switch. Cio` puo` succedere solo quando vai a dormire
(cidenti, come suona male in italiano)... se il preemptive kernel
patch di Ingo non passa :-)))))  
                               Romano 


 patch di Ingo non passa :-)))))
Scusa, forse è come dici tu, ma a me sembra una cazzata.
Se fosse come dici tu allora non potrei usare in multitasking due
programmi che usano la FPU .
Saluti,
Fabio Alemagna

programmi che usano la FPU .
Linux *salva* lo stato della FPU.
Da /usr/src/linux/arch/i386/kernel/process.c:
void __switch_to(struct task_struct *prev, struct task_struct *next)
{
        /* Do the FPU save and set TS if it wasn't set before.. */
	unlazy_fpu(prev);
 
...
-- 
Lorenzo
"Given enough eyeballs, all bugs are shallow", Linus'Law
(per rispondere via email fai un rot13 dell'indirizzo)
(apply a rot13 to reply)

programmi che usano la FPU .
No. Lo stato della FPU e` salvato all'ingresso e all'uscita del kernel
space.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

 space.
Aaah, chiedo venia. Mi era sfuggito che si parlava di threads in kernel
space.
Saluti,
Fabio Alemagna

 space.
Se non sbaglio, si tratta del codice in entry.S (assembly).
ciao.


Sbaglio ;): non lo salva lě. Il meccanismo mi sembra diverso. Mi pare di
capire che i vari registri della FPU vengano gestiti mappandoli in
memoria. Infatti c'č una struct, e si usano puntatori...
Ad esempio in process.c c'č il codice per il task switching e anche
quello per generare le informazioni sulla FPU da salvare poi in un
coredump. Tutti il lavoro viene fatto appunto in questo modo.
ciao.

 	unlazy_fpu(prev);
Oddio, magari non ho capito nulla, pero mi sembra che la cosa sia
"lazy": nel senso che il save/restore dello stato della CPU viene
fatto solo quando serve, con l'ipotesi che in modo kernel non venga
mai toccata. 
E appena detto... :-) 
(Sempre da process.c) 
 * We fsave/fwait so that an exception goes off at the right time
 * (as a call from the fsave or fwait in effect) rather than to
 * the wrong process. Lazy FP saving no longer makes any sense
 * with modern CPU's, and this simplifies a lot of things (SMP
 * and UP become the same).
Quindi, chissa`... forse avevo torto, ed effettivamente si puo` usare
la FPU in kernel mode? 


la FPU in kernel mode? 
*NON* si puo`.
Se non altro perche` non tutte le architetture hanno una FPU, e
l'emulazione puo` funzionare solo in user space.
