[OSy] Vyvolavanie vynimky TLB invalid

Andrej Krutak andree182 at gmail.com
Wed Jan 9 00:26:14 CET 2008


Ahoj,

nieco podobne som riesil pred par dnami - ak je to este aktualne... Problem 
bol v tom, ze napr. v kalisto je vo fcii exc() povodne takyto riadok:

switch (cp0_cause_exccode (read_cp0_cause ())) {
...}

Ten riadok sme napr. my nemenili este - ale v prvych 2 zadaniach sa chyba na 
tom riadku ani nema ako prejavit...


Niekde v exception handleri kodu (sys.S) je potom 

STORE_GENERAL_REGS $sp...

No, a problem je v tom, ze ked sa na blbom mieste kodu (=stack je na mieste, 
ktore este nie je v TLB) vyvola interrupt, zavola sa exception handler a pri 
ukladani stacku nastane TLB miss... Tym sa ale prepise cp0_cause a aj ked sa 
ten TLB miss spracuje spravne (vytvori sa spravna TLB polozka), stale bude v 
cause kod toho TLB miss - pretoze po navrate z handleru sa ten cause neobnovi 
na povodnu hodnotu... A to sa v exc() (vdaka tomu, ze sa to cita z registra) 
spracuje ako uplne odveci chyba...

Riesenie je jednoduche - miesto toho v switchi by si mal pouzivat nieco akoi

switch (cp0_cause_exccode (*(stc+OFFSET_CAUSE/4)))


:-)

Ak to nebol vas problem, ospravedlnujem sa za dlhyyyy spam...

Andrej




On Tuesday 08 January 2008 16:20:11 Jaroslav Pastorek wrote:
> Dobry den.
>
> Ja by som sa od filozofovania rad vratil k samotnemu kernelu :-)
>
> Z mne neznameho dovodu sa mi pri testovani kernelu vyvolavaju
> tlb invalid vynimky, avsak ked si v jej handleri dam vypisat
> dump tlb, tak adresa, ktora vyvolala vynimku, je v tlb a je aj
> validna. Skusal som hladat v manuali aj zdrojakoch msimu,
> ci ta vynimka moze nastat este niekedy inokedy, ale akosi som
> tam nic neobjavil. Neviem, ci je to tym, ze pristupujem na user
> adresy z obsluhy vynimky alebo preco.
> Dufam, ze to zas nie je rtfm otazka, ktora je na strane xyz v manuali.
>
> S pozdravom
>
> Jaroslav Pastorek
> www.inpage.cz - www stranky za 3 Kc a za chvilku






More information about the NSWI004 mailing list