Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53613
b: refs/heads/master
c: 9d0e59a
h: refs/heads/master
i:
  53611: 00848e9
v: v3
  • Loading branch information
Eric W. Biederman authored and James Bottomley committed May 1, 2007
1 parent 2dca75e commit f36a137
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f3402a4e52fc1bdfc386a7f512e6e384cd69ecad
refs/heads/master: 9d0e59a34116f5ee48efc9a397fb09aaedc3b2f0
38 changes: 6 additions & 32 deletions trunk/arch/i386/mach-voyager/voyager_smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -536,15 +536,6 @@ do_boot_cpu(__u8 cpu)
& ~( voyager_extended_vic_processors
& voyager_allowed_boot_processors);

/* For the 486, we can't use the 4Mb page table trick, so
* must map a region of memory */
#ifdef CONFIG_M486
int i;
unsigned long *page_table_copies = (unsigned long *)
__get_free_page(GFP_KERNEL);
#endif
pgd_t orig_swapper_pg_dir0;

/* This is an area in head.S which was used to set up the
* initial kernel stack. We need to alter this to give the
* booting CPU a new stack (taken from its idle process) */
Expand Down Expand Up @@ -595,24 +586,11 @@ do_boot_cpu(__u8 cpu)
VDEBUG(("VOYAGER SMP: Booting CPU%d at 0x%lx[%x:%x], stack %p\n", cpu,
(unsigned long)hijack_source.val, hijack_source.idt.Segment,
hijack_source.idt.Offset, stack_start.esp));
/* set the original swapper_pg_dir[0] to map 0 to 4Mb transparently
* (so that the booting CPU can find start_32 */
orig_swapper_pg_dir0 = swapper_pg_dir[0];
#ifdef CONFIG_M486
if(page_table_copies == NULL)
panic("No free memory for 486 page tables\n");
for(i = 0; i < PAGE_SIZE/sizeof(unsigned long); i++)
page_table_copies[i] = (i * PAGE_SIZE)
| _PAGE_RW | _PAGE_USER | _PAGE_PRESENT;

((unsigned long *)swapper_pg_dir)[0] =
((virt_to_phys(page_table_copies)) & PAGE_MASK)
| _PAGE_RW | _PAGE_USER | _PAGE_PRESENT;
#else
((unsigned long *)swapper_pg_dir)[0] =
(virt_to_phys(pg0) & PAGE_MASK)
| _PAGE_RW | _PAGE_USER | _PAGE_PRESENT;
#endif

/* init lowmem identity mapping */
clone_pgd_range(swapper_pg_dir, swapper_pg_dir + USER_PGD_PTRS,
min_t(unsigned long, KERNEL_PGD_PTRS, USER_PGD_PTRS));
flush_tlb_all();

if(quad_boot) {
printk("CPU %d: non extended Quad boot\n", cpu);
Expand Down Expand Up @@ -655,11 +633,7 @@ do_boot_cpu(__u8 cpu)
udelay(100);
}
/* reset the page table */
swapper_pg_dir[0] = orig_swapper_pg_dir0;
local_flush_tlb();
#ifdef CONFIG_M486
free_page((unsigned long)page_table_copies);
#endif
zap_low_mappings();

if (cpu_booted_map) {
VDEBUG(("CPU%d: Booted successfully, back in CPU %d\n",
Expand Down

0 comments on commit f36a137

Please sign in to comment.