dde_rump: increase max I/O request size to 1 MiB

With the increase of MAXPHYS, the rump kernel requests a contiguous
allocation of 2101248 bytes, which exceeds the allocator's block size of
2 MiB.

  Error: backend allocator: Unable to allocate memory (size: 2101248 align: 12)

The patch avoids this corner case by increasing the allocator's block
size to 4 MiB.

Fixes #4613
This commit is contained in:
Norman Feske
2022-09-15 14:05:06 +02:00
committed by Christian Helmuth
parent 99254b4d52
commit 20df224b19
8 changed files with 19 additions and 11 deletions

View File

@@ -1,7 +1,7 @@
RUMP_PORT_DIR := $(call select_from_ports,dde_rump)/src/lib/dde_rump
RUMP_BASE := $(BUILD_BASE_DIR)/var/libcache/rump
CC_C_OPT += -D__NetBSD__ -D'CTASSERT(x)=' -DMAXPHYS=32768 -D_RUMP_NATIVE_ABI \
CC_C_OPT += -D__NetBSD__ -D'CTASSERT(x)=' -DMAXPHYS=1048576 -D_RUMP_NATIVE_ABI \
-DMAXUSERS=32 -DCOMPAT_50=1 -DCOMPAT_60=1 -DDIAGNOSTIC -DKTRACE \
-DRUMP_KERNEL_IS_LIBC -D_RUMPKERNEL -D_KERNEL -DMULTIPROCESSOR \
-D_MODULE -DMODULAR -DRUMP_USE_CTOR

View File

@@ -3,7 +3,7 @@ set mkfs_opts "-F"
set test_build_components "lib/vfs_rump"
set test_vfs_config "<rump fs=\"ext2fs\" ram=\"7M\" writeable=\"yes\"/>"
set test_vfs_config "<rump fs=\"ext2fs\" ram=\"10M\" writeable=\"yes\"/>"
set test_boot_modules {
rump_fs.lib.so

View File

@@ -8,7 +8,7 @@ set mkfs_opts "-F"
set test_build_components "lib/vfs_rump"
set test_vfs_config "<rump fs=\"ext2fs\" ram=\"7M\" writeable=\"yes\"/>"
set test_vfs_config "<rump fs=\"ext2fs\" ram=\"10M\" writeable=\"yes\"/>"
set test_boot_modules {
rump_fs.lib.so

View File

@@ -39,7 +39,7 @@ create_boot_directory
# Generate config
#
append config {
<config>
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
@@ -73,7 +73,7 @@ append config {
</config>
</start>
<start name="vfs" caps="200">
<resource name="RAM" quantum="16M" />
<resource name="RAM" quantum="25M" />
<provides><service name="File_system"/></provides>
<config>
<vfs> <rump fs="ext2fs" ram="10M"/> </vfs>

View File

@@ -56,7 +56,7 @@ namespace Allocator {
private:
enum {
BLOCK_SIZE = 2 * 1024 * 1024, /* 2 MB */
BLOCK_SIZE = 4 * 1024 * 1024, /* bytes */
ELEMENTS = VM_SIZE / BLOCK_SIZE, /* MAX number of dataspaces in VM */
};

View File

@@ -107,7 +107,15 @@ class Backend
Genode::Allocator_avl _alloc { &Rump::env().heap() };
Genode::Entrypoint &_ep { Rump::env().env().ep() };
Block::Connection<Job> _session { Rump::env().env(), &_alloc };
/*
* The tx_buf_size is chosen such that one I/O request fits into the
* I/O buffer at once. The size of NetBSD's I/O requests is bounded by
* the definition of MAXPHYS. The 64 KiB are added to account for the
* space needed for the submit/ack queues.
*/
Block::Connection<Job> _session { Rump::env().env(), &_alloc,
1024*1024 + 64*1024 };
Block::Session::Info _info { _session.info() };
Genode::Mutex _session_mutex;
Io_signal_blockade _io_signal_blockade { _ep,