User base from 0x0->0x10000; user image size limit from 128MB->16MB; trigger race condition on k210
This commit is contained in:
parent
a341b338c8
commit
ff5055386b
5 changed files with 18 additions and 14 deletions
|
@ -56,13 +56,13 @@ fn easy_fs_pack() -> std::io::Result<()> {
|
||||||
.write(true)
|
.write(true)
|
||||||
.create(true)
|
.create(true)
|
||||||
.open(format!("{}{}", target_path, "fs.img"))?;
|
.open(format!("{}{}", target_path, "fs.img"))?;
|
||||||
f.set_len(128 * 2048 * 512).unwrap();
|
f.set_len(16 * 2048 * 512).unwrap();
|
||||||
f
|
f
|
||||||
})));
|
})));
|
||||||
// 128MiB, at most 4095 files
|
// 16MiB, at most 4095 files
|
||||||
let efs = EasyFileSystem::create(
|
let efs = EasyFileSystem::create(
|
||||||
block_file.clone(),
|
block_file.clone(),
|
||||||
128 * 2048,
|
16 * 2048,
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
let root_inode = Arc::new(EasyFileSystem::root_inode(&efs));
|
let root_inode = Arc::new(EasyFileSystem::root_inode(&efs));
|
||||||
|
|
|
@ -49,7 +49,7 @@ env:
|
||||||
|
|
||||||
sdcard: fs-img
|
sdcard: fs-img
|
||||||
@echo "Are you sure write to $(SDCARD) ? [y/N] " && read ans && [ $${ans:-N} = y ]
|
@echo "Are you sure write to $(SDCARD) ? [y/N] " && read ans && [ $${ans:-N} = y ]
|
||||||
@sudo dd if=/dev/zero of=$(SDCARD) bs=1048576 count=256
|
@sudo dd if=/dev/zero of=$(SDCARD) bs=1048576 count=32
|
||||||
@sudo dd if=$(FS_IMG) of=$(SDCARD)
|
@sudo dd if=$(FS_IMG) of=$(SDCARD)
|
||||||
|
|
||||||
$(KERNEL_BIN): kernel
|
$(KERNEL_BIN): kernel
|
||||||
|
@ -57,7 +57,7 @@ $(KERNEL_BIN): kernel
|
||||||
|
|
||||||
fs-img: $(APPS)
|
fs-img: $(APPS)
|
||||||
@cd ../user && make build
|
@cd ../user && make build
|
||||||
@rm $(FS_IMG)
|
@rm $(FS_IMG) -f
|
||||||
@cd ../easy-fs-fuse && cargo run --release -- -s ../user/src/bin/ -t ../user/target/riscv64gc-unknown-none-elf/release/
|
@cd ../easy-fs-fuse && cargo run --release -- -s ../user/src/bin/ -t ../user/target/riscv64gc-unknown-none-elf/release/
|
||||||
|
|
||||||
$(APPS):
|
$(APPS):
|
||||||
|
|
|
@ -15,4 +15,4 @@ pub fn get_time_ms() -> usize {
|
||||||
|
|
||||||
pub fn set_next_trigger() {
|
pub fn set_next_trigger() {
|
||||||
set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC);
|
set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,20 +5,21 @@
|
||||||
extern crate user_lib;
|
extern crate user_lib;
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
||||||
use user_lib::{exit, thread_create, waittid};
|
use user_lib::{exit, thread_create, waittid, get_time};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
static mut A: usize = 0;
|
static mut A: usize = 0;
|
||||||
const PER_THREAD: usize = 10000000;
|
const PER_THREAD: usize = 2000000;
|
||||||
const THREAD_COUNT: usize = 50;
|
const THREAD_COUNT: usize = 8;
|
||||||
|
|
||||||
unsafe fn f() -> ! {
|
unsafe fn f() -> ! {
|
||||||
|
let start = get_time();
|
||||||
for _ in 0..PER_THREAD {
|
for _ in 0..PER_THREAD {
|
||||||
let a = &mut A as *mut usize;
|
let a = &mut A as *mut usize;
|
||||||
let cur = a.read_volatile();
|
let cur = a.read_volatile();
|
||||||
a.write_volatile(cur + 1);
|
a.write_volatile(cur + 1);
|
||||||
}
|
}
|
||||||
exit(0)
|
exit((get_time() - start) as i32)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -27,10 +28,13 @@ pub fn main() -> i32 {
|
||||||
for _ in 0..THREAD_COUNT {
|
for _ in 0..THREAD_COUNT {
|
||||||
v.push(thread_create(f as usize) as usize);
|
v.push(thread_create(f as usize) as usize);
|
||||||
}
|
}
|
||||||
|
let mut time_cost = Vec::new();
|
||||||
for tid in v.iter() {
|
for tid in v.iter() {
|
||||||
waittid(*tid);
|
time_cost.push(waittid(*tid));
|
||||||
|
}
|
||||||
|
for (i, cost) in time_cost.iter().enumerate() {
|
||||||
|
println!("cost of thread#{} is {}ms", i, cost);
|
||||||
}
|
}
|
||||||
assert_eq!(unsafe { A }, PER_THREAD * THREAD_COUNT);
|
assert_eq!(unsafe { A }, PER_THREAD * THREAD_COUNT);
|
||||||
println!("total = {}", unsafe { A });
|
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
OUTPUT_ARCH(riscv)
|
OUTPUT_ARCH(riscv)
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
|
||||||
BASE_ADDRESS = 0x0;
|
BASE_ADDRESS = 0x10000;
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
@ -29,4 +29,4 @@ SECTIONS
|
||||||
*(.eh_frame)
|
*(.eh_frame)
|
||||||
*(.debug*)
|
*(.debug*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue