From 332d08192e0ce668a07638a8d839257d1a3b8554 Mon Sep 17 00:00:00 2001 From: Yuuki Takano Date: Fri, 12 Jun 2026 09:41:04 +0900 Subject: [PATCH 1/2] fix(igc): do not use `num_cpu()` when slecting the number of queues Signed-off-by: Yuuki Takano --- awkernel_drivers/src/pcie/intel/igc.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/awkernel_drivers/src/pcie/intel/igc.rs b/awkernel_drivers/src/pcie/intel/igc.rs index 8cd68537e..008b70d01 100644 --- a/awkernel_drivers/src/pcie/intel/igc.rs +++ b/awkernel_drivers/src/pcie/intel/igc.rs @@ -1494,17 +1494,15 @@ fn igc_is_valid_ether_addr(addr: &[u8; 6]) -> bool { /// Select the number of Rx/Tx queue pairs to enable. /// -/// The result is constrained by three factors: +/// The result is constrained by two factors: /// 1. **MSI-X vectors**: one vector per queue plus one for link events. -/// 2. **CPU count**: no benefit in having more queues than CPUs. -/// 3. **Hardware cap**: IGC/I225 supports at most 4 RSS queues. +/// 2. **Hardware cap**: IGC/I225 supports at most 4 RSS queues. /// /// The result is rounded down to the nearest power of two (1, 2, or 4) so that /// the 128-entry RSS redirection table divides evenly among queues, giving each /// queue an equal share of hashed flows. fn igc_select_num_queues(available_vectors: usize) -> usize { - let cpu_count = core::cmp::max(1, awkernel_lib::cpu::num_cpu()); - let available = core::cmp::min(core::cmp::min(available_vectors, cpu_count), 4); + let available = core::cmp::min(available_vectors, 4); if available >= 4 { 4 From 8c3419d4e6650afd5309a2cf72ca34b996c785ab Mon Sep 17 00:00:00 2001 From: Yuuki Takano Date: Fri, 12 Jun 2026 14:58:53 +0900 Subject: [PATCH 2/2] add a doc comment regarding the number of CPU Signed-off-by: Yuuki Takano --- awkernel_drivers/src/pcie/intel/igc.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/awkernel_drivers/src/pcie/intel/igc.rs b/awkernel_drivers/src/pcie/intel/igc.rs index 008b70d01..999c288b9 100644 --- a/awkernel_drivers/src/pcie/intel/igc.rs +++ b/awkernel_drivers/src/pcie/intel/igc.rs @@ -1501,6 +1501,12 @@ fn igc_is_valid_ether_addr(addr: &[u8; 6]) -> bool { /// The result is rounded down to the nearest power of two (1, 2, or 4) so that /// the 128-entry RSS redirection table divides evenly among queues, giving each /// queue an equal share of hashed flows. +/// +/// Note: for future extensibility +/// +/// `num_cpu()` is not available when this function is called during device initialization. +/// If the number of CPU cores is needed to determine the number of queues, the driver should +/// find the number of CPU cores through other means (e.g., ACPI tables). fn igc_select_num_queues(available_vectors: usize) -> usize { let available = core::cmp::min(available_vectors, 4);