Selaa lähdekoodia

x86, mm: Unify kernel_physical_mapping_init() API

This patch changes the 32-bit version of kernel_physical_mapping_init() to
return the last mapped address like the 64-bit one so that we can unify the
call-site in init_memory_mapping().

Cc: Yinghai Lu <yinghai@kernel.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
LKML-Reference: <alpine.DEB.2.00.1002241703570.1180@melkki.cs.helsinki.fi>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Pekka Enberg 15 vuotta sitten
vanhempi
commit
c1fd1b4383
2 muutettua tiedostoa jossa 5 lisäystä ja 10 poistoa
  1. 0 7
      arch/x86/mm/init.c
  2. 5 3
      arch/x86/mm/init_32.c

+ 0 - 7
arch/x86/mm/init.c

@@ -266,16 +266,9 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 	if (!after_bootmem)
 	if (!after_bootmem)
 		find_early_table_space(end, use_pse, use_gbpages);
 		find_early_table_space(end, use_pse, use_gbpages);
 
 
-#ifdef CONFIG_X86_32
-	for (i = 0; i < nr_range; i++)
-		kernel_physical_mapping_init(mr[i].start, mr[i].end,
-					     mr[i].page_size_mask);
-	ret = end;
-#else /* CONFIG_X86_64 */
 	for (i = 0; i < nr_range; i++)
 	for (i = 0; i < nr_range; i++)
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
 						   mr[i].page_size_mask);
 						   mr[i].page_size_mask);
-#endif
 
 
 #ifdef CONFIG_X86_32
 #ifdef CONFIG_X86_32
 	early_ioremap_page_table_range_init();
 	early_ioremap_page_table_range_init();

+ 5 - 3
arch/x86/mm/init_32.c

@@ -241,6 +241,7 @@ kernel_physical_mapping_init(unsigned long start,
 			     unsigned long page_size_mask)
 			     unsigned long page_size_mask)
 {
 {
 	int use_pse = page_size_mask == (1<<PG_LEVEL_2M);
 	int use_pse = page_size_mask == (1<<PG_LEVEL_2M);
+	unsigned long last_map_addr = end;
 	unsigned long start_pfn, end_pfn;
 	unsigned long start_pfn, end_pfn;
 	pgd_t *pgd_base = swapper_pg_dir;
 	pgd_t *pgd_base = swapper_pg_dir;
 	int pgd_idx, pmd_idx, pte_ofs;
 	int pgd_idx, pmd_idx, pte_ofs;
@@ -341,9 +342,10 @@ repeat:
 					prot = PAGE_KERNEL_EXEC;
 					prot = PAGE_KERNEL_EXEC;
 
 
 				pages_4k++;
 				pages_4k++;
-				if (mapping_iter == 1)
+				if (mapping_iter == 1) {
 					set_pte(pte, pfn_pte(pfn, init_prot));
 					set_pte(pte, pfn_pte(pfn, init_prot));
-				else
+					last_map_addr = (pfn << PAGE_SHIFT) + PAGE_SIZE;
+				} else
 					set_pte(pte, pfn_pte(pfn, prot));
 					set_pte(pte, pfn_pte(pfn, prot));
 			}
 			}
 		}
 		}
@@ -368,7 +370,7 @@ repeat:
 		mapping_iter = 2;
 		mapping_iter = 2;
 		goto repeat;
 		goto repeat;
 	}
 	}
-	return 0;
+	return last_map_addr;
 }
 }
 
 
 pte_t *kmap_pte;
 pte_t *kmap_pte;