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