Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ports: Update rvvm to 0.6 #23673

Merged
merged 1 commit into from Mar 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion Ports/AvailablePorts.md
Expand Up @@ -280,7 +280,7 @@ This list is also available at [ports.serenityos.net](https://ports.serenityos.n
| [`rsync`](rsync/) | rsync | 3.2.7 | https://rsync.samba.org/ |
| [`rubberband`](rubberband/) | Rubberband | 3.3.0 | https://breakfastquay.com/rubberband/ |
| [`ruby`](ruby/) | Ruby | 3.2.2 | https://www.ruby-lang.org/ |
| [`rvvm`](rvvm/) | RVVM - The RISC-V Virtual Machine | 0.5 | https://github.com/LekKit/RVVM |
| [`rvvm`](rvvm/) | RVVM - The RISC-V Virtual Machine | 0.6 | https://github.com/LekKit/RVVM |
| [`sam`](sam/) | Software Automatic Mouth (SAM) | c86ea39 | https://github.com/vidarh/SAM |
| [`scummvm`](scummvm/) | ScummVM | 2.8.0 | https://www.scummvm.org/ |
| [`sdl12-compat`](sdl12-compat/) | SDL2 compatibility layer for SDL 1.2 games | 1.2.64 | https://github.com/libsdl-org/sdl12-compat/ |
Expand Down
12 changes: 6 additions & 6 deletions Ports/rvvm/package.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env -S bash ../.port_include.sh

port='rvvm'
version='0.5'
archive_hash='3a1dbb91ad04f068078bc6c6c27cc5792eebc111907cb5a14bde158fe6e757c9'
version='0.6'
archive_hash='97e98c95d8785438758b81fb5c695b8eafb564502c6af7f52555b056e3bb7d7a'
files=(
"https://github.com/LekKit/RVVM/archive/v${version}.tar.gz#${archive_hash}"
)
workdir="RVVM-${version}"
depends=('sdl12-compat')
depends=('SDL2')

build_opts=(
'GIT_COMMIT=76796ba'
'GIT_COMMIT=f937fd8'
'OS=SerenityOS'
'USE_NET=1'
'USE_SDL=1'
'USE_SDL=2'
)
makeopts+=("${build_opts[@]}" 'all' 'lib')
installopts+=("${build_opts[@]}")
60 changes: 60 additions & 0 deletions Ports/rvvm/patches/0001-Disable-threaded-IO-on-Serenity.patch
@@ -0,0 +1,60 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: LekKit <50500857+LekKit@users.noreply.github.com>
Date: Sat, 23 Mar 2024 13:31:42 +0200
Subject: [PATCH] Disable threaded IO on Serenity

Due to sloppy scheduler/threading behavior on Serenity,
threaded IO is disabled in this port for now.
Otherwise U-Boot randomly fails to read data from NVMe,
or fails to initialize NVMe altogether, along with other IO
issues in guests - all due to threaded tasks being randomly
delayed for very long.

I am not an expert on how scheduler works in Serenity,
so I am unable to fix it yet.
This problem was also visible in previous v0.5 version of this port,
but back then I thought it's some kind of a temporary problem.
Couldn't reproduce this on any other host OS.
---
src/threading.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/src/threading.c b/src/threading.c
index 98883ede4fe63faf6b328e427fc1be9e5114c445..705749ca60092ddc42f07ff19d8a66bce797dc80 100644
--- a/src/threading.c
+++ b/src/threading.c
@@ -318,6 +318,12 @@ void condvar_free(cond_var_t* cond)

// Threadpool task offloading

+// Serenity has serious scheduler issues that cause threadpool to
+// perform very poorly when vCPU is not sleeping.
+// Basically a thread that uses 100% of CPU on Serenity somehow
+// monopolizes host CPU so threadpool/eventloop tasks are timing out.
+
+#ifndef __serenity__
#define WORKER_THREADS 4
#define WORKQUEUE_SIZE 2048
#define WORKQUEUE_MASK (WORKQUEUE_SIZE - 1)
@@ -440,8 +446,11 @@ static void* threadpool_worker(void* ptr)
return ptr;
}

+#endif
+
static bool thread_queue_task(thread_func_t func, void** arg, unsigned arg_count, bool va)
{
+#ifndef __serenity__
DO_ONCE ({
atomic_store_uint32_ex(&pool_run, 1, ATOMIC_RELAXED);
workqueue_init(&pool_wq);
@@ -461,6 +470,9 @@ static bool thread_queue_task(thread_func_t func, void** arg, unsigned arg_count
// Still not queued!
// Assuming entire threadpool is busy, just do a blocking task
DO_ONCE(rvvm_warn("Blocking on workqueue task %p", func));
+#else
+ UNUSED(func); UNUSED(arg); UNUSED(arg_count); UNUSED(va);
+#endif
return false;
}

19 changes: 19 additions & 0 deletions Ports/rvvm/patches/ReadMe.md
@@ -0,0 +1,19 @@
# Patches for rvvm on SerenityOS

## `0001-Disable-threaded-IO-on-Serenity.patch`

Disable threaded IO on Serenity

Due to sloppy scheduler/threading behavior on Serenity,
threaded IO is disabled in this port for now.
Otherwise U-Boot randomly fails to read data from NVMe,
or fails to initialize NVMe altogether, along with other IO
issues in guests - all due to threaded tasks being randomly
delayed for very long.

I am not an expert on how scheduler works in Serenity,
so I am unable to fix it yet.
This problem was also visible in previous v0.5 version of this port,
but back then I thought it's some kind of a temporary problem.
Couldn't reproduce this on any other host OS.