This prevents duplicate packet acks and, thus, the following error on
the client side when the ack'd packet is released.
Error: Bit_array: invalid clear
This commit renovates the aged VFS Block plugin by utilizing the
Block Job API.
The plugin still creates one connection to a Block provider but
operates in a non-blocking fashion. In case multiple VFS handles
concurrently operate on the connection - in the most common usage
there is only one VFS handle in use - the Job API serializes all
requests.
Requests that a larger than the configured I/O buffer, i.e. the
shared memory dataspace between the components, are transparently
handled by the Job API. The plugin itself does not contain a
block-cache.
Unaligned (the seek offset does not match a block-boundary) and/or
partial (the count is less than a full block) requests are handled
differently depending whether it is a read or write request:
For 'read' requests the starting block is round-down to the nearest
block to cover an unaligned start offset and the transfer count is
round-up (within reasons, e.g. end-of-file) to take care of partial
blocks at the end. The constraining parameters are stored in the
Job object and performing data memcopy operations adhere to them.
For 'write' requests any unaligned and/or partial operation will
lead to issuing a 'read' request first for the covering block in
question. A crooked request is dealt with in at most three rounds.
The first round handles the unaligned start offset, the second
tries to produce the largest aligned and full request while the
third and last round handles the remaining partial request. A
unaligned buffer of 4096 bytes is used to temporarily store the
required data.
For the time being the underlying block-size needs to be a multiple
of 512 and at most 4096 bytes. Accessing a larger underlying
block-size in smaller blocks, e.g. issuing 512 byte requests on
a 4096 bytes session, is possible but might incur substantial
overhead.
Fixes#2263.
This commit raises the Packet_stream bulk-size to 4 MiB from the
128 KiB used before. It also removes the 'block_buffer_count' option
as the count is now calculated internally and covers the complete
bulk-size. A new 'io_buffer' option is introduced that manages the
bulk-size.
This change can double the throughput with sequential I/O operations
when employing larger block-sizes.
Issue #2263.
By manually obtaining the ROM sessions for includes via 'Env::try_session'
instead of using 'Attached_rom_dataspace', the event filter becomes able
to gracefully deal with 'Session_error::DENIED' as non-fatal condition.
This is desirable when interactively configuring the event filter on
Sculpt OS where temporary misconfigurations are somewhat expected.
Issue #5595
If the accumulated utilization data across all threads is zero,
inclusive the idle thread, we have an unexpected case. Either, the idle
thread has same value, or the other threads has some, but both groups should
not have 0 in sum.
In such cases, mark the output with a question mark and start guessing,
for the idle thread 100% (idle) and 0% for all other threads.
Without this commit, on seL4 the CPUs without a Genode thread
(so in SMP setups) won't be shown in the list at all.
Issue #5581
As the usb-host implementation warns about unset (resp. infinite)
device-control timeouts and timeouts > 5'000 ms, we equip the clients
with a parameter to define those timeouts.
Note, the only user of this API is currently lx_emul, which was adapted
to setup Linux USB_CTRL_GET_TIMEOUT/USB_CTRL_SET_TIMEOUT max timeout of
5'000 ms.
Issue #5500
Issue #5596
Enable KVM by default, since beginning with Qemu 6.1.0 the initial
AMD-NPT fault is missing and no guest code is actually mapped by us ...
Qemu+KVM on AMD is working fine, however the initial guest fault address is
page aligned and not the exact IP as on Intel ...
The change prevents the following build errors on riscv.
In file included from /data/depot/checker/api/vfs/2025-05-18/include/vfs/readonly_value_file_system.h:19,
from /data/depot/checker/src/vfs_legacy_oss/2025-05-18/src/lib/vfs/legacy_oss/vfs_oss.cc:22:
/data/depot/checker/api/vfs/2025-05-18/include/vfs/readonly_value_file_system.h: In instantiation of ‘class Vfs::Readonly_value_file_system<unsigned int>’:
/data/depot/checker/src/vfs_legacy_oss/2025-05-18/src/lib/vfs/legacy_oss/vfs_oss.cc:152:26: required from here
152 | _channels_fs .value(channels);
| ^
/data/depot/checker/api/vfs/2025-05-18/include/vfs/single_file_system.h:229:22: error: ‘virtual void Vfs::Single_file_system::close(Vfs::Vfs_handle*)’ was hidden [-Werror=overloaded-virtual=]
229 | void close(Vfs_handle *handle) override
| ^~~~~
/data/depot/checker/api/vfs/2025-05-18/include/vfs/readonly_value_file_system.h:170:22: note: by ‘void Vfs::Readonly_value_file_system< <template-parameter-1-1>, BUF_SIZE>::close(Vfs::Vfs_watch_handle*) [with T = unsigned int; unsigned int BUF_SIZE = 128]’
170 | void close(Vfs_watch_handle *handle) override
| ^~~~~
https://stackoverflow.com/questions/9995421/gcc-woverloaded-virtual-warnings
suggests to address this by an explicit using statement.
Issue #5540
Besides replacing 'new' by 'Memory::Constrained_obj_allocator',
this patch consolidates the error types of the RPC functions that
can produce allocation failures.
The patch also removes the use of 'Attached_ram_dataspace' and
'Attached_dataspace' because these utilities throw.
Allocation errors of the trace-control area are now explicitly reflected
by 'Constructed' state values to Cpu_root.
Issue #5245
This patch unifies Parent::Session_error, Root::Create_error, and
Local_service::Create_error by using the centrally defined Session_error.
This type is now also used by Session_state::Factory, which thereby
becomes void of exceptions.
The patch also streamlines the Session_response enum type to become
consistent with the naming of the Session_error conditions.
Issue #5245
When the multitouch driver occasionally looses track of a finger, it
may occur that touch id 0 is released before the other ids. This messes
with the gesture detection. This commit adds a Multitouch struct that reliably
tracks the presence of fingers for all gestures and thereby moves this state
out of the individual gestures.
Fixes#5578
The '_create_session' method returns now a 'Create_result' instead
of a pointer. This result can either be a reference to the new
session object or an 'Create_error' code.
The '_upgrade_session' and '_destroy_session' method now take a
reference instead of a pointer as argument.
Fixes#5562
The initialization of the packet-stream allocator via
'Range_allocator::add_range' can fail with an 'Alloc_error'. This could
be observed with run/nic_router_stress running in Pistachio.
The patch reflects the construction error as constant 'constructed' that
can now be evaluated by the creating code.
It also fixes the particular problem of the NIC/Uplink-session creation
error in the NIC router and adds diagnostic messages to reveal further
manifestations of this problem.
Fixes#5566
- Introduce common Buffer_error type.
- Enforce the handling of buffer-exceeded errors.
- Unify interface of Reporter and Expanding_reporter,
using Byte_range_ptr instead of basic types.
- Simplify the Xml_generator API by providing the plain
class function Xml_generator::generate.
- Use Expanding_reporter where appropriate.
Fixes#5561
Replace try/catch/throw by guard objects.
In panic situations, print an error and sleep forever.
Infinitely block invalid IPC calls.
Weasel out of cap ref count overflows by clamping count to max.
Accept ID-space ambiguities but be verbose about it.
Skip Duration::add when detecting an integer overflow.
Issue #5245
The Env::session method no longer throws 'Service_denied'. Instead, the
parent's denial is now considered as fatal, yielding an error message
and stopping the component. This is the common case where sessions are
established via 'Connection' objects. The failure to obtain a connection
because of the parent's decision is not recoverable.
The Env::try_session method now uses a result type instead of exceptions
to reflect all error conditions, including Session_error::DENIED. This
is useful for intermediary component like init, which initiate session
requests on behalf of their children and shall never reach a
non-recoverable state.
The change of Env has ripple effects through service.h and the child
framework. The former reflection of 'Out_of_ram' and 'Out_of_caps' by
Service::initiate_request has been replaced by a result type. The patch
adds diagnostic messages at all places where such errors are further
propagated.
Issue #5251
This patch replaces 'Child_policy::resolve_session_request' with
an 'with_route' method that takes two functors as arguments. It also
removes the 'Service_denied' exception from local_connection.h, which,
in turn requires changing 'Child::pd' to 'Child::with_pd' to account for
the error case where a 'Child' object has been created but failed to
obtain its PD session.
Issue #5251