28afc1fefd
Continuation of 92924224 — the same conditional-ack bug class found in
six more drivers: a foreign interrupt on a shared INTx line skipped the
write-back ack, leaving the kernel-masked IRQ line dead forever.
- sb16d, ac97d: ack before the not-ours continue
- rtl8139d, rtl8168d, ixgbed: ack unconditionally, tick only when ours
(the stale 'TODO: spurious interrupts' comments removed — the
spurious-interrupt confusion was this bug)
- ihdgd: ack unconditionally, handle_events/tick only when ours
Verified: cargo check -Z build-std --target x86_64-unknown-redox for
sb16d, ac97d, rtl8139d, rtl8168d, ixgbed, ihdgd — clean, no new
warnings. nvmed audited: not affected (per-queue MSI pattern, no
conditional ack).
ixgbed (a.k.a. ixy.rs on Redox)
ixgbed is the Redox port of ixy.rs, a Rust rewrite of the ixy userspace network driver.
It is designed to be readable, idiomatic Rust code.
It supports Intel 82599 10GbE NICs (ixgbe family).
Features
- first 10 Gbit/s network driver on Redox
- transmitting 250 times faster than e1000 / rtl8168 driver
- MSI-X interrupts (not supported by Redox yet)
- less than 1000 lines of code for the driver
- documented code
Build instructions
See the Redox README for build instructions.
To run ixgbed on Redox (in case the driver is not shipped with Redox anymore)
- clone this project into
cookbook/recipes/drivers/source/ - create an entry for ixgbed in
cookbook/recipes/drivers/source/Cargo.toml - check if your ixgbe device is included in
config.toml - touch
filesystem.tomlin Redox's root directory, build Redox and run it
Usage
To test the driver's transmit and forwarding capabilities, have a look at rheinfall, a simple packet generator / forwarder application.
Docs
ixgbed contains documentation that can be created and viewed by running
cargo doc --open