|
@@ -100,10 +100,15 @@ static int init_pgtable(struct kimage *image, unsigned long start_pgtable)
|
|
|
|
|
|
level4p = (pgd_t *)__va(start_pgtable);
|
|
|
clear_page(level4p);
|
|
|
- result = kernel_ident_mapping_init(&info, level4p,
|
|
|
- 0, max_pfn << PAGE_SHIFT);
|
|
|
- if (result)
|
|
|
- return result;
|
|
|
+ for (i = 0; i < nr_pfn_mapped; i++) {
|
|
|
+ mstart = pfn_mapped[i].start << PAGE_SHIFT;
|
|
|
+ mend = pfn_mapped[i].end << PAGE_SHIFT;
|
|
|
+
|
|
|
+ result = kernel_ident_mapping_init(&info,
|
|
|
+ level4p, mstart, mend);
|
|
|
+ if (result)
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* segments's mem ranges could be outside 0 ~ max_pfn,
|