[OSy] switch_cpu_context

Lukáš Turek turek at ksvi.mff.cuni.cz
Thu Nov 2 01:45:23 CET 2006


On 1.11.2006 20:54, Jiří Tlach wrote:
> Cau,
>
> tak jak je to v kalistu napsane, tak mas pravdu, ze hodnota v registru
> a0 neprezije preplanovani. Myslim si, ze zrovna
> hodnota v registru a0 by preplanovani prezit mela, protoze v tomto
> registru se vzdy predava prvni argument pri volani
> nejake funkce. Takze bych rekl, ze se jedna o umyslnou chybu v kalistu,
> kterou mame napravit. Ja jsem misto
> registru a0 pouzil pro obnoveni hodnoty Status registru registr k0,
> ktery je urcen vyhradne pro potreby kernelu
> operacniho systemu a vlakna by ho nemela pouzivat
> (viz
> http://nenya.ms.mff.cuni.cz/~ceres/sch/osy/download/MIPSpro_Assembler_2.pdf
> <http://nenya.ms.mff.cuni.cz/%7Eceres/sch/osy/download/MIPSpro_Assembler_2.
>pdf> - str. 14).
>
> Takze kod, kterys zminoval, vypada v me uprave nasledovne:
>
>          /*
>           * Load the new content of general registers.
>           */
>         RESTORE_GENERAL_REGS $sp
>
>         /*
>          * Restore the status register.
>          */
>         lw         $k0, OFFSET_STATUS($sp)
>         mtc0     $k0, $status
>
> a zatim mi vsechna vlakna bezi :-)
>

Ja jsem ty operace s a0 prehodil pred RESTORE_GENERAL_REGS $sp, a taky mi to 
funguje. Pripada mi to cistsi reseni, k0 je sice jenom pro kernel, ale obnova 
kontextu se provadi i pro kernelova vlakna.

Lukas Turek



More information about the NSWI004 mailing list