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 equips 'with_sub_node' with the ability of returning values
from a sub node's scope. This facilitates the use of constants instead of
variables for returning parsed information.
Issue #5608
*TODO* meaningful commit message
*TODO* move proc run_bootloader_string to sane place (image/uboot ?)
to shorten waiting time, in case the board or the serial is not working.
During page fault resolving by the pager_ep on base-sel4 it happens,
that the Page_table_registry allocates via the used TSlab more core local
meta data.
This leads to concurrent execution of alloc_ram in the ram_dataspace_factory
by the entrypoint and pager_ep code. Synchronize ram allocation/deallocation
by a mutex.
Issue #5581
the virtual address allocation and de-allocation. On sel4 the main, entrypoint
and pager_ep may allocate concurrently RAM, e.g. pager_ep for meta data.
Issue #5581
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.
Reserve the top-most priority for the runtime-init, and lower
driver, multimedia, default and background components each by one
priority-level.
Fix#5605
Generic priority values actually range from 0 to PRIORITY_LIMIT-1,
hence the resulting platform priority is in the range from 0 to
pf_prio_limit-1.
Fixes#5603
which is ever in 4k pieces at moment in size. This avoids dynamic on
several allocators. In case core has pressure on the virtual region allocator
(which is limited in base-sel4), there will be ever the one 4k to clear
dataspaces iteratively.
Issue #5581
When executing
make KERNEL=hw BOARD=virt_qemu_riscv TEST_PKGS=test-stdcxx TEST_SRCS=run/depot_autopilot
we experienced errors like
Error: LD: symbol not found: 'transaction clone for operator new[](unsigned long)'
This issue seems to be caused by weak undefined symbols of libitm and
seems to be related to
https://gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=69506
Thus, we define _GLIBCXX_USE_WEAK_REF 0 like its done in newlib and
darwin environments and, thereby, drop ITM support.
Fixes#5607
When executing
make KERNEL=hw BOARD=virt_qemu_riscv TEST_PKGS=test-stdcxx TEST_SRCS= run/depot_autopilot
we experience errors like
Error: LD: symbol not found: 'transaction clone for operator new[](unsigned long)'
This issue seems to be caused by weak undefined symbols of libitm and
seems to be related to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119369. On x86 these
symbols will end as undefined functions causing R_JUMP_SLOT relocation.
Because the functions are not called, there is no problem. On RISC-V
these symbols have no type, they are not functions and R_RISCV_64
relocations are emitted by binutils-ld. These relocations are used for
global data and resolved during library load, by searching the loaded
library only. Because the symbol cannot be resolved the test fails.
This commit ignores undefined weak symbols for R_RISCV_64 relocations
during program load.
It should be reverted after a tool chain/binutils update if possible.
issue #5607
The irq session requires a Irq thread per IRQ, so free up also the stack
of an IRQ thread on destruction to avoid leakage of physical memory.
Issue #5581
By default, we let the uvc library select an appropriate mode by passing
UVC_FRAME_FORMAT_ANY to uvc_get_stream_ctrl_format_size(), but format
can still be controlled by the config.
Issue #5601
By default, we let the uvc library select an appropriate mode by passing
0 to uvc_get_stream_ctrl_format_size(), but fps can still be controlled
by the config.
Issue #5601
In case that IO-MEM resources are requested for serveral dataspaces in
(disjunct) parts on the same physical 4k range, the sel4 kernel will deny
to convert the same 4k physical page multiple times. Seen with USB EHCI
device, e.g. on IMX6q-sabrelite.
Instead, check whether a IO-MEM resource is requested the first time
respectively the last reference is freed, so that the base-sel4 code can only
convert the frame one time respectively revert the frame only once.
Fixes#5597
Replace _map_local and _unmap_local in the I/O mem session component
by _acquire and _release. The _acquire and _release must be implemented
per base-<kernel>.
The commit is a preparation commit for seL4, so that it can implement
_acquire differently in a subsequent commit to solve #5597 actually.
Issue #5597
Rather than determing the completeness state by inspecting the
'total' and 'now' attributes in the progress use the newly made
available 'finished' attribute instead.
Issue #5600.
This commit allows for explicitly checking the state and result of a
fetch operation by enriching the report with a 'finished' and 'result'
attribute. On a pending download 'finished' is set to 'false'. The
'result' attribute is added when the download is actually complete.
This commit is mainly a prerequisite for supporting the handling of
HEAD requests via the '<progress>' report where no data is actually
transfered and checking 'now' against 'total' will not work.
Issue #5600.
This commit remedies the prior update commit that adapted to the
API change in curl in a shortsided way. As the progress callback
gives progress information as number of bytes let us do the same
in our progress report.
Issue #5600.
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