[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