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

KOS CVS Gestion CVS KOS <d2@kos.enix.org>
Sat, 16 Mar 2002 20:21:32 +0100 (CET)


Module :	kos
Modifié par :	d2	16/03/02 20:21:31

Fichiers modifiés :
	doc            : mem_map.eps mem_map.fig 
	loader         : mod.h types.h 
	loader/mm      : mm.c 
	modules/kmem   : _kvmem_init.c 
	modules/kos    : macros.h system.h 
	modules/pmm    : Makefile _pmm.c _pmm.h pmm.c pmm.h 
Fichiers ajoutés :
	modules/pmm    : _new_pmm.c _pmm_additional.c _pmm_get_at_addr.c 
	                 _pmm_get_page.c _pmm_hw_mapping.c _pmm_init.c 
	                 _pmm_put_page.c 

Détails :
Suppression alloc GPFM du loader => dans le noyau. Modif plan memoire
pour avoir suffisamment de marge en VM devant le noyau afin de pouvoir
mapper un GPFM pour 64G de RAM => le noyau demarre a 768M au lieu de
512M.

Le GPFM est alloue au fur et a mesure de son initialisation dans
pmm. Pour eviter le probleme de l'oeuf et de la poule (pour allouer
les pages du gpfm, on a besoin de faire des get_phys_page, or, pour
faire des get_phys_page on a besoin du gpfm), on utilise un
'sieve_gpfm' de 3 elements (3 gpfme) au tout debut de l'alloc du gpfm
pour permettre d'allouer la premiere page (et eventuellement un PT) de
gpfm. Une fois qu'on a la premiere page, vu qu'elle couvre les
adresses 4k->.. qui est une zone FREE, elle permet d'allouer les pages
suivantes. De fil en aiguille, ca permet d'allouer le
gpfm. Evidemment, une fois la premiere page GPFM allouee, on n'utilise
plus le sieve_gpfm.

Tout est dans _pmm_init.c . Le reste des modfifs, c'est le chgt du plan
memoire, et une separation de pmm en petits fichiers.

La seule autre grosse modif est dans _kvmem : pour declarer le range
pour le GPFM. En effet, le GPFM n'est plus directement dans le range
ou on trouve le kernel_parameters et les modules : il est juste avant
=> il faut le dimensionner comme il faut => necessite de la fonction
_get_gpfm_ram_map_size() dans pmm/ qui permet de recuperer cette
taille.

Note: le loader a l'air chatouilleux qd on lui met des fonctions
__init static qui ne sont appelees que en local.