Commit 55cd6367 authored by Yinghai Lu's avatar Yinghai Lu Committed by Pekka Enberg

x86: make zap_low_mapping could be used early

Only one cpu is there, just call __flush_tlb for it. Fixes the following boot
warning on x86:

  [    0.000000] Memory: 885032k/915540k available (5993k kernel code, 29844k reserved, 3842k data, 428k init, 0k highmem)
  [    0.000000] virtual kernel memory layout:
  [    0.000000]     fixmap  : 0xffe17000 - 0xfffff000   (1952 kB)
  [    0.000000]     vmalloc : 0xf8615000 - 0xffe15000   ( 120 MB)
  [    0.000000]     lowmem  : 0xc0000000 - 0xf7e15000   ( 894 MB)
  [    0.000000]       .init : 0xc19a5000 - 0xc1a10000   ( 428 kB)
  [    0.000000]       .data : 0xc15da4bb - 0xc199af6c   (3842 kB)
  [    0.000000]       .text : 0xc1000000 - 0xc15da4bb   (5993 kB)
  [    0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok.
  [    0.000000] ------------[ cut here ]------------
  [    0.000000] WARNING: at kernel/smp.c:369 smp_call_function_many+0x50/0x1b0()
  [    0.000000] Hardware name: System Product Name
  [    0.000000] Modules linked in:
  [    0.000000] Pid: 0, comm: swapper Not tainted 2.6.30-tip #52504
  [    0.000000] Call Trace:
  [    0.000000]  [<c104aa16>] warn_slowpath_common+0x65/0x95
  [    0.000000]  [<c104aa58>] warn_slowpath_null+0x12/0x15
  [    0.000000]  [<c1073bbe>] smp_call_function_many+0x50/0x1b0
  [    0.000000]  [<c1037615>] ? do_flush_tlb_all+0x0/0x41
  [    0.000000]  [<c1037615>] ? do_flush_tlb_all+0x0/0x41
  [    0.000000]  [<c1073d4f>] smp_call_function+0x31/0x58
  [    0.000000]  [<c1037615>] ? do_flush_tlb_all+0x0/0x41
  [    0.000000]  [<c104f635>] on_each_cpu+0x26/0x65
  [    0.000000]  [<c10374b5>] flush_tlb_all+0x19/0x1b
  [    0.000000]  [<c1032ab3>] zap_low_mappings+0x4d/0x56
  [    0.000000]  [<c15d64b5>] ? printk+0x14/0x17
  [    0.000000]  [<c19b42a8>] mem_init+0x23d/0x245
  [    0.000000]  [<c19a56a1>] start_kernel+0x17a/0x2d5
  [    0.000000]  [<c19a5347>] ? unknown_bootoption+0x0/0x19a
  [    0.000000]  [<c19a5039>] __init_begin+0x39/0x41
  [    0.000000] ---[ end trace 4eaa2a86a8e2da22 ]---
Reported-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
parent 28be225b
...@@ -172,6 +172,6 @@ static inline void flush_tlb_kernel_range(unsigned long start, ...@@ -172,6 +172,6 @@ static inline void flush_tlb_kernel_range(unsigned long start,
flush_tlb_all(); flush_tlb_all();
} }
extern void zap_low_mappings(void); extern void zap_low_mappings(bool early);
#endif /* _ASM_X86_TLBFLUSH_H */ #endif /* _ASM_X86_TLBFLUSH_H */
...@@ -873,7 +873,7 @@ int __cpuinit native_cpu_up(unsigned int cpu) ...@@ -873,7 +873,7 @@ int __cpuinit native_cpu_up(unsigned int cpu)
err = do_boot_cpu(apicid, cpu); err = do_boot_cpu(apicid, cpu);
zap_low_mappings(); zap_low_mappings(false);
low_mappings = 0; low_mappings = 0;
#else #else
err = do_boot_cpu(apicid, cpu); err = do_boot_cpu(apicid, cpu);
......
...@@ -564,7 +564,7 @@ static inline void save_pg_dir(void) ...@@ -564,7 +564,7 @@ static inline void save_pg_dir(void)
} }
#endif /* !CONFIG_ACPI_SLEEP */ #endif /* !CONFIG_ACPI_SLEEP */
void zap_low_mappings(void) void zap_low_mappings(bool early)
{ {
int i; int i;
...@@ -581,6 +581,10 @@ void zap_low_mappings(void) ...@@ -581,6 +581,10 @@ void zap_low_mappings(void)
set_pgd(swapper_pg_dir+i, __pgd(0)); set_pgd(swapper_pg_dir+i, __pgd(0));
#endif #endif
} }
if (early)
__flush_tlb();
else
flush_tlb_all(); flush_tlb_all();
} }
...@@ -956,7 +960,7 @@ void __init mem_init(void) ...@@ -956,7 +960,7 @@ void __init mem_init(void)
test_wp_bit(); test_wp_bit();
save_pg_dir(); save_pg_dir();
zap_low_mappings(); zap_low_mappings(true);
} }
#ifdef CONFIG_MEMORY_HOTPLUG #ifdef CONFIG_MEMORY_HOTPLUG
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment