|SUCCESS|dpdk-next-net-intel|cf20807cce| intel-Functional

sys_stv at intel.com sys_stv at intel.com
Thu Oct 22 18:38:15 CEST 2026


Test-Label: intel-Functional
Test-Status: SUCCESS
_Functional PASS_

DPDK git repo: dpdk-next-net-intel
commit cf20807cce0589e6abf5e026f007e46384df7a7e
Author: Marek Kasiewicz <marek.kasiewicz at intel.com>
Date:   Wed Oct 14 12:24:27 2026 +0000

    net/iavf: fix interrupt callback race on close
    
    In iavf_dev_close(), rte_intr_callback_unregister() can return -EAGAIN
    while the interrupt thread is executing a callback for the same source.
    The return value is ignored, leaving the callback registered.
    
    Close hits that window. It sends virtchnl commands (RSS, promiscuous
    mode, flows), and iavf_dev_interrupt_handler() handles each response.
    The handler clears the pending command before it returns, so the
    thread waiting in iavf_wait_for_msg() can go on to the unregister
    while the interrupt thread is still inside the callback. This is
    likely when the two threads share a CPU.
    
    Two failures follow:
    - The interrupt thread resumes the callback after
      rte_eth_dev_release_port() has set dev->data to NULL, and
      iavf_handle_virtchnl_msg() dereferences it: segmentation fault.
    - The callback returns, but its source stays registered after the
      port is closed. At rte_eal_cleanup(),
      pci_vfio_unmap_resource_primary() closes the interrupt eventfd, and
      the next rebuild of the epoll set aborts the process:
        EAL: PANIC in eal_intr_thread_main():
        Error adding fd 49 epoll_ctl, Bad file descriptor
    
    Use rte_intr_callback_unregister_sync(), as ice_dev_close() does. The
    iavf_dev_init() error path has the same pattern; fix it too.
    
    The sync variant waits for a running callback to return. It would
    spin forever only if called from iavf_dev_interrupt_handler() itself,
    and that handler never closes or re-initializes the port: it hands PF
    events and resets to the iavf-event thread with iavf_dev_event_post().
    A close from any other interrupt thread callback, such as an alarm,
    returns at once, because the iavf source is not active then.
    
    Fixes: 22b123a36d07 ("net/avf: initialize PMD")
    Fixes: e35a5737a746 ("net/iavf: unregister interrupt handler before FD close")
    Cc: stable at dpdk.org
    
    Signed-off-by: Marek Kasiewicz <marek.kasiewicz at intel.com>
    Signed-off-by: Dawid Wesierski <dawid.wesierski at intel.com>
    Acked-by: Bruce Richardson <bruce.richardson at intel.com>

Smoke-Testing Summary : 31 Case Done, 31 Successful, 0 Failures      


OS : Ubuntu 24.04.4 LTS       
Kernel : 6.8.0-71-generic         
GCC : 13.3.0-6ubuntu2~24.04.1        
NIC : Ethernet Controller XL710 for 40GbE QSFP+         
Target : x86_64-native-linuxapp-gcc      

	Test result details:
	+-----------------+---------------------------------------------------+-------+
	| suite           | case                                              | status|
	+-----------------+---------------------------------------------------+-------+
	| checksum_offload| test_do_not_insert_checksum_on_the_transmit_packet| passed|
	| checksum_offload| test_hardware_checksum_check_ip_rx                | passed|
	| checksum_offload| test_hardware_checksum_check_ip_tx                | passed|
	| checksum_offload| test_hardware_checksum_check_l4_rx                | passed|
	| checksum_offload| test_hardware_checksum_check_l4_tx                | passed|
	| checksum_offload| test_insert_checksum_on_the_transmit_packet       | passed|
	| checksum_offload| test_rx_checksum_valid_flags                      | passed|
	| checksum_offload| test_checksum_offload_with_vlan                   | n/a   |
	| dual_vlan       | test_dual_vlan_priority_rxtx                      | passed|
	| dual_vlan       | test_vlan_filter_config                           | passed|
	| dual_vlan       | test_vlan_filter_table                            | passed|
	| dual_vlan       | test_vlan_insert_config                           | passed|
	| dual_vlan       | test_vlan_random_test                             | passed|
	| dual_vlan       | test_vlan_strip_config                            | passed|
	| dual_vlan       | test_vlan_synthetic_test                          | passed|
	| dual_vlan       | test_vlan_tpid_config                             | passed|
	| dual_vlan       | test_vlan_stripq_config                           | n/a   |
	| jumboframes     | test_jumboframes_bigger_jumbo                     | passed|
	| jumboframes     | test_jumboframes_jumbo_jumbo                      | passed|
	| jumboframes     | test_jumboframes_jumbo_nojumbo                    | passed|
	| jumboframes     | test_jumboframes_normal_jumbo                     | passed|
	| jumboframes     | test_jumboframes_normal_nojumbo                   | passed|
	| rxtx_offload    | test_rxoffload_port_all                           | passed|
	| rxtx_offload    | test_rxoffload_port_cmdline                       | passed|
	| rxtx_offload    | test_txoffload_port                               | passed|
	| rxtx_offload    | test_txoffload_port_all                           | passed|
	| rxtx_offload    | test_txoffload_port_checksum                      | passed|
	| rxtx_offload    | test_txoffload_port_cmdline                       | passed|
	| rxtx_offload    | test_txoffload_port_multi_segs                    | passed|
	| rxtx_offload    | test_txoffload_queue                              | passed|
	| rxtx_offload    | test_rxoffload_queue                              | n/a   |
	+-----------------+---------------------------------------------------+-------+


DPDK STV team


More information about the test-report mailing list