x86_64 boot -v2: Add free_early to early reservation machanism
PATCH 1/4 x86_64 boot -v2: Add free_early to early reservation machanism
Add free_early to early reservation mechanism.
Signed-off-by Huang Ying <[email protected]>
--- arch/x86/kernel/e820_64.c | 17 +++++++++++++++++ include/asm-x86/e820_64.h | 1 + 2 files changed, 18 insertions(+)
arch/x86/kernel/e820_64.c +17 -0
@@ -83,6 +83,23 @@ void __init reserve_early(unsigned longstrncpy (r->name, name,sizeof (r->name) -1 ); } +void __init free_early (unsigned long start,unsigned long end) +{ +int i, j; +struct early_res *r; +for (i =0 ; i <MAX_EARLY_RES && early_res[i].end; i++) { + r = &early_res[i]; +if (start == r->start && end == r->end) +break ; + } +if (i >=MAX_EARLY_RES || !early_res[i].end) +panic ("free_early on not reserved area: %lx-%lx!" , start, end); +for (j = i+1 ; j <MAX_EARLY_RES && early_res[j].end; j++) ; +memcpy (&early_res[i], &early_res[i+1 ], + (j-1 -i) *sizeof (struct early_res )); + early_res[j-1 ].end =0 ; +} +void __init early_res_to_bootmem (unsigned long start,unsigned long end) {int i;
include/asm-x86/e820_64.h +1 -0
@@ -48,6 +48,7 @@ extern struct e820map e820;extern void update_e820 (void );extern void reserve_early (unsigned long start,unsigned long end,char *name); +extern void free_early (unsigned long start,unsigned long end);extern void early_res_to_bootmem (unsigned long start,unsigned long end);#endif /*!__ASSEMBLY__*/