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

KOS CVS Gestion CVS KOS <d2@kos.enix.org>
Sat, 2 Mar 2002 15:06:10 +0100 (CET)


Module :	kos
Modifié par :	d2	02/03/02 15:06:10

Fichiers modifiés :
	.              : TODO 
	modules/kmem   : _kvmem_init.c _kvmem_utils.c 
	modules/kos    : _vr_test.c system.h wolfgang.c 
	modules/pmm    : _pmm.c pmm.c pmm.h 
	modules/task   : _task_kstack.c 
	modules/x86/mm : _team_mm_context.c _vmap.c mm.h 
	modules/x86/task: _thread_cpu_context.c 

Détails :
- pmm.c : Revu la structure du gpfme et les listes de gpfme :
#define PHYS_PAGE_FREE       0
#define PHYS_PAGE_KERNEL     1
#define PHYS_PAGE_USER       2
#define PHYS_PAGE_HW_MAPPING 3
k_ui32_t page_type :2;

/* For PHYS_PAGE_{KERNEL,USER} pages */
#define PHYS_PAGE_NON_SWAPPABLE 0
#define PHYS_PAGE_SWAPPABLE     1
k_ui32_t swap_status :1;

+ plus de kernel_locked : remplace par la combinaison
PHYS_PAGE_KERNEL et PHYS_PAGE_NON_SWAPPABLE
=> plus logique parce que la page n'est pas "inbougeable".
+ tout passe par get_gpfme_at_paddr, qui peut aussi chercher le
gpfme dans la liste des hw_mapping (ie en dehors de la mem
physique) si on ne la trouve pas en memoire physique.
+ fonction change_gpfme_swap_status
+ 4 listes : free, swappable (avec kernel, user), non swappable
(idem), hw_mapping
=> get_physical_page prend 2 arguments
(=> nouvelle taille=28 [ancienne=36])

_vmap.c: renommage index_team/must_map_foreign en
pd_index_in_pd_table/is_foreign_mm_context

J'ai longtemps hesite a rajouter un flag (1 bit en union avec le
swap_status) dans le gpfme, speciale dedicace pour les hw_mapping. En
effet, on peut imaginer que certains periph ont leur mapping qui
recouvre la RAM (p.ex : 4G de RAM, cartes video vers 2G). Dans ce cas,
que faire qd on veut demapper un tel periph : est-ce qu'on rebalance
les gpfme du periph dans la liste "free", ou est-ce qu'on perd le
gpfme definitivement ? Ou est-ce qu'on interdit le hw_mapping d'etre
libere (tout simplement) ? Je risque de le rajouter, ce flag.

Tout de suite la suite (API pour hw_mapping d'abord, arch_remap
ensuite).