[Kos-cvs] [kos] Modification CVS par thomas

KOS CVS Gestion CVS KOS <d2@kos.enix.org>
Thu, 28 Feb 2002 18:15:20 +0100 (CET)


Module :	kos
Modifié par :	thomas	28/02/02 18:15:20

Fichiers modifiés :
	modules/kos    : wolfgang.c 
	modules/task   : _task_kstack.c _task_uthread.c _task_utils.c 
	modules/x86/mm : _pgflt.c _team_mm_context.c _vmap.c 

Détails :
Au programme :

- depuis que David avait introduit la nouvelle version de _vmap et de
_rmap mon programme de test (lecture d'un fichier FAT sur disk IDE,
puis execution de ce binaire) ne fonctionnait plus. La solution
etait simple (mais chiante a trouver), il fallait remplacer (dans
arch_map_virtual_page) :
if(IS_KERNEL_PAGE(virt))
pde |= PAGE_SUPERVISOR

par
if(!IS_KERNEL_PAGE(virt))
pde |= PAGE_USER
Ce qui peut sembler identique, mais est different car :
#define PAGE_USER            (1<<2)
#define PAGE_SUPERVISOR      (0)

- ajout du spinlock_init qui va bien pour l'initialisation de la team
mere (au niveau cd arch_init_kteam_mm_context).

- test du foreign map, et ca marche ! Qques explications : au niveau
de Wolfgang, deux variables globales sont utilisees : is_mapped
(initialement a 0) pour dire si ou non on a mappe la donnee, et
team_0 qui designe la team mere. La fonction test_map_foreign_1 est
appelle depuis la team 1 (differente de la team 0, la team
mere). Cette fonction alloue une page physique, la mappe dans son
espace user, ecris DEADBEEF au debut de la page, demappe cette page
de son espace user, et la remappe dans l'espace user de l'autre team
(team 0) a une adresse differente, puis mets is_mapped a 1. Pendant
ce temps, un thread (thread_test_map_foreign_2) attend que is_mapped
arrive a 1 (fait des usleep en attendant), puis quand c'est le
moment, il affiche ce qu'il a a la bonne adresse. Et c'est bon, on a
bien DEADBEEF.

A venir :
- mise en place des rmap pour les pages qui sont allouees avant
l'init.