From bbdacaddcc25d1d137a0bb0781eba603641baa92 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Thu, 7 Jul 2022 19:24:42 +0200 Subject: kernel/vfs: delegate support in _syscall_fs_respond! this is big in terms of speed, it avoids a lot of unnecessary context switches --- src/kernel/arch/i386/driver/fsroot.c | 4 ++-- src/kernel/arch/i386/driver/ps2.c | 8 ++++---- src/kernel/arch/i386/driver/serial.c | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src/kernel/arch') diff --git a/src/kernel/arch/i386/driver/fsroot.c b/src/kernel/arch/i386/driver/fsroot.c index bea89cd..10cf3bc 100644 --- a/src/kernel/arch/i386/driver/fsroot.c +++ b/src/kernel/arch/i386/driver/fsroot.c @@ -134,9 +134,9 @@ static int handle(struct vfs_request *req) { static void accept(struct vfs_request *req) { if (req->caller) { - vfsreq_finish(req, handle(req)); + vfsreq_finish(req, handle(req), 0, NULL); } else { - vfsreq_finish(req, -1); + vfsreq_finish(req, -1, 0, NULL); } } diff --git a/src/kernel/arch/i386/driver/ps2.c b/src/kernel/arch/i386/driver/ps2.c index e1e97c0..36c1b92 100644 --- a/src/kernel/arch/i386/driver/ps2.c +++ b/src/kernel/arch/i386/driver/ps2.c @@ -35,7 +35,7 @@ static void accept(struct vfs_request *req) { switch (req->type) { case VFSOP_OPEN: valid = req->input.len == 0 && !(req->flags & OPEN_CREATE); - vfsreq_finish(req, valid ? 0 : -1); + vfsreq_finish(req, valid ? 0 : -1, 0, NULL); break; case VFSOP_READ: if (ring_size((void*)&backlog) == 0) { @@ -45,13 +45,13 @@ static void accept(struct vfs_request *req) { ret = clamp(0, req->output.len, sizeof buf); ret = ring_get((void*)&backlog, buf, ret); virt_cpy_to(req->caller->pages, req->output.buf, buf, ret); - vfsreq_finish(req, ret); + vfsreq_finish(req, ret, 0, NULL); } else { - vfsreq_finish(req, -1); + vfsreq_finish(req, -1, 0, NULL); } break; default: - vfsreq_finish(req, -1); + vfsreq_finish(req, -1, 0, NULL); break; } } diff --git a/src/kernel/arch/i386/driver/serial.c b/src/kernel/arch/i386/driver/serial.c index b776d0c..a5285e4 100644 --- a/src/kernel/arch/i386/driver/serial.c +++ b/src/kernel/arch/i386/driver/serial.c @@ -73,7 +73,7 @@ static void accept(struct vfs_request *req) { switch (req->type) { case VFSOP_OPEN: valid = req->input.len == 0 && !(req->flags & OPEN_CREATE); - vfsreq_finish(req, valid ? 0 : -1); + vfsreq_finish(req, valid ? 0 : -1, 0, NULL); break; case VFSOP_READ: if (ring_size((void*)&backlog) == 0) { @@ -83,9 +83,9 @@ static void accept(struct vfs_request *req) { ret = clamp(0, req->output.len, sizeof buf); ret = ring_get((void*)&backlog, buf, ret); virt_cpy_to(req->caller->pages, req->output.buf, buf, ret); - vfsreq_finish(req, ret); + vfsreq_finish(req, ret, 0, NULL); } else { - vfsreq_finish(req, -1); + vfsreq_finish(req, -1, 0, NULL); } break; case VFSOP_WRITE: @@ -97,10 +97,10 @@ static void accept(struct vfs_request *req) { serial_write(iter.frag, iter.frag_len); ret = iter.prior; } else ret = -1; - vfsreq_finish(req, ret); + vfsreq_finish(req, ret, 0, NULL); break; default: - vfsreq_finish(req, -1); + vfsreq_finish(req, -1, 0, NULL); break; } } -- cgit v1.2.3