lpfc_sli4_xr...ge_busy_wait(9)
π lpfc_sli4_xri_exchange_busy_wait β Kernel API Manual, but make it cute β¨
okay so bestie, this is the lpfc_sli4_xri_exchange_busy_wait(9) page from the Kernel API Manual, and it's honestly giving "the bouncer at the club who will NOT let you leave until everyone's out." let's get into it π«Ά
β¨ NAME β¨
lpfc_sli4_xri_exchange_busy_wait β wait for device XRI exchange busy. that's it, that's the whole vibe check π
π SYNOPSIS π
void lpfc_sli4_xri_exchange_busy_wait (struct lpfc_hba *phba );
πΈ ARGUMENTS πΈ
phbaβ pointer to the HBA context object. that's the whole argument list, she's low maintenance β¨
π¦ DESCRIPTION π¦
so this function gets called in the SLI4 code path, and its whole job is to wait for completion of the device's XRIs exchange busy. like, sit there and watch. patiently. π
here's the timeline, and it is highkey unhinged:
- it checks the XRI exchange busy on outstanding FCP and ELS I/Os every
10msfor up to10 secondsβ±οΈ - after that? it checks the XRI exchange busy on outstanding FCP and ELS I/Os every
30 seconds, logs an error message, and then... waits forever. π no cap. forever. - only when all XRI exchange busy complete does the driver unload proceed, invoking the function reset ioctl mailbox command to the CNA, plus the rest of the driver unload resource release π
bestie please note: the "wait forever" part is not a metaphor. it is literally forever. the loop does not get bored and go home. π
π₯ SEE ALSO π₯
big list energy incoming, and yes every single one of these is a real one, i would never do you like that π«Ά
first up, the kernel file: ./drivers/scsi/lpfc/lpfc_init.c
and then, in no particular order of icon-ness:
lpfc_config_port_prep(9)lpfc_config_async_cmpl(9)lpfc_dump_wakeup_param_cmpl(9)lpfc_update_vport_wwn(9)lpfc_config_port_post(9)lpfc_sli4_refresh_params(9)lpfc_hba_init_link(9)lpfc_hba_init_link_fc_topology(9)lpfc_hba_down_link(9)lpfc_hba_down_prep(9)lpfc_sli4_free_sp_events(9)lpfc_hba_free_post_buf(9)lpfc_hba_clean_txcmplq(9)lpfc_hba_down_post_s3(9)lpfc_hba_down_post_s4(9)lpfc_hba_down_post(9)lpfc_hb_timeout(9)lpfc_rrq_timeout(9)lpfc_hb_mbox_cmpl(9)lpfc_hb_mxp_handler(9)lpfc_issue_hb_mbox(9)lpfc_issue_hb_tmo(9)lpfc_hb_timeout_handler(9)lpfc_offline_eratt(9)lpfc_sli4_offline_eratt(9)lpfc_handle_deferred_eratt(9)lpfc_handle_eratt_s3(9)lpfc_sli4_port_sta_fn_reset(9)lpfc_handle_eratt_s4(9)lpfc_handle_eratt(9)lpfc_handle_latt(9)lpfc_parse_vpd(9)lpfc_get_atto_model_desc(9)lpfc_get_hba_model_desc(9)lpfc_sli3_post_buffer(9)lpfc_post_rcv_buf(9)lpfc_sha_init(9)lpfc_sha_iterate(9)lpfc_challenge_key(9)lpfc_hba_init(9)lpfc_cleanup(9)lpfc_stop_vport_timers(9)__lpfc_sli4_stop_fcf_redisc_wait_timer(9)lpfc_sli4_stop_fcf_redisc_wait_timer(9)lpfc_cmf_stop(9)lpfc_cmf_start(9)lpfc_stop_hba_timers(9)lpfc_block_mgmt_io(9)lpfc_sli4_node_rpi_restore(9)lpfc_create_expedite_pool(9)lpfc_destroy_expedite_pool(9)lpfc_create_multixri_pools(9)lpfc_destroy_multixri_pools(9)lpfc_online(9)lpfc_unblock_mgmt_io(9)lpfc_offline_prep(9)lpfc_offline(9)lpfc_scsi_free(9)lpfc_io_free(9)lpfc_sli4_els_sgl_update(9)lpfc_sli4_nvmet_sgl_update(9)lpfc_sli4_io_sgl_update(9)lpfc_new_io_buf(9)lpfc_vmid_res_alloc(9)lpfc_create_port(9)destroy_port(9)lpfc_get_instance(9)lpfc_scan_finished(9)lpfc_host_attrib_init(9)lpfc_stop_port_s3(9)lpfc_stop_port_s4(9)lpfc_stop_port(9)lpfc_fcf_redisc_wait_start_timer(9)lpfc_sli4_fcf_redisc_wait_tmo(9)lpfc_vmid_poll(9)lpfc_sli4_parse_latt_fault(9)lpfc_sli4_parse_latt_type(9)lpfc_sli_port_speed_get(9)lpfc_sli4_port_speed_parse(9)lpfc_sli4_async_link_evt(9)lpfc_async_link_speed_to_read_top(9)lpfc_cgn_update_stat(9)lpfc_cgn_update_tstamp(9)lpfc_cmf_stats_timer(9)lpfc_calc_cmf_latency(9)lpfc_cmf_timer(9)lpfc_sli4_async_fc_evt(9)lpfc_sli4_async_sli_evt(9)lpfc_sli4_perform_vport_cvl(9)lpfc_sli4_perform_all_vport_cvl(9)lpfc_sli4_async_fip_evt(9)lpfc_sli4_async_dcbx_evt(9)lpfc_sli4_async_grp5_evt(9)lpfc_sli4_async_cmstat_evt(9)lpfc_cgn_params_val(9)lpfc_cgn_params_parse(9)lpfc_sli4_cgn_params_read(9)lpfc_sli4_cgn_parm_chg_evt(9)lpfc_sli4_async_event_proc(9)lpfc_sli4_fcf_redisc_event_proc(9)lpfc_api_table_setup(9)lpfc_log_intr_mode(9)lpfc_enable_pci_dev(9)lpfc_disable_pci_dev(9)lpfc_reset_hba(9)lpfc_sli_sriov_nr_virtfn_get(9)lpfc_sli_probe_sriov_nr_virtfn(9)lpfc_setup_driver_resource_phase1(9)lpfc_sli_driver_resource_setup(9)lpfc_sli_driver_resource_unset(9)lpfc_sli4_driver_resource_setup(9)lpfc_sli4_driver_resource_unset(9)lpfc_init_api_table_setup(9)lpfc_setup_driver_resource_phase2(9)lpfc_unset_driver_resource_phase2(9)lpfc_free_iocb_list(9)lpfc_init_iocb_list(9)lpfc_free_sgl_list(9)lpfc_free_els_sgl_list(9)lpfc_free_nvmet_sgl_list(9)lpfc_init_active_sgl_array(9)lpfc_free_active_sgl(9)lpfc_init_sgl_list(9)lpfc_sli4_init_rpi_hdrs(9)lpfc_sli4_create_rpi_hdr(9)lpfc_sli4_remove_rpi_hdrs(9)lpfc_hba_alloc(9)lpfc_hba_free(9)lpfc_setup_fdmi_mask(9)lpfc_create_shost(9)lpfc_destroy_shost(9)lpfc_setup_bg(9)lpfc_post_init_setup(9)lpfc_sli_pci_mem_setup(9)lpfc_sli_pci_mem_unset(9)lpfc_sli4_post_status_check(9)lpfc_sli4_bar0_register_memmap(9)lpfc_sli4_bar1_register_memmap(9)lpfc_sli4_bar2_register_memmap(9)lpfc_create_bootstrap_mbox(9)lpfc_destroy_bootstrap_mbox(9)lpfc_map_topology(9)lpfc_sli4_read_config(9)lpfc_setup_endian_order(9)lpfc_sli4_queue_verify(9)lpfc_sli4_queue_create(9)lpfc_sli4_queue_destroy(9)lpfc_setup_cq_lookup(9)lpfc_sli4_queue_setup(9)lpfc_sli4_queue_unset(9)lpfc_sli4_cq_event_pool_create(9)lpfc_sli4_cq_event_pool_destroy(9)__lpfc_sli4_cq_event_alloc(9)lpfc_sli4_cq_event_alloc(9)__lpfc_sli4_cq_event_release(9)lpfc_sli4_cq_event_release(9)lpfc_sli4_cq_event_release_all(9)lpfc_pci_function_reset(9)lpfc_sli4_pci_mem_setup(9)lpfc_sli4_pci_mem_unset(9)lpfc_sli_enable_msix(9)lpfc_sli_enable_msi(9)lpfc_sli_enable_intr(9)lpfc_sli_disable_intr(9)lpfc_find_cpu_handle(9)lpfc_find_hyper(9)lpfc_cpu_map_array_init(9)lpfc_hba_eq_hdl_array_init(9)lpfc_cpu_affinity_check(9)lpfc_cpuhp_get_eq(9)lpfc_irq_set_aff(9)lpfc_irq_clear_aff(9)lpfc_irq_rebalance(9)lpfc_sli4_enable_msix(9)lpfc_sli4_enable_msi(9)lpfc_sli4_enable_intr(9)lpfc_sli4_disable_intr(9)lpfc_unset_hba(9)lpfc_sli4_hba_unset(9)__lpfc_reg_congestion_buf(9)lpfc_get_sli4_parameters(9)lpfc_pci_probe_one_s3(9)lpfc_pci_remove_one_s3(9)lpfc_pci_suspend_one_s3(9)lpfc_pci_resume_one_s3(9)lpfc_sli_prep_dev_for_recover(9)lpfc_sli_prep_dev_for_reset(9)lpfc_sli_prep_dev_for_perm_failure(9)lpfc_io_error_detected_s3(9)lpfc_io_slot_reset_s3(9)lpfc_io_resume_s3(9)lpfc_sli4_get_els_iocb_cnt(9)lpfc_sli4_get_iocb_cnt(9)lpfc_write_firmware(9)lpfc_sli4_request_firmware_update(9)lpfc_pci_probe_one_s4(9)lpfc_pci_remove_one_s4(9)lpfc_pci_suspend_one_s4(9)lpfc_pci_resume_one_s4(9)lpfc_sli4_prep_dev_for_recover(9)lpfc_sli4_prep_dev_for_reset(9)lpfc_sli4_prep_dev_for_perm_failure(9)lpfc_io_error_detected_s4(9)lpfc_io_slot_reset_s4(9)lpfc_io_resume_s4(9)lpfc_pci_probe_one(9)lpfc_pci_remove_one(9)lpfc_pci_suspend_one(9)lpfc_pci_resume_one(9)lpfc_io_error_detected(9)lpfc_io_slot_reset(9)lpfc_io_resume(9)lpfc_sli4_oas_verify(9)lpfc_sli4_ras_init(9)lpfc_init(9)lpfc_exit(9)
and that's the whole page, bestie π she lives in ./drivers/scsi/lpfc, dated October 2026, and she's filed under lpfc_sli4_xr...ge_busy_wait(9) β yes the truncation is canon, i don't make the rules π
now go forth and wait patiently for your XRI exchange busy to complete. or don't. it'll wait either way. πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms