Skip to content

Commit 734c98a

Browse files
authored
Mmap file descriptor v2 (#73)
* initial file mmap * debug state for shared mem * broken user fork * fork work * oops we're not in 32 bit * fork but it races * fix to fork race condition * fork assembly cleanup * replaced mmap shared flag with check for memfd * fixed bug with file offsets * removing duplicate syscall declaration * moving shared mem test to its own binary * moving offset to be a part of mappingkind file * init build fix * minor cleanup and fixes
1 parent 73d8140 commit 734c98a

9 files changed

Lines changed: 275 additions & 15 deletions

File tree

crates/init/build.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ mkdir -p fs
1212
# cp shell.elf fs/
1313
# ./ls.rs
1414
# cp ls.elf fs/
15+
./sharedMemTest.rs
16+
cp sharedMemTest.elf fs/
17+
1518

1619
cargo run -q -p initfs --bin util \
1720
-- create --compress --out fs.arc --root fs fs --verbose

crates/init/fs/test2.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hello worldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahello world

crates/init/sharedMemTest.rs

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
#!/usr/bin/env bash
2+
#![doc = r##"<!-- Absolutely cursed hacks:
3+
SOURCE="$0" NAME=$(basename "$0" .rs) DIR=$(realpath $(dirname "$0"))
4+
exec "$(dirname "$0")/../ulib/compile.sh" "$0" <<END_MANIFEST
5+
[package]
6+
name = "$NAME"
7+
version = "0.1.0"
8+
edition = "2021"
9+
10+
[[bin]]
11+
name = "$NAME"
12+
path = "$DIR/$NAME.rs"
13+
14+
[dependencies]
15+
ulib = { path = "$DIR/../ulib" }
16+
17+
[profile.standalone]
18+
inherits = "release"
19+
opt-level = 0
20+
panic = "abort"
21+
strip = "debuginfo"
22+
23+
END_MANIFEST
24+
exit # -->"##]
25+
#![no_std]
26+
#![no_main]
27+
28+
#[macro_use]
29+
extern crate ulib;
30+
31+
use ulib::sys::{openat, close, mmap, munmap, wait, exit, MAP_PRIVATE, MAP_SHARED, MAP_FILE};
32+
33+
#[no_mangle]
34+
fn main() {
35+
36+
let root_fd = 3;
37+
38+
let test_file_path = b"test.txt";
39+
let mut test_text_file = openat(root_fd, test_file_path, 0, 0).unwrap();
40+
41+
static HELLO_CHARS: [u8; 5] = *b"hello";
42+
static WORLD_CHARS: [u8; 5] = *b"world";
43+
44+
let mut mmap_addr: *mut u8 =
45+
unsafe { mmap(0, 4096, 0, MAP_PRIVATE | MAP_FILE, test_text_file, 0).unwrap() } as *mut u8;
46+
println!("Memory range is mmaped!");
47+
48+
for i in 0..5 {
49+
let curr_char: u8 = unsafe { *(mmap_addr.wrapping_add(i)) };
50+
if curr_char != HELLO_CHARS[i] {
51+
panic!(
52+
"mmap filed file has an error at index {}! Expected {} got {}",
53+
i, HELLO_CHARS[i] as char, curr_char as char
54+
);
55+
}
56+
}
57+
58+
println!("mmap of test file succeeded!");
59+
unsafe { munmap(mmap_addr as *mut ()).unwrap() };
60+
_ = close(test_text_file);
61+
62+
println!("starting mmap with offset test 1");
63+
let test_file_path2 = b"test2.txt";
64+
test_text_file = openat(root_fd, test_file_path2, 0, 0).unwrap();
65+
mmap_addr =
66+
unsafe { mmap(0, 4096 * 2, 0, MAP_PRIVATE | MAP_FILE, test_text_file, 6).unwrap() } as *mut u8;
67+
println!("mmap addr: {:x}", mmap_addr as usize);
68+
69+
for i in 0..5 {
70+
let curr_char: u8 = unsafe { *(mmap_addr.wrapping_add(i)) };
71+
if curr_char != WORLD_CHARS[i] {
72+
panic!(
73+
"mmap filed file has an error at index {}! Expected {} got {}",
74+
i, WORLD_CHARS[i] as char, curr_char as char
75+
);
76+
}
77+
}
78+
79+
println!("done with mmap with offset test 1");
80+
81+
println!("starting mmap with offset test 2");
82+
for i in 0..5 {
83+
let curr_char: u8 = unsafe { *(mmap_addr.wrapping_add(i + 4096)) };
84+
if curr_char != WORLD_CHARS[i] {
85+
panic!(
86+
"mmap filed file has an error at index {}! Expected {} got {}",
87+
i, WORLD_CHARS[i] as char, curr_char as char
88+
);
89+
}
90+
}
91+
92+
println!("done with mmap with offset test 2");
93+
unsafe { munmap(mmap_addr as *mut ()).unwrap() };
94+
_ = close(test_text_file);
95+
96+
println!("Starting shared memory test");
97+
98+
let shared_mem_fd = unsafe { ulib::sys::sys_memfd_create() as u32 };
99+
let shared_frame =
100+
unsafe { ulib::sys::mmap(0, 4096, 0, MAP_SHARED, shared_mem_fd, 0) }.unwrap() as *mut u8;
101+
let end_ptr: *mut u8 = shared_frame.wrapping_add(6);
102+
unsafe { end_ptr.write_volatile('.' as u8) };
103+
assert_eq!(unsafe { end_ptr.read_volatile() }, '.' as u8);
104+
105+
println!("Calling fork");
106+
let wait_fd = unsafe { ulib::sys::sys_fork() } as u32;
107+
108+
if wait_fd == 0 {
109+
for _i in 0..1000000 {
110+
if unsafe { end_ptr.read_volatile() } == ('!' as u8) {
111+
break;
112+
}
113+
}
114+
115+
let end_val: u8 = unsafe { end_ptr.read_volatile() };
116+
if end_val != ('!' as u8) {
117+
println!(
118+
"Error: child expected to see '!' with val {} and instead found {}",
119+
('!' as u8),
120+
end_val
121+
);
122+
ulib::sys::exit(5);
123+
}
124+
125+
for i in 0..5 {
126+
let curr_char = unsafe { *shared_frame.wrapping_add(i) } as char;
127+
if curr_char != (HELLO_CHARS[i] as char) {
128+
println!(
129+
"Child found wrong char at index {}. Expected {} found {}",
130+
i,
131+
(HELLO_CHARS[i] as char),
132+
curr_char
133+
);
134+
ulib::sys::exit(5);
135+
}
136+
}
137+
138+
println!("Child is done");
139+
ulib::sys::exit(0);
140+
} else {
141+
unsafe {
142+
core::ptr::copy_nonoverlapping(
143+
&raw const HELLO_CHARS[0],
144+
shared_frame,
145+
HELLO_CHARS.len(),
146+
);
147+
shared_frame.wrapping_add(6).write('!' as u8);
148+
}
149+
150+
let child_exit_val = wait(wait_fd).unwrap();
151+
assert_eq!(child_exit_val, 0);
152+
println!("done with shared memory test, parent received exit code 0 from child");
153+
}
154+
155+
_ = unsafe { munmap(shared_frame as *mut ()) };
156+
157+
exit(15);
158+
}

crates/kernel/src/fs/initfs.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use alloc::sync::{Arc, Weak};
33
use alloc::vec::Vec;
44
use initfs::{Archive, ArchiveError};
55

6+
use crate::arch::memory::palloc::{Size4KiB, PAGE_ALLOCATOR};
67
use crate::process::fd::{
78
boxed_future, ArcFd, DirEntry, FileDescResult, FileDescriptor, FileKind, SmallFuture,
89
};
@@ -252,8 +253,27 @@ impl FileDescriptor for InitFsFile {
252253
boxed_future(async move { Err(()) })
253254
}
254255
}
255-
fn mmap_page(&self, _offset: u64) -> SmallFuture<Option<FileDescResult>> {
256-
boxed_future(async move { None })
256+
fn mmap_page(&self, offset: u64) -> SmallFuture<Option<FileDescResult>> {
257+
if self.header.is_dir() {
258+
return boxed_future(async move { None });
259+
}
260+
261+
//File case, need to call read
262+
boxed_future(async move {
263+
let page = PAGE_ALLOCATOR.get().alloc_mapped_frame::<Size4KiB>();
264+
let page_paddr = page.paddr;
265+
let page_virt = PAGE_ALLOCATOR.get().get_mapped_frame::<Size4KiB>(page);
266+
let buf_ref = unsafe { core::slice::from_raw_parts_mut(page_virt as *mut u8, 4096) };
267+
match self.read(offset, buf_ref).await.as_result() {
268+
Ok(_val) => {
269+
return Some(FileDescResult::ok(page_paddr as u64));
270+
}
271+
Err(_val) => {
272+
println!("Read failed");
273+
return None;
274+
}
275+
}
276+
})
257277
}
258278
fn as_any(&self) -> &dyn core::any::Any {
259279
self

crates/kernel/src/process/mem.rs

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ use crate::event::context::Context;
1313
use crate::event::exceptions::DataAbortISS;
1414
use crate::syscall::proc::exit_user_thread;
1515

16+
use crate::syscall::fb_hack::MemFd;
17+
1618
use super::fd::ArcFd;
1719

1820
#[derive(Debug)]
@@ -38,7 +40,7 @@ pub struct MemoryRangeNode {
3840
#[derive(Clone)]
3941
pub enum MappingKind {
4042
Anon,
41-
File(ArcFd),
43+
File { fd: ArcFd, offset: usize },
4244
}
4345

4446
impl UserAddrSpace {
@@ -94,6 +96,13 @@ impl UserAddrSpace {
9496
.await
9597
.unwrap();
9698

99+
//Don't want to copy data in shared mem
100+
if let MappingKind::File { fd, .. } = &node.kind {
101+
if let Some(_s) = fd.as_any().downcast_ref::<MemFd>() {
102+
continue;
103+
}
104+
}
105+
97106
let src_data = node.start as *const u8;
98107
let dst_data = node.start as *mut u8;
99108
let buf_ptr: *mut u8 = buffer.as_mut_ptr().cast();
@@ -194,18 +203,29 @@ impl UserAddrSpace {
194203
};
195204

196205
let leaf = unsafe { desc.leaf };
206+
197207
if leaf.is_valid() {
198208
let new_desc = TranslationDescriptor::unset();
199209
unsafe {
200210
set_translation_descriptor(self.table, virt_addr, 3, 0, new_desc, false)
201211
.unwrap()
202212
}
213+
//Need this invalidation here or it still accesses old page
214+
unsafe {
215+
core::arch::asm! {
216+
"dsb ISH",
217+
"tlbi vaae1, {0}",
218+
in(reg) (virt_addr >> 12)
219+
//options(readonly, nostack, preserves_flags)
220+
}
221+
}
222+
203223
// TODO: free it
204224
match &vme.kind {
205225
MappingKind::Anon => {
206226
// TODO: free
207227
}
208-
MappingKind::File(_arc) => {
228+
MappingKind::File { .. } => {
209229
// TODO: notify file that it's unused?
210230
// (for ref counts, page cache?)
211231
}
@@ -254,12 +274,23 @@ impl UserAddrSpace {
254274

255275
desc
256276
}
257-
MappingKind::File(fd) => {
277+
MappingKind::File {
278+
fd: arc_fd,
279+
offset: file_offset,
280+
} => {
258281
let offset = vaddr - vme.start;
259-
let page = match fd.mmap_page(offset as u64).await.map(|r| r.as_result()) {
282+
let page = match arc_fd
283+
.mmap_page(offset as u64 + (*file_offset as u64))
284+
.await
285+
.map(|r| r.as_result())
286+
{
260287
Some(Ok(page)) => page,
261-
Some(Err(_e)) => return Err(MmapError::FileError),
262-
None => return Err(MmapError::FileError),
288+
Some(Err(_e)) => {
289+
return Err(MmapError::FileError);
290+
}
291+
None => {
292+
return Err(MmapError::FileError);
293+
}
263294
};
264295
let desc = LeafDescriptor::new(page as usize)
265296
.union(LeafDescriptor::UNPRIVILEGED_ACCESS)
@@ -310,7 +341,6 @@ unsafe impl Sync for UserAddrSpace {}
310341
pub fn page_fault_handler(ctx: &mut Context, far: usize, _iss: DataAbortISS) -> *mut Context {
311342
run_async_handler(ctx, async move |mut context: HandlerContext<'_>| {
312343
let proc = context.cur_process().unwrap();
313-
314344
// TODO: make sure misaligned loads don't loop here?
315345
let page_addr = (far / PAGE_SIZE) * PAGE_SIZE;
316346

crates/kernel/src/syscall/fb_hack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ pub unsafe fn sys_memfd_create(ctx: &mut Context) -> *mut Context {
9999
})
100100
}
101101

102-
struct MemFd {
102+
pub struct MemFd {
103103
pages: SpinLock<BTreeMap<usize, PhysicalPage<Size4KiB>>>,
104104
}
105105

crates/kernel/src/syscall/mmap.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ bitflags::bitflags! {
77
}
88
struct MmapFlags: u32 {
99
const MAP_FIXED = 1 << 0;
10-
const MAP_ANONYMOUS = 1 << 1;
10+
const MAP_ANONYMOUS = 1 << 1; //if not set this indicates file
11+
const MAP_SHARED = 1 << 2; //if not set indicates private mapping
1112
}
1213
}
1314

@@ -32,12 +33,13 @@ pub unsafe fn sys_mmap(ctx: &mut Context) -> *mut Context {
3233
};
3334

3435
let fd = ctx.regs[4];
35-
// TODO: File offset
36-
let _offset = ctx.regs[5];
36+
let offset = ctx.regs[5];
3737

3838
run_async_handler(ctx, async move |mut context: HandlerContext<'_>| {
3939
let proc = context.cur_process().unwrap();
4040

41+
let _is_shared: bool = flags.contains(MmapFlags::MAP_SHARED);
42+
4143
let kind = if flags.contains(MmapFlags::MAP_ANONYMOUS) {
4244
MappingKind::Anon
4345
} else {
@@ -46,7 +48,7 @@ pub unsafe fn sys_mmap(ctx: &mut Context) -> *mut Context {
4648
context.regs().regs[0] = i64::from(-1) as usize;
4749
return context.resume_final();
4850
};
49-
MappingKind::File(file)
51+
MappingKind::File { fd: file, offset }
5052
};
5153

5254
let res;

crates/kernel/src/syscall/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ pub unsafe fn register_syscalls() {
3535

3636
register_syscall_handler(21, time::sys_get_time_ms);
3737
register_syscall_handler(22, time::sys_sleep_ms);
38-
3938
register_syscall_handler(23, fb_hack::sys_acquire_fb);
4039
register_syscall_handler(24, fb_hack::sys_memfd_create);
4140
register_syscall_handler(25, fb_hack::sys_poll_key_event);

0 commit comments

Comments
 (0)