summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2022-08-24 13:24:24 -0400
committerRobert Morris <[email protected]>2022-08-24 13:24:24 -0400
commit9c1b8a4eb085d7c639c2039fc14beba83d95653e (patch)
treec278acf9ced36ffd58dcb27aac5a6ef2457d7a1e
parent96047832c62e6a172c92f9ead6715b553d4c2271 (diff)
downloadxv6-labs-9c1b8a4eb085d7c639c2039fc14beba83d95653e.tar.gz
xv6-labs-9c1b8a4eb085d7c639c2039fc14beba83d95653e.tar.bz2
xv6-labs-9c1b8a4eb085d7c639c2039fc14beba83d95653e.zip
sfence before writing satp, as well as after
-rw-r--r--kernel/fs.c2
-rw-r--r--kernel/trampoline.S2
-rw-r--r--user/grind.c5
3 files changed, 6 insertions, 3 deletions
diff --git a/kernel/fs.c b/kernel/fs.c
index dea5864..c6bab15 100644
--- a/kernel/fs.c
+++ b/kernel/fs.c
@@ -194,7 +194,7 @@ static struct inode* iget(uint dev, uint inum);
// Allocate an inode on device dev.
// Mark it as allocated by giving it type type.
// Returns an unlocked but allocated and referenced inode,
-// or NULL if there is no free inode..
+// or NULL if there is no free inode.
struct inode*
ialloc(uint dev, short type)
{
diff --git a/kernel/trampoline.S b/kernel/trampoline.S
index 0aaa413..7fb0b36 100644
--- a/kernel/trampoline.S
+++ b/kernel/trampoline.S
@@ -82,6 +82,7 @@ uservec:
# load the kernel page table, from p->trapframe->kernel_satp
ld t1, 0(a0)
+ sfence.vma zero, zero
csrw satp, t1
sfence.vma zero, zero
@@ -96,6 +97,7 @@ userret:
# a0: user page table, for satp.
# switch to the user page table.
+ sfence.vma zero, zero
csrw satp, a0
sfence.vma zero, zero
diff --git a/user/grind.c b/user/grind.c
index 5cd89f4..431ed19 100644
--- a/user/grind.c
+++ b/user/grind.c
@@ -305,7 +305,7 @@ iter()
exit(1);
}
if(pid1 == 0){
- rand_next = 31;
+ rand_next ^= 31;
go(0);
exit(0);
}
@@ -316,7 +316,7 @@ iter()
exit(1);
}
if(pid2 == 0){
- rand_next = 7177;
+ rand_next ^= 7177;
go(1);
exit(0);
}
@@ -346,5 +346,6 @@ main()
wait(0);
}
sleep(20);
+ rand_next += 1;
}
}