[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