From 33465b59e08ba009c04ad2c769c437e044fef4a5 Mon Sep 17 00:00:00 2001 From: vasilito Date: Tue, 7 Jul 2026 00:39:06 +0300 Subject: [PATCH] test-xhci-irq-qemu.sh: grep for actual xHCI reactor log lines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old --check section looked for log strings that do not exist in the xhcid codebase ("xhcid: using MSI/MSI-X interrupt delivery" etc.). All six grep patterns were fictitious — the script was written ahead of P0-A1 anticipating different logging. Rewrite to match actual debug-level output from xhcid: irq_reactor.rs:208 — "Running IRQ reactor with IRQ file and event queue" (irq_file is Some — this is the main proof that interrupts fired) irq_reactor.rs:125 — "Running IRQ reactor in polling mode." (irq_file is None — must NOT appear in a passing run) main.rs:88 — "Enabled MSI-X" (debug, MSI-X configured) main.rs:95 — "Legacy IRQ " (debug, INTx fallback) main.rs:143 — "XHCI " (info, controller detected) Also fails if both polling and IRQ-driven mode appear in the same boot. --- local/scripts/test-xhci-irq-qemu.sh | 51 ++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/local/scripts/test-xhci-irq-qemu.sh b/local/scripts/test-xhci-irq-qemu.sh index f0ce49f715..6976974f8d 100644 --- a/local/scripts/test-xhci-irq-qemu.sh +++ b/local/scripts/test-xhci-irq-qemu.sh @@ -104,32 +104,59 @@ if [[ "$check_mode" -eq 1 ]]; then > "$log_file" 2>&1 status=$? set -e - if ! grep -q "xhcid: using MSI/MSI-X interrupt delivery\|xhcid: using legacy INTx interrupt delivery\|XHCI .* IRQ:" "$log_file"; then - echo "ERROR: xhcid did not report an interrupt-driven mode; see $log_file" >&2 + # --- Post-P0-A1 checks: the reactor MUST run the IRQ-driven path, NOT polling. + # The reactor logs at debug level: + # "Running IRQ reactor with IRQ file and event queue" (irq_file is Some) + # "Running IRQ reactor in polling mode." (irq_file is None) + if ! grep -q "Running IRQ reactor with IRQ file and event queue" "$log_file"; then + echo "ERROR: xhcid IRQ reactor did NOT run the interrupt-driven path" >&2 + echo " Expected: 'Running IRQ reactor with IRQ file and event queue'" >&2 + if grep -q "Running IRQ reactor in polling mode" "$log_file"; then + echo " Found: 'Running IRQ reactor in polling mode' (polling — IRQs still bypassed)" >&2 + fi + echo " See $log_file" >&2 exit 1 fi - if ! grep -q "xhcid: begin attach for port\|xhcid: queueing initial enumeration for port" "$log_file"; then - echo "ERROR: xhcid interrupt-mode proof never observed attached-device enumeration pressure; see $log_file" >&2 + if grep -q "Running IRQ reactor in polling mode" "$log_file"; then + echo "ERROR: xhcid IRQ reactor logged polling mode alongside IRQ-driven mode" >&2 + echo " Both 'Running IRQ reactor with IRQ file and event queue' AND" >&2 + echo " 'Running IRQ reactor in polling mode' appeared in the same boot." >&2 + echo " Only one reactor runs per xhcid instance — this should be impossible." >&2 + echo " See $log_file" >&2 exit 1 fi + + # Determine which interrupt delivery method was selected. + # get_int_method() at main.rs:54-101 logs at debug level: + # "Enabled MSI-X" (MSI-X was configured and enabled) + # "Legacy IRQ " (MSI/MSI-X absent, falling back to INTx) mode="unknown" reason="unknown" - if grep -q "xhcid: using MSI/MSI-X interrupt delivery" "$log_file"; then + if grep -q "Enabled MSI-X" "$log_file"; then mode="msi_or_msix" - reason="driver_selected_interrupt_delivery" - elif grep -q "xhcid: using legacy INTx interrupt delivery" "$log_file"; then + reason="msix_configured" + elif grep -q "Legacy IRQ" "$log_file"; then mode="legacy" - reason="driver_fell_back_to_legacy_intx" - elif grep -q "xhcid: falling back to polling mode" "$log_file"; then - mode="polling" - reason="driver_fell_back_to_polling" + reason="fell_back_to_legacy_intx" + else + # If neither MSI-X nor Legacy IRQ logged, the reactor ran the IRQ path + # (proven above) but the delivery method wasn't captured — still a pass. + mode="irq_path_active" + reason="delivery_method_not_captured_in_log" + fi + + # Verify the xHCI controller was actually detected. + # main.rs:143 logs at info level: "XHCI " + if ! grep -q "^.*XHCI " "$log_file"; then + echo "ERROR: xHCI controller not detected in boot log; see $log_file" >&2 + exit 1 fi echo "IRQ_DRIVER=xhcid" echo "IRQ_MODE=$mode" echo "IRQ_REASON=$reason" echo "IRQ_LOG=$log_file" - echo "xHCI interrupt mode detected in $log_file" + echo "xHCI interrupt-driven mode confirmed in $log_file" exit 0 fi