enterpgdir -> entrypgdir
This commit is contained in:
parent
1ddfbbb194
commit
5e08357827
3 changed files with 24 additions and 11 deletions
4
entry.S
4
entry.S
|
@ -44,11 +44,11 @@ entry:
|
|||
orl $(CR4_PSE), %eax
|
||||
movl %eax, %cr4
|
||||
# Set page directory
|
||||
movl $(V2P_WO(enterpgdir)), %eax
|
||||
movl $(V2P_WO(entrypgdir)), %eax
|
||||
movl %eax, %cr3
|
||||
# Turn on paging.
|
||||
movl %cr0, %eax
|
||||
orl $(CR0_PE|CR0_PG|CR0_WP), %eax
|
||||
orl $(CR0_PG|CR0_WP), %eax
|
||||
movl %eax, %cr0
|
||||
|
||||
# now switch to using addresses above KERNBASE
|
||||
|
|
10
main.c
10
main.c
|
@ -60,7 +60,7 @@ mpmain(void)
|
|||
scheduler(); // start running processes
|
||||
}
|
||||
|
||||
pde_t enterpgdir[]; // For entry.S
|
||||
pde_t entrypgdir[]; // For entry.S
|
||||
|
||||
// Start the non-boot (AP) processors.
|
||||
static void
|
||||
|
@ -83,15 +83,15 @@ startothers(void)
|
|||
|
||||
// Tell entryother.S what stack to use, the address of mpenter and pgdir;
|
||||
// We cannot use kpgdir yet, because the AP processor is running in low
|
||||
// memory, so we use enterpgdir for the APs too. kalloc can return addresses
|
||||
// memory, so we use entrypgdir for the APs too. kalloc can return addresses
|
||||
// above 4Mbyte (the machine may have much more physical memory than 4Mbyte), which
|
||||
// aren't mapped by enterpgdir, so we must allocate a stack using enter_alloc();
|
||||
// aren't mapped by entrypgdir, so we must allocate a stack using enter_alloc();
|
||||
// This introduces the constraint that xv6 cannot use kalloc until after these
|
||||
// last enter_alloc invocations.
|
||||
stack = enter_alloc();
|
||||
*(void**)(code-4) = stack + KSTACKSIZE;
|
||||
*(void**)(code-8) = mpenter;
|
||||
*(int**)(code-12) = (void *) v2p(enterpgdir);
|
||||
*(int**)(code-12) = (void *) v2p(entrypgdir);
|
||||
|
||||
lapicstartap(c->id, v2p(code));
|
||||
|
||||
|
@ -106,7 +106,7 @@ startothers(void)
|
|||
// hence the "__aligned__" attribute.
|
||||
// Use PTE_PS in page directory entry to enable 4Mbyte pages.
|
||||
__attribute__((__aligned__(PGSIZE)))
|
||||
pde_t enterpgdir[NPDENTRIES] = {
|
||||
pde_t entrypgdir[NPDENTRIES] = {
|
||||
// Map VA's [0, 4MB) to PA's [0, 4MB)
|
||||
[0] = (0) + PTE_P + PTE_W + PTE_PS,
|
||||
// Map VA's [KERNBASE, KERNBASE+4MB) to PA's [0, 4MB)
|
||||
|
|
21
usertests.c
21
usertests.c
|
@ -1,3 +1,4 @@
|
|||
#include "param.h"
|
||||
#include "types.h"
|
||||
#include "stat.h"
|
||||
#include "user.h"
|
||||
|
@ -240,8 +241,10 @@ pipe1(void)
|
|||
if(cc > sizeof(buf))
|
||||
cc = sizeof(buf);
|
||||
}
|
||||
if(total != 5 * 1033)
|
||||
if(total != 5 * 1033){
|
||||
printf(1, "pipe1 oops 3 total %d\n", total);
|
||||
exit();
|
||||
}
|
||||
close(fds[0]);
|
||||
wait();
|
||||
} else {
|
||||
|
@ -401,10 +404,12 @@ sharedfd(void)
|
|||
}
|
||||
close(fd);
|
||||
unlink("sharedfd");
|
||||
if(nc == 10000 && np == 10000)
|
||||
if(nc == 10000 && np == 10000){
|
||||
printf(1, "sharedfd ok\n");
|
||||
else
|
||||
} else {
|
||||
printf(1, "sharedfd oops %d %d\n", nc, np);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
// two processes write two different files at the same
|
||||
|
@ -423,7 +428,7 @@ twofiles(void)
|
|||
pid = fork();
|
||||
if(pid < 0){
|
||||
printf(1, "fork failed\n");
|
||||
return;
|
||||
exit();
|
||||
}
|
||||
|
||||
fname = pid ? "f1" : "f2";
|
||||
|
@ -1582,6 +1587,14 @@ fsfull()
|
|||
printf(1, "fsfull test finished\n");
|
||||
}
|
||||
|
||||
unsigned long randstate = 1;
|
||||
unsigned int
|
||||
rand()
|
||||
{
|
||||
randstate = randstate * 1664525 + 1013904223;
|
||||
return randstate;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue