[OSy] SET_STATIC_STACK

Martin Decky decky at dsrg.mff.cuni.cz
Mon Dec 14 16:13:39 CET 2009


Hezky den,

mate pravdu, pri blizsim zkoumani je skutecne videt, ze ten kod v 
Kalistu je ponekud zmateny (a typicky funguje jen diky tomu, ze za 
koncem statickeho zasobniku jednoho procesoru je zasobnik dalsiho 
procesoru a tyto dalsi procesory prakticky nevyrizuji zadne vyjimky).

V priloze posilam opravu pro Kalisto. Tato oprava obsahuje nasledujici:

1) Odstranil jsem matouci poznamku o tom, ze se TLB Refill handler
    vyhyba General Exception handleru. To je samozrejme pravda, ale
    zduvodneni je jine: TLB Refill pouziva staticky zasobnik od vrcholu
    (zasobnik roste smerem k nizsim adresam), zatimco General Exception
    spravne pouziva staticky zasobnik ode dna (od nejnizsi adresy).

2) TLB Refill handler uz neuklada $badvaddr na staticky zasobnik. Je to
    totiz zbytecne, TLB Refill handler neni reentrantni, takze si
    $badvaddr nemusi nikam ukladat.

3) General Exception handler musi pouzivat staticky zasobnik pro
    docasne ukladani nekterych CP0 registru ode dna, ne od vrcholu.
    Proto je tam nyni displacement KERNEL_STACK_SIZE.

Diky za pozorne cteni kodu! Ocenuji, ze jste se skutecne snazil 
pochopit, co kod dela a co by mel delat. Zaroven to ukazuje, ze pres 
veskerou snahu lze v takovych zalezitostech trivialne udelat chybu.


M.D.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: static_stack.patch
Type: text/x-patch
Size: 2327 bytes
Desc: not available
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20091214/8b0c03bc/attachment.bin>


More information about the NSWI004 mailing list