Skip to content

rtl8139: fix tx buffer handling - #2700

Open
sbutz wants to merge 1 commit into
hermit-os:mainfrom
sbutz:fix_rtl8139
Open

rtl8139: fix tx buffer handling#2700
sbutz wants to merge 1 commit into
hermit-os:mainfrom
sbutz:fix_rtl8139

Conversation

@sbutz

@sbutz sbutz commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Fixes #2636.

Transmit buffers are usually released by the TOK interrupt.
Though several frames may have to be sent while handling a single interrupt so the transmit buffer status descriptors are polled too.

Needs #2699 to activate miotcp ci jobs.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark Results

Details
Benchmark Current: 0858f79 Previous: 2e23902 Performance Ratio
startup_benchmark Build Time 91.81 s 80.34 s 1.14
startup_benchmark File Size 0.79 MB 0.80 MB 0.99
Startup Time - 1 core 0.69 s (±0.03 s) 0.75 s (±0.02 s) 0.92
Startup Time - 2 cores 0.69 s (±0.02 s) 0.74 s (±0.02 s) 0.93
Startup Time - 4 cores 0.69 s (±0.02 s) 0.74 s (±0.02 s) 0.93
multithreaded_benchmark Build Time 91.79 s 82.11 s 1.12
multithreaded_benchmark File Size 0.88 MB 0.86 MB 1.02
Multithreaded Pi Efficiency - 2 Threads 65.39 % (±6.48 %) 85.89 % (±6.61 %) 0.76
Multithreaded Pi Efficiency - 4 Threads 40.86 % (±4.04 %) 43.43 % (±2.56 %) 0.94
Multithreaded Pi Efficiency - 8 Threads 19.99 % (±1.90 %) 25.76 % (±1.53 %) 0.78
micro_benchmarks Build Time 226.93 s 80.40 s 2.82
micro_benchmarks File Size 0.88 MB 0.86 MB 1.02
Scheduling time - 1 thread 190.85 ticks (±33.09 ticks) 62.65 ticks (±4.06 ticks) 3.05
Scheduling time - 2 threads 106.70 ticks (±19.83 ticks) 34.08 ticks (±4.10 ticks) 3.13
Micro - Time for syscall (getpid) 9.96 ticks (±5.58 ticks) 3.45 ticks (±0.58 ticks) 2.89
Memcpy speed - (built_in) block size 4096 55322.69 MByte/s (±39751.62 MByte/s) 82448.38 MByte/s (±56997.13 MByte/s) 0.67
Memcpy speed - (built_in) block size 1048576 14477.75 MByte/s (±12618.31 MByte/s) 30585.98 MByte/s (±24707.84 MByte/s) 0.47
Memcpy speed - (built_in) block size 16777216 12308.38 MByte/s (±10265.06 MByte/s) 26340.06 MByte/s (±21720.96 MByte/s) 0.47
Memset speed - (built_in) block size 4096 55668.12 MByte/s (±40008.07 MByte/s) 82292.76 MByte/s (±56891.50 MByte/s) 0.68
Memset speed - (built_in) block size 1048576 14824.54 MByte/s (±12820.66 MByte/s) 31323.85 MByte/s (±25145.86 MByte/s) 0.47
Memset speed - (built_in) block size 16777216 12585.53 MByte/s (±10426.66 MByte/s) 27104.68 MByte/s (±22209.94 MByte/s) 0.46
Memcpy speed - (rust) block size 4096 51007.13 MByte/s (±37618.90 MByte/s) 74097.96 MByte/s (±51811.44 MByte/s) 0.69
Memcpy speed - (rust) block size 1048576 13470.14 MByte/s (±11086.95 MByte/s) 30361.60 MByte/s (±24602.37 MByte/s) 0.44
Memcpy speed - (rust) block size 16777216 11578.38 MByte/s (±9548.61 MByte/s) 27625.34 MByte/s (±22806.88 MByte/s) 0.42
Memset speed - (rust) block size 4096 52398.18 MByte/s (±38215.36 MByte/s) 74373.47 MByte/s (±51976.48 MByte/s) 0.70
Memset speed - (rust) block size 1048576 13853.21 MByte/s (±11323.44 MByte/s) 31110.89 MByte/s (±25033.24 MByte/s) 0.45
Memset speed - (rust) block size 16777216 11958.24 MByte/s (±9814.63 MByte/s) 28386.93 MByte/s (±23265.03 MByte/s) 0.42
alloc_benchmarks Build Time 207.32 s 74.76 s 2.77
alloc_benchmarks File Size 0.87 MB 0.87 MB 0.99
Allocations - Allocation success 91.38 % 91.31 % 1.00
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 61.60 % 61.44 % 1.00
Allocations - Average Allocation time 25449.10 Ticks (±1543.51 Ticks) 5860.58 Ticks (±98.43 Ticks) 4.34
Allocations - Average Allocation time (no fail) 26626.95 Ticks (±1827.53 Ticks) 6554.81 Ticks (±92.86 Ticks) 4.06
Allocations - Average Deallocation time 6476.66 Ticks (±1618.74 Ticks) 1805.01 Ticks (±250.35 Ticks) 3.59
mutex_benchmark Build Time 225.68 s 79.82 s 2.83
mutex_benchmark File Size 0.88 MB 0.86 MB 1.02
Mutex Stress Test Average Time per Iteration - 1 Threads 35.20 ns (±6.95 ns) 12.10 ns (±0.41 ns) 2.91
Mutex Stress Test Average Time per Iteration - 2 Threads 33.42 ns (±7.16 ns) 40.26 ns (±1.68 ns) 0.83

This comment was automatically generated by workflow using github-action-benchmark.

Transmit buffers are usually released by the TOK interrupt.
Though several frames may have to be sent while handling a single interrupt
so the transmit buffer status descriptors are polled too.
@sbutz sbutz changed the title rtl9139: fix tx buffer handling rtl8139: fix tx buffer handling Sep 7, 2026
@sbutz
sbutz marked this pull request as ready for review September 7, 2026 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Some PCI setups are broken on RISC-V

1 participant